2

我在互联网上看到很少有样本可以在流程开始时检查交易当前是否处于活动状态。

下面的代码是我的从工厂获取 EntityManager。

我不明白为什么需要在开始之前检查交易是否处于活动状态?

是因为其他一些进程可能正在使用相同的 EntityManager 实例吗?(EntityManagerFactory 是单例但 EntityManager 不是)

    @Path("update")
    @PUT
    @Consumes("application/json")
    public Response machineUpdate(String content) {
        JSONObject jObj = null;
        EntityManager em = null;
        EntityTransaction txn = null;

        try {

           JSONObject jObj = new JSONObject(content);
           em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

           //what's this line doing here???
           if(em.getTransaction().isActive()) {
               return HttpStatusHandler.sendConflict();
           }

           txn = em.getTransaction();
           txn.begin();
          //more process ......
        }
        catch(.....
4

1 回答 1

2

我看不出任何需要进行事务检查的理由,因为代码使用的是 JPA 事务 API,因此在刚刚创建 EntityManager 的情况下,事务无法处于活动状态。

如果您使用的是 JTA 托管的 EntityManager,那么 JTA 事务可能已经处于活动状态。但是对于 JTA,您不能使用 JPA Transaction 开始事务,您可以使用 JTA 开始事务,或者在 JPA 中使用 joinTransaction()。

于 2011-02-14T14:27:33.347 回答