2011-02-14 3 views
2

Я видел несколько примеров в Интернете, которые проверяют, активна ли транзакция в начале процесса.JPA Toplink - в чем необходимость проверки активной транзакции в начале процесса?

Код, который является моим, получает EntityManager с завода.

Не могу понять Почему нужно проверять, активна ли транзакция ДО начала даже() ???

Это потому, что какой-либо другой процесс может использовать один и тот же экземпляр EntityManager? (The 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(..... 

ответ

2

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

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

+0

Я не использую JTA (отключен в persistences.xml), но на основе моего исследования и вашего заявления, что isActive() проверка в начале не требуется, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^