Java 来自servlet的JPA事务

Java 来自servlet的JPA事务,java,jpa,jta,Java,Jpa,Jta,我有一个JavaEE6servlet,它创建了FooBarModelImpl的一个实例,这个类使用JPA获取一些资源 public class FooBarModelImpl { @Resource UserTransaction ut; @PersistenceContext(unitName="fooBarUnit") private EntityManager em; public void addPackage(UpgradePackageE

我有一个JavaEE6servlet,它创建了
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,以便容器处理事务管理。

您必须确保您的类
FooBarModelImpl
由容器管理,以便安全地注入
PersistenceContext
。关于这一点,请看这个

完成后,只需删除
begin()
commit()
方法调用,因为事务边界是由容器自动设置的

您也不再需要保留对
UserTransaction
对象的引用