Я проверил мои транзакции ejb jpa. Я использую управляемый контейнером entityManager:
@PersistenceContext(unitName = "ParticularUnit")
EntityManager em;
У меня есть область действия PersistanceContext и контейнер управляет каждой транзакцией.
Для каждого экземпляра объединенных сессионных компонентов создается экземпляр entityManager.
Когда я отмечаю метод бина с помощью @TransactionAttribute (TransactionAttributeType.REQUIRED) и
Вызовите два метода внутри, я ожидал, что метод test1 будет иметь другой PersitenceContext, но я был удивлен, потому что это было то же самое.
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void test(Configuration config){
if (!em.contains(config)) {
config = em.find(Configuration.class, config.getId());
}
System.out.println("********************");
System.out.println("actiovation, em= "+ em);
System.out.println("actiovation, config= "+ config);
System.out.println("*********************");
test1(config);
test2(config);
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void test1(Configuration config){
config = em.find(Configuration.class, config.getId());
System.out.println("////////");
System.out.println("requires_new"+ config);
System.out.println("requires_new, em= "+ em);
System.out.println("----------------");
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void test2(Configuration config){
config = em.find(Configuration.class, config.getId());
System.out.println("////////");
System.out.println("required"+ config);
System.out.println("required, em= "+ em);
System.out.println("----------------");
}
Я звоню test
и получил этот след.
********************
actiovation, em= JPATxEntityManager@54515451
actiovation, config= com.profix.sc.db.configuration.Configuration@7f287f28
*********************
////////
requires_newcom.profix.sc.db.configuration.Configuration@7f287f28
requires_new, em= JPATxEntityManager@54515451[PuId=SCApplication#SCApplication-ejb.jar#SCApplication, SCApplication#SCApplication-ejb.jar#PaymentConfigBean#com.profix.sc.ejb.PaymentConfigBean/em]
----------------
////////
requiredcom.profix.sc.db.configuration.Configuration@7f287f28
required, em= JPATxEntityManager@54515451[PuId=SCApplication#SCApplication-ejb.jar#SCApplication, SCApplication#SCApplication-ejb.jar#PaymentConfigBean#com.profix.sc.ejb.PaymentConfigBean/em]
Почему в test1()
persistenceContext такой же, как в test()
?