[jboss-svn-commits] JBL Code SVN: r35430 - in labs/jbossrules/trunk: drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 5 08:25:26 EDT 2010
Author: diegoll
Date: 2010-10-05 08:25:25 -0400 (Tue, 05 Oct 2010)
New Revision: 35430
Added:
labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableExtendingSerializable.java
Modified:
labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
Log:
[JBRULES-2722] recursive look for interface implementation (by Nicolas Loriente)
cleaning up corresponding test
Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableExtendingSerializable.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableExtendingSerializable.java (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableExtendingSerializable.java 2010-10-05 12:25:25 UTC (rev 35430)
@@ -0,0 +1,14 @@
+package org.drools.persistence.session;
+
+public class MyVariableExtendingSerializable extends MyVariableSerializable {
+
+ public MyVariableExtendingSerializable(String string) {
+ super( string );
+ }
+
+ @Override
+ public String toString() {
+ return "Extended " + super.toString();
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2010-10-05 12:25:06 UTC (rev 35429)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2010-10-05 12:25:25 UTC (rev 35430)
@@ -1,6 +1,12 @@
package org.drools.persistence.session;
-import bitronix.tm.TransactionManagerServices;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -8,36 +14,62 @@
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
-import junit.framework.TestCase;
+import junit.framework.Assert;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.base.MapGlobalResolver;
import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
+import org.drools.common.AbstractRuleBase;
+import org.drools.impl.InternalKnowledgeBase;
import org.drools.io.impl.ClassPathResource;
import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.persistence.processinstance.VariablePersistenceStrategyFactory;
import org.drools.persistence.processinstance.persisters.JPAVariablePersister;
import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.process.core.Work;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.instance.impl.Action;
+import org.drools.ruleflow.core.RuleFlowProcess;
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 org.drools.runtime.process.WorkflowProcessInstance;
+import org.drools.spi.ProcessContext;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import bitronix.tm.TransactionManagerServices;
import bitronix.tm.resource.jdbc.PoolingDataSource;
-import org.drools.builder.KnowledgeBuilderConfiguration;
-public class VariablePersistenceStrategyTest extends TestCase {
+public class VariablePersistenceStrategyTest {
- PoolingDataSource ds1;
+ private static Logger logger = LoggerFactory.getLogger( VariablePersistenceStrategyTest.class );
+
+ private PoolingDataSource ds1;
+ private EntityManagerFactory emf;
- @Override
- protected void setUp() throws Exception {
+ @Before
+ public void setUp() throws Exception {
ds1 = new PoolingDataSource();
ds1.setUniqueName( "jdbc/testDS1" );
ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
@@ -50,46 +82,111 @@
ds1.getDriverProperties().put( "URL",
"jdbc:h2:mem:mydb" );
ds1.init();
+
VariablePersistenceStrategyFactory.getVariablePersistenceStrategy()
.setPersister("javax.persistence.Entity",
"org.drools.persistence.processinstance.persisters.JPAVariablePersister");
VariablePersistenceStrategyFactory.getVariablePersistenceStrategy()
.setPersister("java.io.Serializable",
"org.drools.persistence.processinstance.persisters.SerializableVariablePersister");
+
+ emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+
}
- @Override
- protected void tearDown() throws Exception {
+ @After
+ public void tearDown() throws Exception {
+ emf.close();
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() );
+ @Test
+ public void testExtendingInterfaceVariablePersistence(){
+ String processId = "extendingInterfaceVariablePersistence";
+ String variableText = "my extending serializable variable text";
+ KnowledgeBase kbase = getKnowledgeBaseForExtendingInterfaceVariablePersistence(processId,
+ variableText);
+ StatefulKnowledgeSession ksession = createSession( kbase );
+ Map<String, Object> initialParams = new HashMap<String, Object>();
+ initialParams.put( "x", new MyVariableExtendingSerializable( variableText ) );
+ long processInstanceId = ksession.startProcess( processId, initialParams ).getId();
+ ksession = reloadSession( ksession, kbase );
+
+ List<?> variables = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+ Assert.assertEquals( 1, variables.size() );
+
+ long workItemId = TestWorkItemHandler.getInstance().getWorkItem().getId();
+ ksession.getWorkItemManager().completeWorkItem( workItemId, null );
+
+ Assert.assertNull( ksession.getProcessInstance( processInstanceId ) );
+ }
- 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());
+ private KnowledgeBase getKnowledgeBaseForExtendingInterfaceVariablePersistence(String processId, final String variableText) {
+ RuleFlowProcess process = new RuleFlowProcess();
+ process.setId( processId );
+
+ List<Variable> variables = new ArrayList<Variable>();
+ Variable variable = new Variable();
+ variable.setName("x");
+ ObjectDataType extendingSerializableDataType = new ObjectDataType();
+ extendingSerializableDataType.setClassName(MyVariableExtendingSerializable.class.getName());
+ variable.setType(extendingSerializableDataType);
+ variables.add(variable);
+ process.getVariableScope().setVariables(variables);
- StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
- int id = ksession.getId();
+ StartNode startNode = new StartNode();
+ startNode.setName( "Start" );
+ startNode.setId(1);
- System.out.println("### Starting process ###");
+ WorkItemNode workItemNode = new WorkItemNode();
+ workItemNode.setName( "workItemNode" );
+ workItemNode.setId( 2 );
+ Work work = new WorkImpl();
+ work.setName( "MyWork" );
+ workItemNode.setWork( work );
+
+ ActionNode actionNode = new ActionNode();
+ actionNode.setName( "Print" );
+ DroolsAction action = new DroolsConsequenceAction( "java" , null);
+ action.setMetaData( "Action" , new Action() {
+ public void execute(ProcessContext context) throws Exception {
+ Assert.assertEquals( variableText , ((MyVariableExtendingSerializable) context.getVariable( "x" )).getText()); ;
+ }
+ });
+ actionNode.setAction(action);
+ actionNode.setId( 3 );
+
+ EndNode endNode = new EndNode();
+ endNode.setName("EndNode");
+ endNode.setId(4);
+
+ connect( startNode, workItemNode );
+ connect( workItemNode, actionNode );
+ connect( actionNode, endNode );
+
+ process.addNode( startNode );
+ process.addNode( workItemNode );
+ process.addNode( actionNode );
+ process.addNode( endNode );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ ((AbstractRuleBase) ((InternalKnowledgeBase) kbase).getRuleBase()).addProcess(process);
+ return kbase;
+ }
+
+ @Test
+ public void testPersistenceVariables() {
+ KnowledgeBase kbase = createKnowledgeBase( "VariablePersistenceStrategyProcess.rf" );
+ StatefulKnowledgeSession ksession = createSession( kbase );
+
+ logger.info("### Starting process ###");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("x", "SomeString");
parameters.put("y", new MyEntity("This is a test Entity with annotation in fields"));
parameters.put("m", new MyEntityMethods("This is a test Entity with annotations in methods"));
parameters.put("f", new MyEntityOnlyFields("This is a test Entity with annotations in fields and without accesors methods"));
parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
- WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
- ksession.startProcess( "com.sample.ruleflow", parameters );
+ long processInstanceId = ksession.startProcess( "com.sample.ruleflow", parameters ).getId();
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
@@ -98,10 +195,10 @@
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() );
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+ ksession.getProcessInstance( processInstanceId );
assertNotNull( processInstance );
assertEquals("SomeString", processInstance.getVariable("x"));
assertEquals("This is a test Entity with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
@@ -111,24 +208,24 @@
assertNull(processInstance.getVariable("a"));
assertNull(processInstance.getVariable("b"));
assertNull(processInstance.getVariable("c"));
- System.out.println("### Completing first work item ###");
+ logger.info("### Completing first work item ###");
ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
workItem = handler.getWorkItem();
assertNotNull( workItem );
- System.out.println("### Retrieving variable instance infos ###");
+ logger.info("### Retrieving variable instance infos ###");
result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
assertEquals(8, result.size());
for (Object o: result) {
assertTrue(VariableInstanceInfo.class.isAssignableFrom(o.getClass()));
- System.out.println(o);
+ logger.info(o.toString());
}
- System.out.println("### Retrieving process instance ###");
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNotNull(processInstance);
assertEquals("SomeString", processInstance.getVariable("x"));
assertEquals("This is a test Entity with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
@@ -138,7 +235,7 @@
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 ###");
+ logger.info("### Completing second work item ###");
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
workItem = handler.getWorkItem();
@@ -147,10 +244,10 @@
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);
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNotNull(processInstance);
assertEquals("SomeString", processInstance.getVariable("x"));
assertEquals("This is a test Entity with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
@@ -160,7 +257,7 @@
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 ###");
+ logger.info("### Completing third work item ###");
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
workItem = handler.getWorkItem();
@@ -171,154 +268,107 @@
//we need to change that to leave the variables there???
assertEquals(0, result.size());
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNull(processInstance);
}
+ @Test
public void testPersistenceVariablesWithTypeChange() {
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( new ClassPathResource( "VariablePersistenceStrategyProcessTypeChange.rf" ), ResourceType.DRF );
- for (KnowledgeBuilderError error: kbuilder.getErrors()) {
- System.out.println(error);
- }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ KnowledgeBase kbase = createKnowledgeBase( "VariablePersistenceStrategyProcessTypeChange.rf" );
+ StatefulKnowledgeSession ksession = createSession( kbase );
- 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 with annotation in fields"));
parameters.put("m", new MyEntityMethods("This is a test Entity with annotations in methods"));
parameters.put("f", new MyEntityOnlyFields("This is a test Entity with annotations in fields and without accesors methods"));
parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
- ProcessInstance processInstance = ksession.startProcess( "com.sample.ruleflow", parameters );
+ long processInstanceId = ksession.startProcess( "com.sample.ruleflow", parameters ).getId();
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
assertNotNull( workItem );
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
- processInstance = ksession.getProcessInstance( processInstance.getId() );
+ ksession = reloadSession( ksession, kbase );
+ ProcessInstance processInstance = ksession.getProcessInstance( processInstanceId );
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() );
+ ksession = reloadSession( ksession, kbase );
+ processInstance = ksession.getProcessInstance( processInstanceId );
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() );
+ ksession = reloadSession( ksession, kbase );
+ processInstance = ksession.getProcessInstance( processInstanceId );
assertNull( processInstance );
}
+ @Test
public void testPersistenceVariablesSubProcess() {
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( new ClassPathResource( "VariablePersistenceStrategySubProcess.rf" ), ResourceType.DRF );
- for (KnowledgeBuilderError error: kbuilder.getErrors()) {
- System.out.println(error);
- }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ KnowledgeBase kbase = createKnowledgeBase( "VariablePersistenceStrategySubProcess.rf" );
+ StatefulKnowledgeSession ksession = createSession( kbase );
- 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 with annotation in fields"));
parameters.put("m", new MyEntityMethods("This is a test Entity with annotations in methods"));
parameters.put("f", new MyEntityOnlyFields("This is a test Entity with annotations in fields and without accesors methods"));
parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
- ProcessInstance processInstance = ksession.startProcess( "com.sample.ruleflow", parameters );
+ long processInstanceId = ksession.startProcess( "com.sample.ruleflow", parameters ).getId();
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
assertNotNull( workItem );
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
- processInstance = ksession.getProcessInstance( processInstance.getId() );
+ ksession = reloadSession( ksession, kbase );
+ ProcessInstance processInstance = ksession.getProcessInstance( processInstanceId );
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() );
+ ksession = reloadSession( ksession, kbase );
+ processInstance = ksession.getProcessInstance( processInstanceId );
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() );
+ ksession = reloadSession( ksession, kbase );
+ processInstance = ksession.getProcessInstance( processInstanceId );
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() );
+ ksession = reloadSession( ksession, kbase );
+ processInstance = ksession.getProcessInstance( processInstanceId );
assertNull( processInstance );
}
+ @Test
public void testWorkItemWithVariablePersistence() throws Exception{
- KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
- conf.setProperty("drools.dialect.java.compiler", "JANINO");
+ KnowledgeBase kbase = createKnowledgeBase( "VPSProcessWithWorkItems.rf" );
+ StatefulKnowledgeSession ksession = createSession( kbase );
- 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 ###");
+ logger.info("### 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 );
+ long processInstanceId = ksession.startProcess( "com.sample.ruleflow", parameters ).getId();
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
@@ -328,10 +378,10 @@
assertEquals(5, result.size());
- System.out.println("### Retrieving process instance ###");
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
- processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance( processInstance.getId() );
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+ ksession.getProcessInstance( processInstanceId );
assertNotNull( processInstance );
assertEquals("SomeString", processInstance.getVariable("x"));
assertEquals("This is a test Entity", ((MyEntity) processInstance.getVariable("y")).getTest());
@@ -340,7 +390,7 @@
assertNull(processInstance.getVariable("b"));
assertNull(processInstance.getVariable("c"));
- System.out.println("### Completing first work item ###");
+ logger.info("### 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");
@@ -350,27 +400,27 @@
workItem = handler.getWorkItem();
assertNotNull( workItem );
- System.out.println("### Retrieving variable instance infos ###");
+ logger.info("### 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));
+ logger.info(((VariableInstanceInfo) o).toString());
}
- System.out.println("### Retrieving process instance ###");
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNotNull(processInstance);
- System.out.println("######## Getting the already Persisted Variables #########");
+ logger.info("######## 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 ###");
+ logger.info("### Completing second work item ###");
results = new HashMap<String, Object>();
results.put("zeta", processInstance.getVariable("z"));
results.put("equis", processInstance.getVariable("x"));
@@ -383,10 +433,10 @@
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);
+ logger.info("### Retrieving process instance ###");
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNotNull(processInstance);
assertEquals("SomeString->modifiedResult", processInstance.getVariable("x"));
assertEquals("This is a test Entity", ((MyEntity) processInstance.getVariable("y")).getTest());
@@ -394,7 +444,7 @@
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 ###");
+ logger.info("### Completing third work item ###");
results = new HashMap<String, Object>();
results.put("zeta", processInstance.getVariable("z"));
results.put("equis", processInstance.getVariable("x"));
@@ -407,22 +457,68 @@
assertEquals(0, result.size());
- ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+ ksession = reloadSession( ksession, kbase );
processInstance = (WorkflowProcessInstance)
- ksession.getProcessInstance(processInstance.getId());
+ ksession.getProcessInstance(processInstanceId);
assertNull(processInstance);
}
+ @Test
public void testEntityWithSuperClassAnnotationField() throws Exception {
MySubEntity subEntity = new MySubEntity();
subEntity.setId(3L);
assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
}
+ @Test
public void testEntityWithSuperClassAnnotationMethod() throws Exception {
MySubEntityMethods subEntity = new MySubEntityMethods();
subEntity.setId(3L);
assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
}
+ private StatefulKnowledgeSession createSession(KnowledgeBase kbase){
+ return JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, createEnvironment() );
+ }
+
+ private StatefulKnowledgeSession reloadSession(StatefulKnowledgeSession ksession, KnowledgeBase kbase){
+ int sessionId = ksession.getId();
+ ksession.dispose();
+ return JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbase, null, createEnvironment() );
+ }
+
+ private KnowledgeBase createKnowledgeBase(String flowFile) {
+ KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ conf.setProperty("drools.dialect.java.compiler", "JANINO");
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+ kbuilder.add( new ClassPathResource( flowFile ), ResourceType.DRF );
+ if(kbuilder.hasErrors()){
+ StringBuilder errorMessage = new StringBuilder();
+ for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+ errorMessage.append( error.getMessage() );
+ errorMessage.append( System.getProperty( "line.separator" ) );
+ }
+ fail( errorMessage.toString());
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ return kbase;
+ }
+
+ private Environment createEnvironment() {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+ env.set(EnvironmentName.GLOBALS, new MapGlobalResolver());
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ return env;
+ }
+
+ private void connect(Node sourceNode,
+ Node targetNode) {
+ new ConnectionImpl (sourceNode, Node.CONNECTION_DEFAULT_TYPE,
+ targetNode, Node.CONNECTION_DEFAULT_TYPE);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2010-10-05 12:25:06 UTC (rev 35429)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/VariablePersistenceStrategy.java 2010-10-05 12:25:25 UTC (rev 35430)
@@ -136,16 +136,20 @@
}
}
}
- // at last for interfaces
- Class<?>[] interfaces = o.getClass().getInterfaces();
- if (interfaces != null) {
- for (Class<?> clazz : interfaces) {
- persisterFQN = types.get(clazz.getName());
+
+ //finally look for interface to the root
+ Class<?> clazz = o.getClass();
+ do {
+ Class<?>[] interfaces = clazz.getInterfaces();
+ for(Class<?> interfaze : interfaces) {
+ persisterFQN = types.get(interfaze.getName());
if (persisterFQN != null && !persisterFQN.equals("")) {
+ System.out.println("Persistence strategy returns: " + persisterFQN);
return persisterFQN;
}
}
- }
+ } while ( (clazz = clazz.getSuperclass() ) != null);
+
return null;
}
}
More information about the jboss-svn-commits
mailing list