Hibernate против EclipseLink CMT и BMT управляемой транзакции - PullRequest
0 голосов
/ 23 мая 2019

У меня есть:

@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

...