Wie habe ich den folgenden Code in meiner Nicht-EJB-Anwendung. Der Code funktioniert.Ein JTA EntityManager kann getTransaction() nicht verwenden
@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 erneut verwenden Sie den Code oben enthält. Meine peristence Einheit für die neue Anwendung sieht wie folgt 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 eine Ausnahme aus, wenn es diese Zeile hits:
EntityTransaction tx = em.getTransaction();
die Ausnahme ist:
A JTA EntityManager cannot use getTransaction()
Welche ist klar genug. Die Frage ist, wie ich meinen Code konvertieren würde, damit die Transaktionen vom Container verwaltet werden. Vermutlich müssen meine Bohnenmethoden angemessen kommentiert werden ... Die Frage ist wie?
Also was ist die Lösung hier? – rtcarlson
@rtcarlson Warum heruntergeregelt & habe ich nicht in meiner Post gelöscht, um 'UserTransaction' Schnittstelle zu verwenden. –
@ downvoter Wenn Sie nicht erklären und verstehen können, nicht ohne Grund abmelden. –