У меня есть:
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class HalloEjb implements HalloEjbLocal {
@PersistenceUnit(unitName = "testPersistenceUnitBMTHibernate")
public EntityManagerFactory entityManagerFactory;
...
}
В указанном выше компоненте у меня есть код:
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.getTransaction().commit();
Когда приложение запускается с провайдером спящего объекта, я знаю, что в компоненте CMT это не может быть транзакция- это ясно для меня, и я понимаю ниже предупреждение:
You cannot commit during a managed transaction
, но когда то же приложение запускается с провайдером объекта eclipselink, ошибки не возникает:
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class HalloEjb implements HalloEjbLocal {
@PersistenceUnit(unitName = "testPersistenceUnitBMTEclipseLink")
public EntityManagerFactory entityManagerFactory;
...
}
В вышеупомянутом бине у меня естькод:
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.getTransaction().commit();
У меня такой вопрос: почему используется Hibernate? Мы ожидали ошибку, потому что не разрешено использовать транзакцию начала в управляемом компоненте CMT, но почему с помощью EclipseLink можно использовать фиксацию в управляемом компоненте CMT