[JBoss JIRA] Created: (JBPM-2922) Joining of non-concurrent decision paths seems to be broken in 4.4
by Peter Horvath (JIRA)
Joining of non-concurrent decision paths seems to be broken in 4.4
------------------------------------------------------------------
Key: JBPM-2922
URL: https://jira.jboss.org/browse/JBPM-2922
Project: jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: jBPM 4.4
Environment: JBPM 4.4; Spring 3
Reporter: Peter Horvath
If a join node is used with multiplicity="1" to join two possible outcome paths of a decision node, the join node sets the state of the branch executions to ended which is invalid if the execution path is a part of a concurrent execution: it prevents subsequent join nodes from destroying the incoming executions as they reach that node with "ended" state.
This behavior has been changed between JBPM 4.3 and 4.4: process definitions that utilize join nodes with multiplicity attributes to join conditional paths work correctly with JBPM 4.3 but fail with an exception in version 4.4.
For me, it seems that the implementation of the join node presumes that the state of branch executions have to be set to ended when a join node is reached, but there can be cases where this is not correct.
Let's see the following example: In this case join1 uses multiplicity="1" to wait only for one incoming execution. The execution is expected to pass through this node and reach join2 node where it will be ended:
<?xml version="1.0" encoding="UTF-8"?>
<process name="ForkJoinTest" xmlns="http://jbpm.org/4.0/jpdl">
<start g="29,95,48,48" name="start1">
<transition g="-23,-25" name="to fork1" to="fork1"/>
</start>
<fork g="114,95,48,48" name="fork1">
<transition g="138,188:-50,-18" name="to script2" to="script2"/>
<transition g="139,72:-68,-18" name="to exclusive1" to="exclusive1"/>
</fork>
<script expr="Hello world!" g="230,162,92,52" name="script2" var="script2_msg">
<transition g="427,187:-29,4" name="to join2" to="join2"/>
</script>
<join g="347,51,48,48" multiplicity="1" name="join1">
<transition g="424,76:-7,-17" name="to join2" to="join2"/>
</join>
<join g="401,97,48,48" name="join2">
<transition g="-21,-21" name="to end1" to="end1"/>
</join>
<end g="490,97,48,48" name="end1"/>
<decision g="162,48,48,48" name="exclusive1">
<transition g="186,30:-12,-19" name="to script1" to="script1">
<condition expr="#{''==''}"/>
</transition>
<transition name="to join1" to="join1" g="-41,-18"/>
</decision>
<script expr="Hello world!" g="224,5,92,52" name="script1" var="script1_msg">
<transition g="371,31:-51,-15" name="to join1" to="join1"/>
</script>
</process>
This process definition works correctly with JBPM 4.3 but with JBPM 4.4 it fails with the following exception:
Exception in thread "main" org.jbpm.api.JbpmException: execution[ForkJoinTest.10001.to script2.10002] is not active: ended
at org.jbpm.pvm.internal.model.ExecutionImpl.checkActive(ExecutionImpl.java:1084)
at org.jbpm.pvm.internal.model.ExecutionImpl.take(ExecutionImpl.java:481)
at org.jbpm.jpdl.internal.activity.ForkActivity.execute(ForkActivity.java:95)
at org.jbpm.jpdl.internal.activity.ForkActivity.execute(ForkActivity.java:46)
at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60)
at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672)
at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:632)
at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:217)
at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:63)
at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:36)
at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:49)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56)
at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceByKey(ExecutionServiceImpl.java:67)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 4 months
[JBoss JIRA] Created: (JBPM-2925) variables in jbpm4_hist_var have no execution id
by HUI-LAN HUNG (JIRA)
variables in jbpm4_hist_var have no execution id
------------------------------------------------
Key: JBPM-2925
URL: https://jira.jboss.org/browse/JBPM-2925
Project: jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: jBPM 4.4
Environment: OS: ubuntu 10.04
JDK version: 1.6.0_20
jBPM version: jBPM-4.4
Database: postgresql
Web Server: apache-tomcat 6.0.29
Reporter: HUI-LAN HUNG
I use this code to write variables to jbpm4_hist_var.
"executionService.createVariable(task.getExecutionId(),dataMap,true);"
when I check database,I found the column 'executionid' always null.
I don't know how to write the example testcase to discribe this condition,but I will do my best to add more information about this issue if you need.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 4 months
[JBoss JIRA] Created: (JBPM-1992) Logging is missing if JobExecutorThread marks TX as rollbackonly because of max
by Roman Heinz (JIRA)
Logging is missing if JobExecutorThread marks TX as rollbackonly because of max
-------------------------------------------------------------------------------
Key: JBPM-1992
URL: https://jira.jboss.org/jira/browse/JBPM-1992
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Core Engine
Affects Versions: jBPM 3.3.1 GA
Reporter: Roman Heinz
If the execution of an action/script/... takes longer than the time configured org.jbpm.job.executor.JobExecutor.maxLockTime, the current TX is marked as rollback-only without any logging.
In JobExecutorThread:
// if this job is locked too long
long totalLockTimeInMillis = System.currentTimeMillis() - job.getLockTime().getTime();
if (totalLockTimeInMillis>maxLockTime) {
jbpmContext.setRollbackOnly();
}
Logging is missing to inform about the jbpmContext.setRollbackOnly() together with the reason.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 4 months
[JBoss JIRA] Created: (JBPM-2868) Add a new method 'processDefinitionIdLike' to TaskQuery
by Stephane Malbequi (JIRA)
Add a new method 'processDefinitionIdLike' to TaskQuery
-------------------------------------------------------
Key: JBPM-2868
URL: https://jira.jboss.org/browse/JBPM-2868
Project: jBPM
Issue Type: Feature Request
Security Level: Public (Everyone can see)
Components: Runtime Engine
Affects Versions: jBPM 4.3
Reporter: Stephane Malbequi
Priority: Minor
Hi,
it's not possible to create a task query to find all tasks of all versions of a specific process because TaskQuery append a where clause with a = operator and not a like operator
if (processDefinitionId!=null) {
appendWhereClause("task.processInstance.processDefinitionId = '"+processDefinitionId+"' ", hql);
}
May be, it's a good idea to add a new method like 'processDefinitionIdLike' to TaskQuery object in order to append a where clause like that :
if (processDefinitionIdLike!=null) {
appendWhereClause("task.processInstance.processDefinitionId like '"+processDefinitionIdLike+"' ", hql);
}
Another method to add should be : 'assigneeIn' in order to append a where clause like that :
if (assigneeIn!=null && !assigneeIn.isEmpty()) {
appendWhereClause("task.processInstance.assignee in ...
}
Thanks in advance
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 4 months