如何在非ejb應用程序中使用以下代碼。代碼起作用。JTA EntityManager不能使用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();
}
}
}
}
在新的應用程序中,我使用EJB3 + JSF並希望重新使用包含上述代碼的庫。新應用程序我peristence單元看起來是這樣的:
<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()
哪個足夠清楚。問題是如何將我的代碼轉換爲由容器管理的事務。據推測,我的bean方法需要適當的註釋...問題是如何?
那麼這裏有什麼解決方案? – rtcarlson
@rtcarlson爲什麼downvoted&我沒有清除我的帖子使用'UserTransaction'界面。 –
@downvoter如果你無法解釋和理解,請不要無故倒戈。 –