2013-02-14 4 views
2

У меня есть функция, которая использует пару фасадов EJB, которые создают некоторую информацию в базе данных. Этот блок вызовов создания данных должен быть атомарным, если он не выполняется, ничего не следует делать. Как сделать этот блок транзакций транзакционным?Хотите объявить блок кода, который использует несколько EJB для транзакций

public myFunction() { 
    ... 
    ... 
    userFacade.create(user); 
    addressFacade.create(address); 
    orderFacade.create(order); 
    ... 
} 
+0

Вы можете обратиться сюда http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttributeType.html к условиям транзакции. –

+0

Чтобы быть точным, функция 'myFunction' пропускает возвращаемый тип, так что это еще не функция. Разумеется, это не вопрос. –

ответ

3

В EJB3, если вы собираетесь использовать декларативные транзакции (управляемый контейнер транзакцию), то вы бы аннотировать эти данные вызовы доступа с либо:

@TransactionAttribute(TransactionAttributeType.REQUIRED) 

@TransactionAttribute(TransactionAttributeType.MANDATORY) 

, который означает, что эти методы будут вступать в настоящее время если она была там. Если (myFunction) также является методом EJB, то при определении REQUIRES_NEW начнется новая транзакция. Транзакция будет откат при возникновении системного исключения, но не исключений приложений. Вот почему вам нужно использовать setRollbackOnly в этом случае.

Подробнее здесь: http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html

1

В Java EE, EJB является технология для работы с транзакциями, и по умолчанию каждый бизнес-метод является транзакционной - аннотированный с @TransactionAttribute(REQUIRED), если поставщик боб не изменяет его.

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

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