[jboss-svn-commits] JBL Code SVN: r35178 - in labs/jbossrules/trunk: drools-container/drools-spring and 34 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 17 09:55:02 EDT 2010


Author: KrisVerlaenen
Date: 2010-09-17 09:54:59 -0400 (Fri, 17 Sep 2010)
New Revision: 35178

Added:
   labs/jbossrules/trunk/drools-flow-persistence-jpa/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/pom.xml
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityMethods.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityOnlyFields.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/TestWorkItemHandler.java
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
   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/resources/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/EventsProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/drools.session.conf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/orm.xml
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetRules.drl
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/StateProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SubProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SuperProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/TimerProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablesProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/WorkItemsProcess.rf
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/jndi.properties
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/log4j.xml
   labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/testVariables.rf
Removed:
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/jpa/
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/EventsProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/META-INF/
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetRules.drl
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/StateProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SubProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SuperProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/TimerProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablesProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/WorkItemsProcess.rf
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/jndi.properties
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/testVariables.rf
Modified:
   labs/jbossrules/trunk/drools-container/drools-spring/pom.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultWorkItemManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/process/InternalProcessRuntime.java
   labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerImpl.java
   labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java
   labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessRuntimeImpl.java
   labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java
   labs/jbossrules/trunk/drools-grid/drools-grid-local/pom.xml
   labs/jbossrules/trunk/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java
   labs/jbossrules/trunk/drools-persistence-jpa/pom.xml
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
   labs/jbossrules/trunk/drools-process/drools-gwt-server-war/pom.xml
   labs/jbossrules/trunk/pom.xml
Log:
JBRULES-2679: Mdularize Drools Flow
 - refactoring drools-persistence-jpa

Modified: labs/jbossrules/trunk/drools-container/drools-spring/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-container/drools-spring/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -37,7 +37,7 @@
     	
     	 <dependency>
     		<groupId>org.drools</groupId>
-    		<artifactId>drools-persistence-jpa</artifactId>
+    		<artifactId>drools-flow-persistence-jpa</artifactId>
     		<optional>true</optional>
     	</dependency>
     	

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -48,6 +48,8 @@
 import org.drools.impl.EnvironmentFactory;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.impl.WorkItemImpl;
 import org.drools.reteoo.BetaMemory;
 import org.drools.reteoo.BetaNode;
 import org.drools.reteoo.EntryPointNode;
@@ -793,4 +795,35 @@
                                          pc );
     }
 
+    public static WorkItem readWorkItem(MarshallerReaderContext context, boolean includeVariables) throws IOException {
+        ObjectInputStream stream = context.stream;
+
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setId( stream.readLong() );
+        workItem.setProcessInstanceId( stream.readLong() );
+        workItem.setName( stream.readUTF() );
+        workItem.setState( stream.readInt() );
+
+        if(includeVariables){
+        int nbParameters = stream.readInt();
+
+        for ( int i = 0; i < nbParameters; i++ ) {
+            String name = stream.readUTF();
+            try {
+                Object value = stream.readObject();
+                workItem.setParameter( name,
+                                       value );
+            } catch ( ClassNotFoundException e ) {
+                throw new IllegalArgumentException( "Could not reload parameter " + name );
+            }
+        }
+        }
+
+        return workItem;
+    }
+
+    public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
+        return readWorkItem(context, true);
+     }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -43,6 +43,7 @@
 import org.drools.core.util.ObjectHashMap;
 import org.drools.core.util.ObjectHashSet;
 import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.process.instance.WorkItem;
 import org.drools.reteoo.BetaNode;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleSink;
@@ -748,4 +749,26 @@
         stream.writeUTF( pc.getEntryPoint().getEntryPointId() );
     }
 
+    public static void writeWorkItem(MarshallerWriteContext context, WorkItem workItem) throws IOException {
+		writeWorkItem(context, workItem, true);
+	}
+
+	public static void writeWorkItem(MarshallerWriteContext context,
+			WorkItem workItem, boolean includeVariables) throws IOException {
+		ObjectOutputStream stream = context.stream;
+		stream.writeLong(workItem.getId());
+		stream.writeLong(workItem.getProcessInstanceId());
+		stream.writeUTF(workItem.getName());
+		stream.writeInt(workItem.getState());
+
+		if (includeVariables) {
+			Map<String, Object> parameters = workItem.getParameters();
+			stream.writeInt(parameters.size());
+			for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+				stream.writeUTF(entry.getKey());
+				stream.writeObject(entry.getValue());
+			}
+		}
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/WorkItemManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -33,5 +33,7 @@
 	Set<WorkItem> getWorkItems();
 	
 	WorkItem getWorkItem(long id);
+	
+	void clear();
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultWorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultWorkItemManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultWorkItemManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -138,4 +138,8 @@
         this.workItemHandlers.put(workItemName, handler);
     }
 
+	public void clear() {
+		this.workItems.clear();
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/process/InternalProcessRuntime.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/process/InternalProcessRuntime.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/process/InternalProcessRuntime.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -8,5 +8,7 @@
 	void dispose();
 	
 	void setProcessEventSupport(ProcessEventSupport processEventSupport);
+	
+	void clearProcessInstances();
 
 }

Modified: labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerImpl.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerImpl.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -8,13 +8,11 @@
 import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 import org.drools.common.InternalWorkingMemory;
 import org.drools.process.instance.InternalProcessRuntime;
 import org.drools.process.instance.WorkItem;
 import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.impl.WorkItemImpl;
 import org.drools.process.instance.timer.TimerInstance;
 import org.drools.process.instance.timer.TimerManager;
 
@@ -98,35 +96,11 @@
                           } );
         for ( WorkItem workItem : workItems ) {
             stream.writeShort( PersisterEnums.WORK_ITEM );
-            writeWorkItem( context,
-                           workItem );
+            OutputMarshaller.writeWorkItem( context, workItem );
         }
         stream.writeShort( PersisterEnums.END );
     }
 
-    public static void writeWorkItem(MarshallerWriteContext context,
-                                     WorkItem workItem) throws IOException {
-         writeWorkItem(context, workItem, true);
-    }
-
-    public static void writeWorkItem(MarshallerWriteContext context,
-                                     WorkItem workItem, boolean includeVariables) throws IOException {
-        ObjectOutputStream stream = context.stream;
-        stream.writeLong( workItem.getId() );
-        stream.writeLong( workItem.getProcessInstanceId() );
-        stream.writeUTF( workItem.getName() );
-        stream.writeInt( workItem.getState() );
-
-        if(includeVariables){
-	        Map<String, Object> parameters = workItem.getParameters();
-	        stream.writeInt( parameters.size() );
-	        for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
-	            stream.writeUTF( entry.getKey() );
-	            stream.writeObject( entry.getValue() );
-	        }
-	    }
-    }
-
     public void readProcessInstances(MarshallerReaderContext context) throws IOException {
         ObjectInputStream stream = context.stream;
         while ( stream.readShort() == PersisterEnums.PROCESS_INSTANCE ) {
@@ -139,42 +113,11 @@
         InternalWorkingMemory wm = context.wm;
         ObjectInputStream stream = context.stream;
         while ( stream.readShort() == PersisterEnums.WORK_ITEM ) {
-            WorkItem workItem = readWorkItem( context );
+            WorkItem workItem = InputMarshaller.readWorkItem( context );
             ((WorkItemManager) wm.getWorkItemManager()).internalAddWorkItem( workItem );
         }
     }
 
-    public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
-       return readWorkItem(context, true);
-    }
-
-    public static WorkItem readWorkItem(MarshallerReaderContext context, boolean includeVariables) throws IOException {
-        ObjectInputStream stream = context.stream;
-
-        WorkItemImpl workItem = new WorkItemImpl();
-        workItem.setId( stream.readLong() );
-        workItem.setProcessInstanceId( stream.readLong() );
-        workItem.setName( stream.readUTF() );
-        workItem.setState( stream.readInt() );
-
-        if(includeVariables){
-        int nbParameters = stream.readInt();
-
-        for ( int i = 0; i < nbParameters; i++ ) {
-            String name = stream.readUTF();
-            try {
-                Object value = stream.readObject();
-                workItem.setParameter( name,
-                                       value );
-            } catch ( ClassNotFoundException e ) {
-                throw new IllegalArgumentException( "Could not reload parameter " + name );
-            }
-        }
-        }
-
-        return workItem;
-    }
-
     public void readProcessTimers(MarshallerReaderContext context) throws IOException {
         ObjectInputStream stream = context.stream;
 

Modified: labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -33,5 +33,7 @@
     void removeProcessInstance(ProcessInstance processInstance);
 
     void internalRemoveProcessInstance(ProcessInstance processInstance);
+    
+    void clearProcessInstances();
 
 }

Modified: labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessRuntimeImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessRuntimeImpl.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/ProcessRuntimeImpl.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -294,4 +294,8 @@
         this.timerManager.dispose();
 	}
 
+	public void clearProcessInstances() {
+		this.processInstanceManager.clearProcessInstances();
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-flow-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -53,4 +53,8 @@
     public void internalRemoveProcessInstance(ProcessInstance processInstance) {
         processInstances.remove(((ProcessInstance)processInstance).getId());
     }
+
+	public void clearProcessInstances() {
+		processInstances.clear();
+	}
 }

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.2.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-flow-persistence-jpa</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools Flow :: Persistence :: JPA</name> 
+    
+   <build>
+      <plugins>
+         <plugin>
+            <artifactId>maven-jar-plugin</artifactId>
+            <configuration>
+               <archive>
+                  <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+               </archive>
+            </configuration>
+         </plugin>
+         <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <extensions>true</extensions>
+            <executions>
+               <execution>
+                  <id>manifest</id>
+                  <phase>process-classes</phase>
+                  <goals>
+                     <goal>manifest</goal>
+                  </goals>
+               </execution>
+            </executions>
+            <configuration>
+               <manifestLocation>META-INF</manifestLocation>
+               <instructions>
+                  <_removeheaders>Ignore-Package</_removeheaders> 
+                  <Require-Bundle>org.drools.core;bundle-version="${pom.version}", org.drools.compiler;bundle-version="${pom.version}"</Require-Bundle>
+                  <Import-Package>!org.drools.*, *</Import-Package>
+                  <Export-Package> org.drools.*</Export-Package>
+                  <DynamicImport-Package>*</DynamicImport-Package>
+                  <!--Bundle-Activator>org.drools.osgi.core.Activator</Bundle-Activator-->
+               </instructions>
+            </configuration>
+         </plugin>
+      </plugins>
+   </build>    
+    
+      <dependencies> 	       
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-api</artifactId>
+    	</dependency>         		  
+       
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-core</artifactId>
+    	</dependency>         		  
+       
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-flow-core</artifactId>
+    	</dependency>         		  
+       
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-compiler</artifactId>
+    	</dependency>         		  
+
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-flow-compiler</artifactId>
+    	</dependency>         		  
+
+    	<dependency>
+    		<groupId>org.drools</groupId>
+    		<artifactId>drools-persistence-jpa</artifactId>
+    	</dependency>         		  
+
+    	<dependency>
+    		<groupId>org.slf4j</groupId>
+    		<artifactId>slf4j-api</artifactId>
+    	</dependency>    
+
+    	 <dependency>
+        	<groupId>org.slf4j</groupId>
+        	<artifactId>slf4j-log4j12</artifactId>
+        	<scope>test</scope>
+        </dependency>
+        
+    <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-impl</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-xjc</artifactId>
+      <scope>provided</scope>
+    </dependency>        
+    	      	    
+      <dependency>
+         <groupId>org.apache.felix</groupId>
+         <artifactId>org.osgi.core</artifactId>
+         <scope>provided</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.felix</groupId>
+         <artifactId>org.osgi.compendium</artifactId>
+         <scope>provided</scope>
+      </dependency>
+   	
+    	<!-- Hibernate -->
+    	<dependency>
+    		<groupId>org.hibernate</groupId>
+    		<artifactId>hibernate-entitymanager</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>org.hibernate</groupId>
+    		<artifactId>hibernate-annotations</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>org.hibernate</groupId>
+    		<artifactId>hibernate-commons-annotations</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>org.hibernate</groupId>
+    		<artifactId>hibernate-core</artifactId>
+    	</dependency>
+
+    	<!-- HSQLDB -->
+    	<dependency>
+    		<groupId>com.h2database</groupId>
+    		<artifactId>h2</artifactId>
+			<scope>test</scope>
+    	</dependency>
+    	
+    	<dependency>
+    		<groupId>javax.persistence</groupId>
+    		<artifactId>persistence-api</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>dom4j</groupId>
+    		<artifactId>dom4j</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>javassist</groupId>
+    		<artifactId>javassist</artifactId>
+    	</dependency>
+
+    	<dependency>
+    		<groupId>javax.transaction</groupId>
+    		<artifactId>jta</artifactId>
+    	</dependency>
+    	
+    	<dependency>
+		    <groupId>org.codehaus.btm</groupId>
+		    <artifactId>btm</artifactId>
+		    <scope>test</scope>
+    	</dependency>    	
+    	
+        <!--dependency>  
+           <groupId>org.objectweb.jotm</groupId>  
+           <artifactId>com.springsource.org.objectweb.jotm</artifactId>  
+           <version>2.0.10</version>
+        </dependency>  	
+        
+        <dependency>  
+           <groupId>com.experlog.xapool</groupId>  
+           <artifactId>com.springsource.org.enhydra.jdbc</artifactId>  
+           <version>1.5.0</version> 
+       </dependency>        
+       
+      <dependency>  
+         <groupId>org.apache.directory</groupId>  
+         <artifactId>com.springsource.org.apache.directory.server.jndi</artifactId>  
+         <version>1.0.2</version> 
+      </dependency>       
+
+      <dependency>  
+          <groupId>javax.resource</groupId>  
+          <artifactId>com.springsource.javax.resource</artifactId>  
+          <version>1.5.0</version> 
+      </dependency-->
+
+      </dependencies>              
+                  
+</project>

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,105 @@
+package org.drools.persistence.processinstance;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.definition.process.Process;
+import org.drools.process.instance.ProcessInstanceManager;
+import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.process.ProcessInstance;
+
+public class JPAProcessInstanceManager
+    implements
+    ProcessInstanceManager {
+
+    private InternalKnowledgeRuntime kruntime;
+    private transient Map<Long, ProcessInstance> processInstances;
+
+    public void setKnowledgeRuntime(InternalKnowledgeRuntime kruntime) {
+        this.kruntime = kruntime;
+    }
+
+    public void addProcessInstance(ProcessInstance processInstance) {
+        ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance, this.kruntime.getEnvironment() );
+        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+        em.persist( processInstanceInfo );
+        //em.refresh( processInstanceInfo  );
+//        em.flush();
+        //em.getTransaction().commit();
+        ((org.drools.process.instance.ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
+        processInstanceInfo.updateLastReadDate();
+        internalAddProcessInstance(processInstance);
+    }
+
+    public void internalAddProcessInstance(ProcessInstance processInstance) {
+    	if (this.processInstances == null) {
+        	this.processInstances = new HashMap<Long, ProcessInstance>();
+        }
+        processInstances.put(processInstance.getId(), processInstance);
+    }
+
+    public ProcessInstance getProcessInstance(long id) {
+    	org.drools.process.instance.ProcessInstance processInstance = null;
+    	if (this.processInstances != null) {
+	    	processInstance = (org.drools.process.instance.ProcessInstance) this.processInstances.get(id);
+	    	if (processInstance != null) {
+	    		return processInstance;
+	    	}
+    	}
+    	
+        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+        ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
+                                                           id );
+        if ( processInstanceInfo == null ) {
+            return null;
+        }
+        processInstanceInfo.updateLastReadDate();
+        processInstance = (org.drools.process.instance.ProcessInstance)
+        	processInstanceInfo.getProcessInstance(kruntime, this.kruntime.getEnvironment());
+        Process process = kruntime.getKnowledgeBase().getProcess( processInstance.getProcessId() );
+        if ( process == null ) {
+            throw new IllegalArgumentException( "Could not find process " + processInstance.getProcessId() );
+        }
+        processInstance.setProcess( process );
+        if ( processInstance.getKnowledgeRuntime() == null ) {
+            processInstance.setKnowledgeRuntime( kruntime );
+            ((ProcessInstanceImpl) processInstance).reconnect();
+        }
+        return processInstance;
+    }
+
+    public Collection<ProcessInstance> getProcessInstances() {
+        return new ArrayList<ProcessInstance>();
+    }
+
+    public void removeProcessInstance(ProcessInstance processInstance) {
+        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+        ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
+                                                           processInstance.getId() );
+        if ( processInstanceInfo != null ) {
+            em.remove( processInstanceInfo );
+        }
+        internalRemoveProcessInstance(processInstance);
+    }
+
+    public void internalRemoveProcessInstance(ProcessInstance processInstance) {
+    	if (this.processInstances != null) {
+            processInstances.remove( processInstance.getId() );
+        }
+    }
+    
+    public void clearProcessInstances() {
+    	if (processInstances != null) {
+    		for (ProcessInstance processInstance: new ArrayList<ProcessInstance>(processInstances.values())) {
+    			((ProcessInstanceImpl) processInstance).disconnect();
+    		}
+    	}
+    }
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,15 @@
+package org.drools.persistence.processinstance;
+
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.process.instance.ProcessInstanceManager;
+import org.drools.process.instance.ProcessInstanceManagerFactory;
+
+public class JPAProcessInstanceManagerFactory implements ProcessInstanceManagerFactory {
+
+	public ProcessInstanceManager createProcessInstanceManager(InternalKnowledgeRuntime kruntime) {
+		JPAProcessInstanceManager result = new JPAProcessInstanceManager();
+		result.setKnowledgeRuntime(kruntime);
+		return result;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,40 @@
+package org.drools.persistence.processinstance;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.FlushModeType;
+import javax.persistence.Query;
+
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.process.instance.event.DefaultSignalManager;
+import org.drools.runtime.EnvironmentName;
+
+public class JPASignalManager extends DefaultSignalManager {
+
+    public JPASignalManager(InternalKnowledgeRuntime kruntime) {
+        super(kruntime);
+    }
+    
+    public void signalEvent(String type,
+                            Object event) {
+        for ( long id : getProcessInstancesForEvent( type ) ) {
+            getKnowledgeRuntime().getProcessInstance( id );
+        }
+        super.signalEvent( type,
+                           event );
+    }
+
+    @SuppressWarnings("unchecked")
+    private List<Long> getProcessInstancesForEvent(String type) {
+        EntityManager em = (EntityManager) getKnowledgeRuntime().getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
+        
+        Query processInstancesForEvent = em.createNamedQuery( "ProcessInstancesWaitingForEvent" );
+        processInstancesForEvent.setFlushMode(FlushModeType.COMMIT);
+        processInstancesForEvent.setParameter( "type",
+                                               type );
+        List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
+        return list;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,13 @@
+package org.drools.persistence.processinstance;
+
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.process.instance.event.SignalManager;
+import org.drools.process.instance.event.SignalManagerFactory;
+
+public class JPASignalManagerFactory implements SignalManagerFactory {
+
+	public SignalManager createSignalManager(InternalKnowledgeRuntime kruntime) {
+		return new JPASignalManager(kruntime);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,51 @@
+package org.drools.persistence.processinstance;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Version;
+
+ at Entity
+public class ProcessInstanceEventInfo {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private long   id;
+
+    @Version
+    @Column(name = "OPTLOCK")
+    private int    version;
+
+    private String eventType;
+    private long   processInstanceId;
+
+    protected ProcessInstanceEventInfo() {
+    }
+    
+    public long getId() {
+        return this.id;
+    }
+    
+    public int getVersion() {
+        return this.version;
+    }    
+
+    public ProcessInstanceEventInfo(long processInstanceId,
+                                    String eventType) {
+        this.processInstanceId = processInstanceId;
+        this.eventType = eventType;
+    }
+
+    public long getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public String getEventType() {
+        return eventType;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,426 @@
+package org.drools.persistence.processinstance;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.Lob;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+import javax.persistence.PreUpdate;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.drools.common.InternalKnowledgeRuntime;
+import org.drools.common.InternalRuleBase;
+import org.drools.impl.InternalKnowledgeBase;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
+import org.drools.marshalling.impl.ProcessInstanceMarshaller;
+import org.drools.marshalling.impl.ProcessMarshallerRegistry;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.ContextInstance;
+import org.drools.process.instance.ContextInstanceContainer;
+import org.drools.process.instance.ContextableInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.runtime.Environment;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.NodeInstanceContainer;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+import org.hibernate.annotations.CollectionOfElements;
+
+ at Entity
+public class ProcessInstanceInfo {
+
+    private static final String               VARIABLE_SEPARATOR = ":";
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "InstanceId")
+    private Long                              processInstanceId;
+
+    @Version
+    @Column(name = "OPTLOCK")
+    private int                               version;
+
+    private String                            processId;
+    private Date                              startDate;
+    private Date                              lastReadDate;
+    private Date                              lastModificationDate;
+    private int                               state;
+    // TODO How do I mark a process instance info as dirty when the process
+    // instance has changed (so that byte array is regenerated and saved) ?
+    private @Lob
+    byte[]                                    processInstanceByteArray;
+    
+//  @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+//  @JoinColumn(name = "processInstanceId")
+//  private Set<EventType>                    eventTypes         = new HashSet<EventType>();    
+    private @CollectionOfElements
+
+    @JoinTable(name = "EventTypes", joinColumns = @JoinColumn(name = "InstanceId"))
+    Set<String>                               eventTypes         = new HashSet<String>();
+    private @Transient
+    ProcessInstance                           processInstance;
+    private @Transient
+    Environment                               env;
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "processInstanceId")
+    @MapKey(name = "name")
+    private Map<String, VariableInstanceInfo> variables          = new HashMap<String, VariableInstanceInfo>();
+    private boolean                           externalVariables  = false;
+
+    protected ProcessInstanceInfo() {
+    }
+
+    public ProcessInstanceInfo(ProcessInstance processInstance) {
+        this.processInstance = processInstance;
+        this.processId = processInstance.getProcessId();
+        startDate = new Date();
+    }
+
+    public ProcessInstanceInfo(ProcessInstance processInstance,
+                               Environment env) {
+        this.processInstance = processInstance;
+        this.processId = processInstance.getProcessId();
+        startDate = new Date();
+        this.env = env;
+    }
+
+    public long getId() {
+        return processInstanceId;
+    }
+
+    public String getProcessId() {
+        return processId;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public Date getLastModificationDate() {
+        return lastModificationDate;
+    }
+
+    public Date getLastReadDate() {
+        return lastReadDate;
+    }
+
+    public void updateLastReadDate() {
+        lastReadDate = new Date();
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public ProcessInstance getProcessInstance(InternalKnowledgeRuntime kruntime,
+                                              Environment env) {
+        this.env = env;
+        if ( processInstance == null ) {
+            try {
+                ByteArrayInputStream bais = new ByteArrayInputStream( processInstanceByteArray );
+                MarshallerReaderContext context = new MarshallerReaderContext( bais,
+                                                                               (InternalRuleBase) ((InternalKnowledgeBase) kruntime.getKnowledgeBase()).getRuleBase(),
+                                                                               null,
+                                                                               null );
+                ProcessInstanceMarshaller marshaller = getMarshallerFromContext( context );
+                context.wm = ((StatefulKnowledgeSessionImpl) kruntime).getInternalWorkingMemory();
+                processInstance = marshaller.readProcessInstance( context,
+                                                                  !externalVariables );
+                if ( externalVariables ) {
+                    restoreVariables();
+                }
+                context.close();
+            } catch ( IOException e ) {
+                e.printStackTrace();
+                throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage(),
+                                                    e );
+            }
+        }
+        return processInstance;
+    }
+
+    private void restoreVariables() {
+        for ( Map.Entry<String, VariableInstanceInfo> entry : variables.entrySet() ) {
+            String[] variableHierarchy = entry.getKey().split( VARIABLE_SEPARATOR );
+            // last one is variable name
+            String variableName = variableHierarchy[variableHierarchy.length - 1];
+            // other ones are parent ids
+            List<Long> parentIds = new ArrayList<Long>();
+            for ( int i = 0; i < variableHierarchy.length - 1; i++ ) {
+                parentIds.add( Long.valueOf( variableHierarchy[i] ) );
+            }
+            restoreVariable( entry.getValue(),
+                             parentIds,
+                             variableName,
+                             (WorkflowProcessInstance) processInstance );
+        }
+    }
+
+    private void restoreVariable(VariableInstanceInfo variableInfo,
+                                 List<Long> parentIds,
+                                 String variableName,
+                                 NodeInstanceContainer nodeInstanceContainer) throws NumberFormatException {
+        if ( parentIds.size() == 0 ) {
+            if ( !(nodeInstanceContainer instanceof ContextableInstance) ) {
+                throw new IllegalArgumentException( "Parent node instance is not a contextable instance: " + nodeInstanceContainer );
+            }
+            VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((ContextableInstance) nodeInstanceContainer).getContextInstance( VariableScope.VARIABLE_SCOPE );
+            VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy();
+            Object value = persistenceStrategy.getVariable( variableInfo,
+                                                            this.env );
+            System.out.println( ">>>>> Restoring variable " + variableName + " = " + value );
+            variableScopeInstance.setVariable( variableName,
+                                               value );
+        } else {
+            Long nodeInstanceId = parentIds.get( 0 );
+            // find the node and get the variableScopeInstance and insert the
+            // variable..
+            Collection<NodeInstance> nodeInstances = nodeInstanceContainer.getNodeInstances();
+            for ( NodeInstance nodeInstance : nodeInstances ) {
+                if ( nodeInstance.getId() == nodeInstanceId ) {
+                    parentIds.remove( 0 );
+                    if ( !(nodeInstance instanceof NodeInstanceContainer) ) {
+                        throw new IllegalArgumentException( "Restoring variable " + variableName + " but node found is not a node instance container:" + nodeInstance );
+                    }
+                    restoreVariable( variableInfo,
+                                     parentIds,
+                                     variableName,
+                                     (NodeInstanceContainer) nodeInstance );
+                }
+                return;
+            }
+            throw new IllegalArgumentException( "Could not find node instance " + nodeInstanceId + " in " + nodeInstanceContainer );
+        }
+    }
+
+    private ProcessInstanceMarshaller getMarshallerFromContext(MarshallerReaderContext context) throws IOException {
+        ObjectInputStream stream = context.stream;
+        String processInstanceType = stream.readUTF();
+        return ProcessMarshallerRegistry.INSTANCE.getMarshaller( processInstanceType );
+    }
+
+    private void saveProcessInstanceType(MarshallerWriteContext context,
+                                         ProcessInstance processInstance,
+                                         String processInstanceType) throws IOException {
+        ObjectOutputStream stream = context.stream;
+        // saves the processInstance type first
+        stream.writeUTF( processInstanceType );
+    }
+
+    @PreUpdate
+    public void update() {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        boolean variablesChanged = false;
+        try {
+            MarshallerWriteContext context = new MarshallerWriteContext( baos,
+                                                                         null,
+                                                                         null,
+                                                                         null,
+                                                                         null );
+            String processType = ((ProcessInstanceImpl) processInstance).getProcess().getType();
+            saveProcessInstanceType( context,
+                                     processInstance,
+                                     processType );
+            ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller( processType );
+            externalVariables = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy().isEnabled();
+            marshaller.writeProcessInstance( context,
+                                             processInstance,
+                                             !externalVariables );
+            if ( externalVariables ) {
+                variablesChanged = persistVariables();
+            }
+            context.close();
+        } catch ( IOException e ) {
+            throw new IllegalArgumentException( "IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage() );
+        }
+        byte[] newByteArray = baos.toByteArray();
+        if ( variablesChanged || !Arrays.equals( newByteArray,
+                                                 processInstanceByteArray ) ) {
+            this.state = processInstance.getState();
+            this.lastModificationDate = new Date();
+            this.processInstanceByteArray = newByteArray;
+            this.eventTypes.clear();
+            for ( String type : processInstance.getEventTypes() ) {
+                eventTypes.add( type );
+            }
+        }
+    }
+
+    private boolean persistVariables() {
+        // Get Process Variables
+        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((WorkflowProcessInstanceImpl) this.processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
+        Map<String, Object> processVariables = variableScopeInstance.getVariables();
+        Map<String, VariableInstanceInfo> newVariables = new HashMap<String, VariableInstanceInfo>();
+        // persist process variables
+        persist( processVariables,
+                 "",
+                 newVariables );
+        // persist variables in nested variable scopes
+        Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
+        if ( nodeInstances.size() > 0 ) {
+            persistNodeVariables( nodeInstances,
+                                  "",
+                                  newVariables );
+        }
+        if ( newVariables.size() > 0 || this.variables.size() > 0 ) {
+            // clear variables so unnecessary values are removed
+            this.variables.clear();
+            this.variables.putAll( newVariables );
+            // TODO: how can I know that no variables were changed?
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private void persist(Map<String, Object> variables,
+                         String prefix,
+                         Map<String, VariableInstanceInfo> newVariables) {
+        VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy();
+        for ( Map.Entry<String, Object> entries : variables.entrySet() ) {
+            String variableName = prefix + entries.getKey();
+            Object value = entries.getValue();
+            VariableInstanceInfo oldValue = this.variables.get( variableName );
+            VariableInstanceInfo variable = persistenceStrategy.persistVariable( variableName,
+                                                                                 value,
+                                                                                 oldValue,
+                                                                                 this.env );
+
+            if ( variable != null ) {
+                System.out.println( "<<<<< Persisting variable " + variableName + " = " + value );
+                newVariables.put( variableName,
+                                  variable );
+            } else {
+                System.out.println( "<<<<< Variable " + variableName + " not persisted (value null)" );
+            }
+        }
+    }
+
+    private void persistNodeVariables(Collection<NodeInstance> nodeInstances,
+                                      String parentPrefix,
+                                      Map<String, VariableInstanceInfo> newVariables) {
+        for ( NodeInstance nodeInstance : nodeInstances ) {
+            String prefix = parentPrefix + nodeInstance.getId() + VARIABLE_SEPARATOR;
+            if ( nodeInstance instanceof ContextInstanceContainer ) {
+                List<ContextInstance> variableScopeInstances = ((ContextInstanceContainer) nodeInstance).getContextInstances( VariableScope.VARIABLE_SCOPE );
+                if ( variableScopeInstances != null ) {
+                    for ( ContextInstance contextInstance : variableScopeInstances ) {
+                        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) contextInstance;
+                        persist( variableScopeInstance.getVariables(),
+                                 prefix,
+                                 newVariables );
+                    }
+                }
+            }
+            if ( nodeInstance instanceof NodeInstanceContainer ) {
+                Collection<NodeInstance> nodeInstancesInsideTheContainer = ((NodeInstanceContainer) nodeInstance).getNodeInstances();
+                persistNodeVariables( nodeInstancesInsideTheContainer,
+                                      prefix,
+                                      newVariables );
+            }
+        }
+    }
+
+    public Map<String, VariableInstanceInfo> getVariables() {
+        return variables;
+    }
+
+    public void setVariables(Map<String, VariableInstanceInfo> variables) {
+        this.variables = variables;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( obj == null ) {
+            return false;
+        }
+        if ( getClass() != obj.getClass() ) {
+            return false;
+        }
+        final ProcessInstanceInfo other = (ProcessInstanceInfo) obj;
+        if ( this.processInstanceId != other.processInstanceId && (this.processInstanceId == null || !this.processInstanceId.equals( other.processInstanceId )) ) {
+            return false;
+        }
+        if ( this.version != other.version ) {
+            return false;
+        }
+        if ( (this.processId == null) ? (other.processId != null) : !this.processId.equals( other.processId ) ) {
+            return false;
+        }
+        if ( this.startDate != other.startDate && (this.startDate == null || !this.startDate.equals( other.startDate )) ) {
+            return false;
+        }
+        if ( this.lastReadDate != other.lastReadDate && (this.lastReadDate == null || !this.lastReadDate.equals( other.lastReadDate )) ) {
+            return false;
+        }
+        if ( this.lastModificationDate != other.lastModificationDate && (this.lastModificationDate == null || !this.lastModificationDate.equals( other.lastModificationDate )) ) {
+            return false;
+        }
+        if ( this.state != other.state ) {
+            return false;
+        }
+        if ( !Arrays.equals( this.processInstanceByteArray,
+                             other.processInstanceByteArray ) ) {
+            return false;
+        }
+        if ( this.eventTypes != other.eventTypes && (this.eventTypes == null || !this.eventTypes.equals( other.eventTypes )) ) {
+            return false;
+        }
+        if ( this.processInstance != other.processInstance && (this.processInstance == null || !this.processInstance.equals( other.processInstance )) ) {
+            return false;
+        }
+        if ( this.env != other.env && (this.env == null || !this.env.equals( other.env )) ) {
+            return false;
+        }
+        if ( this.variables != other.variables && (this.variables == null || !this.variables.equals( other.variables )) ) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 61 * hash + (this.processInstanceId != null ? this.processInstanceId.hashCode() : 0);
+        hash = 61 * hash + this.version;
+        hash = 61 * hash + (this.processId != null ? this.processId.hashCode() : 0);
+        hash = 61 * hash + (this.startDate != null ? this.startDate.hashCode() : 0);
+        hash = 61 * hash + (this.lastReadDate != null ? this.lastReadDate.hashCode() : 0);
+        hash = 61 * hash + (this.lastModificationDate != null ? this.lastModificationDate.hashCode() : 0);
+        hash = 61 * hash + this.state;
+        hash = 61 * hash + Arrays.hashCode( this.processInstanceByteArray );
+        hash = 61 * hash + (this.eventTypes != null ? this.eventTypes.hashCode() : 0);
+        hash = 61 * hash + (this.processInstance != null ? this.processInstance.hashCode() : 0);
+        hash = 61 * hash + (this.env != null ? this.env.hashCode() : 0);
+        hash = 61 * hash + (this.variables != null ? this.variables.hashCode() : 0);
+        return hash;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntity.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,87 @@
+package org.drools.persistence.session;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class MyEntity implements Serializable {
+
+
+	private static final long serialVersionUID = 510l;
+	
+	@Id @GeneratedValue(strategy=GenerationType.AUTO)
+    private Long id;
+    private String test;
+
+    public MyEntity(){}
+
+    public MyEntity(String string) {
+        this.test= string;
+    }
+
+    /**
+     * @return the id
+     */
+    public Long getId() {
+        return id;
+    }
+
+    /**
+     * @param id the id to set
+     */
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the test
+     */
+    public String getTest() {
+        return test;
+    }
+
+    /**
+     * @param test the test to set
+     */
+    public void setTest(String test) {
+        this.test = test;
+    }
+    public String toString(){
+        return "VARIABLE: " +this.getId() + " - " + this.getTest();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyEntity other = (MyEntity) obj;
+        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
+            return false;
+        }
+        if ((this.test == null) ? (other.test != null) : !this.test.equals(other.test)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 41 * hash + (this.test != null ? this.test.hashCode() : 0);
+        return hash;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityMethods.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityMethods.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityMethods.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,86 @@
+package org.drools.persistence.session;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class MyEntityMethods implements Serializable {
+	private static final long serialVersionUID = 510l;
+	
+	
+    private Long id;
+    private String test;
+
+    public MyEntityMethods(){}
+
+    public MyEntityMethods(String string) {
+        this.test= string;
+    }
+
+    /**
+     * @return the id
+     */
+    @Id @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    /**
+     * @param id the id to set
+     */
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the test
+     */
+    public String getTest() {
+        return test;
+    }
+
+    /**
+     * @param test the test to set
+     */
+    public void setTest(String test) {
+        this.test = test;
+    }
+    public String toString(){
+        return "VARIABLE: " +this.getId() + " - " + this.getTest();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyEntityMethods other = (MyEntityMethods) obj;
+        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
+            return false;
+        }
+        if ((this.test == null) ? (other.test != null) : !this.test.equals(other.test)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 41 * hash + (this.test != null ? this.test.hashCode() : 0);
+        return hash;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityOnlyFields.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityOnlyFields.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyEntityOnlyFields.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,60 @@
+package org.drools.persistence.session;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class MyEntityOnlyFields implements Serializable {
+
+
+	private static final long serialVersionUID = 510l;
+	
+	@Id @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long id;
+    public String test;
+
+    public MyEntityOnlyFields(){}
+
+    public MyEntityOnlyFields(String string) {
+        this.test= string;
+    }
+    
+    public String toString(){
+        return "VARIABLE: " + id + " - " + test;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyEntityOnlyFields other = (MyEntityOnlyFields) obj;
+        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
+            return false;
+        }
+        if ((this.test == null) ? (other.test != null) : !this.test.equals(other.test)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 5;
+        hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
+        hash = 41 * hash + (this.test != null ? this.test.hashCode() : 0);
+        return hash;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,10 @@
+package org.drools.persistence.session;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class MySubEntity extends MyEntity {
+
+	private static final long serialVersionUID = 510l;
+	
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,10 @@
+package org.drools.persistence.session;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class MySubEntityMethods extends MyEntityMethods {
+	
+	private static final long serialVersionUID = 510l;
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/MyVariableSerializable.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,59 @@
+package org.drools.persistence.session;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MyVariableSerializable implements Serializable {
+
+	private static final long serialVersionUID = 510l;
+	
+	private String text = "";
+
+    public MyVariableSerializable(String string) {
+        this.text = string;
+    }
+
+    /**
+     * @return the text
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * @param text the text to set
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MyVariableSerializable other = (MyVariableSerializable) obj;
+        if ((this.text == null) ? (other.text != null) : !this.text.equals(other.text)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 37 * hash + (this.text != null ? this.text.hashCode() : 0);
+        return hash;
+    }
+
+    public String toString(){
+        return "Serializable Variable: "+this.getText();
+    }
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,814 @@
+package org.drools.persistence.session;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+
+import javax.naming.InitialContext;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.UserTransaction;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.xml.DOMConfigurator;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.SessionConfiguration;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.command.runtime.process.GetProcessInstanceCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.ProcessBuilder;
+import org.drools.compiler.ProcessBuilderImpl;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.process.core.timer.Timer;
+import org.drools.rule.Package;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+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.SubProcessNode;
+import org.drools.workflow.core.node.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.workflow.instance.node.SubProcessNodeInstance;
+import org.h2.tools.DeleteDbFiles;
+import org.h2.tools.Server;
+
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
+public class SingleSessionCommandServiceTest extends TestCase {
+
+	private PoolingDataSource ds1;
+	private EntityManagerFactory emf;
+	private static Server h2Server;
+    
+    static {
+    	try {
+			DeleteDbFiles.execute("", "JPADroolsFlow", true);
+			h2Server = Server.createTcpServer(new String[0]);
+			h2Server.start();
+		} catch (SQLException e) {
+			throw new RuntimeException("can't start h2 server db",e);
+		}
+		DOMConfigurator.configure(SingleSessionCommandServiceTest.class.getResource("/log4j.xml"));
+    }
+    
+    @Override
+    protected void finalize() throws Throwable {
+    	if (h2Server != null) {
+    		h2Server.stop();
+    	}
+    	DeleteDbFiles.execute("", "JPADroolsFlow", true);
+    	super.finalize();
+    }
+    
+    protected void setUp() {
+    	
+        ds1 = new PoolingDataSource();
+        ds1.setClassName("bitronix.tm.resource.jdbc.lrc.LrcXADataSource");
+    	ds1.setUniqueName("jdbc/testDS1");
+    	ds1.setMaxPoolSize(5);
+    	ds1.setAllowLocalTransactions(true);
+    	ds1.getDriverProperties().setProperty("driverClassName", "org.h2.Driver");
+    	ds1.getDriverProperties().setProperty("url", "jdbc:h2:tcp://localhost/JPADroolsFlow");
+    	ds1.getDriverProperties().setProperty("user", "sa");
+    	ds1.getDriverProperties().setProperty("password", "");
+        
+        
+//        ds1.setUniqueName( "jdbc/testDS1" );
+//        ds1.setClassName( "org.h2.Driver" );
+//        ds1.setMaxPoolSize( 3 );
+//        ds1.setAllowLocalTransactions( true );
+//        ds1.getDriverProperties().put( "user",
+//                                       "sa" );
+//        ds1.getDriverProperties().put( "password",
+//                                       "" );
+//        ds1.getDriverProperties().put( "URL",
+//                                       "jdbc:h2:tcp://localhost/JPADroolsFlow" );
+        ds1.init();
+
+        emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+    }
+
+    protected void tearDown() {
+        emf.close();
+        ds1.close();
+    }
+
+    public void testPersistenceWorkItems() throws Exception {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+                 emf );
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
+                 TransactionManagerServices.getTransactionManager() );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+        kbase.addKnowledgePackages( kpkgs );
+
+        Properties properties = new Properties();
+        properties.setProperty( "drools.commandService",
+                                "org.drools.persistence.session.SingleSessionCommandService" );
+        properties.setProperty( "drools.processInstanceManagerFactory",
+                                "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        properties.setProperty( "drools.workItemManagerFactory",
+                                "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        properties.setProperty( "drools.processSignalManagerFactory",
+                                "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+        properties.setProperty( "drools.timerService",
+        						"org.drools.persistence.session.JpaJDKTimerService" );
+        SessionConfiguration config = new SessionConfiguration( properties );
+
+        SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+                                                                               config,
+                                                                               env );
+        int sessionId = service.getSessionId();
+
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        System.out.println( "Started process instance " + processInstance.getId() );
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+        service.dispose();
+    }
+
+    public void testPersistenceWorkItemsUserTransaction() throws Exception {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+                 emf );
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
+                 TransactionManagerServices.getTransactionManager() );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+        kbase.addKnowledgePackages( kpkgs );
+
+        Properties properties = new Properties();
+        properties.setProperty( "drools.commandService",
+                                "org.drools.persistence.session.SingleSessionCommandService" );
+        properties.setProperty( "drools.processInstanceManagerFactory",
+                                "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        properties.setProperty( "drools.workItemManagerFactory",
+                                "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        properties.setProperty( "drools.processSignalManagerFactory",
+                                "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+        properties.setProperty( "drools.timerService",
+								"org.drools.persistence.session.JpaJDKTimerService" );
+        SessionConfiguration config = new SessionConfiguration( properties );
+
+        SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+                                                                               config,
+                                                                               env );
+        int sessionId = service.getSessionId();
+
+        UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+        ut.begin();
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        System.out.println( "Started process instance " + processInstance.getId() );
+        ut.commit();
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        ut.commit();
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+        ut.commit();
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        ut.commit();
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+        ut.commit();
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        ut.commit();
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+        ut.commit();
+
+        workItem = handler.getWorkItem();
+        assertNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        ut.begin();
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        ut.commit();
+        assertNull( processInstance );
+        service.dispose();
+    }
+
+    @SuppressWarnings("unused")
+	private Collection<KnowledgePackage> getProcessWorkItems() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.TestProcess" );
+        process.setName( "TestProcess" );
+        process.setPackageName( "org.drools.test" );
+        StartNode start = new StartNode();
+        start.setId( 1 );
+        start.setName( "Start" );
+        process.addNode( start );
+        ActionNode actionNode = new ActionNode();
+        actionNode.setId( 2 );
+        actionNode.setName( "Action" );
+        DroolsConsequenceAction action = new DroolsConsequenceAction();
+        action.setDialect( "java" );
+        action.setConsequence( "System.out.println(\"Executed action\");" );
+        actionNode.setAction( action );
+        process.addNode( actionNode );
+        new ConnectionImpl( start,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        WorkItemNode workItemNode = new WorkItemNode();
+        workItemNode.setId( 3 );
+        workItemNode.setName( "WorkItem1" );
+        Work work = new WorkImpl();
+        work.setName( "MyWork" );
+        workItemNode.setWork( work );
+        process.addNode( workItemNode );
+        new ConnectionImpl( actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            workItemNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        WorkItemNode workItemNode2 = new WorkItemNode();
+        workItemNode2.setId( 4 );
+        workItemNode2.setName( "WorkItem2" );
+        work = new WorkImpl();
+        work.setName( "MyWork" );
+        workItemNode2.setWork( work );
+        process.addNode( workItemNode2 );
+        new ConnectionImpl( workItemNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            workItemNode2,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        WorkItemNode workItemNode3 = new WorkItemNode();
+        workItemNode3.setId( 5 );
+        workItemNode3.setName( "WorkItem3" );
+        work = new WorkImpl();
+        work.setName( "MyWork" );
+        workItemNode3.setWork( work );
+        process.addNode( workItemNode3 );
+        new ConnectionImpl( workItemNode2,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            workItemNode3,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        EndNode end = new EndNode();
+        end.setId( 6 );
+        end.setName( "End" );
+        process.addNode( end );
+        new ConnectionImpl( workItemNode3,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            end,
+                            Node.CONNECTION_DEFAULT_TYPE );
+
+        PackageBuilder packageBuilder = new PackageBuilder();
+        ProcessBuilderImpl processBuilder = new ProcessBuilderImpl( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
+        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
+        return list;
+    }
+
+    public void testPersistenceSubProcess() {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+                 emf );
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
+                 TransactionManagerServices.getTransactionManager() );
+
+        Properties properties = new Properties();
+        properties.setProperty( "drools.commandService",
+                                "org.drools.persistence.session.SingleSessionCommandService" );
+        properties.setProperty( "drools.processInstanceManagerFactory",
+                                "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        properties.setProperty( "drools.workItemManagerFactory",
+                                "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        properties.setProperty( "drools.processSignalManagerFactory",
+                                "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+        properties.setProperty( "drools.timerService",
+								"org.drools.persistence.session.JpaJDKTimerService" );
+        SessionConfiguration config = new SessionConfiguration( properties );
+
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package pkg = getProcessSubProcess();
+        ruleBase.addPackage( pkg );
+
+        SingleSessionCommandService service = new SingleSessionCommandService( ruleBase,
+                                                                               config,
+                                                                               env );
+        int sessionId = service.getSessionId();
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute( startProcessCommand );
+        System.out.println( "Started process instance " + processInstance.getId() );
+        long processInstanceId = processInstance.getId();
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+        		                                   ruleBase,
+                                                   config,
+                                                   env );
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
+        processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+
+        Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
+        assertEquals( 1,
+                      nodeInstances.size() );
+        SubProcessNodeInstance subProcessNodeInstance = (SubProcessNodeInstance) nodeInstances.iterator().next();
+        long subProcessInstanceId = subProcessNodeInstance.getProcessInstanceId();
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( subProcessInstanceId );
+        RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+        assertNotNull( subProcessInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   ruleBase,
+                                                   config,
+                                                   env );
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   ruleBase,
+                                                   config,
+                                                   env );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( subProcessInstanceId );
+        subProcessInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+        assertNull( subProcessInstance );
+
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
+        processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+        service.dispose();
+    }
+
+    @SuppressWarnings("unused")
+	private Package getProcessSubProcess() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.TestProcess" );
+        process.setName( "TestProcess" );
+        process.setPackageName( "org.drools.test" );
+        StartNode start = new StartNode();
+        start.setId( 1 );
+        start.setName( "Start" );
+        process.addNode( start );
+        ActionNode actionNode = new ActionNode();
+        actionNode.setId( 2 );
+        actionNode.setName( "Action" );
+        DroolsConsequenceAction action = new DroolsConsequenceAction();
+        action.setDialect( "java" );
+        action.setConsequence( "System.out.println(\"Executed action\");" );
+        actionNode.setAction( action );
+        process.addNode( actionNode );
+        new ConnectionImpl( start,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        SubProcessNode subProcessNode = new SubProcessNode();
+        subProcessNode.setId( 3 );
+        subProcessNode.setName( "SubProcess" );
+        subProcessNode.setProcessId( "org.drools.test.SubProcess" );
+        process.addNode( subProcessNode );
+        new ConnectionImpl( actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            subProcessNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        EndNode end = new EndNode();
+        end.setId( 4 );
+        end.setName( "End" );
+        process.addNode( end );
+        new ConnectionImpl( subProcessNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            end,
+                            Node.CONNECTION_DEFAULT_TYPE );
+
+        PackageBuilder packageBuilder = new PackageBuilder();
+        ProcessBuilderImpl processBuilder = new ProcessBuilderImpl( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+
+        process = new RuleFlowProcess();
+        process.setId( "org.drools.test.SubProcess" );
+        process.setName( "SubProcess" );
+        process.setPackageName( "org.drools.test" );
+        start = new StartNode();
+        start.setId( 1 );
+        start.setName( "Start" );
+        process.addNode( start );
+        actionNode = new ActionNode();
+        actionNode.setId( 2 );
+        actionNode.setName( "Action" );
+        action = new DroolsConsequenceAction();
+        action.setDialect( "java" );
+        action.setConsequence( "System.out.println(\"Executed action\");" );
+        actionNode.setAction( action );
+        process.addNode( actionNode );
+        new ConnectionImpl( start,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        WorkItemNode workItemNode = new WorkItemNode();
+        workItemNode.setId( 3 );
+        workItemNode.setName( "WorkItem1" );
+        Work work = new WorkImpl();
+        work.setName( "MyWork" );
+        workItemNode.setWork( work );
+        process.addNode( workItemNode );
+        new ConnectionImpl( actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            workItemNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        end = new EndNode();
+        end.setId( 6 );
+        end.setName( "End" );
+        process.addNode( end );
+        new ConnectionImpl( workItemNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            end,
+                            Node.CONNECTION_DEFAULT_TYPE );
+
+        processBuilder.buildProcess( process,
+                                     null );
+        return packageBuilder.getPackage();
+    }
+
+    public void testPersistenceTimer() throws Exception {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+                 emf );
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
+                 TransactionManagerServices.getTransactionManager() );
+
+        Properties properties = new Properties();
+        properties.setProperty( "drools.commandService",
+                                "org.drools.persistence.session.SingleSessionCommandService" );
+        properties.setProperty( "drools.processInstanceManagerFactory",
+                                "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        properties.setProperty( "drools.workItemManagerFactory",
+                                "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        properties.setProperty( "drools.processSignalManagerFactory",
+                                "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+        properties.setProperty( "drools.timerService",
+								"org.drools.persistence.session.JpaJDKTimerService" );
+        SessionConfiguration config = new SessionConfiguration( properties );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        Collection<KnowledgePackage> kpkgs = getProcessTimer();
+        kbase.addKnowledgePackages( kpkgs );
+
+        SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+                                                                               config,
+                                                                               env );
+        int sessionId = service.getSessionId();
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        System.out.println( "Started process instance " + processInstance.getId() );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        Thread.sleep( 3000 );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+    }
+
+    @SuppressWarnings("unused")
+	private List<KnowledgePackage> getProcessTimer() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.TestProcess" );
+        process.setName( "TestProcess" );
+        process.setPackageName( "org.drools.test" );
+        StartNode start = new StartNode();
+        start.setId( 1 );
+        start.setName( "Start" );
+        process.addNode( start );
+        TimerNode timerNode = new TimerNode();
+        timerNode.setId( 2 );
+        timerNode.setName( "Timer" );
+        Timer timer = new Timer();
+        timer.setDelay( "2000" );
+        timerNode.setTimer( timer );
+        process.addNode( timerNode );
+        new ConnectionImpl( start,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            timerNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        ActionNode actionNode = new ActionNode();
+        actionNode.setId( 3 );
+        actionNode.setName( "Action" );
+        DroolsConsequenceAction action = new DroolsConsequenceAction();
+        action.setDialect( "java" );
+        action.setConsequence( "System.out.println(\"Executed action\");" );
+        actionNode.setAction( action );
+        process.addNode( actionNode );
+        new ConnectionImpl( timerNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        EndNode end = new EndNode();
+        end.setId( 6 );
+        end.setName( "End" );
+        process.addNode( end );
+        new ConnectionImpl( actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            end,
+                            Node.CONNECTION_DEFAULT_TYPE );
+
+        PackageBuilder packageBuilder = new PackageBuilder();
+        ProcessBuilderImpl processBuilder = new ProcessBuilderImpl( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
+        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
+        return list;
+    }
+
+    public void testPersistenceTimer2() throws Exception {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+                 emf );
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
+                 TransactionManagerServices.getTransactionManager() );
+
+        Properties properties = new Properties();
+        properties.setProperty( "drools.commandService",
+                                "org.drools.persistence.session.SingleSessionCommandService" );
+        properties.setProperty( "drools.processInstanceManagerFactory",
+                                "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        properties.setProperty( "drools.workItemManagerFactory",
+                                "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        properties.setProperty( "drools.processSignalManagerFactory",
+                                "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+        properties.setProperty( "drools.timerService",
+								"org.drools.persistence.session.JpaJDKTimerService" );
+        SessionConfiguration config = new SessionConfiguration( properties );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        Collection<KnowledgePackage> kpkgs = getProcessTimer2();
+        kbase.addKnowledgePackages( kpkgs );
+
+        SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+                                                                               config,
+                                                                               env );
+        int sessionId = service.getSessionId();
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        System.out.println( "Started process instance " + processInstance.getId() );
+
+        Thread.sleep( 2000 );
+
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
+                                                   config,
+                                                   env );
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+    }
+
+    @SuppressWarnings("unused")
+	private List<KnowledgePackage> getProcessTimer2() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.TestProcess" );
+        process.setName( "TestProcess" );
+        process.setPackageName( "org.drools.test" );
+        StartNode start = new StartNode();
+        start.setId( 1 );
+        start.setName( "Start" );
+        process.addNode( start );
+        TimerNode timerNode = new TimerNode();
+        timerNode.setId( 2 );
+        timerNode.setName( "Timer" );
+        Timer timer = new Timer();
+        timer.setDelay( "0" );
+        timerNode.setTimer( timer );
+        process.addNode( timerNode );
+        new ConnectionImpl( start,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            timerNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        ActionNode actionNode = new ActionNode();
+        actionNode.setId( 3 );
+        actionNode.setName( "Action" );
+        DroolsConsequenceAction action = new DroolsConsequenceAction();
+        action.setDialect( "java" );
+        action.setConsequence( "try { Thread.sleep(1000); } catch (Throwable t) {} System.out.println(\"Executed action\");" );
+        actionNode.setAction( action );
+        process.addNode( actionNode );
+        new ConnectionImpl( timerNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE );
+        EndNode end = new EndNode();
+        end.setId( 6 );
+        end.setName( "End" );
+        process.addNode( end );
+        new ConnectionImpl( actionNode,
+                            Node.CONNECTION_DEFAULT_TYPE,
+                            end,
+                            Node.CONNECTION_DEFAULT_TYPE );
+
+        PackageBuilder packageBuilder = new PackageBuilder();
+        ProcessBuilderImpl processBuilder = new ProcessBuilderImpl( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
+        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
+        return list;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/TestWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/TestWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/TestWorkItemHandler.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,41 @@
+package org.drools.persistence.session;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class TestWorkItemHandler implements WorkItemHandler {
+
+	private static TestWorkItemHandler INSTANCE = new TestWorkItemHandler();
+	
+	private WorkItem workItem;
+	private WorkItem aborted;
+	
+	private TestWorkItemHandler() {
+	}
+	
+	public static TestWorkItemHandler getInstance() {
+		return INSTANCE;
+	}
+	
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		this.workItem = workItem;
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+		this.aborted = workItem;
+	}
+	
+	public WorkItem getWorkItem() {
+		WorkItem result = workItem;
+		workItem = null;
+		return result;
+	}
+
+	public WorkItem getAbortedWorkItem() {
+		WorkItem result = aborted;
+		aborted = null;
+		return result;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariableCheckerTestWorkItemHandler.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,33 @@
+package org.drools.persistence.session;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class VariableCheckerTestWorkItemHandler implements WorkItemHandler {
+
+	private static VariableCheckerTestWorkItemHandler INSTANCE = new VariableCheckerTestWorkItemHandler();
+	
+	private WorkItem workItem;
+	
+	private VariableCheckerTestWorkItemHandler() {
+	}
+	
+	public static VariableCheckerTestWorkItemHandler getInstance() {
+		return INSTANCE;
+	}
+	
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		this.workItem = workItem;
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+	}
+	
+	public WorkItem getWorkItem() {
+		WorkItem result = workItem;
+		workItem = null;
+		return result;
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,428 @@
+package org.drools.persistence.session;
+
+import bitronix.tm.TransactionManagerServices;
+import java.util.HashMap;
+import java.util.List;
+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.persistence.processinstance.VariablePersistenceStrategyFactory;
+import org.drools.persistence.processinstance.persisters.JPAVariablePersister;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+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 bitronix.tm.resource.jdbc.PoolingDataSource;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+
+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();
+        VariablePersistenceStrategyFactory.getVariablePersistenceStrategy()
+        	.setPersister("javax.persistence.Entity",
+				"org.drools.persistence.processinstance.persisters.JPAVariablePersister");
+        VariablePersistenceStrategyFactory.getVariablePersistenceStrategy()
+	    	.setPersister("java.io.Serializable",
+				"org.drools.persistence.processinstance.persisters.SerializableVariablePersister");
+    }
+
+    @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();
+
+        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 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 );
+
+        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 with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test Entity with annotations in methods", ((MyEntityMethods) processInstance.getVariable("m")).getTest());
+        assertEquals("This is a test Entity with annotations in fields and without accesors methods", ((MyEntityOnlyFields) processInstance.getVariable("f")).test);
+        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 ###");
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        
+        System.out.println("### 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);
+        }
+        
+        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 with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test Entity with annotations in methods", ((MyEntityMethods) processInstance.getVariable("m")).getTest());
+        assertEquals("This is a test Entity with annotations in fields and without accesors methods", ((MyEntityOnlyFields) processInstance.getVariable("f")).test);
+        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 ###");
+		ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+
+        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", processInstance.getVariable("x"));
+        assertEquals("This is a test Entity with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest());
+        assertEquals("This is a test Entity with annotations in methods", ((MyEntityMethods) processInstance.getVariable("m")).getTest());
+        assertEquals("This is a test Entity with annotations in fields and without accesors methods", ((MyEntityOnlyFields) processInstance.getVariable("f")).test);
+        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 ###");
+        ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+
+        workItem = handler.getWorkItem();
+        assertNull(workItem);
+        
+        result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+        //This was 6.. but I change it to 0 because all the variables will go away with the process instance..
+        //we need to change that to leave the variables there??? 
+        assertEquals(0, result.size());
+
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id, kbase, null, env);
+        processInstance = (WorkflowProcessInstance)
+			ksession.getProcessInstance(processInstance.getId());
+        assertNull(processInstance);
+    }
+    
+    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() );
+
+        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 );
+
+        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 );
+    }
+    
+    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() );
+
+        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 );
+
+        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();
+        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 );
+    }
+    
+    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();
+    	subEntity.setId(3L);
+    	assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
+    }
+    
+    public void testEntityWithSuperClassAnnotationMethod() throws Exception {
+    	MySubEntityMethods subEntity = new MySubEntityMethods();
+    	subEntity.setId(3L);
+    	assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/EventsProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/EventsProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/EventsProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,46 @@
+<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <workItem id="2" name="WorkItem1" >
+      <work name="MyWork" >
+      </work>
+    </workItem>
+    <eventNode id="3" name="Message" >
+      <eventFilters>
+        <eventFilter type="eventType" eventType="MyEvent1" />
+      </eventFilters>
+    </eventNode>
+    <actionNode id="4" name="Action1" >
+        <action type="expression" dialect="java" >System.out.println("Executed action1");</action>
+    </actionNode>
+    <eventNode id="5" name="Message" >
+      <eventFilters>
+        <eventFilter type="eventType" eventType="MyEvent2" />
+      </eventFilters>
+    </eventNode>
+    <actionNode id="6" name="Action2" >
+        <action type="expression" dialect="java" >System.out.println("Executed action2");</action>
+    </actionNode>
+    <join id="7" name="AND" type="1" />
+    <end id="8" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="7" />
+    <connection from="3" to="4" />
+    <connection from="4" to="7" />
+    <connection from="5" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="8" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/MyWorkItemHandlers.conf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,12 @@
+// We use MVEL to return a List of work definitions
+// The properties of the work definitions are specified as a Map<String, Object>
+// The allowed properties are name, parameters, displayName, icon and customEditor
+// The returned result should thus be of type List<Map<String, Object>>
+import org.drools.persistence.session.TestWorkItemHandler;
+
+[
+
+  "MyWork" : TestWorkItemHandler.getInstance(),
+  "Human Task" : TestWorkItemHandler.getInstance()
+      
+]
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/drools.session.conf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/drools.session.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/drools.session.conf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,5 @@
+drools.workItemHandlers = MyWorkItemHandlers.conf
+#drools.commandService = org.drools.persistence.session.SingleSessionCommandService
+#drools.processInstanceManagerFactory = org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory
+#drools.workItemManagerFactory = org.drools.persistence.processinstance.JPAWorkItemManagerFactory
+#drools.processSignalManagerFactory = org.drools.persistence.processinstance.JPASignalManagerFactory
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/orm.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">  
+      <named-query name="ProcessInstancesWaitingForEvent">
+          <query>
+select 
+    processInstanceInfo.processInstanceId
+from 
+    ProcessInstanceInfo processInstanceInfo
+where
+    :type in elements(processInstanceInfo.eventTypes)
+          </query>
+      </named-query>
+</entity-mappings>

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/META-INF/persistence.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd    http://java.sun.com/xml/ns/persistence/orm     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+ <!--persistence-unit name="ProcessService">
+  <jta-data-source>java:/DefaultDS</jta-data-source>
+  <properties>
+   <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+  </properties>
+ </persistence-unit-->
+    <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <jta-data-source>jdbc/testDS1</jta-data-source>        
+        <class>org.drools.persistence.session.SessionInfo</class>
+    <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+    <class>org.drools.persistence.session.MyEntity</class>
+    <class>org.drools.persistence.session.MyEntityMethods</class>
+    <class>org.drools.persistence.session.MyEntityOnlyFields</class>
+    <class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+    <class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+    <class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
+    <class>org.drools.persistence.processinstance.WorkItemInfo</class>
+	    <properties>
+	        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>	        
+	        <property name="hibernate.max_fetch_depth" value="3"/>
+		    <property name="hibernate.hbm2ddl.auto" value="update" />
+            <property name="hibernate.show_sql" value="false" />	
+            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
+	    </properties>        
+    </persistence-unit>
+</persistence>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,24 @@
+<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+    <imports>
+      <import name="java.util.List" />
+    </imports>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <ruleSet id="2" name="RuleSet" ruleFlowGroup="group1" />
+    <end id="3" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetRules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/RuleSetRules.drl	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,10 @@
+package org.drools.test
+
+import java.util.List
+
+rule SimpleRule
+  when
+    l: List()
+  then
+    System.out.println("Found list " + l);
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/StateProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/StateProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/StateProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,28 @@
+<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+    <imports>
+      <import name="java.util.List" />
+    </imports>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <state id="2" name="State" >
+      <constraints>
+        <constraint toNodeId="3" name="constraint" priority="1" >List()</constraint>
+      </constraints>
+    </state>
+    <end id="3" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SubProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SubProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SubProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,48 @@
+<?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="SubProcess" id="com.sample.SubProcess" package-name="com.sample" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <humanTask id="6" name="Task2" x="128" y="16" width="80" height="40" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>admin</value>
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>You need to do task 2 !</value>
+        </parameter>
+        <parameter name="Content" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value></value>
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>0</value>
+        </parameter>
+        <parameter name="Skippable" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>false</value>
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Task2</value>
+        </parameter>
+      </work>
+    </humanTask>
+    <start id="1" name="Start" x="16" y="16" width="80" height="40" />
+    <end id="3" name="End" x="240" y="16" width="80" height="40" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="6" />
+    <connection from="6" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SuperProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SuperProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/SuperProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,51 @@
+<?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="SuperProcess" id="com.sample.SuperProcess" package-name="com.sample" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <humanTask id="6" name="Task1" x="240" y="16" width="80" height="40" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>admin</value>
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>You need to do task 1 !</value>
+        </parameter>
+        <parameter name="Content" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value></value>
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>0</value>
+        </parameter>
+        <parameter name="Skippable" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>false</value>
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Task1</value>
+        </parameter>
+      </work>
+    </humanTask>
+    <start id="1" name="Start" x="16" y="52" width="80" height="40" />
+    <end id="3" name="End" x="576" y="52" width="80" height="40" />
+    <subProcess id="7" name="Flow" x="464" y="52" width="80" height="40" processId="com.sample.SubProcess" >
+    </subProcess>
+  </nodes>
+
+  <connections>
+    <connection from="1" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/TimerProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/TimerProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/TimerProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,30 @@
+<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <humanTask id="2" name="User Task" >
+      <work name="Human Task" >
+      </work>
+      <timers>
+        <timer id="1" delay="1000" >
+        <action type="expression" dialect="java" >System.out.println("Timer triggered");
+((org.drools.process.instance.ProcessInstance) kcontext.getProcessInstance()).setState(org.drools.runtime.process.ProcessInstance.STATE_ABORTED);</action>
+        </timer>
+      </timers>
+    </humanTask>
+    <end id="3" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -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

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,150 @@
+<?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>
+    <humanTask id="9" name="Human Task" >
+      <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="10" name="Action" >
+        <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

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,125 @@
+<?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="java.lang.Object" />
+      </variable>
+      <variable name="z" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="java.lang.Object" />
+      </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="java.lang.Object" />
+      </variable>
+      <variable name="c" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="java.lang.Object" />
+      </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" />
+    <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);
+System.out.println("a = " + a);
+System.out.println("b = " + b);
+System.out.println("c = " + c);
+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("c", new MyEntity("This is a changed test Entity"));
+kcontext.setVariable("b", new MyVariableSerializable("This is a changed test SerializableObject"));</action>
+    </actionNode>
+    <humanTask id="9" 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="10" 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);
+        </action>
+    </actionNode>
+  </nodes>
+
+  <connections>
+    <connection from="8" to="9" />
+    <connection from="9" to="10" />
+    <connection from="10" to="3" />
+    <connection from="1" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="8" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,203 @@
+<?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" />
+      </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="v" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value>Default</value>
+      </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" />
+    <composite id="4" name="CompositeNode" x="187" y="33" width="326" height="327" >
+    <variables>
+      <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="x" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value></value>
+      </variable>
+      <variable name="w" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value>New default</value>
+      </variable>
+    </variables>
+      <nodes>
+    <actionNode id="1" name="Action" x="31" y="62" >
+        <action type="expression" dialect="mvel" >kcontext.setVariable("x", "new String");
+kcontext.setVariable("y", new MyEntity("This is a new test Entity"));
+kcontext.setVariable("z", new MyVariableSerializable("This is a new test SerializableObject"));</action>
+    </actionNode>
+    <humanTask id="2" name="Human Task" x="122" y="61" >
+      <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="3" name="Action" x="211" y="61" >
+        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+    <composite id="7" name="CompositeNode" x="26" y="136" width="273" height="173" >
+    <variables>
+      <variable name="a" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value>Newest Default 1</value>
+      </variable>
+      <variable name="z" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value>Newest Default 2</value>
+      </variable>
+    </variables>
+      <nodes>
+    <actionNode id="1" name="Action" x="18" y="55" >
+        <action type="expression" dialect="mvel" >System.out.println("a = " + a);
+System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+    <humanTask id="2" name="Human Task" x="140" y="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="3" name="Action" x="163" y="112" >
+        <action type="expression" dialect="mvel" >System.out.println("a = " + a);
+System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+      </nodes>
+      <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+      </connections>
+      <in-ports>
+        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+      </in-ports>
+      <out-ports>
+        <out-port type="DROOLS_DEFAULT" nodeId="3" nodeOutType="DROOLS_DEFAULT" />
+      </out-ports>
+    </composite>
+      </nodes>
+      <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="7" />
+      </connections>
+      <in-ports>
+        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+      </in-ports>
+      <out-ports>
+        <out-port type="DROOLS_DEFAULT" nodeId="7" nodeOutType="DROOLS_DEFAULT" />
+      </out-ports>
+    </composite>
+    <actionNode id="5" name="Action" x="547" y="50" width="80" height="48" >
+        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+    <humanTask id="6" name="Human Task" >
+      <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="7" name="Action" >
+        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+    </actionNode>
+  </nodes>
+
+  <connections>
+    <connection from="7" to="3" />
+    <connection from="1" to="4" />
+    <connection from="4" to="5" />
+    <connection from="5" to="6" />
+    <connection from="6" to="7" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablesProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablesProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/VariablesProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,73 @@
+<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+    <variables>
+      <variable name="name" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        <value>xxx</value>
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <actionNode id="2" name="Action" >
+        <action type="expression" dialect="java" >System.out.println("Executing for " + name);</action>
+    </actionNode>
+    <workItem id="3" name="WorkItem1" >
+      <work name="MyWork" >
+      </work>
+      <mapping type="in" from="name" to="name" />
+    </workItem>
+    <actionNode id="4" name="Action" >
+        <action type="expression" dialect="java" >System.out.println("Executing for " + name);</action>
+    </actionNode>
+    <composite id="5" name="CompositeNode" >
+      <variables>
+        <variable name="text" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </variable>
+      </variables>
+      <nodes>
+        <actionNode id="1" name="Action" >
+          <action type="expression" dialect="mvel" >kcontext.setVariable("text", name);</action>
+        </actionNode>
+        <workItem id="2" name="Log" x="130" y="46" width="80" height="40" >
+          <work name="MyWork" >
+            <parameter name="Message" >
+              <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+            </parameter>
+          </work>
+          <mapping type="in" from="text" to="text" />
+        </workItem>
+        <actionNode id="3" name="Action" x="129" y="109" >
+          <action type="expression" dialect="mvel" >System.out.println("Subprocess " + text);</action>
+        </actionNode>
+      </nodes>
+      <connections>
+        <connection from="1" to="2" />
+        <connection from="2" to="3" />
+      </connections>
+      <in-ports>
+        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+      </in-ports>
+      <out-ports>
+        <out-port type="DROOLS_DEFAULT" nodeId="3" nodeOutType="DROOLS_DEFAULT" />
+      </out-ports>
+    </composite>
+    <end id="6" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="4" />
+    <connection from="4" to="5" />
+    <connection from="5" to="6" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/WorkItemsProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/WorkItemsProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/WorkItemsProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,38 @@
+<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <actionNode id="2" name="Action" >
+        <action type="expression" dialect="java" >System.out.println("Executed action");</action>
+    </actionNode>
+    <workItem id="4" name="WorkItem2" >
+      <work name="MyWork" >
+      </work>
+    </workItem>
+    <end id="6" name="End" />
+    <start id="1" name="Start" />
+    <workItem id="3" name="WorkItem1" >
+      <work name="MyWork" >
+      </work>
+    </workItem>
+    <workItem id="5" name="WorkItem3" >
+      <work name="MyWork" >
+      </work>
+    </workItem>
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="3" to="4" />
+    <connection from="5" to="6" />
+    <connection from="2" to="3" />
+    <connection from="4" to="5" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/jndi.properties
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/jndi.properties	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/jndi.properties	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1 @@
+java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/log4j.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/log4j.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out"/>
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%-4r %d{dd/MM HH:mm:ss,SSS}[%t] %-5p %c{3}.%M %x - %m%n"/>
+		</layout>
+	</appender>
+
+	<logger name="org.drools">
+		<level value="INFO"/>
+	</logger>
+	
+	<!-- logger name="org.hibernate">
+		<level value="INFO"/>
+	</logger -->
+	<root>
+		<priority value="INFO"/>
+		<appender-ref ref="CONSOLE"/>
+	</root>
+</log4j:configuration>

Added: labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/testVariables.rf
===================================================================
--- labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/testVariables.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-flow-persistence-jpa/src/test/resources/testVariables.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -0,0 +1,79 @@
+<?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="flow" id="testVariables" package-name="org.drools.examples" >
+
+  <header>
+    <variables>
+      <variable name="var1" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+      </variable>
+      <variable name="var2" >
+        <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="147" y="32" width="80" height="40" />
+ 
+    <workItem id="2" name="Log1" x="147" y="191" width="80" height="40" >
+      <work name="Log" >
+       
+      </work>
+      <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <actionNode id="3" name="Action1" x="146" y="117" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <actionNode id="4" name="Action2" x="147" y="268" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <workItem id="5" name="Log2" x="146" y="345" width="80" height="40" >
+      <work name="Log" >
+      
+      </work>
+     <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <actionNode id="6" name="Action3" x="144" y="422" width="80" height="40" >
+        <action type="expression" dialect="mvel" >
+            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
+            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
+        </action>
+    </actionNode>
+    <workItem id="7" name="Log3" x="146" y="345" width="80" height="40" >
+      <work name="Log" >
+        
+      </work>
+      <mapping type="in" from="var1" to="var1" />
+      <mapping type="in" from="var2" to="var2" />
+      <mapping type="out" from="var1" to="var1" />
+      <mapping type="out" from="var2" to="var2" />
+    </workItem>
+    <end id="8" name="End" x="145" y="494" width="80" height="40" />
+  </nodes>
+
+  <connections>
+    <connection from="3" to="2" />
+    <connection from="1" to="3" />
+    <connection from="2" to="4" />
+    <connection from="4" to="5" />
+    <connection from="5" to="6" />
+    <connection from="6" to="7" />
+    <connection from="7" to="8" />
+  </connections>
+
+</process>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-local/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-local/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-local/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -55,7 +55,7 @@
 
         <dependency>
             <groupId>org.drools</groupId>
-            <artifactId>drools-persistence-jpa</artifactId>
+            <artifactId>drools-flow-persistence-jpa</artifactId>
             <scope>test</scope>
             <type>jar</type>
         </dependency>

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-task/src/test/java/org/drools/grid/task/BaseTaskServiceTest.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1047,15 +1047,12 @@
         }
 
         public void registerWorkItemHandler(String workItemName,
-                                            WorkItemHandler handler) {
-        }
-
-        //@Override
-        public void registerWorkItemHandler(String workItemName,
                                             org.drools.runtime.process.WorkItemHandler handler) {
-            throw new UnsupportedOperationException( "Not supported yet." );
         }
 
+		public void clear() {
+		}
+
     }
 
 }

Modified: labs/jbossrules/trunk/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -63,20 +63,10 @@
        
     	<dependency>
     		<groupId>org.drools</groupId>
-    		<artifactId>drools-flow-core</artifactId>
-    	</dependency>         		  
-       
-    	<dependency>
-    		<groupId>org.drools</groupId>
     		<artifactId>drools-compiler</artifactId>
     	</dependency>         		  
 
     	<dependency>
-    		<groupId>org.drools</groupId>
-    		<artifactId>drools-flow-compiler</artifactId>
-    	</dependency>         		  
-
-    	<dependency>
     		<groupId>org.slf4j</groupId>
     		<artifactId>slf4j-api</artifactId>
     	</dependency>    

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -9,14 +9,10 @@
 import org.drools.command.CommandService;
 import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
 import org.drools.persistence.jpa.KnowledgeStoreService;
-import org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory;
-import org.drools.persistence.processinstance.JPASignalManagerFactory;
 import org.drools.persistence.processinstance.JPAWorkItemManagerFactory;
 import org.drools.persistence.session.JpaJDKTimerService;
 import org.drools.persistence.session.SingleSessionCommandService;
-import org.drools.process.instance.ProcessInstanceManagerFactory;
 import org.drools.process.instance.WorkItemManagerFactory;
-import org.drools.process.instance.event.SignalManagerFactory;
 import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.Environment;
 import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -27,10 +23,8 @@
     implements
     KnowledgeStoreService {
 
-    private Class< ? extends CommandExecutor>                commandServiceClass;
-    private Class< ? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass;
+    private Class< ? extends CommandExecutor>               commandServiceClass;
     private Class< ? extends WorkItemManagerFactory>        workItemManagerFactoryClass;
-    private Class< ? extends SignalManagerFactory>          processSignalManagerFactoryClass;
     private Class< ? extends TimerService>                  timerServiceClass;
 
     private Properties                                      configProps = new Properties();
@@ -41,9 +35,9 @@
 
     protected void setDefaultImplementations() {
         setCommandServiceClass( SingleSessionCommandService.class );
-        setProcessInstanceManagerFactoryClass( JPAProcessInstanceManagerFactory.class );
+        setProcessInstanceManagerFactoryClass( "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
         setWorkItemManagerFactoryClass( JPAWorkItemManagerFactory.class );
-        setProcessSignalManagerFactoryClass( JPASignalManagerFactory.class );
+        setProcessSignalManagerFactoryClass( "org.drools.persistence.processinstance.JPASignalManagerFactory" );
         setTimerServiceClass( JpaJDKTimerService.class );
     }
 
@@ -175,18 +169,11 @@
         return timerServiceClass;
     }
 
-    public void setProcessInstanceManagerFactoryClass(Class< ? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass) {
-        if ( processInstanceManagerFactoryClass != null ) {
-            this.processInstanceManagerFactoryClass = processInstanceManagerFactoryClass;
-            configProps.put( "drools.processInstanceManagerFactory",
-                             processInstanceManagerFactoryClass.getName() );
-        }
+    public void setProcessInstanceManagerFactoryClass(String processInstanceManagerFactoryClass) {
+        configProps.put( "drools.processInstanceManagerFactory",
+                         processInstanceManagerFactoryClass );
     }
 
-    public Class< ? extends ProcessInstanceManagerFactory> getProcessInstanceManagerFactoryClass() {
-        return processInstanceManagerFactoryClass;
-    }
-
     public void setWorkItemManagerFactoryClass(Class< ? extends WorkItemManagerFactory> workItemManagerFactoryClass) {
         if ( workItemManagerFactoryClass != null ) {
             this.workItemManagerFactoryClass = workItemManagerFactoryClass;
@@ -199,16 +186,8 @@
         return workItemManagerFactoryClass;
     }
 
-    public void setProcessSignalManagerFactoryClass(Class< ? extends SignalManagerFactory> processSignalManagerFactoryClass) {
-        if ( processSignalManagerFactoryClass != null ) {
-            this.processSignalManagerFactoryClass = processSignalManagerFactoryClass;
-            configProps.put( "drools.processSignalManagerFactory",
-                             processSignalManagerFactoryClass.getName() );
-        }
+    public void setProcessSignalManagerFactoryClass(String processSignalManagerFactoryClass) {
+        configProps.put( "drools.processSignalManagerFactory",
+                         processSignalManagerFactoryClass );
     }
-
-    public Class< ? extends SignalManagerFactory> getProcessSignalManagerFactoryClass() {
-        return processSignalManagerFactoryClass;
-    }
-
 }

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,105 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-
-import org.drools.common.InternalKnowledgeRuntime;
-import org.drools.definition.process.Process;
-import org.drools.process.instance.ProcessInstanceManager;
-import org.drools.process.instance.impl.ProcessInstanceImpl;
-import org.drools.runtime.EnvironmentName;
-import org.drools.runtime.process.ProcessInstance;
-
-public class JPAProcessInstanceManager
-    implements
-    ProcessInstanceManager {
-
-    private InternalKnowledgeRuntime kruntime;
-    private transient Map<Long, ProcessInstance> processInstances;
-
-    public void setKnowledgeRuntime(InternalKnowledgeRuntime kruntime) {
-        this.kruntime = kruntime;
-    }
-
-    public void addProcessInstance(ProcessInstance processInstance) {
-        ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance, this.kruntime.getEnvironment() );
-        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
-        em.persist( processInstanceInfo );
-        //em.refresh( processInstanceInfo  );
-//        em.flush();
-        //em.getTransaction().commit();
-        ((org.drools.process.instance.ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
-        processInstanceInfo.updateLastReadDate();
-        internalAddProcessInstance(processInstance);
-    }
-
-    public void internalAddProcessInstance(ProcessInstance processInstance) {
-    	if (this.processInstances == null) {
-        	this.processInstances = new HashMap<Long, ProcessInstance>();
-        }
-        processInstances.put(processInstance.getId(), processInstance);
-    }
-
-    public ProcessInstance getProcessInstance(long id) {
-    	org.drools.process.instance.ProcessInstance processInstance = null;
-    	if (this.processInstances != null) {
-	    	processInstance = (org.drools.process.instance.ProcessInstance) this.processInstances.get(id);
-	    	if (processInstance != null) {
-	    		return processInstance;
-	    	}
-    	}
-    	
-        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
-        ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
-                                                           id );
-        if ( processInstanceInfo == null ) {
-            return null;
-        }
-        processInstanceInfo.updateLastReadDate();
-        processInstance = (org.drools.process.instance.ProcessInstance)
-        	processInstanceInfo.getProcessInstance(kruntime, this.kruntime.getEnvironment());
-        Process process = kruntime.getKnowledgeBase().getProcess( processInstance.getProcessId() );
-        if ( process == null ) {
-            throw new IllegalArgumentException( "Could not find process " + processInstance.getProcessId() );
-        }
-        processInstance.setProcess( process );
-        if ( processInstance.getKnowledgeRuntime() == null ) {
-            processInstance.setKnowledgeRuntime( kruntime );
-            ((ProcessInstanceImpl) processInstance).reconnect();
-        }
-        return processInstance;
-    }
-
-    public Collection<ProcessInstance> getProcessInstances() {
-        return new ArrayList<ProcessInstance>();
-    }
-
-    public void removeProcessInstance(ProcessInstance processInstance) {
-        EntityManager em = (EntityManager) this.kruntime.getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
-        ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
-                                                           processInstance.getId() );
-        if ( processInstanceInfo != null ) {
-            em.remove( processInstanceInfo );
-        }
-        internalRemoveProcessInstance(processInstance);
-    }
-
-    public void internalRemoveProcessInstance(ProcessInstance processInstance) {
-    	if (this.processInstances != null) {
-            processInstances.remove( processInstance.getId() );
-        }
-    }
-    
-    public void clearProcessInstances() {
-    	if (processInstances != null) {
-    		for (ProcessInstance processInstance: new ArrayList<ProcessInstance>(processInstances.values())) {
-    			((ProcessInstanceImpl) processInstance).disconnect();
-    		}
-    	}
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManagerFactory.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,15 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import org.drools.common.InternalKnowledgeRuntime;
-import org.drools.process.instance.ProcessInstanceManager;
-import org.drools.process.instance.ProcessInstanceManagerFactory;
-
-public class JPAProcessInstanceManagerFactory implements ProcessInstanceManagerFactory {
-
-	public ProcessInstanceManager createProcessInstanceManager(InternalKnowledgeRuntime kruntime) {
-		JPAProcessInstanceManager result = new JPAProcessInstanceManager();
-		result.setKnowledgeRuntime(kruntime);
-		return result;
-	}
-
-}

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,40 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.FlushModeType;
-import javax.persistence.Query;
-
-import org.drools.common.InternalKnowledgeRuntime;
-import org.drools.process.instance.event.DefaultSignalManager;
-import org.drools.runtime.EnvironmentName;
-
-public class JPASignalManager extends DefaultSignalManager {
-
-    public JPASignalManager(InternalKnowledgeRuntime kruntime) {
-        super(kruntime);
-    }
-    
-    public void signalEvent(String type,
-                            Object event) {
-        for ( long id : getProcessInstancesForEvent( type ) ) {
-            getKnowledgeRuntime().getProcessInstance( id );
-        }
-        super.signalEvent( type,
-                           event );
-    }
-
-    @SuppressWarnings("unchecked")
-    private List<Long> getProcessInstancesForEvent(String type) {
-        EntityManager em = (EntityManager) getKnowledgeRuntime().getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
-        
-        Query processInstancesForEvent = em.createNamedQuery( "ProcessInstancesWaitingForEvent" );
-        processInstancesForEvent.setFlushMode(FlushModeType.COMMIT);
-        processInstancesForEvent.setParameter( "type",
-                                               type );
-        List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
-        return list;
-    }
-
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,13 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import org.drools.common.InternalKnowledgeRuntime;
-import org.drools.process.instance.event.SignalManager;
-import org.drools.process.instance.event.SignalManagerFactory;
-
-public class JPASignalManagerFactory implements SignalManagerFactory {
-
-	public SignalManager createSignalManager(InternalKnowledgeRuntime kruntime) {
-		return new JPASignalManager(kruntime);
-	}
-
-}

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -168,4 +168,8 @@
     		workItems.clear();
     	}
     }
+
+	public void clear() {
+		clearWorkItems();
+	}
 }

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,51 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Version;
-
- at Entity
-public class ProcessInstanceEventInfo {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    private long   id;
-
-    @Version
-    @Column(name = "OPTLOCK")
-    private int    version;
-
-    private String eventType;
-    private long   processInstanceId;
-
-    protected ProcessInstanceEventInfo() {
-    }
-    
-    public long getId() {
-        return this.id;
-    }
-    
-    public int getVersion() {
-        return this.version;
-    }    
-
-    public ProcessInstanceEventInfo(long processInstanceId,
-                                    String eventType) {
-        this.processInstanceId = processInstanceId;
-        this.eventType = eventType;
-    }
-
-    public long getProcessInstanceId() {
-        return processInstanceId;
-    }
-
-    public String getEventType() {
-        return eventType;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,426 +0,0 @@
-package org.drools.persistence.processinstance;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.Lob;
-import javax.persistence.MapKey;
-import javax.persistence.OneToMany;
-import javax.persistence.PreUpdate;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-
-import org.drools.common.InternalKnowledgeRuntime;
-import org.drools.common.InternalRuleBase;
-import org.drools.impl.InternalKnowledgeBase;
-import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.marshalling.impl.MarshallerReaderContext;
-import org.drools.marshalling.impl.MarshallerWriteContext;
-import org.drools.marshalling.impl.ProcessInstanceMarshaller;
-import org.drools.marshalling.impl.ProcessMarshallerRegistry;
-import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.ContextInstance;
-import org.drools.process.instance.ContextInstanceContainer;
-import org.drools.process.instance.ContextableInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.process.instance.impl.ProcessInstanceImpl;
-import org.drools.runtime.Environment;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.NodeInstanceContainer;
-import org.drools.runtime.process.ProcessInstance;
-import org.drools.runtime.process.WorkflowProcessInstance;
-import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
-import org.hibernate.annotations.CollectionOfElements;
-
- at Entity
-public class ProcessInstanceInfo {
-
-    private static final String               VARIABLE_SEPARATOR = ":";
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    @Column(name = "InstanceId")
-    private Long                              processInstanceId;
-
-    @Version
-    @Column(name = "OPTLOCK")
-    private int                               version;
-
-    private String                            processId;
-    private Date                              startDate;
-    private Date                              lastReadDate;
-    private Date                              lastModificationDate;
-    private int                               state;
-    // TODO How do I mark a process instance info as dirty when the process
-    // instance has changed (so that byte array is regenerated and saved) ?
-    private @Lob
-    byte[]                                    processInstanceByteArray;
-    
-//  @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-//  @JoinColumn(name = "processInstanceId")
-//  private Set<EventType>                    eventTypes         = new HashSet<EventType>();    
-    private @CollectionOfElements
-
-    @JoinTable(name = "EventTypes", joinColumns = @JoinColumn(name = "InstanceId"))
-    Set<String>                               eventTypes         = new HashSet<String>();
-    private @Transient
-    ProcessInstance                           processInstance;
-    private @Transient
-    Environment                               env;
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "processInstanceId")
-    @MapKey(name = "name")
-    private Map<String, VariableInstanceInfo> variables          = new HashMap<String, VariableInstanceInfo>();
-    private boolean                           externalVariables  = false;
-
-    protected ProcessInstanceInfo() {
-    }
-
-    public ProcessInstanceInfo(ProcessInstance processInstance) {
-        this.processInstance = processInstance;
-        this.processId = processInstance.getProcessId();
-        startDate = new Date();
-    }
-
-    public ProcessInstanceInfo(ProcessInstance processInstance,
-                               Environment env) {
-        this.processInstance = processInstance;
-        this.processId = processInstance.getProcessId();
-        startDate = new Date();
-        this.env = env;
-    }
-
-    public long getId() {
-        return processInstanceId;
-    }
-
-    public String getProcessId() {
-        return processId;
-    }
-
-    public Date getStartDate() {
-        return startDate;
-    }
-
-    public Date getLastModificationDate() {
-        return lastModificationDate;
-    }
-
-    public Date getLastReadDate() {
-        return lastReadDate;
-    }
-
-    public void updateLastReadDate() {
-        lastReadDate = new Date();
-    }
-
-    public int getState() {
-        return state;
-    }
-
-    public ProcessInstance getProcessInstance(InternalKnowledgeRuntime kruntime,
-                                              Environment env) {
-        this.env = env;
-        if ( processInstance == null ) {
-            try {
-                ByteArrayInputStream bais = new ByteArrayInputStream( processInstanceByteArray );
-                MarshallerReaderContext context = new MarshallerReaderContext( bais,
-                                                                               (InternalRuleBase) ((InternalKnowledgeBase) kruntime.getKnowledgeBase()).getRuleBase(),
-                                                                               null,
-                                                                               null );
-                ProcessInstanceMarshaller marshaller = getMarshallerFromContext( context );
-                context.wm = ((StatefulKnowledgeSessionImpl) kruntime).getInternalWorkingMemory();
-                processInstance = marshaller.readProcessInstance( context,
-                                                                  !externalVariables );
-                if ( externalVariables ) {
-                    restoreVariables();
-                }
-                context.close();
-            } catch ( IOException e ) {
-                e.printStackTrace();
-                throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage(),
-                                                    e );
-            }
-        }
-        return processInstance;
-    }
-
-    private void restoreVariables() {
-        for ( Map.Entry<String, VariableInstanceInfo> entry : variables.entrySet() ) {
-            String[] variableHierarchy = entry.getKey().split( VARIABLE_SEPARATOR );
-            // last one is variable name
-            String variableName = variableHierarchy[variableHierarchy.length - 1];
-            // other ones are parent ids
-            List<Long> parentIds = new ArrayList<Long>();
-            for ( int i = 0; i < variableHierarchy.length - 1; i++ ) {
-                parentIds.add( Long.valueOf( variableHierarchy[i] ) );
-            }
-            restoreVariable( entry.getValue(),
-                             parentIds,
-                             variableName,
-                             (WorkflowProcessInstance) processInstance );
-        }
-    }
-
-    private void restoreVariable(VariableInstanceInfo variableInfo,
-                                 List<Long> parentIds,
-                                 String variableName,
-                                 NodeInstanceContainer nodeInstanceContainer) throws NumberFormatException {
-        if ( parentIds.size() == 0 ) {
-            if ( !(nodeInstanceContainer instanceof ContextableInstance) ) {
-                throw new IllegalArgumentException( "Parent node instance is not a contextable instance: " + nodeInstanceContainer );
-            }
-            VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((ContextableInstance) nodeInstanceContainer).getContextInstance( VariableScope.VARIABLE_SCOPE );
-            VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy();
-            Object value = persistenceStrategy.getVariable( variableInfo,
-                                                            this.env );
-            System.out.println( ">>>>> Restoring variable " + variableName + " = " + value );
-            variableScopeInstance.setVariable( variableName,
-                                               value );
-        } else {
-            Long nodeInstanceId = parentIds.get( 0 );
-            // find the node and get the variableScopeInstance and insert the
-            // variable..
-            Collection<NodeInstance> nodeInstances = nodeInstanceContainer.getNodeInstances();
-            for ( NodeInstance nodeInstance : nodeInstances ) {
-                if ( nodeInstance.getId() == nodeInstanceId ) {
-                    parentIds.remove( 0 );
-                    if ( !(nodeInstance instanceof NodeInstanceContainer) ) {
-                        throw new IllegalArgumentException( "Restoring variable " + variableName + " but node found is not a node instance container:" + nodeInstance );
-                    }
-                    restoreVariable( variableInfo,
-                                     parentIds,
-                                     variableName,
-                                     (NodeInstanceContainer) nodeInstance );
-                }
-                return;
-            }
-            throw new IllegalArgumentException( "Could not find node instance " + nodeInstanceId + " in " + nodeInstanceContainer );
-        }
-    }
-
-    private ProcessInstanceMarshaller getMarshallerFromContext(MarshallerReaderContext context) throws IOException {
-        ObjectInputStream stream = context.stream;
-        String processInstanceType = stream.readUTF();
-        return ProcessMarshallerRegistry.INSTANCE.getMarshaller( processInstanceType );
-    }
-
-    private void saveProcessInstanceType(MarshallerWriteContext context,
-                                         ProcessInstance processInstance,
-                                         String processInstanceType) throws IOException {
-        ObjectOutputStream stream = context.stream;
-        // saves the processInstance type first
-        stream.writeUTF( processInstanceType );
-    }
-
-    @PreUpdate
-    public void update() {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        boolean variablesChanged = false;
-        try {
-            MarshallerWriteContext context = new MarshallerWriteContext( baos,
-                                                                         null,
-                                                                         null,
-                                                                         null,
-                                                                         null );
-            String processType = ((ProcessInstanceImpl) processInstance).getProcess().getType();
-            saveProcessInstanceType( context,
-                                     processInstance,
-                                     processType );
-            ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller( processType );
-            externalVariables = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy().isEnabled();
-            marshaller.writeProcessInstance( context,
-                                             processInstance,
-                                             !externalVariables );
-            if ( externalVariables ) {
-                variablesChanged = persistVariables();
-            }
-            context.close();
-        } catch ( IOException e ) {
-            throw new IllegalArgumentException( "IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage() );
-        }
-        byte[] newByteArray = baos.toByteArray();
-        if ( variablesChanged || !Arrays.equals( newByteArray,
-                                                 processInstanceByteArray ) ) {
-            this.state = processInstance.getState();
-            this.lastModificationDate = new Date();
-            this.processInstanceByteArray = newByteArray;
-            this.eventTypes.clear();
-            for ( String type : processInstance.getEventTypes() ) {
-                eventTypes.add( type );
-            }
-        }
-    }
-
-    private boolean persistVariables() {
-        // Get Process Variables
-        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((WorkflowProcessInstanceImpl) this.processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
-        Map<String, Object> processVariables = variableScopeInstance.getVariables();
-        Map<String, VariableInstanceInfo> newVariables = new HashMap<String, VariableInstanceInfo>();
-        // persist process variables
-        persist( processVariables,
-                 "",
-                 newVariables );
-        // persist variables in nested variable scopes
-        Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
-        if ( nodeInstances.size() > 0 ) {
-            persistNodeVariables( nodeInstances,
-                                  "",
-                                  newVariables );
-        }
-        if ( newVariables.size() > 0 || this.variables.size() > 0 ) {
-            // clear variables so unnecessary values are removed
-            this.variables.clear();
-            this.variables.putAll( newVariables );
-            // TODO: how can I know that no variables were changed?
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    private void persist(Map<String, Object> variables,
-                         String prefix,
-                         Map<String, VariableInstanceInfo> newVariables) {
-        VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy();
-        for ( Map.Entry<String, Object> entries : variables.entrySet() ) {
-            String variableName = prefix + entries.getKey();
-            Object value = entries.getValue();
-            VariableInstanceInfo oldValue = this.variables.get( variableName );
-            VariableInstanceInfo variable = persistenceStrategy.persistVariable( variableName,
-                                                                                 value,
-                                                                                 oldValue,
-                                                                                 this.env );
-
-            if ( variable != null ) {
-                System.out.println( "<<<<< Persisting variable " + variableName + " = " + value );
-                newVariables.put( variableName,
-                                  variable );
-            } else {
-                System.out.println( "<<<<< Variable " + variableName + " not persisted (value null)" );
-            }
-        }
-    }
-
-    private void persistNodeVariables(Collection<NodeInstance> nodeInstances,
-                                      String parentPrefix,
-                                      Map<String, VariableInstanceInfo> newVariables) {
-        for ( NodeInstance nodeInstance : nodeInstances ) {
-            String prefix = parentPrefix + nodeInstance.getId() + VARIABLE_SEPARATOR;
-            if ( nodeInstance instanceof ContextInstanceContainer ) {
-                List<ContextInstance> variableScopeInstances = ((ContextInstanceContainer) nodeInstance).getContextInstances( VariableScope.VARIABLE_SCOPE );
-                if ( variableScopeInstances != null ) {
-                    for ( ContextInstance contextInstance : variableScopeInstances ) {
-                        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) contextInstance;
-                        persist( variableScopeInstance.getVariables(),
-                                 prefix,
-                                 newVariables );
-                    }
-                }
-            }
-            if ( nodeInstance instanceof NodeInstanceContainer ) {
-                Collection<NodeInstance> nodeInstancesInsideTheContainer = ((NodeInstanceContainer) nodeInstance).getNodeInstances();
-                persistNodeVariables( nodeInstancesInsideTheContainer,
-                                      prefix,
-                                      newVariables );
-            }
-        }
-    }
-
-    public Map<String, VariableInstanceInfo> getVariables() {
-        return variables;
-    }
-
-    public void setVariables(Map<String, VariableInstanceInfo> variables) {
-        this.variables = variables;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if ( obj == null ) {
-            return false;
-        }
-        if ( getClass() != obj.getClass() ) {
-            return false;
-        }
-        final ProcessInstanceInfo other = (ProcessInstanceInfo) obj;
-        if ( this.processInstanceId != other.processInstanceId && (this.processInstanceId == null || !this.processInstanceId.equals( other.processInstanceId )) ) {
-            return false;
-        }
-        if ( this.version != other.version ) {
-            return false;
-        }
-        if ( (this.processId == null) ? (other.processId != null) : !this.processId.equals( other.processId ) ) {
-            return false;
-        }
-        if ( this.startDate != other.startDate && (this.startDate == null || !this.startDate.equals( other.startDate )) ) {
-            return false;
-        }
-        if ( this.lastReadDate != other.lastReadDate && (this.lastReadDate == null || !this.lastReadDate.equals( other.lastReadDate )) ) {
-            return false;
-        }
-        if ( this.lastModificationDate != other.lastModificationDate && (this.lastModificationDate == null || !this.lastModificationDate.equals( other.lastModificationDate )) ) {
-            return false;
-        }
-        if ( this.state != other.state ) {
-            return false;
-        }
-        if ( !Arrays.equals( this.processInstanceByteArray,
-                             other.processInstanceByteArray ) ) {
-            return false;
-        }
-        if ( this.eventTypes != other.eventTypes && (this.eventTypes == null || !this.eventTypes.equals( other.eventTypes )) ) {
-            return false;
-        }
-        if ( this.processInstance != other.processInstance && (this.processInstance == null || !this.processInstance.equals( other.processInstance )) ) {
-            return false;
-        }
-        if ( this.env != other.env && (this.env == null || !this.env.equals( other.env )) ) {
-            return false;
-        }
-        if ( this.variables != other.variables && (this.variables == null || !this.variables.equals( other.variables )) ) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 7;
-        hash = 61 * hash + (this.processInstanceId != null ? this.processInstanceId.hashCode() : 0);
-        hash = 61 * hash + this.version;
-        hash = 61 * hash + (this.processId != null ? this.processId.hashCode() : 0);
-        hash = 61 * hash + (this.startDate != null ? this.startDate.hashCode() : 0);
-        hash = 61 * hash + (this.lastReadDate != null ? this.lastReadDate.hashCode() : 0);
-        hash = 61 * hash + (this.lastModificationDate != null ? this.lastModificationDate.hashCode() : 0);
-        hash = 61 * hash + this.state;
-        hash = 61 * hash + Arrays.hashCode( this.processInstanceByteArray );
-        hash = 61 * hash + (this.eventTypes != null ? this.eventTypes.hashCode() : 0);
-        hash = 61 * hash + (this.processInstance != null ? this.processInstance.hashCode() : 0);
-        hash = 61 * hash + (this.env != null ? this.env.hashCode() : 0);
-        hash = 61 * hash + (this.variables != null ? this.variables.hashCode() : 0);
-        return hash;
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -23,9 +23,10 @@
 import javax.persistence.Transient;
 import javax.persistence.Version;
 
+import org.drools.marshalling.impl.InputMarshaller;
 import org.drools.marshalling.impl.MarshallerReaderContext;
 import org.drools.marshalling.impl.MarshallerWriteContext;
-import org.drools.marshalling.impl.ProcessMarshallerImpl;
+import org.drools.marshalling.impl.OutputMarshaller;
 import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
 import org.drools.process.instance.WorkItem;
 import org.drools.runtime.Environment;
@@ -106,7 +107,7 @@
                                                                                null,
                                                                                null,
                                                                                null );
-                workItem = ProcessMarshallerImpl.readWorkItem( context, !externalVariables );
+                workItem = InputMarshaller.readWorkItem( context, !externalVariables );
                  if ( externalVariables ) {
                     restoreVariables();
                 }
@@ -164,7 +165,7 @@
                                                                          null,
                                                                          null );
             externalVariables = VariablePersistenceStrategyFactory.getVariablePersistenceStrategy().isEnabled();
-            ProcessMarshallerImpl.writeWorkItem( context,
+            OutputMarshaller.writeWorkItem( context,
                                                  workItem, !externalVariables );
 
 

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2010-09-17 13:54:59 UTC (rev 35178)
@@ -18,9 +18,7 @@
 import org.drools.common.EndOperationListener;
 import org.drools.common.InternalKnowledgeRuntime;
 import org.drools.impl.KnowledgeBaseImpl;
-import org.drools.persistence.processinstance.JPAProcessInstanceManager;
 import org.drools.persistence.processinstance.JPAWorkItemManager;
-import org.drools.process.instance.InternalProcessRuntime;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -337,7 +335,7 @@
             StatefulKnowledgeSession ksession = this.service.ksession;
             // clean up cached process and work item instances
             if ( ksession != null ) {
-                ((JPAProcessInstanceManager) ((InternalProcessRuntime) ((InternalKnowledgeRuntime) ksession).getProcessRuntime()).getProcessInstanceManager()).clearProcessInstances();
+                ((InternalKnowledgeRuntime) ksession).getProcessRuntime().clearProcessInstances();
                 ((JPAWorkItemManager) ksession.getWorkItemManager()).clearWorkItems();
             }
 

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/EventsProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/EventsProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/EventsProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,46 +0,0 @@
-<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" />
-    <workItem id="2" name="WorkItem1" >
-      <work name="MyWork" >
-      </work>
-    </workItem>
-    <eventNode id="3" name="Message" >
-      <eventFilters>
-        <eventFilter type="eventType" eventType="MyEvent1" />
-      </eventFilters>
-    </eventNode>
-    <actionNode id="4" name="Action1" >
-        <action type="expression" dialect="java" >System.out.println("Executed action1");</action>
-    </actionNode>
-    <eventNode id="5" name="Message" >
-      <eventFilters>
-        <eventFilter type="eventType" eventType="MyEvent2" />
-      </eventFilters>
-    </eventNode>
-    <actionNode id="6" name="Action2" >
-        <action type="expression" dialect="java" >System.out.println("Executed action2");</action>
-    </actionNode>
-    <join id="7" name="AND" type="1" />
-    <end id="8" name="End" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="7" />
-    <connection from="3" to="4" />
-    <connection from="4" to="7" />
-    <connection from="5" to="6" />
-    <connection from="6" to="7" />
-    <connection from="7" to="8" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,24 +0,0 @@
-<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-    <imports>
-      <import name="java.util.List" />
-    </imports>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" />
-    <ruleSet id="2" name="RuleSet" ruleFlowGroup="group1" />
-    <end id="3" name="End" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetRules.drl	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/RuleSetRules.drl	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,10 +0,0 @@
-package org.drools.test
-
-import java.util.List
-
-rule SimpleRule
-  when
-    l: List()
-  then
-    System.out.println("Found list " + l);
-end
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/StateProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/StateProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/StateProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,28 +0,0 @@
-<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-    <imports>
-      <import name="java.util.List" />
-    </imports>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" />
-    <state id="2" name="State" >
-      <constraints>
-        <constraint toNodeId="3" name="constraint" priority="1" >List()</constraint>
-      </constraints>
-    </state>
-    <end id="3" name="End" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SubProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SubProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SubProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,48 +0,0 @@
-<?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="SubProcess" id="com.sample.SubProcess" package-name="com.sample" >
-
-  <header>
-  </header>
-
-  <nodes>
-    <humanTask id="6" name="Task2" x="128" y="16" width="80" height="40" >
-      <work name="Human Task" >
-        <parameter name="ActorId" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>admin</value>
-        </parameter>
-        <parameter name="Comment" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>You need to do task 2 !</value>
-        </parameter>
-        <parameter name="Content" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value></value>
-        </parameter>
-        <parameter name="Priority" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>0</value>
-        </parameter>
-        <parameter name="Skippable" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>false</value>
-        </parameter>
-        <parameter name="TaskName" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>Task2</value>
-        </parameter>
-      </work>
-    </humanTask>
-    <start id="1" name="Start" x="16" y="16" width="80" height="40" />
-    <end id="3" name="End" x="240" y="16" width="80" height="40" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="6" />
-    <connection from="6" to="3" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SuperProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SuperProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/SuperProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,51 +0,0 @@
-<?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="SuperProcess" id="com.sample.SuperProcess" package-name="com.sample" >
-
-  <header>
-  </header>
-
-  <nodes>
-    <humanTask id="6" name="Task1" x="240" y="16" width="80" height="40" >
-      <work name="Human Task" >
-        <parameter name="ActorId" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>admin</value>
-        </parameter>
-        <parameter name="Comment" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>You need to do task 1 !</value>
-        </parameter>
-        <parameter name="Content" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value></value>
-        </parameter>
-        <parameter name="Priority" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>0</value>
-        </parameter>
-        <parameter name="Skippable" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>false</value>
-        </parameter>
-        <parameter name="TaskName" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>Task1</value>
-        </parameter>
-      </work>
-    </humanTask>
-    <start id="1" name="Start" x="16" y="52" width="80" height="40" />
-    <end id="3" name="End" x="576" y="52" width="80" height="40" />
-    <subProcess id="7" name="Flow" x="464" y="52" width="80" height="40" processId="com.sample.SubProcess" >
-    </subProcess>
-  </nodes>
-
-  <connections>
-    <connection from="1" to="6" />
-    <connection from="6" to="7" />
-    <connection from="7" to="3" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/TimerProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/TimerProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/TimerProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,30 +0,0 @@
-<?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="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" />
-    <humanTask id="2" name="User Task" >
-      <work name="Human Task" >
-      </work>
-      <timers>
-        <timer id="1" delay="1000" >
-        <action type="expression" dialect="java" >System.out.println("Timer triggered");
-((org.drools.process.instance.ProcessInstance) kcontext.getProcessInstance()).setState(org.drools.runtime.process.ProcessInstance.STATE_ABORTED);</action>
-        </timer>
-      </timers>
-    </humanTask>
-    <end id="3" name="End" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VPSProcessWithWorkItems.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,161 +0,0 @@
-<?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

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,150 +0,0 @@
-<?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>
-    <humanTask id="9" name="Human Task" >
-      <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="10" name="Action" >
-        <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

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategyProcessTypeChange.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,125 +0,0 @@
-<?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="java.lang.Object" />
-      </variable>
-      <variable name="z" >
-        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="java.lang.Object" />
-      </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="java.lang.Object" />
-      </variable>
-      <variable name="c" >
-        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="java.lang.Object" />
-      </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" />
-    <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);
-System.out.println("a = " + a);
-System.out.println("b = " + b);
-System.out.println("c = " + c);
-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("c", new MyEntity("This is a changed test Entity"));
-kcontext.setVariable("b", new MyVariableSerializable("This is a changed test SerializableObject"));</action>
-    </actionNode>
-    <humanTask id="9" 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="10" 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);
-        </action>
-    </actionNode>
-  </nodes>
-
-  <connections>
-    <connection from="8" to="9" />
-    <connection from="9" to="10" />
-    <connection from="10" to="3" />
-    <connection from="1" to="6" />
-    <connection from="6" to="7" />
-    <connection from="7" to="8" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,203 +0,0 @@
-<?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" />
-      </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="v" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value>Default</value>
-      </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" />
-    <composite id="4" name="CompositeNode" x="187" y="33" width="326" height="327" >
-    <variables>
-      <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="x" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value></value>
-      </variable>
-      <variable name="w" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value>New default</value>
-      </variable>
-    </variables>
-      <nodes>
-    <actionNode id="1" name="Action" x="31" y="62" >
-        <action type="expression" dialect="mvel" >kcontext.setVariable("x", "new String");
-kcontext.setVariable("y", new MyEntity("This is a new test Entity"));
-kcontext.setVariable("z", new MyVariableSerializable("This is a new test SerializableObject"));</action>
-    </actionNode>
-    <humanTask id="2" name="Human Task" x="122" y="61" >
-      <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="3" name="Action" x="211" y="61" >
-        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
-System.out.println("w = " + w);
-System.out.println("x = " + x);
-System.out.println("y = " + y);
-System.out.println("z = " + z);</action>
-    </actionNode>
-    <composite id="7" name="CompositeNode" x="26" y="136" width="273" height="173" >
-    <variables>
-      <variable name="a" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value>Newest Default 1</value>
-      </variable>
-      <variable name="z" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value>Newest Default 2</value>
-      </variable>
-    </variables>
-      <nodes>
-    <actionNode id="1" name="Action" x="18" y="55" >
-        <action type="expression" dialect="mvel" >System.out.println("a = " + a);
-System.out.println("v = " + v);
-System.out.println("w = " + w);
-System.out.println("x = " + x);
-System.out.println("y = " + y);
-System.out.println("z = " + z);</action>
-    </actionNode>
-    <humanTask id="2" name="Human Task" x="140" y="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="3" name="Action" x="163" y="112" >
-        <action type="expression" dialect="mvel" >System.out.println("a = " + a);
-System.out.println("v = " + v);
-System.out.println("w = " + w);
-System.out.println("x = " + x);
-System.out.println("y = " + y);
-System.out.println("z = " + z);</action>
-    </actionNode>
-      </nodes>
-      <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-      </connections>
-      <in-ports>
-        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
-      </in-ports>
-      <out-ports>
-        <out-port type="DROOLS_DEFAULT" nodeId="3" nodeOutType="DROOLS_DEFAULT" />
-      </out-ports>
-    </composite>
-      </nodes>
-      <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-    <connection from="3" to="7" />
-      </connections>
-      <in-ports>
-        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
-      </in-ports>
-      <out-ports>
-        <out-port type="DROOLS_DEFAULT" nodeId="7" nodeOutType="DROOLS_DEFAULT" />
-      </out-ports>
-    </composite>
-    <actionNode id="5" name="Action" x="547" y="50" width="80" height="48" >
-        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
-System.out.println("x = " + x);
-System.out.println("y = " + y);
-System.out.println("z = " + z);</action>
-    </actionNode>
-    <humanTask id="6" name="Human Task" >
-      <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="7" name="Action" >
-        <action type="expression" dialect="mvel" >System.out.println("v = " + v);
-System.out.println("x = " + x);
-System.out.println("y = " + y);
-System.out.println("z = " + z);</action>
-    </actionNode>
-  </nodes>
-
-  <connections>
-    <connection from="7" to="3" />
-    <connection from="1" to="4" />
-    <connection from="4" to="5" />
-    <connection from="5" to="6" />
-    <connection from="6" to="7" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablesProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablesProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/VariablesProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,73 +0,0 @@
-<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-    <variables>
-      <variable name="name" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        <value>xxx</value>
-      </variable>
-    </variables>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" />
-    <actionNode id="2" name="Action" >
-        <action type="expression" dialect="java" >System.out.println("Executing for " + name);</action>
-    </actionNode>
-    <workItem id="3" name="WorkItem1" >
-      <work name="MyWork" >
-      </work>
-      <mapping type="in" from="name" to="name" />
-    </workItem>
-    <actionNode id="4" name="Action" >
-        <action type="expression" dialect="java" >System.out.println("Executing for " + name);</action>
-    </actionNode>
-    <composite id="5" name="CompositeNode" >
-      <variables>
-        <variable name="text" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-        </variable>
-      </variables>
-      <nodes>
-        <actionNode id="1" name="Action" >
-          <action type="expression" dialect="mvel" >kcontext.setVariable("text", name);</action>
-        </actionNode>
-        <workItem id="2" name="Log" x="130" y="46" width="80" height="40" >
-          <work name="MyWork" >
-            <parameter name="Message" >
-              <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-            </parameter>
-          </work>
-          <mapping type="in" from="text" to="text" />
-        </workItem>
-        <actionNode id="3" name="Action" x="129" y="109" >
-          <action type="expression" dialect="mvel" >System.out.println("Subprocess " + text);</action>
-        </actionNode>
-      </nodes>
-      <connections>
-        <connection from="1" to="2" />
-        <connection from="2" to="3" />
-      </connections>
-      <in-ports>
-        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
-      </in-ports>
-      <out-ports>
-        <out-port type="DROOLS_DEFAULT" nodeId="3" nodeOutType="DROOLS_DEFAULT" />
-      </out-ports>
-    </composite>
-    <end id="6" name="End" />
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="2" to="3" />
-    <connection from="3" to="4" />
-    <connection from="4" to="5" />
-    <connection from="5" to="6" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/WorkItemsProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/WorkItemsProcess.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/WorkItemsProcess.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,38 +0,0 @@
-<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
-
-  <header>
-  </header>
-
-  <nodes>
-    <actionNode id="2" name="Action" >
-        <action type="expression" dialect="java" >System.out.println("Executed action");</action>
-    </actionNode>
-    <workItem id="4" name="WorkItem2" >
-      <work name="MyWork" >
-      </work>
-    </workItem>
-    <end id="6" name="End" />
-    <start id="1" name="Start" />
-    <workItem id="3" name="WorkItem1" >
-      <work name="MyWork" >
-      </work>
-    </workItem>
-    <workItem id="5" name="WorkItem3" >
-      <work name="MyWork" >
-      </work>
-    </workItem>
-  </nodes>
-
-  <connections>
-    <connection from="1" to="2" />
-    <connection from="3" to="4" />
-    <connection from="5" to="6" />
-    <connection from="2" to="3" />
-    <connection from="4" to="5" />
-  </connections>
-
-</process>
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/jndi.properties
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/jndi.properties	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/jndi.properties	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1 +0,0 @@
-java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
-	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-		<param name="Target" value="System.out"/>
-		<layout class="org.apache.log4j.PatternLayout">
-			<param name="ConversionPattern" value="%-4r %d{dd/MM HH:mm:ss,SSS}[%t] %-5p %c{3}.%M %x - %m%n"/>
-		</layout>
-	</appender>
-
-	<logger name="org.drools">
-		<level value="INFO"/>
-	</logger>
-	
-	<!-- logger name="org.hibernate">
-		<level value="INFO"/>
-	</logger -->
-	<root>
-		<priority value="INFO"/>
-		<appender-ref ref="CONSOLE"/>
-	</root>
-</log4j:configuration>

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/testVariables.rf
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/testVariables.rf	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/testVariables.rf	2010-09-17 13:54:59 UTC (rev 35178)
@@ -1,79 +0,0 @@
-<?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="flow" id="testVariables" package-name="org.drools.examples" >
-
-  <header>
-    <variables>
-      <variable name="var1" >
-        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
-      </variable>
-      <variable name="var2" >
-        <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="147" y="32" width="80" height="40" />
- 
-    <workItem id="2" name="Log1" x="147" y="191" width="80" height="40" >
-      <work name="Log" >
-       
-      </work>
-      <mapping type="in" from="var1" to="var1" />
-      <mapping type="in" from="var2" to="var2" />
-      <mapping type="out" from="var1" to="var1" />
-      <mapping type="out" from="var2" to="var2" />
-    </workItem>
-    <actionNode id="3" name="Action1" x="146" y="117" width="80" height="40" >
-        <action type="expression" dialect="mvel" >
-            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
-            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
-        </action>
-    </actionNode>
-    <actionNode id="4" name="Action2" x="147" y="268" width="80" height="40" >
-        <action type="expression" dialect="mvel" >
-            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
-            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
-        </action>
-    </actionNode>
-    <workItem id="5" name="Log2" x="146" y="345" width="80" height="40" >
-      <work name="Log" >
-      
-      </work>
-     <mapping type="in" from="var1" to="var1" />
-      <mapping type="in" from="var2" to="var2" />
-      <mapping type="out" from="var1" to="var1" />
-      <mapping type="out" from="var2" to="var2" />
-    </workItem>
-    <actionNode id="6" name="Action3" x="144" y="422" width="80" height="40" >
-        <action type="expression" dialect="mvel" >
-            System.out.println("Variable Value: "+kcontext.getVariable("var1"));
-            System.out.println("Variable Value: "+kcontext.getVariable("var2"));
-        </action>
-    </actionNode>
-    <workItem id="7" name="Log3" x="146" y="345" width="80" height="40" >
-      <work name="Log" >
-        
-      </work>
-      <mapping type="in" from="var1" to="var1" />
-      <mapping type="in" from="var2" to="var2" />
-      <mapping type="out" from="var1" to="var1" />
-      <mapping type="out" from="var2" to="var2" />
-    </workItem>
-    <end id="8" name="End" x="145" y="494" width="80" height="40" />
-  </nodes>
-
-  <connections>
-    <connection from="3" to="2" />
-    <connection from="1" to="3" />
-    <connection from="2" to="4" />
-    <connection from="4" to="5" />
-    <connection from="5" to="6" />
-    <connection from="6" to="7" />
-    <connection from="7" to="8" />
-  </connections>
-
-</process>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bam/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-process/drools-bam/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -32,7 +32,7 @@
        
     	<dependency>
     		<groupId>org.drools</groupId>
-    		<artifactId>drools-persistence-jpa</artifactId>
+    		<artifactId>drools-flow-persistence-jpa</artifactId>
     		<scope>test</scope>
     	</dependency>         		  
        

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -68,7 +68,7 @@
     </dependency>
     <dependency>
       <groupId>org.drools</groupId>
-      <artifactId>drools-persistence-jpa</artifactId>
+      <artifactId>drools-flow-persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
     <!-- External dependencies -->

Modified: labs/jbossrules/trunk/drools-process/drools-gwt-server-war/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-server-war/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-server-war/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -36,7 +36,7 @@
     </dependency>
     <dependency>
       <groupId>org.drools</groupId>
-      <artifactId>drools-persistence-jpa</artifactId>
+      <artifactId>drools-flow-persistence-jpa</artifactId>
     </dependency>
     <dependency>
       <groupId>javassist</groupId>

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2010-09-17 12:20:52 UTC (rev 35177)
+++ labs/jbossrules/trunk/pom.xml	2010-09-17 13:54:59 UTC (rev 35178)
@@ -272,6 +272,7 @@
     <module>drools-ide-common</module>
     <module>drools-jsr94</module>
     <module>drools-persistence-jpa</module>
+    <module>drools-flow-persistence-jpa</module>
     <module>drools-process</module>
     <module>drools-repository</module>
     <module>drools-server</module>
@@ -1033,6 +1034,11 @@
       </dependency>
       <dependency>
         <groupId>org.drools</groupId>
+        <artifactId>drools-flow-persistence-jpa</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.drools</groupId>
         <artifactId>drools-workitems</artifactId>
         <version>${project.version}</version>
       </dependency>



More information about the jboss-svn-commits mailing list