[jboss-svn-commits] JBL Code SVN: r34730 - in labs/jbossrules/branches/5_1_20100802_esteban_diega: drools-container/drools-spring/src/test/java/org/drools/container/spring and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Aug 15 16:28:02 EDT 2010


Author: eaa
Date: 2010-08-15 16:28:02 -0400 (Sun, 15 Aug 2010)
New Revision: 34730

Added:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TestWorkItemHandler.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TimerFlowTest.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/conf/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/conf/spring-conf.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/flow/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/flow/timer-flow.rf
Modified:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
Log:
JBRULES-2667: DroolsSpringJpaManager should use different Entity Managers for CMD and APP.
	- Modified DroolsSpringJpaManager in order to use 2 different EM.
	- Fixed a bug in DroolsSpringTransactionManager that prevented getStatus() to work properly.
	- Added test scenario

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java	2010-08-15 20:26:56 UTC (rev 34729)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringJpaManager.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -24,22 +24,32 @@
 import org.drools.runtime.EnvironmentName;
 import org.springframework.orm.jpa.EntityManagerHolder;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+/**
+ *
+ * @author Mark Proctor
+ * @author Esteban Aliverti
+ */
 public class DroolsSpringJpaManager
     implements
     JpaManager {
+
+    Logger                               logger                                            = LoggerFactory.getLogger( getClass() );
+
     Environment                  env;
 
     private EntityManagerFactory emf;
 
     private EntityManager        appScopedEntityManager;
-    
+
     private boolean              internalAppScopedEntityManager;
-    
+
     public DroolsSpringJpaManager(Environment env) {
         this.env = env;
         this.emf = ( EntityManagerFactory ) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
-        
+
         getApplicationScopedEntityManager(); // we create this on initialisation so that we own the EMF reference
                                              // otherwise Spring will close it after the transaction finishes
     }
@@ -51,50 +61,76 @@
             if ( this.appScopedEntityManager != null && !this.appScopedEntityManager.isOpen() ) {
                 throw new RuntimeException("Provided APP_SCOPED_ENTITY_MANAGER is not open");
             }
-            
+
             if ( this.appScopedEntityManager == null ) {
                 EntityManagerHolder emHolder = ( EntityManagerHolder ) TransactionSynchronizationManager.getResource( this.emf );
                 if ( emHolder == null ) {
                     this.appScopedEntityManager = this.emf.createEntityManager();
                     emHolder =  new EntityManagerHolder( this.appScopedEntityManager );
-                    TransactionSynchronizationManager.bindResource( emf, 
-                                                                    emHolder );                    
+                    TransactionSynchronizationManager.bindResource( this.emf,
+                                                                    emHolder );
+                    internalAppScopedEntityManager = true;
                 } else {
                     this.appScopedEntityManager = emHolder.getEntityManager();
                 }
-                
 
+
                 this.env.set( EnvironmentName.APP_SCOPED_ENTITY_MANAGER,
                               emHolder.getEntityManager() );
-                internalAppScopedEntityManager = true;
-            }          
+            }
         }
+        if (TransactionSynchronizationManager.isActualTransactionActive()){
+            this.appScopedEntityManager.joinTransaction();
+        }
         return this.appScopedEntityManager;
     }
 
     public EntityManager getCommandScopedEntityManager() {
-        return getApplicationScopedEntityManager();
+        return (EntityManager) this.env.get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER);
     }
 
     public void beginCommandScopedEntityManager() {
-        this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER,
-                      this.appScopedEntityManager );
+        if ( this.getCommandScopedEntityManager() == null || !this.getCommandScopedEntityManager().isOpen() ) {
+            EntityManagerHolder emHolder = ( EntityManagerHolder ) TransactionSynchronizationManager.getResource( "cmdEM" );
+            EntityManager em = null;
+            if ( emHolder == null ) {
+                em = this.emf.createEntityManager();
+                emHolder =  new EntityManagerHolder( em );
+                TransactionSynchronizationManager.bindResource( "cmdEM",
+                                                                emHolder );
+            } else {
+                em = emHolder.getEntityManager();
+            }
+            this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER,
+                          em );
+        }
+
+        this.getCommandScopedEntityManager().joinTransaction();
+        this.appScopedEntityManager.joinTransaction();
+
     }
 
     public void endCommandScopedEntityManager() {
-        this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER, 
-                      null );
+        if (TransactionSynchronizationManager.hasResource("cmdEM")){
+            TransactionSynchronizationManager.unbindResource("cmdEM");
+            if (getCommandScopedEntityManager() != null){
+                getCommandScopedEntityManager().close();
+            }
+
+        }
     }
 
     public void dispose() {
+        logger.trace("Disposing DroolsSpringJpaManager");
         if ( internalAppScopedEntityManager ) {
-            TransactionSynchronizationManager.unbindResource( this.emf );            
+            //TransactionSynchronizationManager.unbindResource( "appEM" );
+            TransactionSynchronizationManager.unbindResource( this.emf );
             if ( this.appScopedEntityManager != null && this.appScopedEntityManager.isOpen()  ) {
                 this.appScopedEntityManager.close();
                 this.internalAppScopedEntityManager = false;
                 this.env.set( EnvironmentName.APP_SCOPED_ENTITY_MANAGER, null );
-                this.env.set( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER, null );
             }
+            this.endCommandScopedEntityManager();
         }
     }
 

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java	2010-08-15 20:26:56 UTC (rev 34729)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/persistence/DroolsSpringTransactionManager.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -23,11 +23,19 @@
 import org.springframework.transaction.support.AbstractPlatformTransactionManager;
 import org.springframework.transaction.support.DefaultTransactionDefinition;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+/**
+ *
+ * @author Mark Proctor
+ * @author Esteban Aliverti
+ */
 public class DroolsSpringTransactionManager
     implements
     TransactionManager {
 
+    Logger                               logger                                            = LoggerFactory.getLogger( getClass() );
     private AbstractPlatformTransactionManager ptm;
 
     TransactionDefinition                      td                 = new DefaultTransactionDefinition();
@@ -36,7 +44,7 @@
     public DroolsSpringTransactionManager(AbstractPlatformTransactionManager ptm) {
         this.ptm = ptm;
     }
-    
+
     private boolean localTransaction;
 
     public void begin() {
@@ -46,7 +54,7 @@
             currentTransaction = this.ptm.getTransaction( td );
             localTransaction = true;
         } else {
-            localTransaction = false;   
+            localTransaction = false;
         }
     }
 
@@ -55,12 +63,16 @@
             // if we didn't begin this transaction, then do nothing
             this.localTransaction = false;
             this.ptm.commit( currentTransaction );
+            currentTransaction = null;
         }
     }
 
     public void rollback() {
-        this.localTransaction = false;        
-        this.ptm.rollback( currentTransaction );
+	if ( this.localTransaction ) {
+        	this.localTransaction = false;
+        	this.ptm.rollback( currentTransaction );
+		currentTransaction = null;
+	}
     }
 
     /**
@@ -71,6 +83,8 @@
         if ( ptm == null ) {
             return TransactionManager.STATUS_NO_TRANSACTION;
         }
+
+        logger.debug("Current TX name (According to TransactionSynchronizationManager) : "+TransactionSynchronizationManager.getCurrentTransactionName());
         if ( TransactionSynchronizationManager.isActualTransactionActive() ) {
             TransactionStatus transaction = null;
             try {
@@ -82,6 +96,7 @@
                 } else {
                     transaction = currentTransaction;
                 }
+                logger.debug("Current TX: "+transaction);
                 // If SynchronizationManager thinks it has an active transaction but
                 // our transaction is a new one
                 // then we must be in the middle of committing
@@ -108,4 +123,4 @@
     public void registerTransactionSynchronization(TransactionSynchronization ts) {
         TransactionSynchronizationManager.registerSynchronization( new SpringTransactionSynchronizationAdapter( ts ) );
     }
-}
+}
\ No newline at end of file

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/MyDroolsBean.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -0,0 +1,98 @@
+package org.drools.container.spring.timer;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
+import org.drools.persistence.jpa.KnowledgeStoreService;
+
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.springframework.orm.jpa.JpaTransactionManager;
+
+import org.slf4j.LoggerFactory;
+
+public class MyDroolsBean {
+
+    public static int TIMER_TRIGGER_COUNT;
+    private static int sessionId;
+    private EntityManagerFactory emf;
+    private KnowledgeBase kbase;
+    private KnowledgeStoreService kstore;
+    private JpaTransactionManager txm;
+
+    org.slf4j.Logger logger = LoggerFactory.getLogger( getClass() );
+
+
+    private TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+
+    public void initStartDisposeAndLoadSession() {
+        try {
+            EntityManager em = txm.getEntityManagerFactory().createEntityManager();
+            // create new ksession with kstore
+            StatefulKnowledgeSession ksession = kstore.newStatefulKnowledgeSession(kbase, null, getEnvironment());
+            sessionId = ksession.getId();
+
+            logger.info("\n\tSession id: "+sessionId+"\n");
+
+            ksession.getWorkItemManager().registerWorkItemHandler("testWorkItemHandler", workItemHandler);
+
+            ksession.startProcess("timer-flow", null);
+            Thread.sleep(4000);
+            ksession.dispose();
+        } catch (Exception ex) {
+            logger.error("Exception", ex);
+        }
+
+
+    }
+
+    public void endTheProcess() {
+        try {
+            StatefulKnowledgeSession ksession = kstore.loadStatefulKnowledgeSession(sessionId, kbase, null, getEnvironment());
+
+            //Sleep to check if the timer continues executing.
+            logger.info("\n\nSleeping to check that the timer is still running");
+            Thread.sleep(5000);
+
+            ksession.getWorkItemManager().completeWorkItem(TestWorkItemHandler.getWorkItem().getId(), null);
+
+            logger.info("\n\nSleeping to check that the timer is no longer running");
+            Thread.sleep(3000);
+            logger.info("Ok");
+            
+            
+            ksession.dispose();
+
+        } catch (InterruptedException ex) {
+            logger.error("Exception", ex);
+        }
+    }
+
+    private Environment getEnvironment() {
+        Environment environment = KnowledgeBaseFactory.newEnvironment();
+        environment.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+        environment.set(EnvironmentName.TRANSACTION_MANAGER, txm);
+        environment.set(EnvironmentName.GLOBALS, new MapGlobalResolver());
+        return environment;
+    }
+
+    public void setEmf(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+
+    public void setKbase(KnowledgeBase kbase) {
+        this.kbase = kbase;
+    }
+
+    public void setKstore(KnowledgeStoreService kstore) {
+        this.kstore = kstore;
+    }
+
+    public void setTxm(JpaTransactionManager txm) {
+        this.txm = txm;
+    }
+}

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TestWorkItemHandler.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TestWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TestWorkItemHandler.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -0,0 +1,25 @@
+package org.drools.container.spring.timer;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class TestWorkItemHandler implements WorkItemHandler {
+	private static WorkItem workItem = null;
+
+	public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void executeWorkItem(WorkItem item, WorkItemManager manager) {
+		// TODO Auto-generated method stub
+		workItem = item;
+		System.out.println("**** Inside TestWorkItemHandler, suspending.... ****");
+	}
+
+	public static WorkItem getWorkItem() {
+		return workItem;
+	}
+
+}

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TimerFlowTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TimerFlowTest.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/java/org/drools/container/spring/timer/TimerFlowTest.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -0,0 +1,58 @@
+package org.drools.container.spring.timer;
+
+import java.util.Properties;
+import static org.junit.Assert.*;
+import org.junit.Before;
+
+import org.junit.Test;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class TimerFlowTest {
+
+    private static final Logger            log    = LoggerFactory.getLogger( TimerFlowTest.class );
+    private static final String            TMPDIR = System.getProperty( "java.io.tmpdir" );
+
+    private ClassPathXmlApplicationContext ctx;
+
+    @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/timer/conf/spring-conf.xml" );
+            ctx.refresh();
+        } catch ( Exception e ) {
+            log.error( "can't create spring context",
+                       e );
+            throw new RuntimeException( e );
+        }
+    }
+
+    @Test
+    public void doTest() throws Exception{
+
+
+        MyDroolsBean myDroolsBean = (MyDroolsBean) ctx.getBean( "myDroolsBean");
+
+        assertEquals(0,myDroolsBean.TIMER_TRIGGER_COUNT);
+
+        myDroolsBean.initStartDisposeAndLoadSession();
+
+        int n = myDroolsBean.TIMER_TRIGGER_COUNT;
+        assertTrue(n > 0);
+
+        myDroolsBean.endTheProcess();
+        assertTrue(myDroolsBean.TIMER_TRIGGER_COUNT > n);
+    }
+}

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/conf/spring-conf.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/conf/spring-conf.xml	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/conf/spring-conf.xml	2010-08-15 20:28:02 UTC (rev 34730)
@@ -0,0 +1,79 @@
+<?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"
+	xmlns:jee="http://www.springframework.org/schema/jee"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:tx="http://www.springframework.org/schema/tx"
+	xmlns:aop="http://www.springframework.org/schema/aop"
+	xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
+		http://drools.org/schema/drools-spring http://drools.org/schema/drools-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
+		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+	<bean name="myDroolsBean" class="org.drools.container.spring.timer.MyDroolsBean">
+		<property name="emf" ref="entityManagerFactory" />
+		<property name="kbase" ref="knowledgeBase" />
+		<property name="kstore" ref="knowledgeStore" />
+		<property name="txm" ref="transactionManager" />
+	</bean>
+
+	<context:annotation-config/>
+
+	<drools:kstore id="knowledgeStore"/>
+
+	<drools:kbase id="knowledgeBase">
+		<drools:resources>
+			<drools:resource type="DRF"
+				             source="classpath:org/drools/container/spring/timer/flow/timer-flow.rf" />
+		</drools:resources>
+	</drools:kbase>
+
+	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<property name="entityManagerFactory" ref="entityManagerFactory" />
+	</bean>
+
+	<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+		<property name="driverClassName" value="org.h2.Driver" />
+		<property name="url" value="jdbc:h2:workflow" />
+		<property name="username" value="sa" />
+		<property name="password" value="" />
+	</bean>
+
+	<bean id="entityManagerFactory"
+		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+		<property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+		<property name="dataSource" ref="datasource" />
+		<!--property name="jpaProperties">
+			<props>
+                            <prop key="hibernate.connection.autocommit">false</prop>
+                            <prop key="hibernate.max_fetch_depth">3</prop>
+                            <prop key="hibernate.show_sql">false</prop>
+                            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
+                            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
+			</props>
+		</property-->
+	</bean>
+
+
+	<!--aop:config>
+        <aop:pointcut id="timerFlowManagerMethods"
+                      expression="execution(* org.drools.container.spring.timer.MyDroolsBean.*(..))"/>
+
+        <aop:advisor advice-ref="timerFlowManagerTxAdvice"
+                     pointcut-ref="timerFlowManagerMethods"/>
+    </aop:config>
+
+    <tx:advice id="timerFlowManagerTxAdvice" transaction-manager="transactionManager">
+        <tx:attributes>
+            <tx:method name="initStartDisposeAndLoadSession" propagation="REQUIRED"/>
+            <tx:method name="endTheProcess" propagation="REQUIRED"/>
+            <tx:method name="*" propagation="REQUIRED" read-only="true"/>
+        </tx:attributes>
+    </tx:advice-->
+
+</beans>

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/flow/timer-flow.rf
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/flow/timer-flow.rf	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-container/drools-spring/src/test/resources/org/drools/container/spring/timer/flow/timer-flow.rf	2010-08-15 20:28:02 UTC (rev 34730)
@@ -0,0 +1,39 @@
+<?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="timer-flow" id="timer-flow" package-name="drools.timer" >
+
+  <header>
+    <imports>
+      <import name="org.drools.container.spring.timer.MyDroolsBean" />
+    </imports>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="16" y="16" width="48" height="48" />
+    <end id="3" name="End" x="377" y="20" width="80" height="40" />
+    <workItem id="4" name="TestWorkItem" x="96" y="20" width="137" height="40" >
+      <work name="testWorkItemHandler" >
+      </work>
+      <onEntry>
+        <action type="expression" dialect="mvel" >System.out.println("**** Entering Test Work Item ****");</action>
+      </onEntry>
+      <onExit>
+        <action type="expression" dialect="mvel" >System.out.println("**** Exiting Test Work Item ****");</action>
+      </onExit>
+      <timers>
+        <timer id="1" delay="1000" period="2000" >
+        <action type="expression" dialect="java" >System.out.println("**** Timer Triggered ****");
+MyDroolsBean.TIMER_TRIGGER_COUNT++;</action>
+        </timer>
+      </timers>
+    </workItem>
+  </nodes>
+
+  <connections>
+    <connection from="1" to="4" />
+    <connection from="4" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2010-08-15 20:26:56 UTC (rev 34729)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2010-08-15 20:28:02 UTC (rev 34730)
@@ -286,6 +286,7 @@
             try {
                 txm.rollback();
             } catch ( Exception t2 ) {
+                logger.error("Could not commit session or rollback. Original exception:",t1);
                 throw new RuntimeException( "Could not commit session or rollback",
                                             t2 );
             }



More information about the jboss-svn-commits mailing list