Um EntityManager do JTA não pode usar getTransaction ()
Como eu tenho o seguinte código no meu aplicativo não-ejb. O código funciona.
@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();
}
}
}
}
Em um novo aplicativo, estou usando o EJB3 + JSF e gostaria de reutilizar a biblioteca que contém o código acima. Minha unidade de peristencia para o novo aplicativo se parece com isso:
<persistence-unit name="myApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MySQLConnection</jta-data-source>
</persistence-unit>
Meu novo aplicativo lança uma exceção quando atinge esta linha:
EntityTransaction tx = em.getTransaction();
a exceção é:
A JTA EntityManager cannot use getTransaction()
O que é claro o suficiente. A questão é como eu iria converter meu código para ter as transações gerenciadas pelo contêiner. Presumivelmente, meus métodos de bean precisam ser anotados apropriadamente ... A questão é como?