JTA EntityManager не может использовать getTransaction ()
Как у меня есть следующий код в моем приложении не-EJB. Код работает.
@Override
public void saveItems(Collection<T> items) {
synchronized (em) {
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
for (T item : items) {
saveItem_((Class<T>) null, item);
}
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
}
}
В новом приложении я использую EJB3 + JSF и хотел бы повторно использовать библиотеку, содержащую приведенный выше код. Моя единица постоянства для нового приложения выглядит следующим образом:
<persistence-unit name="myApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MySQLConnection</jta-data-source>
</persistence-unit>
Мое новое приложение выдает исключение, когда оно попадает в эту строку:
EntityTransaction tx = em.getTransaction();
исключение:
A JTA EntityManager cannot use getTransaction()
Что достаточно ясно. Вопрос в том, как мне преобразовать мой код, чтобы транзакции управлялись контейнером. Предположительно, мои методы должны быть соответствующим образом аннотированы ... Вопрос в том, как?