JTA EntityManager 不能使用 getTransaction()
如何在我的非 ejb 应用程序中使用以下代码。代码有效。
@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,并希望重用包含上述代码的库。我用于新应用程序的持久性单位如下所示:
<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()
这已经足够清楚了。问题是,如何转换代码,让容器管理事务。想必我的豆类方法需要适当地注释...问题是如何实现?