[jboss-svn-commits] JBL Code SVN: r29096 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src: test/java/org/drools/persistence/session and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Aug 27 22:45:10 EDT 2009
Author: KrisVerlaenen
Date: 2009-08-27 22:45:09 -0400 (Thu, 27 Aug 2009)
New Revision: 29096
Added:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
Modified:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
- updated some tests
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-08-27 21:36:39 UTC (rev 29095)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-08-28 02:45:09 UTC (rev 29096)
@@ -136,6 +136,7 @@
try {
ByteArrayInputStream bais = new ByteArrayInputStream(
processInstanceByteArray);
+ System.out.println("length = " + processInstanceByteArray.length);
MarshallerReaderContext context = new MarshallerReaderContext(
bais, (InternalRuleBase) workingMemory.getRuleBase(), null, null);
context.wm = (InternalWorkingMemory) workingMemory;
@@ -156,13 +157,11 @@
private void restoreVariables() {
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance) this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
- Set<String> keySet = this.getVariables().keySet();
- Iterator<String> keyIt = keySet.iterator();
- while(keyIt.hasNext()){
-
+ for (String variable: variables.keySet()){
+ System.out.println("Restoring " + variable + " " + variables.get(variable));
VariablePersistenceStrategy persistenceStrategy =
VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
- VariableInstanceInfo variableInfo = this.getVariables().get(keyIt.next());
+ VariableInstanceInfo variableInfo = variables.get(variable);
variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo, this.env));
}
@@ -189,6 +188,7 @@
@PrePersist
public void update() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ boolean variablesChanged = false;
try {
MarshallerWriteContext context = new MarshallerWriteContext(baos,
null, null, null, null);
@@ -197,14 +197,14 @@
ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
marshaller.writeProcessInstance(
context, processInstance, false);
- persistVariables();
+ variablesChanged = persistVariables();
context.close();
} catch (IOException e) {
throw new IllegalArgumentException(
"IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage());
}
byte[] newByteArray = baos.toByteArray();
- if (!Arrays.equals(newByteArray, processInstanceByteArray)) {
+ if (variablesChanged || !Arrays.equals(newByteArray, processInstanceByteArray)) {
this.state = processInstance.getState();
this.lastModificationDate = new Date();
this.processInstanceByteArray = newByteArray;
@@ -213,9 +213,13 @@
eventTypes.add(type);
}
}
+ for (String variable: variables.keySet()){
+ System.out.println("Saving " + variable + " " + variables.get(variable));
+ }
}
- private void persistVariables() {
+ private boolean persistVariables() {
+ boolean changed = false;
// VariableScopeInstance variableScopeInstance =
// (VariableScopeInstance)
// ((RuleFlowProcessInstance)getProcessInstance(processInstanceInfo.getId()))
@@ -233,19 +237,21 @@
// this.clearVariables();
for (String key : keys) {
- VariableInstanceInfo variable =
- persistenceStrategy.persistVariable(key, processVariables.get(key), this.env);
- if (variable != null) {
- variable.setProcessInstanceInfo(this);
- this.addVariable(variable.getName(),variable);
- }
-
+ Object value = processVariables.get(key);
+ if (value != null) {
+ VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, value, this.env);
+ if (variable != null) {
+ variable.setProcessInstanceInfo(this);
+ changed = addVariable(variable.getName(),variable);
+ }
+ }
}
//If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
//we just serialize the variables inside the blob
// if (this.getVariables().size() == 0) {
// this.setSerializeVariables(true);
// }
+ return changed;
}
/**
@@ -262,8 +268,9 @@
this.variables = variables;
}
- public void addVariable(String name, VariableInstanceInfo variable) {
- variables.put(name, variable);
+ public boolean addVariable(String name, VariableInstanceInfo variable) {
+ Object oldValue = variables.put(name, variable);
+ return !variable.equals(oldValue);
}
// public void clearVariables() {
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java 2009-08-27 21:36:39 UTC (rev 29095)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java 2009-08-28 02:45:09 UTC (rev 29096)
@@ -34,9 +34,9 @@
private Long id;
private String test;
- MyEntity(){}
+ public MyEntity(){}
- MyEntity(String string) {
+ public MyEntity(String string) {
this.test= string;
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java 2009-08-27 21:36:39 UTC (rev 29095)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java 2009-08-28 02:45:09 UTC (rev 29096)
@@ -23,7 +23,7 @@
*
* @author salaboy
*/
-class MyVariableSerializable implements Serializable{
+public class MyVariableSerializable implements Serializable {
private String text = "";
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-08-27 21:36:39 UTC (rev 29095)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-08-28 02:45:09 UTC (rev 29096)
@@ -64,26 +64,26 @@
protected void setUp() {
ds1 = new PoolingDataSource();
ds1.setUniqueName( "jdbc/testDS1" );
-// ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+
+// ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
// ds1.setMaxPoolSize( 3 );
// ds1.setAllowLocalTransactions( true );
// ds1.getDriverProperties().put( "user",
-// "sa" );
+// "salaboy" );
// ds1.getDriverProperties().put( "password",
-// "sasa" );
-// ds1.getDriverProperties().put( "URL",
-// "jdbc:h2:mem:mydb" );
+// "salaboy" );
+// ds1.getDriverProperties().put( "serverName",
+// "localhost:5432/droolsPersistence" );
- ds1.setClassName( "org.postgresql.xa.PGXADataSource" );
- ds1.setMaxPoolSize( 3 );
- ds1.setAllowLocalTransactions( true );
- ds1.getDriverProperties().put( "user",
- "salaboy" );
- ds1.getDriverProperties().put( "password",
- "salaboy" );
- ds1.getDriverProperties().put( "serverName",
- "localhost:5432/droolsPersistence" );
-
ds1.init();
emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2009-08-28 02:45:09 UTC (rev 29096)
@@ -0,0 +1,103 @@
+package org.drools.persistence.session;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
+public class VariablePersistenceStrategyTest extends TestCase {
+
+ PoolingDataSource ds1;
+
+ @Override
+ protected void setUp() throws Exception {
+ ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ ds1.close();
+ }
+
+ public void testPersistenceVariables() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( new ClassPathResource( "VariablePersistenceStrategyProcess.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() );
+
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+ int id = ksession.getId();
+
+ 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"));
+ ProcessInstance processInstance = ksession.startProcess( "com.sample.ruleflow", parameters );
+
+ TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+ WorkItem workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+ ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+
+ workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+ ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+
+ workItem = handler.getWorkItem();
+ assertNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNull( processInstance );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf 2009-08-28 02:45:09 UTC (rev 29096)
@@ -0,0 +1,118 @@
+<?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="ruleflow" 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" />
+ <value></value>
+ </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" />
+ <value></value>
+ </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="669" 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>
+ </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="80" 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>
+ </humanTask>
+ <actionNode id="8" name="Action" x="557" 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>
+ </nodes>
+
+ <connections>
+ <connection from="8" 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" />
+ </connections>
+
+</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list