2013-08-21 2 views
0

Предположим, имеющий EJB структурирована следующим образом:метод асинхронной EJB и откатить

@Stateless 
public class MyBean { 
@PersistenceContext 
private EntityManager entityManager; 

    public void doSomething() { 
     ... 
     doAsynchronously(); 
     ... 
     entityManager.persist(someObject);   
     ... 
     if (...) { 
      throw new RuntimeException(); 
     } 
    } 

    public void doAsynchronously() { 
     ... 
     entityManager.persist(someOtherObject); 
     ... 
    } 
} 

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

Я нашел много примеров асинхронных бобов, но не в сочетании с работой над менеджером сущности в обоих случаях, поэтому, если кто-то может привести меня к одному, я буду счастлив.


EDIT 2013/08/22:

Дополнительный вопрос - вся причина для установки, как показано на фрагменте кода должен был быть уверен, что код doAsynchronously() может полностью закончить свою работу на сущности, независимо от того, возникает ли исключение в методе вызывающего абонента - так будет ли я получать такое же поведение, если я вместо использования @Asynchronous аннотирую с @TransactionAttribute(REQUIRES_NEW)?

ответ

2

Асинхронный метод выполняется в другом потоке и, таким образом, не будет выполняться в контексте текущей транзакции и будет использовать другой контекст сохранения.

Если целью является запуск новой транзакции, не зависящей от ошибок, которые могут возникнуть в текущем, REQUIRES_NEW действительно является решением. Но просто использование REQUIRES_NEW не приведет к асинхронному вызову: он заблокирует текущую транзакцию, пока новый новый не будет завершен, и текущая транзакция возобновится.

+0

Спасибо за подтверждение. Я знаю, что 2-е решение синхронно, но, как я сказал, было намерение завершить некоторые операции с объектами, даже если другие откатываются из-за исключения, а не то, что он выполняется асинхронно. –

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