[jboss-svn-commits] JBL Code SVN: r34079 - in labs/jbossrules/trunk/drools-container/drools-spring/src: test/java/org/drools/container/spring/beans/persistence and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 20 16:59:13 EDT 2010


Author: baunax
Date: 2010-07-20 16:59:13 -0400 (Tue, 20 Jul 2010)
New Revision: 34079

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/rollbackRules.drl
Modified:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.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/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/beansVarPersistence.xml
Log:
JBRULES-1434 Drools Spring
    - fixed rollback behavior in SpringTransactionSunchronization
    - Added test for rollback

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java	2010-07-20 20:57:50 UTC (rev 34078)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/SpringTransactionSynchronizationAdapter.java	2010-07-20 20:59:13 UTC (rev 34079)
@@ -22,7 +22,7 @@
                 break;
             }
             case TransactionSynchronization.STATUS_ROLLED_BACK : {
-                this.ts.afterCompletion( TransactionManager.STATUS_COMMITTED );
+                this.ts.afterCompletion( TransactionManager.STATUS_ROLLEDBACK );
                 break;
             }
             default : {

Modified: 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	2010-07-20 20:57:50 UTC (rev 34078)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/JPASingleSessionCommandServiceFactoryTest.java	2010-07-20 20:59:13 UTC (rev 34079)
@@ -14,10 +14,6 @@
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
-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.core.util.DroolsStreamUtils;
@@ -104,20 +100,12 @@
             writePackage( getProcessTimer2(),
                           new File( TMPDIR + "/processTimer2.pkg" ) );
         } catch ( Exception e ) {
-            log.error( "can't create packages!",
-                       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 {
@@ -272,7 +260,8 @@
         service.dispose();
     }
 
-    private static Package getProcessWorkItems() {
+    @SuppressWarnings("unused")
+	private static Package getProcessWorkItems() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId( "org.drools.test.TestProcess" );
         process.setName( "TestProcess" );
@@ -345,6 +334,7 @@
 
     public static void writePackage(Package pkg,
                                     File dest) {
+    	dest.deleteOnExit();
         OutputStream out = null;
         try {
             out = new BufferedOutputStream( new FileOutputStream( dest ) );
@@ -369,8 +359,6 @@
 
         int sessionId = service.getId();
 
-        StartProcessCommand startProcessCommand = new StartProcessCommand();
-        
         RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.startProcess( "org.drools.test.ProcessSubProcess" );
         log.info( "Started process instance {}",
                   processInstance.getId() );
@@ -414,7 +402,8 @@
         service.dispose();
     }
 
-    private static Package getProcessSubProcess() {
+    @SuppressWarnings("unused")
+	private static Package getProcessSubProcess() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId( "org.drools.test.ProcessSubProcess" );
         process.setName( "ProcessSubProcess" );
@@ -543,7 +532,8 @@
         assertNull( processInstance );
     }
 
-    private static Package getProcessTimer() {
+    @SuppressWarnings("unused")
+	private static Package getProcessTimer() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId( "org.drools.test.ProcessTimer" );
         process.setName( "ProcessTimer" );
@@ -615,7 +605,8 @@
         assertNull( processInstance );
     }
 
-    private static Package getProcessTimer2() {
+    @SuppressWarnings("unused")
+	private static Package getProcessTimer2() {
         RuleFlowProcess process = new RuleFlowProcess();
         process.setId( "org.drools.test.ProcessTimer2" );
         process.setName( "ProcessTimer2" );

Modified: 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	2010-07-20 20:57:50 UTC (rev 34078)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/StringVariablePersister.java	2010-07-20 20:59:13 UTC (rev 34079)
@@ -63,15 +63,11 @@
 
     }
 
-    public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo,
-                                               Environment env) {
-        EntityManager em = (EntityManager) env.get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
-        if ( ((StringPersistedVariable) variableInstanceInfo) == null ) {
-            return null;
-        } else {
-
-            return ((StringPersistedVariable) variableInstanceInfo).getString();
-        }
-
-    }
+	public Object getExternalPersistedVariable(VariableInstanceInfo variableInstanceInfo, Environment env) {
+		env.get(EnvironmentName.CMD_SCOPED_ENTITY_MANAGER);
+		if (variableInstanceInfo == null) {
+			return null;
+		}
+		return ((StringPersistedVariable) variableInstanceInfo).getString();
+	}
 }

Modified: 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	2010-07-20 20:57:50 UTC (rev 34078)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/beans/persistence/VariablePersistenceStrategyTest.java	2010-07-20 20:59:13 UTC (rev 34079)
@@ -4,6 +4,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -13,6 +14,8 @@
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
+import org.drools.persistence.jpa.JPAKnowledgeService;
 import org.drools.persistence.jpa.KnowledgeStoreService;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
@@ -30,6 +33,10 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
 
 public class VariablePersistenceStrategyTest {
 
@@ -84,6 +91,115 @@
     }
 
     @Test
+    public void testTransactionsRollback() throws Exception {
+    	final List<?> list = new ArrayList<Object>();
+    	PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean( "txManager" );
+    	
+    	final Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, ctx.getBean( "myEmf" ));
+		env.set( EnvironmentName.TRANSACTION_MANAGER, txManager);
+		env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+		
+    	final KnowledgeStoreService kstore = ( KnowledgeStoreService ) ctx.getBean( "kstore1" );
+        final KnowledgeBase kbRollback = ( KnowledgeBase ) ctx.getBean( "kbRollback" );
+    	
+    	TransactionTemplate txTemplate = new TransactionTemplate(txManager);
+    	final StatefulKnowledgeSession ksession = (StatefulKnowledgeSession) txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				StatefulKnowledgeSession kNewSession = kstore.newStatefulKnowledgeSession(kbRollback, null, env);
+				kNewSession.setGlobal( "list", list );
+				kNewSession.insert( 1 );
+		        kNewSession.insert( 2 );
+				return kNewSession;
+			}
+		});
+    	
+    	final int sessionId = ksession.getId();
+
+        txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+		        ksession.insert( 3 );
+		        status.setRollbackOnly();
+				return null;
+			}
+		});
+        
+        txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				ksession.fireAllRules();
+				return null;
+			}
+		});
+
+    	assertEquals( 2,
+                      list.size() );
+
+    	txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				ksession.insert( 3 );
+		        ksession.insert( 4 );
+				return null;
+			}
+		});
+    	
+    	txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				ksession.insert( 5 );
+		        ksession.insert( 6 );
+		        status.setRollbackOnly();
+				return null;
+			}
+		});
+
+    	txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				ksession.fireAllRules();
+				return null;
+			}
+		});
+
+        assertEquals( 4,
+                      list.size() );
+        
+        ksession.dispose();
+        
+        // now load the ksession
+        final StatefulKnowledgeSession ksession2 = JPAKnowledgeService.loadStatefulKnowledgeSession( sessionId, kbRollback, null, env );
+        
+        txTemplate = new TransactionTemplate(txManager);
+    	txTemplate.execute(new TransactionCallback() {
+			
+			public Object doInTransaction(TransactionStatus status) {
+				ksession2.setGlobal( "list", list );
+				ksession2.insert( 7 );
+		        ksession2.insert( 8 );
+				return null;
+			}
+		});
+
+    	txTemplate.execute(new TransactionCallback() {
+			public Object doInTransaction(TransactionStatus status) {
+				ksession2.fireAllRules();
+				return null;
+			}
+		});
+
+        assertEquals( 6,
+                      list.size() );
+    }
+    
+    @Test
     public void testPersistenceVariables() {
         log.info( "---> get bean jpaSingleSessionCommandService" );
         StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean( "jpaSingleSessionCommandService" );

Modified: 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	2010-07-20 20:57:50 UTC (rev 34078)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml	2010-07-20 20:59:13 UTC (rev 34079)
@@ -20,6 +20,12 @@
 		</drools:resources>
 	</drools:kbase>
 	
+	<drools:kbase id="kbRollback">
+		<drools:resources>
+			<drools:resource type="DRL" source="classpath:org/drools/container/spring/beans/persistence/rollbackRules.drl" />
+		</drools:resources>
+	</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" />
@@ -31,7 +37,7 @@
 	
 	<drools:kstore id="kstore1" />	
 	
-	<drools:ksession id="jpaSingleSessionCommandService" type="stateful"  kbase="kbase1">
+	<drools:ksession id="jpaSingleSessionCommandService" type="stateful" kbase="kbase1">
 	    <drools:configuration>
 			<drools:jpa-persistence>
 	            <drools:transaction-manager ref="txManager" />
@@ -43,5 +49,19 @@
 				</drools:variable-persisters>               	    
 		    </drools:jpa-persistence>
 	    </drools:configuration>    
+	</drools:ksession>
+	
+	<drools:ksession id="jpaSingleSessionCommandServiceRollback" type="stateful" kbase="kbRollback">
+	    <drools:configuration>
+			<drools:jpa-persistence>
+	            <drools:transaction-manager ref="txManager" />
+	            <drools:entity-manager-factory ref="myEmf" />
+				<!-- drools:variable-persisters>
+					<drools:persister for-class="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
+					<drools:persister for-class="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
+					<drools:persister for-class="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
+				</drools:variable-persisters -->               	    
+		    </drools:jpa-persistence>
+	    </drools:configuration>    
 	</drools:ksession>	
 </beans>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/rollbackRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/rollbackRules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/rollbackRules.drl	2010-07-20 20:59:13 UTC (rev 34079)
@@ -0,0 +1,10 @@
+package org.drools.test;
+
+global java.util.List list;
+	
+rule "test rollback"
+when
+	$i : Integer(intValue > 0);
+then
+	list.add( $i );
+end



More information about the jboss-svn-commits mailing list