Uploaded image for project: 'TomEE'
  1. TomEE
  2. TOMEE-2057

@BeforeCompletion callback issue

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 7.0.4
    • TomEE Core Server
    • None

    Description

      I have a @Stateful bean which has @AfterBegin & @BeforeCompletion callbacks defined. It tries to persist a JPA entity in each one of them:

      @Stateful
      public class SessionBean implements Serializable {
          public static final int ID_AFTER_BEGIN = 1234;
          public static final int ID_BEFORE_COMPLETION = 5678;
          public static final int ID_TX_ENTITY = 9999;
      
          @PersistenceContext
          EntityManager em;
      
          @AfterBegin
          public void afterBegin() {
              final TestEntity entity = new TestEntity(ID_AFTER_BEGIN, "On AFTER_BEGIN");
              em.persist(entity);
              if(null == em.find(TestEntity.class, ID_AFTER_BEGIN)){
                  throw new IllegalStateException("Entity not persisted in AFTER_BEGIN");
              }
          }
      
          @BeforeCompletion
          public void beforeCompletion() {
              final TestEntity entity = new TestEntity(ID_BEFORE_COMPLETION, "On BEFORE_COMPLETION");
              em.persist(entity);
              if(null == em.find(TestEntity.class, ID_BEFORE_COMPLETION)){
                  throw new IllegalStateException("Entity not persisted in BEFORE_COMPLETION");
              }
          }
      
          @TransactionAttribute(TransactionAttributeType.REQUIRED)
          public void txRequired() {
              final TestEntity entity = new TestEntity(ID_TX_ENTITY, "On TX_REQUIRED");
              em.persist(entity);
      
              if(null == em.find(TestEntity.class, ID_TX_ENTITY)){
                  throw new IllegalStateException("Entity not persisted in TX_REQUIRED");
              }
          }
      }
      

      During the transaction everything seems fine, but after the transaction EntityManger.find() returns null for the bean persisted during @BeforeCompletion

      I've attached sample app that reproduces the issue.

      Expected result:
      The output does not contain any failed tests.

      Actual result:

      TESTING TX_REQUIRED WITHOUT EXISTING TRANSACTION
      [TEST FAILED] Expecting entity for BEFORE_COMPLETION instead of: null
      

      PS: I observe a similar issue for @AfterBegin in another case, but I'm not able to extract a reproducible test case from it. But I thinkthe two issues are linked

      Attachments

        1. sample.zip
          29 kB
          Svetlin Zarev
        2. sample-v2.zip
          29 kB
          Svetlin Zarev

        Issue Links

          Activity

            People

              Unassigned Unassigned
              SvetlinZarev Svetlin Zarev
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: