[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