Каково влияние явного запуска и принятия транзакции, когда тип транзакции - JTA? - PullRequest
2 голосов
/ 08 апреля 2019

Я работаю над J2EE приложением, которое будет развернуто на Weblogic, и содержит два уровня:

  1. Бизнес: DAO и логические методы
  2. EJB:который будет использовать бизнес-уровень

Я разделяю двухуровневый, чтобы иметь возможность повторно использовать бизнес-уровень (как библиотеку jar) в проекте Java SE.

IЯ использую transaction-type = JTA, чтобы позволить серверу управлять транзакциями, но в проекте SE я использую transaction-type = RESOURCE_LOCAL, поэтому мне нужно явно начать и зафиксировать транзакцию.

Итак, вопрос: есть ли проблемы?если я запускаю и фиксирую транзакцию явно при использовании JTA

Другими словами, существуют ли огромные различия между двумя приведенными ниже кодами:

public void create(T entity) {

    entityManager.persist(entity);

}

и

public void create(T entity) {

    entityManager.getTransaction().begin(); 
    entityManager.persist(entity);
    entityManager.getTransaction().commit();

}

1 Ответ

1 голос
/ 08 апреля 2019

Вы должны быть более осторожны при работе с транзакциями вручную. Всегда имейте сеть безопасности в случае исключения, чтобы откатить ваши операции:

      try {
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        try {
            entityManager.persist(entity);
            transaction.commit();
        } catch (Exception e) {                
            transaction.rollback(); 
            throw e; // optional if you want to manage the exception higher up                         
        } finally {
          entityManager.close(); // optional if you also manage you EM creation manually.
         } 
...