Alex,

I did some tests and I have varying results. Varying in the sense that the same 
test run multiple times sometimes pass and sometimes don't.

This is what I used for the jobexecuterconfig

  <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
  |     <field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field>
  |     <field name="name"><string value="JbpmJobExector" /></field>
  |     <field name="nbrOfThreads"><int value="2" /></field>
  |     <field name="idleInterval"><int value="5000" /></field>
  |     <field name="maxIdleInterval"><int value="3600000" /></field> <!-- 1 
hour -->
  |     <field name="historyMaxSize"><int value="20" /></field>
  |     <field name="maxLockTime"><int value="600000" /></field> <!-- 10 
minutes -->
  |     <field name="lockMonitorInterval"><int value="60000" /></field> <!-- 1 
minute -->
  |     <field name="lockBufferTime"><int value="5000" /></field> <!-- 5 
seconds -->
  |   </bean>

My process:
 
  | <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="simpletest" >
  |     <start-state name="start-state1">
  |             <description>start of the process</description>
  |             <event type="node-enter">
  |                     <script name="script_start">
  |                             System.out.println("START");
  |                             executionContext.leaveNode();
  |                     </script>
  |             </event>
  |             <transition name="start-to-check" to="fileCheck" />
  |     </start-state>
  | 
  |     <node name="fileCheck">
  |             <script name="script_filecheck">
  |                     System.out.println("FILE-CHECK");
  |                     executionContext.leaveNode();
  |             </script>
  |             <transition name="check-to-fork" to="fork1"></transition>
  |     </node>
  | 
  |     <fork name="fork1">
  |             <transition name="toNode1" to="node1"></transition>
  |             <transition name="toNode2" to="node2"></transition>
  |     </fork>
  | 
  |     <node name="node1" async="true">
  |             <script name="script_node1">
  |                     System.out.println("NODE1");
  |                     executionContext.leaveNode();
  |             </script>
  |             <transition name="node1toJoin1" to="join1"></transition>
  |     </node>
  | 
  |     <node name="node2" async="true">
  |             <script name="script_node2">
  |                     System.out.println("NODE2");
  |                     executionContext.leaveNode();
  |             </script>
  |             <transition name="node2toJoin1" to="join1"></transition>
  |     </node>
  | 
  |     <join name="join1">
  |             <transition name="join1ToNode3" to="node3"></transition>
  |     </join>
  |     
  |     <node name="node3">
  |             <script name="script_node3">
  |                     System.out.println("NODE3");
  |             </script>
  |             <transition name="node3ToEnd" 
to="end-state-success"></transition>
  |     </node>
  | 
  |     <end-state name="end-state-success">
  |             <description>process finished normally</description>
  |             <event type="node-enter">
  |                     <script name="script_endSuccess">
  |                             System.out.println("END-SUCCESS");
  |                     </script>
  |             </event>
  |     </end-state>
  | </process-definition>

unittest

  | 
  | public class AlexTest extends AbstractDbTestCase {
  | 
  |   public void testAlex(){
  |       
  |      try {
  |         ProcessDefinition processDefinition = 
ProcessDefinition.parseXmlResource("alex.xml");
  |         
  |         processDefinition = saveAndReload(processDefinition);
  |         ProcessInstance processInstance = new 
ProcessInstance(processDefinition);
  |         processInstance.signal();
  |         jbpmContext.save(processInstance);
  |         processJobs(20000);
  |         processDefinition = 
graphSession.loadProcessDefinition(processDefinition.getId());
  |         processInstance = 
graphSession.loadProcessInstance(processInstance.getId());
  |         assertEquals(processDefinition.getNode("node3"), 
processInstance.getRootToken().getNode());
  |         } catch (Exception e) {
  |             e.printStackTrace();
  |             assertFalse(true);
  |           }
  |       } 
  |   
  | }

Try copying this test method multiple times in the testcase with different 
names. Often the first one failes, but the others always succeed then.

changing async=true in async=exclusive makes the test always work.

For me this is the end of the research... 
- async is exclusive makes the problem go away (tom suggested this in the other 
thread, did you try it?)
- since the problem is kind of strange, I'm still of the opinion that jms 
improves things.
- polling like you want to do it is not a 'good practice', using an ESB is.



View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4056487#4056487

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4056487
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to