来自servlet的JPA事务

时间:2012-03-08 09:33:24

标签: java jpa jta

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

1 个答案:

答案 0 :(得分:1)

您必须确保容器管理您的班级FooBarModelImpl,以便安全地注入PersistenceContext。关于这一点,请参阅此answer

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

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