[jboss-svn-commits] JBL Code SVN: r25445 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/persistence and 13 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 26 19:28:36 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-02-26 19:28:35 -0500 (Thu, 26 Feb 2009)
New Revision: 25445

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeServiceProvider.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/impl/
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/impl/JPAKnowledgeServiceProviderImpl.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
JBRULES-1958 Improve JPA persistence

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeService.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -0,0 +1,56 @@
+package org.drools.persistence.jpa;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseProvider;
+import org.drools.ProviderInitializationException;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.util.ProviderLocator;
+
+public class JPAKnowledgeService extends ProviderLocator {
+    private static JPAKnowledgeServiceProvider provider;
+
+    public static StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
+                                                                       KnowledgeSessionConfiguration configuration,
+                                                                       Environment environment) {
+        return getJPAKnowledgeServiceProvider().newStatefulKnowledgeSession( kbase,
+                                                                             configuration,
+                                                                             environment );
+    }
+
+    public static StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
+                                                                        KnowledgeBase kbase,
+                                                                        KnowledgeSessionConfiguration configuration,
+                                                                        Environment environment) {
+        return getJPAKnowledgeServiceProvider().loadStatefulKnowledgeSession( id,
+                                                                              kbase,
+                                                                              configuration,
+                                                                              environment );
+    }
+
+    private static synchronized void setJPAKnowledgeServiceProvider(JPAKnowledgeServiceProvider provider) {
+        JPAKnowledgeService.provider = provider;
+    }
+
+    private static synchronized JPAKnowledgeServiceProvider getJPAKnowledgeServiceProvider() {
+        if ( provider == null ) {
+            loadProvider();
+        }
+        return provider;
+    }
+
+    @SuppressWarnings("unchecked")
+    private static void loadProvider() {
+        try {
+            // we didn't find anything in properties so lets try and us reflection
+            Class<JPAKnowledgeServiceProvider> cls = (Class<JPAKnowledgeServiceProvider>) Class.forName( "org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl" );
+            setJPAKnowledgeServiceProvider( cls.newInstance() );
+        } catch ( Exception e ) {
+            throw new ProviderInitializationException( "Provider org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl could not be set.",
+                                                       e );
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeServiceProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeServiceProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/persistence/jpa/JPAKnowledgeServiceProvider.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -0,0 +1,19 @@
+package org.drools.persistence.jpa;
+
+import org.drools.KnowledgeBase;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public interface JPAKnowledgeServiceProvider {
+
+    StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
+                                                         KnowledgeSessionConfiguration configuration,
+                                                         Environment environment);
+
+    StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
+                                                          KnowledgeBase kbase,
+                                                          KnowledgeSessionConfiguration configuration,
+                                                          Environment environment);
+
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -1,7 +1,9 @@
 package org.drools.runtime;
 
 public class EnvironmentName {
-    public static final String ENTITY_MANAGER_FACTORY = "drools.emf";
-    public static final String ENTITY_MANAGER = "drools.em";
-    public static final String OBJECT_MARSHALLING_STRATEGIES = "drools.objectMarshallingStrategies";
+    public static final String ENTITY_MANAGER_FACTORY = "drools.persistence.jpa.EntityManagerFactory";
+    public static final String ENTITY_MANAGER = "drools.persistence.jpa.EntityManager";
+    public static final String TRANSACTION_MANAGER = "drools.persistence.jpa.TransactionManager";
+    public static final String OBJECT_MARSHALLING_STRATEGIES = "drools.marshalling.ObjectMarshallingStrategies";
+    public static final String GLOBALS = "drools.Globals";
 }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -63,6 +63,8 @@
     StatefulProcessSession,
     KnowledgeRuntime {
 
+    int getId();
+    
     /**
      * Releases all the current session resources, setting up the session for garbage collection.
      * This method <b>must</b> always be called after finishing using the session, or the engine

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -124,7 +124,7 @@
         return null;
     }
 
-    public long getId() {
+    public int getId() {
         // TODO Auto-generated method stub
         return 0;
     }
@@ -224,7 +224,7 @@
         
     }
 
-    public void setId(long id) {
+    public void setId(int id) {
         // TODO Auto-generated method stub
         
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -122,6 +122,12 @@
                                                                                       "realtime" ) ) );
     }
     
+    public void addProperties(Properties properties) {
+        if ( properties != null ) {
+            this.chainedProperties.addProperties( properties );
+        }        
+    }
+    
     public void setProperty(String name,
                             String value) {
         name = name.trim();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -85,7 +85,9 @@
 import org.drools.rule.TimeMachine;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.ExitPoint;
+import org.drools.runtime.Globals;
 import org.drools.runtime.KnowledgeRuntime;
 import org.drools.runtime.process.EventListener;
 import org.drools.runtime.process.WorkItemHandler;
@@ -123,7 +125,7 @@
     // ------------------------------------------------------------
     // Instance members
     // ------------------------------------------------------------
-    protected long                                                            id;
+    protected int                                                            id;
 
     /** The arguments used when adding/removing a property change listener. */
     protected Object[]                                                        addRemovePropertyChangeListenerArgs;
@@ -250,8 +252,18 @@
         this.config = config;
         this.ruleBase = ruleBase;
         this.handleFactory = handleFactory;
-        this.globalResolver = new MapGlobalResolver();
         this.environment = environment;
+        
+        Globals globals =  ( Globals ) this.environment.get( EnvironmentName.GLOBALS );
+        if ( globals != null ) {
+            if ( !(globals instanceof GlobalResolver )) {
+                this.globalResolver = new GlobalsAdapter( globals );   
+            } else {
+                this.globalResolver = ( GlobalResolver ) globals;
+            }
+        } else {
+            this.globalResolver = new MapGlobalResolver();
+        }
 
         final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
 
@@ -313,7 +325,26 @@
         initPartitionManagers();
         initTransient();
     }
+    
+    public static class GlobalsAdapter implements GlobalResolver {
+        private Globals globals;
+        
+        public GlobalsAdapter(Globals globals) {
+            this.globals = globals;
+        }
+        
+        
+        public Object resolveGlobal(String identifier) {
+            return this.globals.get( identifier );
+        }
 
+        public void setGlobal(String identifier,
+                              Object value) {
+            this.globals.set( identifier, value );
+        }
+        
+    }
+
     // ------------------------------------------------------------
     // Instance methods
     // ------------------------------------------------------------
@@ -537,11 +568,11 @@
         return this.globalResolver;
     }
 
-    public long getId() {
+    public int getId() {
         return this.id;
     }
 
-    public void setId(long id) {
+    public void setId(int id) {
         this.id = id;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -28,9 +28,9 @@
 public interface InternalWorkingMemory
     extends
     WorkingMemory {
-    public long getId();
+    public int getId();
     
-    public void setId(long id);
+    public void setId(int id);
     
     void setRuleBase(final InternalRuleBase ruleBase);
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -89,6 +89,10 @@
         this.mappedAgendaListeners = new IdentityHashMap<AgendaEventListener, AgendaEventListenerWrapper>();
         this.mappedProcessListeners = new IdentityHashMap<ProcessEventListener, ProcessEventListenerWrapper>();
     }
+    
+    public int getId() {
+        return this.session.getId();
+    }
 
     public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
         return session.getWorkingMemoryEntryPoint( name );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -46,6 +46,7 @@
 import org.drools.process.command.StartProcessCommand;
 import org.drools.process.command.UnregisterExitPointCommand;
 import org.drools.process.command.UpdateCommand;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.Environment;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.Globals;
@@ -74,6 +75,10 @@
     public CommandBasedStatefulKnowledgeSession(CommandService commandService) {
         this.commandService = commandService;
     }
+    
+    public int getId() {
+        return ((ReteooWorkingMemory)this.commandService.getSession()).getId();
+    }
 
     public ProcessInstance getProcessInstance(long id) {
         GetProcessInstanceCommand command = new GetProcessInstanceCommand();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -31,6 +31,7 @@
 import java.util.List;
 
 import org.drools.FactException;
+import org.drools.KnowledgeBaseFactory;
 import org.drools.RuleBaseConfiguration;
 import org.drools.SessionConfiguration;
 import org.drools.StatefulSession;
@@ -296,8 +297,14 @@
         return session;
     }
 
-    public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig,
-                                                           final Environment environment) {
+    public synchronized StatefulSession newStatefulSession(SessionConfiguration sessionConfig,
+                                                           Environment environment) {
+        if ( sessionConfig == null ) {
+            sessionConfig = ( SessionConfiguration ) KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+        }
+        if ( environment == null ) {
+            environment = EnvironmentFactory.newEnvironment();
+        }
         return newStatefulSession( nextWorkingMemoryCounter(),
                                    sessionConfig,
                                    environment );

Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/impl/JPAKnowledgeServiceProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/impl/JPAKnowledgeServiceProviderImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/impl/JPAKnowledgeServiceProviderImpl.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -0,0 +1,92 @@
+package org.drools.persistence.jpa.impl;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.SessionConfiguration;
+import org.drools.persistence.jpa.JPAKnowledgeServiceProvider;
+import org.drools.persistence.session.SingleSessionCommandService;
+import org.drools.process.command.CommandService;
+import org.drools.process.command.impl.CommandBasedStatefulKnowledgeSession;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+
+public class JPAKnowledgeServiceProviderImpl
+    implements
+    JPAKnowledgeServiceProvider {
+
+    public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
+                                                                KnowledgeSessionConfiguration configuration,
+                                                                Environment environment) {
+        if ( configuration == null ) {
+            configuration = new SessionConfiguration();
+        }
+        
+        if ( environment == null ) {
+            throw new IllegalArgumentException( "Environment cannot be null" );
+        }
+        
+        Properties props = new Properties();
+        
+        props.setProperty( "drools.commandService",
+                                   "org.drools.persistence.session.SingleSessionCommandService" );
+        props.setProperty( "drools.processInstanceManagerFactory",
+                                   "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        props.setProperty( "drools.workItemManagerFactory",
+                                   "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        props.setProperty( "drools.processSignalManagerFactory",
+                                   "org.drools.persistence.processinstance.JPASignalManagerFactory" );   
+        
+        ((SessionConfiguration)configuration).addProperties( props );
+
+        CommandService commandService = new SingleSessionCommandService( kbase,
+                                                                         configuration,
+                                                                         environment );
+        return new CommandBasedStatefulKnowledgeSession( commandService );
+    }
+
+    public StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
+                                                                 KnowledgeBase kbase,
+                                                                 KnowledgeSessionConfiguration configuration,
+                                                                 Environment environment) {
+        if ( configuration == null ) {
+            configuration = new SessionConfiguration();
+        }
+        
+        if ( environment == null ) {
+            throw new IllegalArgumentException( "Environment cannot be null" );
+        }
+        
+        Properties props = new Properties();
+        
+        props.setProperty( "drools.commandService",
+                                   "org.drools.persistence.session.SingleSessionCommandService" );
+        props.setProperty( "drools.processInstanceManagerFactory",
+                                   "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+        props.setProperty( "drools.workItemManagerFactory",
+                                   "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+        props.setProperty( "drools.processSignalManagerFactory",
+                                   "org.drools.persistence.processinstance.JPASignalManagerFactory" );   
+        
+        ((SessionConfiguration)configuration).addProperties( props );
+        
+        CommandService commandService = new SingleSessionCommandService( id,
+                                                                         kbase,
+                                                                         configuration,
+                                                                         environment );
+        return new CommandBasedStatefulKnowledgeSession( commandService );
+    }
+    
+    public int getStatefulKnowledgeSessionId(StatefulKnowledgeSession ksession) {
+        if ( ksession instanceof CommandBasedStatefulKnowledgeSession) {
+            SingleSessionCommandService commandService = ( SingleSessionCommandService ) ((CommandBasedStatefulKnowledgeSession)ksession).getCommandService();
+            return commandService.getSessionId();
+        } else {
+            throw new IllegalArgumentException( "StatefulKnowledgeSession must be an a CommandBasedStatefulKnowledgeSession" );
+        }
+    }
+    
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -99,6 +99,7 @@
     }
     
     public void rollback() {
+        this.dirty = false;
         this.lastModificationDate = this.lastModificationDateShadow;
         this.rulesByteArray = this.rulesByteArrayShadow;
 //        this.version = this.versionShadow;

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -22,6 +22,7 @@
 import org.drools.persistence.processinstance.JPASignalManager;
 import org.drools.process.command.Command;
 import org.drools.process.command.CommandService;
+import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
@@ -40,6 +41,17 @@
     private StatefulKnowledgeSession    ksession;
     private Environment                 env;
 
+    public void checkEnvironment(Environment env) {        
+        if ( env.get( EnvironmentName.ENTITY_MANAGER_FACTORY ) == null ) {
+            throw new IllegalArgumentException( "Environment must have an EntityManagerFactory" );
+        }
+        
+        // @TODO log a warning that all transactions will be locally scoped using the EntityTransaction
+//        if ( env.get( EnvironmentName.TRANSACTION_MANAGER ) == null ) {
+//            throw new IllegalArgumentException( "Environment must have an EntityManagerFactory" );
+//        }        
+    }
+    
     public SingleSessionCommandService(RuleBase ruleBase,
                                        SessionConfiguration conf,
                                        Environment env) {
@@ -59,6 +71,7 @@
 
         this.session = ((KnowledgeBaseImpl) kbase).ruleBase.newStatefulSession( (SessionConfiguration) conf,
                                                                                 this.env );
+        
         this.ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
 
         ((JPASignalManager) this.session.getSignalManager()).setCommandService( this );
@@ -96,6 +109,9 @@
                                             t2 );
             }
         }
+        
+        // update the session id to be the same as the session info id
+        ((ReteooStatefulSession) this.session).setId( this.sessionInfo.getId() );
 
         new Thread( new Runnable() {
             public void run() {
@@ -104,10 +120,10 @@
         } );
     }
 
-    public SingleSessionCommandService(KnowledgeBase kbase,
+    public SingleSessionCommandService(int sessionId,
+                                       KnowledgeBase kbase,
                                        KnowledgeSessionConfiguration conf,
-                                       Environment env,
-                                       int sessionId) {
+                                       Environment env) {
         if ( conf == null ) {
             conf = new SessionConfiguration();
         }
@@ -144,11 +160,21 @@
             }
         }
 
+        this.session = ((KnowledgeBaseImpl) kbase).ruleBase.newStatefulSession( (SessionConfiguration) conf,
+                                                                                this.env );
+        
+        // update the session id to be the same as the session info id
+        ((ReteooStatefulSession) this.session).setId( sessionId );
+        
+        this.ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
+        ((JPASignalManager) this.session.getSignalManager()).setCommandService( this );
+        
         this.marshallingHelper = new JPASessionMarshallingHelper( this.sessionInfo,
                                                                   kbase,
                                                                   conf,
                                                                   env );
 
+
         this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );        
 		this.ksession = this.marshallingHelper.getObject();
 		this.session = (StatefulSession) ((StatefulKnowledgeSessionImpl) ksession).session;
@@ -182,6 +208,18 @@
             EntityManager localEm = this.emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
             this.env.set( EnvironmentName.ENTITY_MANAGER,
                           localEm );
+            
+            if ( this.em == null ) {
+                // there must have been a rollback to lazily re-initialise the state
+                this.em = this.emf.createEntityManager();
+                this.sessionInfo = this.em.find( SessionInfo.class, this.sessionInfo.getId() );
+                this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
+                // have to create a new localEM as an EM part of a transaction cannot do a find.
+                // this.sessionInfo.rollback();
+                this.marshallingHelper.loadSnapshot( this.sessionInfo.getData(),
+                                                     this.ksession );
+                this.session = (StatefulSession) ((StatefulKnowledgeSessionImpl) this.ksession).session;                
+            }
 
             this.em.joinTransaction();
             //System.out.println( "1) exec ver : " + this.sessionInfo.getVersion() );
@@ -239,7 +277,7 @@
     public void registerRollbackSync() throws IllegalStateException,
                                       RollbackException,
                                       SystemException {
-        TransactionManager txm = (TransactionManager) env.get( "drools.TransactionManager" );
+        TransactionManager txm = (TransactionManager) env.get( EnvironmentName.TRANSACTION_MANAGER );
         if ( txm == null ) {
             return;
         }
@@ -338,10 +376,8 @@
     //}     
 
     public void rollback() {
-        // have to create a new localEM as an EM part of a transaction cannot do a find.
-        this.sessionInfo.rollback();
-        this.marshallingHelper.loadSnapshot( this.sessionInfo.getData(),
-                                             this.ksession );
-        this.session = (StatefulSession) ((StatefulKnowledgeSessionImpl) this.ksession).session;
+        // with em null, if someone tries to use this session it'll first restore it's state
+        this.em.close();
+        this.em = null;
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -15,6 +15,7 @@
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
@@ -22,6 +23,7 @@
 import org.drools.impl.EnvironmentImpl;
 import org.drools.io.ResourceFactory;
 import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -120,18 +122,6 @@
     }
 
     public void testUserTransactions() throws Exception {
-
-        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" );
-        KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
-
         String str = "";
         str += "package org.drools.test\n";
         str += "global java.util.List list\n";
@@ -158,11 +148,11 @@
         Environment env = KnowledgeBaseFactory.newEnvironment();
         env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
                  emf );
-        env.set( "drools.TransactionManager",
+        env.set( EnvironmentName.TRANSACTION_MANAGER,
                  TransactionManagerServices.getTransactionManager() );
+        env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
 
-        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( config,
-                                                                               env );
+        StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
 
         //      EntityManager em = emf.createEntityManager();
         //      SessionInfo sInfo = em.find( SessionInfo.class, 1 );
@@ -210,21 +200,23 @@
 
         assertEquals( 4,
                       list.size() );
+        
+        // now load the ksession
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( ksession.getId(), kbase, null, env );
+        
+        ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+        ut.begin();
+        ksession.insert( 7 );
+        ksession.insert( 8 );
+        ut.commit();
 
+        ksession.fireAllRules();
+
+        assertEquals( 6,
+                      list.size() );
     }
 
     public void testPersistenceWorkItems() {
-        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" );
-        KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
-
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
                       ResourceType.DRF );
@@ -236,61 +228,57 @@
         env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
                  emf );
 
-        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( config,
-                                                                              env );
-        ProcessInstance processInstance = session.startProcess( "org.drools.test.TestProcess" );
-        session.insert( "TestString" );
+        env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+
+        StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+        int id = ksession.getId();
+        
+        ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+        ksession.insert( "TestString" );
         System.out.println( "Started process instance " + processInstance.getId() );
 
         TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
         WorkItem workItem = handler.getWorkItem();
         assertNotNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNotNull( processInstance );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        session.getWorkItemManager().completeWorkItem( workItem.getId(),
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
                                                        null );
 
         workItem = handler.getWorkItem();
         assertNotNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNotNull( processInstance );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        session.getWorkItemManager().completeWorkItem( workItem.getId(),
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
                                                        null );
 
         workItem = handler.getWorkItem();
         assertNotNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNotNull( processInstance );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        session.getWorkItemManager().completeWorkItem( workItem.getId(),
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
                                                        null );
 
         workItem = handler.getWorkItem();
         assertNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertEquals( 1,
-                      session.getObjects().size() );
-        for ( Object o : session.getObjects() ) {
+                      ksession.getObjects().size() );
+        for ( Object o : ksession.getObjects() ) {
             System.out.println( o );
         }
         assertNull( processInstance );
@@ -298,17 +286,6 @@
     }
 
     public void testPersistenceSubProcess() {
-        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" );
-        KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
-
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         kbuilder.add( new ClassPathResource( "SuperProcess.rf" ),
                       ResourceType.DRF );
@@ -322,44 +299,40 @@
         env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
                  emf );
 
-        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( config,
-                                                                              env );
-        ProcessInstance processInstance = session.startProcess( "com.sample.SuperProcess" );
+        StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+        int id = ksession.getId();
+        
+        ProcessInstance processInstance = ksession.startProcess( "com.sample.SuperProcess" );
         System.out.println( "Started process instance " + processInstance.getId() );
 
         TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
         WorkItem workItem = handler.getWorkItem();
         assertNotNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNotNull( processInstance );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        session.getWorkItemManager().completeWorkItem( workItem.getId(),
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
                                                        null );
 
         workItem = handler.getWorkItem();
         assertNotNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNotNull( processInstance );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        session.getWorkItemManager().completeWorkItem( workItem.getId(),
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
                                                        null );
 
         workItem = handler.getWorkItem();
         assertNull( workItem );
 
-        session = kbase.newStatefulKnowledgeSession( config,
-                                                     null );
-        processInstance = session.getProcessInstance( processInstance.getId() );
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+        processInstance = ksession.getProcessInstance( processInstance.getId() );
         assertNull( processInstance );
     }
 

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2009-02-26 23:47:51 UTC (rev 25444)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2009-02-27 00:28:35 UTC (rev 25445)
@@ -114,20 +114,20 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
         service.execute( completeWorkItemCommand );
@@ -136,20 +136,20 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
         service.execute( completeWorkItemCommand );
@@ -158,20 +158,20 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
         service.execute( completeWorkItemCommand );
@@ -180,10 +180,10 @@
         assertNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
@@ -231,10 +231,10 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
@@ -243,10 +243,10 @@
         ut.commit();
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
@@ -257,10 +257,10 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
@@ -269,10 +269,10 @@
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
@@ -283,10 +283,10 @@
         assertNotNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
@@ -295,10 +295,10 @@
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         completeWorkItemCommand = new CompleteWorkItemCommand();
         completeWorkItemCommand.setWorkItemId( workItem.getId() );
@@ -309,10 +309,10 @@
         assertNull( workItem );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
@@ -593,20 +593,20 @@
         System.out.println( "Started process instance " + processInstance.getId() );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         Thread.sleep( 3000 );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
@@ -697,10 +697,10 @@
 
         Thread.sleep( 2000 );
 
-        service = new SingleSessionCommandService( kbase,
+        service = new SingleSessionCommandService( sessionId,
+                                                   kbase,
                                                    config,
-                                                   env,
-                                                   sessionId );
+                                                   env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
         processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );




More information about the jboss-svn-commits mailing list