2 Replies Latest reply on Dec 24, 2007 1:23 PM by Jonathan Halliday

    EJB 3 + transaction propagation

    David Ford Newbie

      Hi ,

      I am stuck in an issue and need your help on it.

      I have an ejb (Bean1) where in a transaction is started.
      From this ejb (Bean1) if I call another ejb(Bean2), and anything wrong happens in Bean2, whole of the transaction is rolled back.
      This is controlled by the Jboss.

      My query is..
      If from Bean1, I make a call to some utility class which makes entires into DB and if an error happens in Bean1 , after utility class commits the DB changes. How can I rollback the changes made in utility class.

      In short, how is the transaction in EJB3 propagated to utility class?

      I am using hibernate in utility class and the application server used is JBoss4.

      I set hibernate.transaction.manager_lookup_class
      and set hibernate.transaction.factory_class to org.hibernate.transaction.JTATransactionFactory

      My code in utility class..

      UserTransaction tx = (UserTransaction)new InitialContext()

      try {

      // Do some work
      saved object using hibernate session

      catch (RuntimeException e) {
      throw e; // or display error message

      The logs show issue with tx.begin(); statement..

      at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.begin(BaseTransaction.java:79)

      and on the screen I get error
      java.lang.IllegalStateException: Wrong tx on thread: expected TransactionImple < ac, BasicAction: -3f5702b4:390d:474aea8d:77 status: ActionStatus.ABORTED >, actual null
      at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:162)
      at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)

      Can you please tell what could be the problem?

      Any help will be greatly appreciated.

      Please reply.. this is urgent...