Транзакция — это единица рабочих элементов, которая соответствует свойствам 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 () .