JBPM 进程变量上的休眠"String or binary data would be truncated"异常



我的JBPM 7.44/Redhat PAM 7.10案例应用程序有一个嵌套阶段的进程,我们的阶段嵌套映射到JBPM任务的任务;应用程序循环遍历引用JBPM任务的任务的阶段。

我将一些处理从主进程移动到嵌入的子进程。当应用程序从第一阶段进入第二阶段时,我现在得到

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: String or binary data would be truncated.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:602)

作为堆栈跟踪的结束。这发生在脚本

System.out.println("Task setup for stage enter");
com.me.MyStage stage = (com.me.MyStage ) kcontext.getVariable("caseFile_Stage");
System.out.println("Starting stage {name=" + stage.getName() + "}");
// Tasks
java.util.List<com.me.MyTask> tasks = stage.getTasks();
System.out.println("1 - # tasks=" + tasks.size());
kcontext.setVariable("Tasks", tasks);   // error occurs here

tasks字段上的Hibernate标签是:

@javax.persistence.OneToMany(cascade = {javax.persistence.CascadeType.ALL})
@javax.persistence.JoinTable(name = "STAGE_TASKS_JOIN")
@com.fasterxml.jackson.annotation.JsonProperty("tasks") @org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.FALSE)
private java.util.List<com.me.MyTask> tasks;

也许我误解了错误,但似乎记录中的数据不能被赋值截断-到底发生了什么,我需要如何更改标签以避免异常?我认为问题在于,当我在阶段2中使用任务时,它试图持久化阶段1中任务的数据-但是使用kcontext分配给进程变量似乎也不应该强制任何持久性,除了JBPM的VariableInstanceLog(我在其他环境中看到警告,而不是错误)。变量instancelog被定义为字段"oldValue"的varchar(255)。作为"文本">

你可以通过设置一个不同的值来增加VariableInstanceLog的长度

org.jbpm.var.log.length

在数据库中修改相应的列。

我怀疑的部分解决方案是插入VariableInstanceLog会抛出异常。如果这是一个不那么敏感的系统,我可以删除/添加表格。可能在某个时候,我使用JBoss属性将这些表称为varchar(4000),而实际上它们只是varchar(255)。

RPC:Completed   exec sp_executesql N'insert into VariableInstanceLog (log_date, externalId, oldValue, processId, processInstanceId, value, variableId, variableInstanceId) values (@P0, @P1, @P2, @P3, @P4, @P5, @P6, @P7) select SCOPE_IDENTITY() AS GENERATED_KEYS',N'@P0 datetime2,@P1 nvarchar(4000),@P2 nvarchar(4000),@P3 nvarchar(4000),@P4 bigint,@P5 nvarchar(4000),@P6 nvarchar(4000),@P7 nvarchar(4000)','2021-10-08 15:57:47.2710000',N'ams-pam_2.0.3-m1',N'[MyTask(id=172488, owner=0BD0194B-0000-4AED-9161-43D030686D7E, name=Stage1Task1P, dateCompleted=null, dateCreated=2021-10-08T14:55:55.625, status=STARTED, MyTask(id=172489, owner=0BD0194B-0000-4AED-9161-43D030686D7E, name=Stage1Task1P, dateCompleted=null, dateCreated=2021-10-08T14:56:23.813, status=STARTED]',N'AMS_Workflow',7184,N'[MyTask(id=172490, owner=0BD0194B-0000-4AED-9161-43D030686D7E, name=Stage2Task1P, dateCompleted=null, dateCreated=null, status=null]',N'Tasks',N'Tasks'    0   99  12  ..

将property放入standalone.xml配置文件

<system-properties>

<property name="org.jbpm.var.log.length" value="20000"/>

</system-properties>

或在这里找到更多信息:https://dzone.com/articles/increase-the-default-process-variable-size-in-jbpm

最新更新