Jak uzyskać następujący kod w mojej aplikacji innej niż ejb. Kod działa.Użytkownik JTA EntityManager nie może używać metody getTransaction()
@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();
}
}
}
}
W nowej aplikacji używam EJB3 + JSF i chciałbym ponownie użyć biblioteki zawierającej powyższy kod. Moja jednostka peristence dla nowej aplikacji wygląda następująco:
<persistence-unit name="myApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>MySQLConnection</jta-data-source>
</persistence-unit>
Moja nowa aplikacja wyjątek gdy trafi ten wiersz:
EntityTransaction tx = em.getTransaction();
Wyjątkiem jest:
A JTA EntityManager cannot use getTransaction()
Który wystarczająco jasne. Pytanie brzmi, w jaki sposób mogę przekonwertować mój kod na transakcje zarządzane przez kontener. Przypuszczalnie moje metody fasoli muszą być odpowiednio adnotowane ... Pytanie brzmi: jak?
więc jakie jest rozwiązanie tutaj? – rtcarlson
@rtcarlson Dlaczego downvoted i nie wyczyściłem w moim poście, aby użyć interfejsu 'UserTransaction'. –
@downvoter Jeśli nie możesz tego wyjaśnić i zrozumieć, nie odrzucaj bez powodu. –