[jboss-svn-commits] JBL Code SVN: r33412 - in labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test: resources and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 8 18:20:15 EDT 2010


Author: salaboy21
Date: 2010-06-08 18:20:14 -0400 (Tue, 08 Jun 2010)
New Revision: 33412

Added:
   labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
Modified:
   labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
Log:
JBRULES-2345: Work items should also support pluggable parameter persistence
  - Adding test for work item vps

Modified: labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2010-06-08 21:03:12 UTC (rev 33411)
+++ labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2010-06-08 22:20:14 UTC (rev 33412)
@@ -1,5 +1,6 @@
 package org.drools.persistence.session;
 
+import bitronix.tm.TransactionManagerServices;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +30,7 @@
 import org.drools.runtime.process.WorkflowProcessInstance;
 
 import bitronix.tm.resource.jdbc.PoolingDataSource;
+import org.drools.builder.KnowledgeBuilderConfiguration;
 
 public class VariablePersistenceStrategyTest extends TestCase {
 
@@ -284,6 +286,132 @@
         processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNull( processInstance );
     }
+
+    public void testWorkItemWithVariablePersistence() throws Exception{
+       KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+        conf.setProperty("drools.dialect.java.compiler", "JANINO");
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+        kbuilder.add( new ClassPathResource( "VPSProcessWithWorkItems.rf" ), ResourceType.DRF );
+        for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+        	System.out.println(error);
+        }
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        EntityManagerFactory emf =
+			Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+		env.set(EnvironmentName.GLOBALS, new MapGlobalResolver());
+                env.set( EnvironmentName.TRANSACTION_MANAGER,
+         TransactionManagerServices.getTransactionManager() );
+
+
+        StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+        int id = ksession.getId();
+
+
+        System.out.println("### Starting process ###");
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("x", "SomeString");
+        parameters.put("y", new MyEntity("This is a test Entity"));
+        parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+        	ksession.startProcess( "com.sample.ruleflow", parameters );
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+
+        List<?> result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+
+        assertEquals(5, result.size());
+
+        System.out.println("### Retrieving process instance ###");
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = (WorkflowProcessInstance)
+        	ksession.getProcessInstance( processInstance.getId() );
+        assertNotNull( processInstance );
+        assertEquals("SomeString", processInstance.getVariable("x"));
+        assertEquals("This is a test Entity", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("z")).getText());
+        assertNull(processInstance.getVariable("a"));
+        assertNull(processInstance.getVariable("b"));
+        assertNull(processInstance.getVariable("c"));
+
+        System.out.println("### Completing first work item ###");
+        Map<String, Object> results = new HashMap<String, Object>();
+        results.put("zeta", processInstance.getVariable("z"));
+        results.put("equis", processInstance.getVariable("x")+"->modifiedResult");
+
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),  results );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+
+        System.out.println("### Retrieving variable instance infos ###");
+        result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+        //6 Variables from the process and 2 variables from the workitems
+        assertEquals(8, result.size());
+        for (Object o: result) {
+        	System.out.println(((VariableInstanceInfo) o));
+        }
+
+        System.out.println("### Retrieving process instance ###");
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+		processInstance = (WorkflowProcessInstance)
+			ksession.getProcessInstance(processInstance.getId());
+		assertNotNull(processInstance);
+        System.out.println("######## Getting the already Persisted Variables #########");
+        assertEquals("SomeString->modifiedResult", processInstance.getVariable("x"));
+        assertEquals("This is a test Entity", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("z")).getText());
+        assertEquals("Some new String", processInstance.getVariable("a"));
+        assertEquals("This is a new test Entity", ((MyEntity) processInstance.getVariable("b")).getTest());
+        assertEquals("This is a new test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("c")).getText());
+        System.out.println("### Completing second work item ###");
+        results = new HashMap<String, Object>();
+        results.put("zeta", processInstance.getVariable("z"));
+        results.put("equis", processInstance.getVariable("x"));
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),  results );
+
+
+        workItem = handler.getWorkItem();
+        assertNotNull(workItem);
+
+        result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+        assertEquals(8, result.size());
+
+        System.out.println("### Retrieving process instance ###");
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+        processInstance = (WorkflowProcessInstance)
+        	ksession.getProcessInstance(processInstance.getId());
+        assertNotNull(processInstance);
+        assertEquals("SomeString->modifiedResult", processInstance.getVariable("x"));
+        assertEquals("This is a test Entity", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("z")).getText());
+        assertEquals("Some changed String", processInstance.getVariable("a"));
+        assertEquals("This is a changed test Entity", ((MyEntity) processInstance.getVariable("b")).getTest());
+        assertEquals("This is a changed test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("c")).getText());
+        System.out.println("### Completing third work item ###");
+        results = new HashMap<String, Object>();
+        results.put("zeta", processInstance.getVariable("z"));
+        results.put("equis", processInstance.getVariable("x"));
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),  results );
+
+        workItem = handler.getWorkItem();
+        assertNull(workItem);
+
+        result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+
+        assertEquals(0, result.size());
+
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+        processInstance = (WorkflowProcessInstance)
+			ksession.getProcessInstance(processInstance.getId());
+        assertNull(processInstance);
+    }
     
     public void testEntityWithSuperClassAnnotationField() throws Exception {
     	MySubEntity subEntity = new MySubEntity();

Added: labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
===================================================================
--- labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_diega_workitem_variablePersistence/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	2010-06-08 22:20:14 UTC (rev 33412)
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="droolsflow" id="com.sample.ruleflow" package-name="com.sample" >
+
+  <header>
+    <imports>
+      <import name="org.drools.persistence.session.MyEntity" />
+      <import name="org.drools.persistence.session.MyVariableSerializable" />
+    </imports>
+    <variables>
+      <variable name="x" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+      </variable>
+      <variable name="y" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+      </variable>
+      <variable name="z" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+      </variable>
+      <variable name="a" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+      </variable>
+      <variable name="b" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+      </variable>
+      <variable name="c" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="16" y="16" width="48" height="48" />
+    <end id="3" name="End" x="957" y="16" width="48" height="48" />
+    <humanTask id="4" name="Human Task" x="208" y="16" width="93" height="48" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Content" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Skippable" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+      </work>
+      <mapping type="in" from="x" to="equis" />
+      <mapping type="in" from="z" to="zeta" />
+      <mapping type="out" from="equis" to="x" />
+      <mapping type="out" from="zeta" to="z" />
+    </humanTask>
+    <actionNode id="5" name="Action" x="96" y="20" width="80" height="40" >
+        <action type="expression" dialect="java" >System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+    <actionNode id="6" name="Action" x="333" y="20" width="80" height="40" >
+        <action type="expression" dialect="java" >System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);
+kcontext.setVariable("a", "Some new String");
+kcontext.setVariable("b", new MyEntity("This is a new test Entity"));
+kcontext.setVariable("c", new MyVariableSerializable("This is a new test SerializableObject"));</action>
+    </actionNode>
+    <humanTask id="7" name="Human Task" x="445" y="20" width="124" height="40" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Content" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Skippable" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+      </work>
+      <mapping type="in" from="x" to="equis" />
+      <mapping type="in" from="z" to="zeta" />
+      <mapping type="out" from="equis" to="x" />
+      <mapping type="out" from="zeta" to="z" />
+    </humanTask>
+    <actionNode id="8" name="Action" x="601" y="20" width="80" height="40" >
+        <action type="expression" dialect="java" >System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);
+System.out.println("a = " + a);
+System.out.println("b = " + b);
+System.out.println("c = " + c);
+kcontext.setVariable("a", "Some changed String");
+kcontext.setVariable("b", new MyEntity("This is a changed test Entity"));
+kcontext.setVariable("c", new MyVariableSerializable("This is a changed test SerializableObject"));</action>
+    </actionNode>
+    <humanTask id="9" name="Human Task" x="713" y="16" width="100" height="48" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Content" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Skippable" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+       
+      </work>
+       <mapping type="in" from="x" to="equis" />
+      <mapping type="in" from="z" to="zeta" />
+      <mapping type="out" from="equis" to="x" />
+      <mapping type="out" from="zeta" to="z" />
+    </humanTask>
+    <actionNode id="10" name="Action" x="845" y="16" width="80" height="48" >
+        <action type="expression" dialect="java" >System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);
+System.out.println("a = " + a);
+System.out.println("b = " + b);
+System.out.println("c = " + c);</action>
+    </actionNode>
+  </nodes>
+
+  <connections>
+    <connection from="10" to="3" />
+    <connection from="5" to="4" />
+    <connection from="1" to="5" />
+    <connection from="4" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="8" />
+    <connection from="8" to="9" />
+    <connection from="9" to="10" />
+  </connections>
+
+</process>
\ No newline at end of file



More information about the jboss-svn-commits mailing list