[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