如何在我的非 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()
这很清楚。问题是如何将我的代码转换为由容器管理的事务。大概我的bean方法需要适当地注释......问题是如何?