[jboss-svn-commits] JBL Code SVN: r32639 - in labs/jbossrules/trunk: drools-container/drools-spring/src/main/java/org/drools/container/spring/beans and 13 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 23 21:59:53 EDT 2010


Author: baunax
Date: 2010-04-23 21:59:50 -0400 (Fri, 23 Apr 2010)
New Revision: 32639

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandService.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandServiceFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntity.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityMethods.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityOnlyFields.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyVariableSerializable.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringPersistedVariable.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml
Removed:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/log4j.properties
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandServiceTest.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/process/
Modified:
   labs/jbossrules/trunk/drools-container/drools-spring/pom.xml
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ExecutionNodeBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandService.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/log4j.xml
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml
   labs/jbossrules/trunk/drools-persistence-jpa/pom.xml
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
JBRULES-2332 Drools JPA- Spring Transactions
	- added a factory for creating flow using spring transaction manager.

Modified: labs/jbossrules/trunk/drools-container/drools-spring/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/pom.xml	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/pom.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -97,7 +97,7 @@
     	 <dependency>
         	<groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
-            <version>1.1.117</version>
+            <version>1.2.128</version>
         	<scope>test</scope>
         </dependency>         
 

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ExecutionNodeBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ExecutionNodeBeanFactory.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ExecutionNodeBeanFactory.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -29,7 +29,7 @@
 	}
 
 	public void afterPropertiesSet() throws Exception {
-		node = connection.getExecutionNode(null);
+		node = connection.getExecutionNode();
 	}
 
 	public void setId(String id) {

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandService.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandService.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,9 @@
+package org.drools.container.spring.beans;
+
+import org.drools.command.SingleSessionCommandService;
+
+
+public interface JPASingleSessionCommandService  {
+	public SingleSessionCommandService createNew();
+	public SingleSessionCommandService load(int sessionId);
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandService.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandServiceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandServiceFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandServiceFactory.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,155 @@
+package org.drools.container.spring.beans;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.persistence.EntityManagerFactory;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.SessionConfiguration;
+import org.drools.command.SingleSessionCommandService;
+import org.drools.container.spring.beans.persistence.SpringSingleSessionCommandService;
+import org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory;
+import org.drools.persistence.processinstance.JPASignalManagerFactory;
+import org.drools.persistence.processinstance.JPAWorkItemManagerFactory;
+import org.drools.persistence.processinstance.VariablePersistenceStrategyFactory;
+import org.drools.persistence.processinstance.persisters.VariablePersister;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.transaction.PlatformTransactionManager;
+
+public class JPASingleSessionCommandServiceFactory implements FactoryBean, InitializingBean {
+
+	private Environment environment;
+	private KnowledgeBase knowledgeBase;
+	private EntityManagerFactory entityManagerFactory;
+	private PlatformTransactionManager transactionManager;
+	private Map<String, Class<? extends VariablePersister>> variablePersisters;
+
+	public Environment getEnvironment() {
+		return environment;
+	}
+
+	public void setEnvironment(Environment environment) {
+		this.environment = environment;
+	}
+
+	public KnowledgeBase getKnowledgeBase() {
+		return knowledgeBase;
+	}
+
+	public void setKnowledgeBase(KnowledgeBase knowledgeBase) {
+		this.knowledgeBase = knowledgeBase;
+	}
+
+	public EntityManagerFactory getEntityManagerFactory() {
+		return entityManagerFactory;
+	}
+
+	public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
+		this.entityManagerFactory = entityManagerFactory;
+	}
+
+	public PlatformTransactionManager getTransactionManager() {
+		return transactionManager;
+	}
+
+	public void setTransactionManager(PlatformTransactionManager transactionManager) {
+		this.transactionManager = transactionManager;
+	}
+
+	public Map<String, Class<? extends VariablePersister>> getVariablePersisters() {
+		if (variablePersisters == null) {
+			variablePersisters = new HashMap<String, Class<? extends VariablePersister>>();
+		}
+		return variablePersisters;
+	}
+
+	public void setVariablePersisters(Map<String, Class<? extends VariablePersister>> variablePersisters) {
+		this.variablePersisters = variablePersisters;
+	}
+
+	/**
+	 * @see org.springframework.beans.factory.FactoryBean#getObject()
+	 */
+	public Object getObject() throws Exception {
+
+		return new JPASessionService(getEnvironment(), getKnowledgeBase(), getEntityManagerFactory(),
+				getTransactionManager());
+	}
+
+	public Class<JPASingleSessionCommandService> getObjectType() {
+		return JPASingleSessionCommandService.class;
+	}
+
+	public boolean isSingleton() {
+		return false;
+	}
+
+	public void afterPropertiesSet() throws Exception {
+		if (getEnvironment() == null) {
+			setEnvironment(KnowledgeBaseFactory.newEnvironment());
+		}
+		if (getTransactionManager() == null) {
+			throw new IllegalArgumentException("transactionManager property is mandatory");
+		}
+		if (getEntityManagerFactory() == null) {
+			throw new IllegalArgumentException("entityManagerFactory property is mandatory");
+		}
+		if (getKnowledgeBase() == null) {
+			throw new IllegalArgumentException("knowledgeBase property is mandatory");
+		}
+		if (!getVariablePersisters().isEmpty()) {
+			for (Map.Entry<String, Class<? extends VariablePersister>> entry : getVariablePersisters().entrySet()) {
+				VariablePersistenceStrategyFactory.getVariablePersistenceStrategy().setPersister(entry.getKey(),
+						entry.getValue().getName());
+			}
+		}
+	}
+
+	private static class JPASessionService implements JPASingleSessionCommandService {
+
+		public JPASessionService(Environment environment, KnowledgeBase knowledgeBase,
+				EntityManagerFactory entityManagerFactory, PlatformTransactionManager transactionManager) {
+			super();
+			this.environment = environment;
+			this.knowledgeBase = knowledgeBase;
+			this.entityManagerFactory = entityManagerFactory;
+			this.transactionManager = transactionManager;
+		}
+
+		private Environment environment;
+		private KnowledgeBase knowledgeBase;
+		private EntityManagerFactory entityManagerFactory;
+		private PlatformTransactionManager transactionManager;
+
+		public SingleSessionCommandService createNew() {
+			return new SpringSingleSessionCommandService(knowledgeBase, getSessionConfiguration(), getEnvironment());
+		}
+
+		public SingleSessionCommandService load(int sessionId) {
+			return new SpringSingleSessionCommandService(sessionId, knowledgeBase, getSessionConfiguration(),
+					getEnvironment());
+		}
+
+		public Environment getEnvironment() {
+			environment.set(EnvironmentName.ENTITY_MANAGER_FACTORY, entityManagerFactory);
+			environment.set(EnvironmentName.TRANSACTION_MANAGER, transactionManager);
+			return environment;
+		}
+
+		private SessionConfiguration getSessionConfiguration() {
+			Properties properties = new Properties();
+			properties.setProperty("drools.commandService", SpringSingleSessionCommandService.class.getName());
+			properties.setProperty("drools.processInstanceManagerFactory", JPAProcessInstanceManagerFactory.class
+					.getName());
+			properties.setProperty("drools.workItemManagerFactory", JPAWorkItemManagerFactory.class.getName());
+			properties.setProperty("drools.processSignalManagerFactory", JPASignalManagerFactory.class.getName());
+			return new SessionConfiguration(properties);
+		}
+	}
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/JPASingleSessionCommandServiceFactory.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -39,8 +39,7 @@
 
 	public void afterPropertiesSet() throws Exception {
 		if (node == null) {
-			LocalConnection connection = new LocalConnection();
-			node = connection.getExecutionNode(null);
+			node = new LocalConnection().getExecutionNode();
 		}
 		KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
 		kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandService.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandService.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -7,8 +7,8 @@
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
-import org.drools.command.CommandService;
 import org.drools.command.Context;
+import org.drools.command.SingleSessionCommandService;
 import org.drools.command.impl.ContextImpl;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
@@ -19,6 +19,7 @@
 import org.drools.persistence.processinstance.JPAWorkItemManager;
 import org.drools.persistence.session.JPASessionMarshallingHelper;
 import org.drools.persistence.session.SessionInfo;
+import org.drools.persistence.session.SingleSessionCommandService.EndOperationListenerImpl;
 import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
@@ -31,7 +32,7 @@
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionTemplate;
 
-public class SpringSingleSessionCommandService implements CommandService {
+public class SpringSingleSessionCommandService implements SingleSessionCommandService {
 	private JpaTemplate jpaTemplate;
 	private SessionInfo sessionInfo;
 	private JPASessionMarshallingHelper marshallingHelper;
@@ -40,7 +41,7 @@
 	private KnowledgeCommandContext kContext;
 	private PlatformTransactionManager transactionManager;
 
-	public void checkEnvironment(Environment env) {
+	private void checkEnvironment(Environment env) {
 		if (env.get(EnvironmentName.ENTITY_MANAGER_FACTORY) == null) {
 			throw new IllegalArgumentException("Environment must have an EntityManagerFactory");
 		}
@@ -92,13 +93,17 @@
 			public Object doInTransaction(TransactionStatus status) {
 				Object result = jpaTemplate.execute(new JpaCallback() {
 					public Object doInJpa(EntityManager em) throws PersistenceException {
-						SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, em);
-						em.persist(sessionInfo);
-						// update the session id to be the same as the session info id
-						((StatefulKnowledgeSessionImpl) ksession).session.setId(sessionInfo.getId());
-						em.flush();
-						SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
-						return null;
+						try {
+							SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, em);
+							em.persist(sessionInfo);
+							// update the session id to be the same as the session info id
+							((StatefulKnowledgeSessionImpl) ksession).session.setId(sessionInfo.getId());
+							((StatefulKnowledgeSessionImpl) ksession).session.setEndOperationListener( new EndOperationListenerImpl( sessionInfo ) );
+							em.flush();
+							return null;
+						} finally {
+							SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
+						}
 					}
 				});
 				return result;
@@ -120,31 +125,34 @@
 				return jpaTemplate.execute(new JpaCallback() {
 
 					public Object doInJpa(EntityManager em) throws PersistenceException {
-						SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, em);
-						sessionInfo = em.find(SessionInfo.class, sessionId);
+						try {
+							SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, em);
+							sessionInfo = em.find(SessionInfo.class, sessionId);
 
-						if (sessionInfo == null) {
-							SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
-							throw new RuntimeException("Could not find session data for id " + sessionId);
-						}
+							if (sessionInfo == null) {
+								SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
+								throw new RuntimeException("Could not find session data for id " + sessionId);
+							}
 
-						marshallingHelper = new JPASessionMarshallingHelper(sessionInfo,
-								kbase,
-								localConf,
-								SpringSingleSessionCommandService.this.env);
+							marshallingHelper = new JPASessionMarshallingHelper(sessionInfo, kbase, localConf,
+									SpringSingleSessionCommandService.this.env);
 
-						sessionInfo.setJPASessionMashallingHelper(marshallingHelper);
-						ksession = marshallingHelper.getObject();
-						kContext = new KnowledgeCommandContext(new ContextImpl("ksession", null), null, null, ksession,
-								null);
-						((JPASignalManager) ((StatefulKnowledgeSessionImpl) ksession).session.getSignalManager())
-								.setCommandService(SpringSingleSessionCommandService.this);
+							sessionInfo.setJPASessionMashallingHelper(marshallingHelper);
+							ksession = marshallingHelper.getObject();
+							kContext = new KnowledgeCommandContext(new ContextImpl("ksession", null), null, null,
+									ksession, null);
+							((JPASignalManager) ((StatefulKnowledgeSessionImpl) ksession).session.getSignalManager())
+									.setCommandService(SpringSingleSessionCommandService.this);
 
-						// update the session id to be the same as the session info id
-						((StatefulKnowledgeSessionImpl) ksession).session.setId(sessionInfo.getId());
-						em.flush();
-						SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
-						return sessionInfo;
+							// update the session id to be the same as the
+							// session info id
+							((StatefulKnowledgeSessionImpl) ksession).session.setId(sessionInfo.getId());
+							((StatefulKnowledgeSessionImpl) ksession).session.setEndOperationListener( new EndOperationListenerImpl( sessionInfo ) );
+							em.flush();
+							return sessionInfo;
+						} finally {
+							SpringSingleSessionCommandService.this.env.set(EnvironmentName.ENTITY_MANAGER, null);
+						}
 					}
 				});
 			}
@@ -165,18 +173,18 @@
 				T result = (T) jpaTemplate.execute(new JpaCallback() {
 					public Object doInJpa(EntityManager em) {
 						env.set(EnvironmentName.ENTITY_MANAGER, em);
-						SessionInfo sessionInfoMerged = em.merge(sessionInfo);
-						sessionInfoMerged.setJPASessionMashallingHelper(sessionInfo.getJPASessionMashallingHelper());
-						sessionInfo = sessionInfoMerged;
-						// sessionInfo = em.find(SessionInfo.class, sessionInfo.getId());
-						// sessionInfo.setJPASessionMashallingHelper(marshallingHelper);
-						// marshallingHelper.loadSnapshot(sessionInfo.getData(), ksession);
-						//sessionInfo.setDirty(); // TODO FIXME baunux: this should not be needed now that we use idle time, I think, double check.
-						
-						T result = command.execute(kContext);
-						em.flush();
-						env.set(EnvironmentName.ENTITY_MANAGER, null);
-						return result;
+						try {
+							SessionInfo sessionInfoMerged = em.merge(sessionInfo);
+							sessionInfoMerged.setJPASessionMashallingHelper(sessionInfo.getJPASessionMashallingHelper());
+							sessionInfo = sessionInfoMerged;
+							((StatefulKnowledgeSessionImpl) ksession).session.setEndOperationListener( new EndOperationListenerImpl( sessionInfo ) );
+							
+							T result = command.execute(kContext);
+							em.flush();
+							return result;
+						} finally {
+							env.set(EnvironmentName.ENTITY_MANAGER, null);
+						}
 					}
 
 				});

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -22,9 +22,11 @@
 		BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(KnowledgeBaseBeanFactory.class);
 
 		String nodeRef = element.getAttribute(EXECUTION_NODE_ATTRIBUTE);
-		factory.addPropertyReference(EXECUTION_NODE_ATTRIBUTE, nodeRef);
+		if (nodeRef != null && nodeRef.length() > 0) {
+			factory.addPropertyReference(EXECUTION_NODE_ATTRIBUTE, nodeRef);
+		}
+		
 		List<Element> childElements = DomUtils.getChildElementsByTagName(element, "resource");
-		
 		ManagedList resources = null;
 		if (childElements != null && !childElements.isEmpty()) {
 			resources = new ManagedList();

Deleted: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/log4j.properties
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/log4j.properties	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/log4j.properties	2010-04-24 01:59:50 UTC (rev 32639)
@@ -1,4 +0,0 @@
-log4j.rootLogger=DEBUG, stdout
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,668 @@
+package org.drools.container.spring.beans.persistence;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.Properties;
+
+import org.drools.command.SingleSessionCommandService;
+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.container.spring.beans.JPASingleSessionCommandService;
+import org.drools.core.util.DroolsStreamUtils;
+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.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 org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.junit.Assert.*;
+
+public class JPASingleSessionCommandServiceFactoryTest {
+	private static final String TMPDIR = System.getProperty("java.io.tmpdir");
+	private static final Logger log = LoggerFactory.getLogger(JPASingleSessionCommandServiceFactoryTest.class);
+	private static Server h2Server;
+    
+    private ClassPathXmlApplicationContext ctx;
+    
+    @BeforeClass
+    public static void startH2Database() throws Exception {
+    	DeleteDbFiles.execute("", "DroolsFlow", true);
+    	h2Server = Server.createTcpServer(new String[0]);
+    	h2Server.start();
+    }
+    
+    @AfterClass
+    public static void stopH2Database() throws Exception {
+    	log.info("stoping database");
+    	h2Server.stop();
+    	DeleteDbFiles.execute("", "DroolsFlow", true);
+    }
+
+    @BeforeClass
+    public static void generatePackages() {
+    	try {
+			log.info("creating: {}", TMPDIR + "/processWorkItems.pkg");
+			writePackage(getProcessWorkItems(), new File(TMPDIR + "/processWorkItems.pkg"));
+			
+			log.info("creating: {}", TMPDIR + "/processSubProcess.pkg");
+			writePackage(getProcessSubProcess(), new File(TMPDIR + "/processSubProcess.pkg"));
+			
+			log.info("creating: {}", TMPDIR + "/processTimer.pkg");
+			writePackage(getProcessTimer(), new File(TMPDIR + "/processTimer.pkg"));
+			
+			log.info("creating: {}", TMPDIR + "/processTimer2.pkg");
+			writePackage(getProcessTimer2(), new File(TMPDIR + "/processTimer2.pkg"));
+		} catch (Exception e) {
+			log.error("can't create packages!", e);
+			throw new RuntimeException(e);
+		}
+	}
+    
+    @AfterClass
+    public static void deletePackages() {
+    	new File(TMPDIR + "/processWorkItems.pkg").delete();
+		new File(TMPDIR + "/processSubProcess.pkg").delete();
+		new File(TMPDIR + "/processTimer.pkg").delete();
+		new File(TMPDIR + "/processTimer2.pkg").delete();
+	}
+    
+    @Before
+    public void createSpringContext() {
+    	try {
+			log.info("creating spring context");
+			PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
+			Properties properties = new Properties();
+			properties.setProperty("temp.dir", TMPDIR);
+			configurer.setProperties(properties);
+			ctx = new ClassPathXmlApplicationContext();
+			ctx.addBeanFactoryPostProcessor(configurer);
+			ctx.setConfigLocation("org/drools/container/spring/beans/persistence/beans.xml");
+			ctx.refresh();
+		} catch (Exception e) {
+			log.error("can't create spring context", e);
+			throw new RuntimeException(e);
+		}
+    }
+    
+    @After
+    public void destrySpringContext() {
+    	log.info("destroy spring context");
+    	ctx.destroy();
+    }
+    	
+    @Test
+    public void testPersistenceWorkItems() throws Exception {
+    	log.info("---> get bean jpaSingleSessionCommandService");
+        JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        
+        log.info("---> create new SingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+        
+        int sessionId = service.getSessionId();
+        log.info("---> created SingleSessionCommandService id: " + sessionId);
+
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        log.info( "Started process instance {}", processInstance.getId() );
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+        service.dispose();
+    }
+
+    @Test
+    public void testPersistenceWorkItemsUserTransaction() throws Exception {
+        
+        JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+
+        int sessionId = service.getSessionId();
+
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        log.info( "Started process instance {}", processInstance.getId() );
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+		service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+
+        workItem = handler.getWorkItem();
+        assertNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+        service.dispose();
+    }
+
+    private static Package 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();
+        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        
+        
+        return packageBuilder.getPackage() ;
+    }
+    
+	public static void writePackage(Package pkg, File dest) {
+		OutputStream out = null;
+		try {
+			out = new BufferedOutputStream(new FileOutputStream(dest));
+			DroolsStreamUtils.streamOut(out, pkg);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		} finally {
+			if (out != null) {
+				try {
+					out.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+    
+    @Test
+    public void testPersistenceSubProcess() {
+
+        JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+
+        int sessionId = service.getSessionId();
+
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.ProcessSubProcess" );
+        RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute( startProcessCommand );
+        log.info( "Started process instance {}", processInstance.getId() );
+        long processInstanceId = processInstance.getId();
+
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        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 = jpaService.load(sessionId);
+        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+        completeWorkItemCommand.setWorkItemId( workItem.getId() );
+        service.execute( completeWorkItemCommand );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        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();
+    }
+
+    private static Package getProcessSubProcess() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.ProcessSubProcess" );
+        process.setName( "ProcessSubProcess" );
+        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();
+        ProcessBuilder processBuilder = new ProcessBuilder( 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();
+    }
+    
+    @Test
+    public void testPersistenceTimer() throws Exception {
+    	log.info("---> get bean jpaSingleSessionCommandService");
+        JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        
+        log.info("---> create new SingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+        
+        int sessionId = service.getSessionId();
+        log.info("---> created SingleSessionCommandService id: " + sessionId);
+    	    	
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.ProcessTimer" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        long procId = processInstance.getId();
+		log.info( "---> Started ProcessTimer id: {}", procId );
+        service.dispose();
+        log.info( "---> session disposed" );
+
+        service = jpaService.load(sessionId);
+        log.info( "---> load session: " + sessionId);
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( procId );
+        processInstance = service.execute( getProcessInstanceCommand );
+        log.info("---> GetProcessInstanceCommand id: " + procId);
+        assertNotNull( processInstance );
+        log.info( "---> session disposed" );
+        service.dispose();
+
+        service = jpaService.load(sessionId);
+        log.info( "---> load session: " + sessionId);
+        Thread.sleep( 3000 );
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( procId );
+        log.info("---> GetProcessInstanceCommand id: " + procId);
+        processInstance = service.execute( getProcessInstanceCommand );
+        log.info( "---> session disposed" );
+        assertNull( processInstance );
+    }
+
+    private static Package getProcessTimer() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.ProcessTimer" );
+        process.setName( "ProcessTimer" );
+        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();
+        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        return packageBuilder.getPackage();
+    }
+
+    @Test
+    public void testPersistenceTimer2() throws Exception {
+    	JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+
+        int sessionId = service.getSessionId();
+        
+        StartProcessCommand startProcessCommand = new StartProcessCommand();
+        startProcessCommand.setProcessId( "org.drools.test.ProcessTimer2" );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
+        log.info( "Started process instance {}", processInstance.getId() );
+
+        Thread.sleep( 2000 );
+
+        service = jpaService.load(sessionId);
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = service.execute( getProcessInstanceCommand );
+        assertNull( processInstance );
+    }
+
+    private static Package getProcessTimer2() {
+        RuleFlowProcess process = new RuleFlowProcess();
+        process.setId( "org.drools.test.ProcessTimer2" );
+        process.setName( "ProcessTimer2" );
+        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();
+        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+        processBuilder.buildProcess( process,
+                                     null );
+        return packageBuilder.getPackage();
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntity.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntity.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntity.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,87 @@
+package org.drools.container.spring.beans.persistence;
+
+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 = 1L;
+	
+	@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;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntity.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityMethods.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityMethods.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityMethods.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,86 @@
+package org.drools.container.spring.beans.persistence;
+
+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 = 1L;
+	
+	
+    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;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityMethods.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityOnlyFields.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityOnlyFields.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityOnlyFields.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,60 @@
+package org.drools.container.spring.beans.persistence;
+
+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 = 1L;
+	
+	@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;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyEntityOnlyFields.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyVariableSerializable.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyVariableSerializable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyVariableSerializable.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,59 @@
+package org.drools.container.spring.beans.persistence;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MyVariableSerializable implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	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();
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/MyVariableSerializable.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Deleted: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandServiceTest.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/SpringSingleSessionCommandServiceTest.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -1,659 +0,0 @@
-package org.drools.container.spring.beans.persistence;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Properties;
-
-import javax.persistence.EntityManagerFactory;
-
-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.definition.KnowledgePackage;
-import org.drools.definitions.impl.KnowledgePackageImp;
-import org.drools.helper.FileHelper;
-import org.drools.impl.KnowledgeBaseImpl;
-import org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory;
-import org.drools.persistence.processinstance.JPASignalManagerFactory;
-import org.drools.persistence.processinstance.JPAWorkItemManagerFactory;
-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.Server;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.transaction.PlatformTransactionManager;
-
-public class SpringSingleSessionCommandServiceTest {
-	private static final Logger log = LoggerFactory.getLogger(SpringSingleSessionCommandServiceTest.class);
-	private static Server h2Server;
-    
-    private ClassPathXmlApplicationContext ctx;
-    private EntityManagerFactory emf;
-    private PlatformTransactionManager txManager;
-    
-    @BeforeClass
-    public static void startH2Database() throws Exception {
-    	File dbDir = new File(System.getProperty("java.io.tmpdir") + "/_droolsFlowDB");
-    	if (dbDir.exists()) {
-    		log.info("database exists, deleting before run tests, db location: {}", dbDir.getAbsolutePath());
-    		FileHelper.remove(dbDir);
-    	}
-    	dbDir.mkdirs();
-    	log.info("creating database on: {}", dbDir );
-    	h2Server = Server.createTcpServer(new String[] {"-baseDir " + dbDir.getAbsolutePath()});
-    	h2Server.start();
-    }
-    
-    @AfterClass
-    public static void stopH2Database() {
-    	log.info("stoping database");
-    	h2Server.stop();
-    	File dbDir = new File(System.getProperty("java.io.tmpdir") + "/_droolsFlowDB");
-    	log.info("deleting database: {}", dbDir.getAbsoluteFile());
-    	FileHelper.remove(dbDir);
-    }
-
-    @Before
-    public void createSpringContext() {
-    	log.info("creating spring context");
-    	ctx = new ClassPathXmlApplicationContext("org/drools/container/spring/beans/persistence/beans.xml");
-    	emf = (EntityManagerFactory) ctx.getBean("myEmf");
-    	txManager = (PlatformTransactionManager) ctx.getBean("txManager");
-    }
-    
-    @After
-    public void destrySpringContext() {
-    	log.info("destroy spring context");
-    	ctx.destroy();
-    }
-    
-	private SpringSingleSessionCommandService buildCommandService(KnowledgeBase kbase) {
-		Environment env = KnowledgeBaseFactory.newEnvironment();
-		env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
-		env.set(EnvironmentName.TRANSACTION_MANAGER, txManager);
-        Properties properties = new Properties();
-        properties.setProperty( "drools.commandService",
-                                SpringSingleSessionCommandService.class.getName() );
-        properties.setProperty( "drools.processInstanceManagerFactory",
-                                JPAProcessInstanceManagerFactory.class.getName() );
-        properties.setProperty( "drools.workItemManagerFactory",
-                                JPAWorkItemManagerFactory.class.getName() );
-        properties.setProperty( "drools.processSignalManagerFactory",
-                                JPASignalManagerFactory.class.getName() );
-        SessionConfiguration config = new SessionConfiguration( properties );
-
-        return new SpringSingleSessionCommandService( kbase, config, env );
-	}
-	
-	private SpringSingleSessionCommandService buildCommandService(int sessionId, KnowledgeBase kbase) {
-		Environment env = KnowledgeBaseFactory.newEnvironment();
-		env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
-		env.set(EnvironmentName.TRANSACTION_MANAGER, txManager);
-        Properties properties = new Properties();
-        properties.setProperty( "drools.commandService",
-                                SpringSingleSessionCommandService.class.getName() );
-        properties.setProperty( "drools.processInstanceManagerFactory",
-                                JPAProcessInstanceManagerFactory.class.getName() );
-        properties.setProperty( "drools.workItemManagerFactory",
-                                JPAWorkItemManagerFactory.class.getName() );
-        properties.setProperty( "drools.processSignalManagerFactory",
-                                JPASignalManagerFactory.class.getName() );
-        SessionConfiguration config = new SessionConfiguration( properties );
-
-        return new SpringSingleSessionCommandService(sessionId, kbase, config, env );
-	}
-    
-    @Test
-    public void testPersistenceWorkItems() throws Exception {
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
-        kbase.addKnowledgePackages( kpkgs );
-
-        SpringSingleSessionCommandService service = buildCommandService(kbase);
-
-        int sessionId = service.getSessionId();
-
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = service.execute( startProcessCommand );
-        log.info( "Started process instance {}", processInstance.getId() );
-
-        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
-        WorkItem workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNull( processInstance );
-        service.dispose();
-    }
-
-    @Test
-    public void testPersistenceWorkItemsUserTransaction() throws Exception {
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
-        kbase.addKnowledgePackages( kpkgs );
-
-        SpringSingleSessionCommandService service = buildCommandService(kbase);
-        int sessionId = service.getSessionId();
-
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = service.execute( startProcessCommand );
-        log.info( "Started process instance {}", processInstance.getId() );
-
-        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
-        WorkItem workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service =buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-
-        workItem = handler.getWorkItem();
-        Assert.assertNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNull( processInstance );
-        service.dispose();
-    }
-
-    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();
-        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
-        processBuilder.buildProcess( process,
-                                     null );
-        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
-        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
-        return list;
-    }
-
-    @Test
-    public void testPersistenceSubProcess() {
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-        Package pkg = getProcessSubProcess();
-        ruleBase.addPackage( pkg );
-
-        SpringSingleSessionCommandService service = buildCommandService( new KnowledgeBaseImpl( ruleBase ));
-        int sessionId = service.getSessionId();
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute( startProcessCommand );
-        log.info( "Started process instance {}", processInstance.getId() );
-        long processInstanceId = processInstance.getId();
-
-        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
-        WorkItem workItem = handler.getWorkItem();
-        Assert.assertNotNull( workItem );
-        service.dispose();
-
-        service = buildCommandService(sessionId, new KnowledgeBaseImpl( ruleBase ));
-        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
-        processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-
-        Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
-        Assert.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 );
-        Assert.assertNotNull( subProcessInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, new KnowledgeBaseImpl( ruleBase ));
-        CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
-        completeWorkItemCommand.setWorkItemId( workItem.getId() );
-        service.execute( completeWorkItemCommand );
-        service.dispose();
-
-        service = buildCommandService(sessionId, new KnowledgeBaseImpl( ruleBase ));
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( subProcessInstanceId );
-        subProcessInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
-        Assert.assertNull( subProcessInstance );
-
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
-        processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
-        Assert.assertNull( processInstance );
-        service.dispose();
-    }
-
-    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();
-        ProcessBuilder processBuilder = new ProcessBuilder( 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 TODOtestPersistenceTimer() throws Exception {
-    	KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        Collection<KnowledgePackage> kpkgs = getProcessTimer();
-        kbase.addKnowledgePackages( kpkgs );
-
-        SpringSingleSessionCommandService service = buildCommandService(kbase);
-        int sessionId = service.getSessionId();
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = service.execute( startProcessCommand );
-        log.info( "Started process instance {}", processInstance.getId() );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNotNull( processInstance );
-        service.dispose();
-
-        service = buildCommandService(sessionId, kbase);
-        Thread.sleep( 3000 );
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNull( processInstance );
-    }
-
-    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();
-        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
-        processBuilder.buildProcess( process,
-                                     null );
-        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
-        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
-        return list;
-    }
-
-    @Test
-    public void testPersistenceTimer2() throws Exception {
-
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        Collection<KnowledgePackage> kpkgs = getProcessTimer2();
-        kbase.addKnowledgePackages( kpkgs );
-
-        SpringSingleSessionCommandService service = buildCommandService(kbase);
-        int sessionId = service.getSessionId();
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = service.execute( startProcessCommand );
-        log.info( "Started process instance {}", processInstance.getId() );
-
-        Thread.sleep( 2000 );
-
-        service = buildCommandService(sessionId, kbase);
-        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = service.execute( getProcessInstanceCommand );
-        Assert.assertNull( processInstance );
-    }
-
-    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();
-        ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
-        processBuilder.buildProcess( process,
-                                     null );
-        List<KnowledgePackage> list = new ArrayList<KnowledgePackage>();
-        list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
-        return list;
-    }
-}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringPersistedVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringPersistedVariable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringPersistedVariable.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,34 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.container.spring.beans.persistence;
+
+import javax.persistence.Entity;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+
+/**
+ *
+ * @author salaboy
+ * @author baunax at gmail.com
+ */
+ at Entity
+public class StringPersistedVariable extends VariableInstanceInfo {
+
+    private String string;
+
+    public StringPersistedVariable() {
+    }
+
+    public String getString() {
+        return string;
+    }
+
+    public void setString(String string) {
+        this.string = string;
+    }
+
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringPersistedVariable.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,68 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.drools.container.spring.beans.persistence;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.persistence.EntityManager;
+
+import org.drools.persistence.processinstance.persisters.JPAVariablePersister;
+import org.drools.persistence.processinstance.persisters.VariablePersister;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+
+/**
+ *
+ * @author salaboy
+ */
+public class StringVariablePersister implements VariablePersister {
+
+    public VariableInstanceInfo persistExternalVariable(String name, Object o, VariableInstanceInfo oldValue, Environment env) {
+        if (o == null || (oldValue != null && oldValue.getPersister().equals(""))) {
+            return null;
+        }
+        try { 
+            boolean newVariable = false;
+            EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+            StringPersistedVariable result = null;
+            if (oldValue instanceof StringPersistedVariable) {
+                result = (StringPersistedVariable) oldValue;
+            }
+            if (result == null) {
+                result = new StringPersistedVariable();
+
+                newVariable = true;
+            }
+            result.setPersister(this.getClass().getName());
+            result.setName(name);
+            // entity might have changed, updating info
+            result.setString((String)o);
+            if (newVariable) {
+                em.persist(result);
+            } else {
+                em.merge(result);
+            }
+            System.out.println("Saving StringPersistedVariable id=" + result.getId() + " string=" + result.getString() );
+            return result;
+        } catch (Throwable t) {
+            Logger.getLogger(JPAVariablePersister.class.getName()).log(Level.SEVERE, null, t);
+            throw new RuntimeException("Could not persist external variable", t);
+        }
+
+    }
+
+    public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo, Environment env) {
+        EntityManager em = (EntityManager) env.get(EnvironmentName.ENTITY_MANAGER);
+                if(((StringPersistedVariable) variableInstanceInfo) == null){
+                    return null;
+                }else{
+
+                    return ((StringPersistedVariable) variableInstanceInfo).getString();
+                }
+
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,319 @@
+package org.drools.container.spring.beans.persistence;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+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.command.SingleSessionCommandService;
+import org.drools.command.runtime.process.GetProcessInstanceCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.container.spring.beans.JPASingleSessionCommandService;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+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 org.h2.tools.DeleteDbFiles;
+import org.h2.tools.Server;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.junit.Assert.*;
+
+public class VariablePersistenceStrategyTest {
+
+	private static final String TMPDIR = System.getProperty("java.io.tmpdir");
+	private static final Logger log = LoggerFactory.getLogger(JPASingleSessionCommandServiceFactoryTest.class);
+	private static Server h2Server;
+    
+    private ClassPathXmlApplicationContext ctx;
+    
+    @BeforeClass
+    public static void startH2Database() throws Exception {
+    	DeleteDbFiles.execute("", "DroolsFlow", true);
+    	h2Server = Server.createTcpServer(new String[0]);
+    	h2Server.start();
+    }
+    
+    @AfterClass
+    public static void stopH2Database() throws Exception {
+    	log.info("stoping database");
+    	h2Server.stop();
+    	DeleteDbFiles.execute("", "DroolsFlow", true);
+    }
+
+    @Before
+    public void createSpringContext() {
+    	try {
+			log.info("creating spring context");
+			PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
+			Properties properties = new Properties();
+			properties.setProperty("temp.dir", TMPDIR);
+			configurer.setProperties(properties);
+			ctx = new ClassPathXmlApplicationContext();
+			ctx.addBeanFactoryPostProcessor(configurer);
+			ctx.setConfigLocation("org/drools/container/spring/beans/persistence/beansVarPersistence.xml");
+			ctx.refresh();
+		} catch (Exception e) {
+			log.error("can't create spring context", e);
+			throw new RuntimeException(e);
+		}
+    }
+    
+    @After
+    public void destrySpringContext() {
+    	log.info("destroy spring context");
+    	ctx.destroy();
+    }
+    
+    @Test
+    public void testPersistenceVariables() {
+    	log.info("---> get bean jpaSingleSessionCommandService");
+        JPASingleSessionCommandService jpaService = (JPASingleSessionCommandService) ctx.getBean("jpaSingleSessionCommandService");
+        
+        log.info("---> create new SingleSessionCommandService");
+        SingleSessionCommandService service = jpaService.createNew();
+        
+        int sessionId = service.getSessionId();
+        log.info("---> created SingleSessionCommandService id: " + sessionId);
+
+        StartProcessCommand startProcessCommand = new StartProcessCommand("com.sample.ruleflow");
+        log.info("### Starting process ###");
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put("x", "SomeString");
+        parameters.put("y", new MyEntity("This is a test Entity with annotation in fields"));
+        parameters.put("m", new MyEntityMethods("This is a test Entity with annotations in methods"));
+        parameters.put("f", new MyEntityOnlyFields("This is a test Entity with annotations in fields and without accesors methods"));
+        parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
+        startProcessCommand.setParameters(parameters);
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) service.execute( startProcessCommand );
+        log.info( "Started process instance {}", processInstance.getId() );
+    
+        TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        service.dispose();
+        
+        EntityManagerFactory emf = (EntityManagerFactory) ctx.getBean("myEmf");
+        
+        List<?> result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+        assertEquals(5, result.size());
+        log.info("### Retrieving process instance ###");
+        
+        service = jpaService.load(sessionId);
+        GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+        processInstance = (WorkflowProcessInstance) service.execute( getProcessInstanceCommand );
+        assertNotNull( processInstance );
+        
+        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"));
+   
+        service.dispose();
+        
+//        log.info("### Completing first work item ###");
+//        ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+//
+//        workItem = handler.getWorkItem();
+//        assertNotNull( workItem );
+//        
+//        log.info("### Retrieving variable instance infos ###");
+//        result = emf.createEntityManager().createQuery("select i from VariableInstanceInfo i").getResultList();
+//        assertEquals(8, result.size());
+//        for (Object o: result) {
+//        	assertTrue(VariableInstanceInfo.class.isAssignableFrom(o.getClass()));
+//        	log.info(o);
+//        }
+//        
+//        log.info("### 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());
+//        log.info("### 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());
+//        
+//        log.info("### 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());
+//        log.info("### 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()) {
+//        	log.info(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()) {
+//        	log.info("{}", 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 );
+//    }
+//    
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/META-INF/persistence.xml	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/META-INF/persistence.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -13,15 +13,17 @@
 		-->
 		<class>org.drools.persistence.session.SessionInfo</class>
 		<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
-		<class>org.drools.persistence.processinstance.WorkItemInfo</class>
+		<class>org.drools.persistence.processinstance.EventType</class>
+		<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
 		<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
-		<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
 		<class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
-		<!-- 	
-		<class>org.plugtree.labs.variablepersistence.StringPersistedVariable</class>
-		<class>org.plugtree.labs.variablepersistence.MyEntity</class>
-		<class>org.plugtree.labs.variablepersistence.MyVariableSerializable</class>
-		 -->
+		<class>org.drools.persistence.processinstance.WorkItemInfo</class>
+		
+		<!-- my persistent variables -->
+		<class>org.drools.container.spring.beans.persistence.MyEntity</class>
+		<class>org.drools.container.spring.beans.persistence.MyEntityMethods</class>
+		<class>org.drools.container.spring.beans.persistence.MyEntityOnlyFields</class>
+		<class>org.drools.container.spring.beans.persistence.StringPersistedVariable</class>
 		<properties>
 			<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
 			<!--property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/-->

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/log4j.xml	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/log4j.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -4,18 +4,29 @@
 	<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"/>
+			<param name="ConversionPattern" value="%-4r %d{dd/MM HH:mm:ss,SSS}[%t] %-5p %c{3}.%M %x- %m%n"/>
 		</layout>
 	</appender>
-	<!--
+
+	<!-- A time/date based rolling appender 
+	<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
+		<param name="File" value="${java.io.tmpdir}/drools.log"/>
+		<param name="Append" value="true"/>
+		<param name="MaxBackupIndex" value="5"/>
+		<param name="MaxFileSize" value="50MB"/>
+
+		<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="DEBUG"/>
 	</logger>
-	-->
 	
-	<logger name="org.hibernate">
+	<!-- logger name="org.hibernate">
 		<level value="DEBUG"/>
-	</logger>
+	</logger -->
 	<root>
 		<priority value="INFO"/>
 		<appender-ref ref="CONSOLE"/>

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,148 @@
+<?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.container.spring.beans.persistence.MyEntity" />
+      <import name="org.drools.container.spring.beans.persistence.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.container.spring.beans.persistence.MyEntity" />
+      </variable>
+      <variable name="z" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.container.spring.beans.persistence.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.container.spring.beans.persistence.MyEntity" />
+      </variable>
+      <variable name="c" >
+        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.container.spring.beans.persistence.MyVariableSerializable" />
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="16" y="16" width="48" height="48" />
+    <end id="3" name="End" x="458" y="189" 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" x="550" y="94" 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>
+    </humanTask>
+    <actionNode id="10" name="Action" x="562" y="189" 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

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -14,14 +14,16 @@
 		<property name="password" value="" />
 	</bean>
 
-	<!--
-		<bean id="sm1" class="org.drools.vsm.local.ServiceManagerLocalClient" /> 
-	<drools:kbase id="kbase1" serviceManager="sm1">
-		<drools:resource type="DRF" source="classpath:rules/VariablePersistenceStrategyProcess.rf" />
+	<drools:connection id="connection1" type="local" />
+	<drools:execution-node id="node1" connection="connection1" />
+
+	<drools:kbase id="kbProcessWorkItems" node="node1">
+		<drools:resource type="PKG" source="file://${temp.dir}/processWorkItems.pkg" />
+		<drools:resource type="PKG" source="file://${temp.dir}/processSubProcess.pkg" />
+		<drools:resource type="PKG" source="file://${temp.dir}/processTimer.pkg" />
+		<drools:resource type="PKG" source="file://${temp.dir}/processTimer2.pkg" />
 	</drools:kbase>
-	<drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" serviceManager="sm1" />
-	<drools:ksession id="ksession2" type="stateful" kbase="kbase1" serviceManager="sm1" />
-	 -->
+	
 	<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 		<property name="dataSource" ref="ds" />
 		<property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
@@ -30,13 +32,12 @@
 	<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
 		<property name="entityManagerFactory" ref="myEmf" />
 	</bean>
-
-	<!-- 
-	<bean id="jpaProcessKnowledgeProvider" class="org.drools.container.spring.beans.persistence.JPAKnowledgeServiceBean">
-		<property name="kbase" ref="kbase1" />
-		<property name="serviceManager" ref="sm1" />
-		<property name="entityManagerFactory" ref="myEmf" />
-		<property name="transactionManager" ref="txManager" />
+	
+	<bean id="jpaSingleSessionCommandService" class="org.drools.container.spring.beans.JPASingleSessionCommandServiceFactory">
+		<property name="knowledgeBase" ref="kbProcessWorkItems"/>
+		<property name="entityManagerFactory" ref="myEmf"/>
+		<property name="transactionManager" ref="txManager"/>
+		<!-- 
 		<property name="variablePersisters">
 			<map>
 				<entry key="javax.persistence.Entity" value="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
@@ -44,6 +45,7 @@
 				<entry key="java.io.Serializable" value="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
 			</map>
 		</property>
+		 -->
 	</bean>
-	 -->
+
 </beans>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:drools="http://drools.org/schema/drools-spring"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+                        http://drools.org/schema/drools-spring http://drools.org/schema/drools-spring.xsd">
+
+	<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+		<property name="driverClassName" value="org.h2.Driver" />
+		<property name="url" value="jdbc:h2:tcp://localhost/DroolsFlow" />
+		<property name="username" value="sa" />
+		<property name="password" value="" />
+	</bean>
+
+	<!-- <drools:connection id="connection1" type="local" />
+	<drools:execution-node id="node1" connection="connection1" /> -->
+
+	<drools:kbase id="kbase1">
+		<drools:resource type="DRF" source="classpath:org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf" />
+	</drools:kbase>
+	
+	<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+		<property name="dataSource" ref="ds" />
+		<property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+	</bean>
+
+	<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<property name="entityManagerFactory" ref="myEmf" />
+	</bean>
+	
+	<bean id="jpaSingleSessionCommandService" class="org.drools.container.spring.beans.JPASingleSessionCommandServiceFactory">
+		<property name="knowledgeBase" ref="kbase1"/>
+		<property name="entityManagerFactory" ref="myEmf"/>
+		<property name="transactionManager" ref="txManager"/>
+		<property name="variablePersisters">
+			<map>
+				<entry key="javax.persistence.Entity" value="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
+				<entry key="java.lang.String" value="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
+				<entry key="java.io.Serializable" value="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
+			</map>
+		</property>
+	</bean>
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -0,0 +1,6 @@
+package org.drools.command;
+
+public interface SingleSessionCommandService extends CommandService {
+	int getSessionId();
+	void dispose();
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/SingleSessionCommandService.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: labs/jbossrules/trunk/drools-persistence-jpa/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/pom.xml	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-persistence-jpa/pom.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -66,19 +66,19 @@
     		<groupId>org.drools</groupId>
     		<artifactId>drools-compiler</artifactId>
     	</dependency>         		  
-       
-    	<dependency>
-    		<groupId>org.slf4j</groupId>
-    		<artifactId>slf4j-jdk14</artifactId>
-    		<version>1.5.2</version>
-    	</dependency>     	       	
 
     	<dependency>
     		<groupId>org.slf4j</groupId>
     		<artifactId>slf4j-api</artifactId>
     		<version>1.5.2</version>
     	</dependency>    
-    	
+
+    	 <dependency>
+        	<groupId>org.slf4j</groupId>
+        	<artifactId>slf4j-log4j12</artifactId>
+        	<version>1.5.2</version>
+        	<scope>test</scope>
+        </dependency>
     	      	    
       <dependency>
          <groupId>org.apache.felix</groupId>
@@ -120,8 +120,8 @@
     	<dependency>
     		<groupId>com.h2database</groupId>
     		<artifactId>h2</artifactId>
-    		<version>1.1.117</version>
-		<scope>test</scope>
+    		<version>1.2.128</version>
+			<scope>test</scope>
     	</dependency>
     	
     	<dependency>
@@ -151,10 +151,16 @@
     	<dependency>
 		    <groupId>org.codehaus.btm</groupId>
 		    <artifactId>btm</artifactId>
-		    <version>1.3.2</version>    	
+		    <version>1.3.3</version>    	
 		    <scope>test</scope>
     	</dependency>    	
     	
+    	<dependency>
+        	<groupId>org.slf4j</groupId>
+        	<artifactId>slf4j-log4j12</artifactId>
+        	<version>1.5.2</version>
+        	<scope>test</scope>
+        </dependency>
         <!--dependency>  
            <groupId>org.objectweb.jotm</groupId>  
            <artifactId>com.springsource.org.objectweb.jotm</artifactId>  

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-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -17,7 +17,6 @@
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
-import org.drools.command.CommandService;
 import org.drools.command.Context;
 import org.drools.command.impl.ContextImpl;
 import org.drools.command.impl.GenericCommand;
@@ -37,7 +36,7 @@
 
 public class SingleSessionCommandService
     implements
-    CommandService {
+    org.drools.command.SingleSessionCommandService {
 
     private EntityManagerFactory        emf;
     private EntityManager               em;
@@ -63,7 +62,7 @@
                                        SessionConfiguration conf,
                                        Environment env) {
         this( new KnowledgeBaseImpl( ruleBase ),
-              (SessionConfiguration) conf,
+              conf,
               env );
     }
 
@@ -73,7 +72,7 @@
 		                               Environment env) {
 		this( sessionId,
 		      new KnowledgeBaseImpl( ruleBase ),
-		      (SessionConfiguration) conf,
+		      conf,
 		      env );
 	}
     
@@ -112,7 +111,7 @@
 
         this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
         
-        ((ReteooWorkingMemory)((StatefulKnowledgeSessionImpl) this.ksession).session).setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
+        ((StatefulKnowledgeSessionImpl) this.ksession).session.setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
 
         this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
         this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
@@ -209,7 +208,7 @@
 
         this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );        
 		this.ksession = this.marshallingHelper.getObject();
-        ((ReteooWorkingMemory)((StatefulKnowledgeSessionImpl) this.ksession).session).setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
+        ((StatefulKnowledgeSessionImpl) this.ksession).session.setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
 		this.kContext = new KnowledgeCommandContext(new ContextImpl( "ksession", null), null, null, this.ksession, null );
         ((JPASignalManager) ((StatefulKnowledgeSessionImpl)ksession).session.getSignalManager()).setCommandService( this );
 
@@ -245,7 +244,7 @@
                 // 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() );
-                ((ReteooWorkingMemory)((StatefulKnowledgeSessionImpl) this.ksession).session).setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
+                ((StatefulKnowledgeSessionImpl) this.ksession).session.setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
                 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();
@@ -306,7 +305,8 @@
         return sessionInfo.getId();
     }
 
-    private void registerRollbackSync() throws IllegalStateException,
+    @SuppressWarnings("unchecked")
+	private void registerRollbackSync() throws IllegalStateException,
                                       RollbackException,
                                       SystemException {
         TransactionManager txm = (TransactionManager) env.get( EnvironmentName.TRANSACTION_MANAGER );
@@ -314,17 +314,16 @@
             return;
         }
 
-        Map map = (Map) env.get( "synchronizations" );
+        Map<Object, Object> map = (Map<Object, Object>) env.get( "synchronizations" );
         if ( map == null ) {
-            map = new IdentityHashMap();
+            map = new IdentityHashMap<Object, Object>();
             env.set( "synchronizations",
                      map );
         }
 
         if ( map.get( this ) == null ) {
             txm.getTransaction().registerSynchronization( new SynchronizationImpl() );
-            map.put( this,
-                     this );
+			map.put(this, this);
         }
 
     }
@@ -333,14 +332,15 @@
         implements
         Synchronization {
 
-        public void afterCompletion(int status) {
+        @SuppressWarnings("unchecked")
+		public void afterCompletion(int status) {
             if ( status != Status.STATUS_COMMITTED ) {
                 rollback();
             }
 
             // always cleanup thread local whatever the result
             //rollbackRegistered.remove();
-            Map map = (Map) env.get( "synchronizations" );
+            Map<Object, Object> map = (Map<Object, Object>) env.get( "synchronizations" );
             map.remove( SingleSessionCommandService.this );
 
             // cleanup local entity manager

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2010-04-24 00:38:23 UTC (rev 32638)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2010-04-24 01:59:50 UTC (rev 32639)
@@ -1,5 +1,6 @@
 package org.drools.persistence.session;
 
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -12,6 +13,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.log4j.xml.DOMConfigurator;
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.RuleBase;
@@ -45,27 +47,61 @@
 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 {
 
-    PoolingDataSource            ds1;
-    private EntityManagerFactory emf;
-
+	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.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.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" );
@@ -106,7 +142,7 @@
 
         StartProcessCommand startProcessCommand = new StartProcessCommand();
         startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
         System.out.println( "Started process instance " + processInstance.getId() );
 
         TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
@@ -120,7 +156,7 @@
                                                    env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
@@ -142,7 +178,7 @@
                                                    env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
@@ -164,7 +200,7 @@
                                                    env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
@@ -186,7 +222,7 @@
                                                    env );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNull( processInstance );
         service.dispose();
     }
@@ -222,7 +258,7 @@
         ut.begin();
         StartProcessCommand startProcessCommand = new StartProcessCommand();
         startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
         System.out.println( "Started process instance " + processInstance.getId() );
         ut.commit();
 
@@ -238,7 +274,7 @@
         ut.begin();
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         ut.commit();
         service.dispose();
@@ -264,7 +300,7 @@
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         ut.commit();
         assertNotNull( processInstance );
         service.dispose();
@@ -290,7 +326,7 @@
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         ut.commit();
         assertNotNull( processInstance );
         service.dispose();
@@ -316,7 +352,7 @@
         ut.begin();
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         ut.commit();
         assertNull( processInstance );
         service.dispose();
@@ -593,7 +629,7 @@
         int sessionId = service.getSessionId();
         StartProcessCommand startProcessCommand = new StartProcessCommand();
         startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
         System.out.println( "Started process instance " + processInstance.getId() );
         service.dispose();
 
@@ -603,7 +639,7 @@
                                                    env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNotNull( processInstance );
         service.dispose();
 
@@ -614,7 +650,7 @@
         Thread.sleep( 3000 );
         getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNull( processInstance );
     }
 
@@ -696,7 +732,7 @@
         int sessionId = service.getSessionId();
         StartProcessCommand startProcessCommand = new StartProcessCommand();
         startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
-        ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+        ProcessInstance processInstance = service.execute( startProcessCommand );
         System.out.println( "Started process instance " + processInstance.getId() );
 
         Thread.sleep( 2000 );
@@ -707,7 +743,7 @@
                                                    env );
         GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
-        processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+        processInstance = service.execute( getProcessInstanceCommand );
         assertNull( processInstance );
     }
 

Added: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml	2010-04-24 01:59:50 UTC (rev 32639)
@@ -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="DEBUG"/>
+	</logger>
+	
+	<!-- logger name="org.hibernate">
+		<level value="DEBUG"/>
+	</logger -->
+	<root>
+		<priority value="INFO"/>
+		<appender-ref ref="CONSOLE"/>
+	</root>
+</log4j:configuration>


Property changes on: labs/jbossrules/trunk/drools-persistence-jpa/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF



More information about the jboss-svn-commits mailing list