我有一个创建FooBarModelImpl
实例的Java EE 6 servlet,该类使用JPA来获取一些资源。
public class FooBarModelImpl
{
@Resource
UserTransaction ut;
@PersistenceContext(unitName="fooBarUnit")
private EntityManager em;
public void addPackage(UpgradePackageEntity p)
{
try{
ut.begin();
em.persist(p);
ut.commit();
} catch (..) {}
}
}
持久性单元的配置方式如下:
<persistence-unit name="fooBarUnit" transaction-type="JTA">
我的问题是如何摆脱手动处理
ut.begin()
和ut.commit()
的麻烦?我想使用JPA,以便容器处理事务管理。 最佳答案
您必须确保您的类FooBarModelImpl
由容器管理,以便安全地注入PersistenceContext
。关于这一点,请参见此answer。
完成此操作后,只需删除begin()
和commit()
方法调用,因为事务边界是由容器自动设置的。
您也无需保留对UserTransaction
对象的引用。
关于java - 来自servlet的JPA事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9615400/