我有一个Java EE 6 servlet,它创建了一个FooBarModelImpl
的实例,这个类使用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,以便容器处理事务管理。
答案 0 :(得分:1)
您必须确保容器管理您的班级FooBarModelImpl
,以便安全地注入PersistenceContext
。关于这一点,请参阅此answer。
完成此操作后,只需删除begin()
和commit()
方法调用,因为事务边界由容器自动设置。
您也不再需要保留对UserTransaction
对象的引用。