2012-03-08 56 views
2

我有一个创建FooBarModelImpl实例的Java EE 6 servlet,此类使用JPA来获取一些资源。来自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,以便容器处理事务管理。

回答

1

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

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

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