Учебники

EJB — Сделки

Транзакция — это единица рабочих элементов, которая соответствует свойствам ACID. КИСЛОТА означает Атомный, Последовательный, Изолированный и Прочный.

  • Атомная — если какой-либо из рабочих элементов потерпит неудачу, весь блок будет считаться неисправным. Успех означает, что все пункты выполнены успешно.

  • Согласованный — транзакция должна поддерживать систему в согласованном состоянии.

  • Изолированный — каждая транзакция выполняется независимо от любой другой транзакции.

  • Долговечный — Транзакция должна выдерживать системный сбой, если она была выполнена или зафиксирована.

Атомная — если какой-либо из рабочих элементов потерпит неудачу, весь блок будет считаться неисправным. Успех означает, что все пункты выполнены успешно.

Согласованный — транзакция должна поддерживать систему в согласованном состоянии.

Изолированный — каждая транзакция выполняется независимо от любой другой транзакции.

Долговечный — Транзакция должна выдерживать системный сбой, если она была выполнена или зафиксирована.

Контейнер / серверы EJB являются серверами транзакций и обрабатывают распространение контекста транзакций и распределенные транзакции. Транзакции могут управляться контейнером или пользовательской обработкой кода в коде компонента.

  • Управляемые контейнером транзакции — в этом типе контейнер управляет состояниями транзакции.

  • Управляемые Бином Транзакции — В этом типе разработчик управляет жизненным циклом состояний транзакции.

Управляемые контейнером транзакции — в этом типе контейнер управляет состояниями транзакции.

Управляемые Бином Транзакции — В этом типе разработчик управляет жизненным циклом состояний транзакции.

Управляемые контейнером транзакции

EJB 3.0 указал следующие атрибуты транзакций, которые реализуют EJB-контейнеры:

  • ТРЕБУЕТСЯ — указывает, что бизнес-метод должен выполняться внутри транзакции, в противном случае для этого метода будет запущена новая транзакция.

  • REQUIRES_NEW — указывает, что для бизнес-метода должна быть запущена новая транзакция.

  • ПОДДЕРЖКА — Указывает, что бизнес-метод будет выполняться как часть транзакции.

  • NOT_SUPPORTED — указывает, что бизнес-метод не должен выполняться как часть транзакции.

  • ОБЯЗАТЕЛЬНО — Указывает, что бизнес-метод будет выполнен как часть транзакции, в противном случае будет сгенерировано исключение.

  • НИКОГДА — Указывает, что если бизнес-метод выполняется как часть транзакции, то будет выдано исключение.

ТРЕБУЕТСЯ — указывает, что бизнес-метод должен выполняться внутри транзакции, в противном случае для этого метода будет запущена новая транзакция.

REQUIRES_NEW — указывает, что для бизнес-метода должна быть запущена новая транзакция.

ПОДДЕРЖКА — Указывает, что бизнес-метод будет выполняться как часть транзакции.

NOT_SUPPORTED — указывает, что бизнес-метод не должен выполняться как часть транзакции.

ОБЯЗАТЕЛЬНО — Указывает, что бизнес-метод будет выполнен как часть транзакции, в противном случае будет сгенерировано исключение.

НИКОГДА — Указывает, что если бизнес-метод выполняется как часть транзакции, то будет выдано исключение.

пример

package com.tutorialspoint.txn.required;
 
import javax.ejb.*
 
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class UserDetailBean implements UserDetailRemote {
	
   private UserDetail;

   @TransactionAttribute(TransactionAttributeType.REQUIRED)
   public void createUserDetail() {
      //create user details object
   }
}

Бизнес-метод createUserDetail () сделан Обязательным с помощью обязательной аннотации.

package com.tutorialspoint.txn.required;
 
import javax.ejb.*
 
@Stateless
public class UserSessionBean implements UserRemote {
	
   private User;

   @EJB
   private UserDetailRemote userDetail;

   public void createUser() {
      //create user 
      //...
      //create user details
      userDetail.createUserDetail();
   }
}

Бизнес-метод createUser () использует createUserDetail (). Если во время вызова createUser () возникла исключительная ситуация, и объект User не был создан, объект UserDetail также не будет создан.

Управляемые Бином Транзакции

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

Ниже приведены ключевые моменты, которые необходимо учитывать:

  • Начало — когда начинать транзакцию в бизнес-методе.

  • Успех — определить сценарий успеха, когда транзакция должна быть зафиксирована.

  • Failed (Сбой) — определение сценария сбоя, когда транзакция подлежит откату.

Начало — когда начинать транзакцию в бизнес-методе.

Успех — определить сценарий успеха, когда транзакция должна быть зафиксирована.

Failed (Сбой) — определение сценария сбоя, когда транзакция подлежит откату.

пример

package com.tutorialspoint.txn.bmt;
 
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.transaction.UserTransaction;
 
@Stateless
@TransactionManagement(value=TransactionManagementType.BEAN)
public class AccountBean implements AccountBeanLocal {
 
   @Resource
   private UserTransaction userTransaction;

   public void transferFund(Account fromAccount, double fund , 
      Account toAccount) throws Exception{

      try{
         userTransaction.begin();

         confirmAccountDetail(fromAccount);
         withdrawAmount(fromAccount,fund);

         confirmAccountDetail(toAccount);
         depositAmount(toAccount,fund);

         userTransaction.commit();
      }catch (InvalidAccountException exception) {
         userTransaction.rollback();
      }catch (InsufficientFundException exception) {
         userTransaction.rollback();
      }catch (PaymentException exception) {
         userTransaction.rollback();
      }
   }

   private void confirmAccountDetail(Account account) 
      throws InvalidAccountException {
   }

   private void withdrawAmount() throws InsufficientFundException {
   }

   private void depositAmount() throws PaymentException{
   }
}

В этом примере мы использовали интерфейс UserTransaction, чтобы отметить начало транзакции с помощью вызова метода userTransaction.begin () . Мы отмечаем завершение транзакции, используя метод userTransaction.commit (), и если во время транзакции произошло какое-либо исключение, мы откатываем завершенную транзакцию с использованием вызова метода userTransaction.rollback () .