[jboss-svn-commits] JBL Code SVN: r28961 - in labs/jbossrules/trunk/drools-persistence-jpa/src: main/resources/META-INF and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 17 10:33:47 EDT 2009


Author: KrisVerlaenen
Date: 2009-08-17 10:33:47 -0400 (Mon, 17 Aug 2009)
New Revision: 28961

Modified:
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
Log:
JBRULES-2199: NullPointerException with JPA session persistence in Drools Flow
 - fixing issue when using user transaction to create session

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	2009-08-17 13:54:38 UTC (rev 28960)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2009-08-17 14:33:47 UTC (rev 28961)
@@ -16,8 +16,6 @@
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
-import org.drools.StatefulSession;
-import org.drools.command.Command;
 import org.drools.command.CommandService;
 import org.drools.command.Context;
 import org.drools.command.impl.ContextImpl;
@@ -29,7 +27,6 @@
 import org.drools.persistence.processinstance.JPASignalManager;
 import org.drools.persistence.processinstance.JPAWorkItemManager;
 import org.drools.reteoo.ReteooStatefulSession;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.KnowledgeSessionConfiguration;
@@ -105,17 +102,25 @@
         this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
         this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
         //        System.out.println( ((EntityManagerImpl) this.em).getFlushMode() );
+        boolean localTransaction = false;
         UserTransaction ut = null;
         try {
             InitialContext ctx = new InitialContext();
             ut = (UserTransaction) ctx.lookup( "java:comp/UserTransaction" );
-            ut.begin();
+            if ( ut.getStatus() == Status.STATUS_NO_TRANSACTION ) {
+                // If there is no transaction then start one, we will commit within the same Command
+                ut.begin();
+                localTransaction = true;
+            }
             registerRollbackSync();
             this.em.joinTransaction();
 
             this.em.persist( this.sessionInfo );
 
-            ut.commit();
+            if ( localTransaction ) {
+                // it's a locally created transaction so commit
+                ut.commit();
+            }
             
         } catch ( Throwable t1 ) {
             try {
@@ -151,15 +156,24 @@
         this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
         this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
         //System.out.println(((EntityManagerImpl) this.em).getFlushMode());
+        
+        boolean localTransaction = false;
         UserTransaction ut = null;
         try {
             InitialContext ctx = new InitialContext();
             ut = (UserTransaction) ctx.lookup( "java:comp/UserTransaction" );
-            ut.begin();
+            if ( ut.getStatus() == Status.STATUS_NO_TRANSACTION ) {
+                // If there is no transaction then start one, we will commit within the same Command
+                ut.begin();
+                localTransaction = true;
+            }
+            this.em.joinTransaction();
             registerRollbackSync();
-            this.em.joinTransaction();
             sessionInfo = this.em.find( SessionInfo.class, sessionId );
-            ut.commit();
+            if ( localTransaction ) {
+                // it's a locally created transaction so commit
+                ut.commit();
+            }
         } catch ( Throwable t1 ) {
             try {
                 if ( ut != null ) {

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml	2009-08-17 13:54:38 UTC (rev 28960)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/resources/META-INF/persistence.xml	2009-08-17 14:33:47 UTC (rev 28961)
@@ -26,7 +26,7 @@
 	        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>	        
 	        <property name="hibernate.max_fetch_depth" value="3"/>
 		    <property name="hibernate.hbm2ddl.auto" value="update" />
-            <property name="hibernate.show_sql" value="true" />	
+            <property name="hibernate.show_sql" value="false" />	
             <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
 	    </properties>        
     </persistence-unit>

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java	2009-08-17 13:54:38 UTC (rev 28960)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java	2009-08-17 14:33:47 UTC (rev 28961)
@@ -143,7 +143,10 @@
                  TransactionManagerServices.getTransactionManager() );
         env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
 
+        UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+        ut.begin();
         StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+        ut.commit();
 
         //      EntityManager em = emf.createEntityManager();
         //      SessionInfo sInfo = em.find( SessionInfo.class, 1 );
@@ -154,7 +157,7 @@
         List list = new ArrayList();
 
         // insert and commit
-        UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+        ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
         ut.begin();
         ksession.setGlobal( "list",
                             list );
@@ -193,7 +196,10 @@
                       list.size() );
         
         // now load the ksession
+        ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+        ut.begin();
         ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( ksession.getId(), kbase, null, env );
+        ut.commit();
         
         ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
         ut.begin();



More information about the jboss-svn-commits mailing list