[jboss-user] [JBoss jBPM] - JTA Transaction support for jbpm - Issues with SeamPhaseList

bloreguy do-not-reply at jboss.com
Mon Mar 31 22:34:07 EDT 2008

The issue here seems to be this:

I obtain a UserTransaction at the start of the method and in case of error,  I call rollback in catch block. But the rollback is intercepted by the SeamPhaseListener which tries to begin a transaction and I get the error
" Could not start transaction:

How do I disable SeamPhaseListener from starting a new transaction?

More Details
I am having issues creating a new UserTransaction in a jbpm process using Hibernate. Am I missing anything in order to create a JTA User transaction and then bind the Hibernate session within the transaction? Please advise
Any advice greatly appreciated

My Code

public String createXXXXX()
JbpmContext jbpmContext = null;
Session session = null;
UserTransaction tx = null;
jbpmContext = JbpmUtil.getJbpmContext();
session = HibernateUtil.getSession();
System.out.println("About to start tx");
tx = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");

while ( ...) {
..... 1. Perform custom DB operations using session
2. Persist ProcessInstance, Task using the same session

// throw error to test rollback
} catch ( Exception e)

When Tx is rolled back, I expect that all DB operations and jbPM operations shoudl be rolled back. Instead I see this strange behavior:

When I lookup the transaction from InitialContext, the trasnaction statuis is already active!
**************** TX STATUS: 0

So, when I rollback the transaction I get the error:

java.lang.IllegalStateException: Could not start transaction
at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:571
at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsBeforePhase(Se
at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseList
at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.ja

Caused by: javax.transaction.NotSupportedException: transaction is already active
at org.jboss.seam.transaction.HibernateTransaction.assertNotActive(Hiber
at org.jboss.seam.transaction.HibernateTransaction.begin(HibernateTransa
at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:566



< service name="persistence" >
< factory>
< bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">
< field name="isTransactionEnabled"> < false/>
< field name="isCurrentSessionEnabled"> < false />
</ bean>
</ factory>
</ service>
< service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
< service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
< service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
< service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />
< service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
</ jbpm-context>


<session-factory name="java:/bookingDatabase">
< property name="connection.datasource">java:/DefaultDS
< property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider
< property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory
< property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup
< property name="transaction.flush_before_completion">true
<!-- org.hibernate.transaction.JDBCTransactionFactory -->
< property name="jta.UserTransaction">java:comp/UserTransaction
< property name="hibernate.show_sql">true

<!-- Use the Hibernate built-in pool for tests. -->
< property name="connection.pool_size">1 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4140315#4140315

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4140315

More information about the jboss-user mailing list