[jbpm-dev] [Design of JBoss jBPM] - jta transaction interceptor

tom.baeyens@jboss.com do-not-reply at jboss.com
Mon Apr 27 01:45:39 EDT 2009


here's a status report on the jta transaction interceptor.

goals: configure 1 command service that can handle following situations:

Called from inside an ongoing JTA transaction
=============================
The JTA transaction could be started by user code (BMT), ejb with CMT, seam or a spring component.

jBPM should just join this transaction.  We assume that hibernate is configured with a JTA TX aware datasource.  So in that case our JTA transaction interceptor doesn't have to do anything.


Called without an ongoing JTA transaction
===========================
The interceptor will then use the UserTransaction to begin and commit a JTA transaction.  In case of a RuntimeException coming out of the command execution, then the JTA UserTransaction is rolled back.

In case this interceptor manages the JTA transaction I also added retry mechanism around the JTA transaction.  Which means that if a StaleObjectStateException comes out of hibernate, then the same command is retried.  By default max 3 times with incremental backoff delays.
I couldn't leverage the retry interceptor for this feature.  As that would mean that the retry interceptor is applied always.  And the JtaTransactionInterceptor will not manage the JTA tx all situations.  So I had to duplicate that code into the JTA tx interceptor.    It's left as a TODO (JBPM-2196) to refactor the code so that the retry code not duplicated.



Another path to investigate further is associating the jBPM Environment to the JTA transaction (JBPM-2197).  Suppose a user manages a JTA tx with an EJB method.  Inside that method there are 3 subsequent invocations to the jBPM services.  In the current configuration, the EnvironmentInterceptor will create 3 separate environments.  But we could also do just like hibernate and seam in that case.  During interception of the first method invocation, create a new Environment and then associate it to the JTA transaction and close it in the beforeCompletion of a Synchronization.  Then the 2 subsequent invocations within the same TX could find and leverage that environment.  

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

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



More information about the jbpm-dev mailing list