JPA Toplink - зачем проверять активную транзакцию в начале процесса? - PullRequest
2 голосов
/ 14 февраля 2011

Я видел несколько примеров в интернете, которые проверяют, активна ли транзакция в начале процесса.

Код ниже, который является моим, получает 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(.....

1 Ответ

2 голосов
/ 14 февраля 2011

Я не вижу никакой причины для проверки транзакции, поскольку код использует API транзакции JPA, транзакция не может быть активной, если EntityManager был только что создан.

Если выиспользовали управляемый JTA EntityManager, тогда транзакция JTA уже могла быть активной.Но для JTA вы не можете начать транзакцию с использованием JPA Transaction, вам нужно будет начать транзакцию с JTA или использовать joinTransaction () в JPA.

...