[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