Ein JTA-EntityManager kann getTransaction () nicht verwenden
Wie kann ich den folgenden Code in meiner Nicht-EJB-Anwendung verwenden? Der Code funktioniert.
@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();
}
}
}
}
In einer neuen Anwendung verwende ich EJB3 + JSF und möchte die Bibliothek mit dem obigen Code wiederverwenden. Meine Peristence Unit für die neue Anwendung sieht folgendermaßen aus:
<persistence-unit name="myApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MySQLConnection</jta-data-source>
</persistence-unit>
Meine neue Anwendung löst eine Ausnahme aus, wenn sie diese Zeile erreicht:
EntityTransaction tx = em.getTransaction();
die ausnahme ist:
A JTA EntityManager cannot use getTransaction()
Welches ist klar genug. Die Frage ist, wie ich meinen Code konvertieren würde, damit die Transaktionen vom Container verwaltet werden. Vermutlich müssen meine Bean-Methoden entsprechend kommentiert werden ... Die Frage ist, wie?