0 Replies Latest reply on May 20, 2008 10:19 PM by jghayward.ice.0136.gmail.com

    Transaction Demarcation for REQUIRES_NEW not working with async methods

    jghayward.ice.0136.gmail.com

      @Local
      public interface TestJob_if {
          @Asynchronous @Transactional
          public QuartzTriggerHandle doWork();
      }
      
      @Stateless
      @Name("testJob")
      public class TestJob  implements TestJob_if {
          @In(create = true)  private Session session;
      
          public QuartzTriggerHandle doWork() {
              BlacklistEntry b = createEntry();
             
              if (true) throw new RuntimeException("fail here...");
              
              return null;
          }
          
          @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
          public BlacklistEntry createEntry() {
              BlacklistEntry b = new BlacklistEntry();
              b.setBlacklistType(BlacklistType.EMAIL);
              b.setField1("some.email@domain.com");
              
              session.persist(b);
              return b;
          }
      }



      When the exception occurs in the main async method, the entire transaction is rolled back and nothing is committed to the database.  I expected the createEntry() function to have executed in a new transaction and to have committed the entry to the database before returning to the parent method.  Am I doing something wrong or does this look like a bug in transaction demarcation with async methods?


      jboss 2.0.2.GA and jboss 4.2.2.GA