2013-11-18 2 views
1

Если у меня есть два метода внутри компонента EJB, один с атрибутом транзакции NOT_SUPPORTED, который должен вызывать другого с помощью REQUIRED, могу ли я ожидать, что транзакция начнется, если я сделаю вызов через введенном боб:EJB 3, Транзакционный поток в том же компоненте

@Stateless 
@LocalBean 
public class LeBean { 

    @EJB LeBean bean; 

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
    public void someMethod(){ 
     ... 
     bean.otherMethod(); 
    } 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void otherMethd(){ 
     ... 
    } 
} 

или я могу сделать вызов локально следующим образом:

@Stateless 
@LocalBean 
public class LeBean { 

    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
    public void someMethod(){ 
     ... 
     otherMethod(); 
    } 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void otherMethd(){ 
     ... 
    } 
} 

прямо сейчас someMethod() занимает много времени, чтобы обработать информацию до достижения otherMethod() и поэтому время сделки, даже несмотря на я сказал NOT_S UPPORTED как атрибут transactionAttribute для первого метода.

ответ

2

может я ожидать, что сделка удара, если я сделать вызов через закачиваемого боб:

Вы должны сделать вызов через нагнетаемый боб, если вы хотите сделку. Вызовы должны выполняться через бизнес-интерфейс, иначе ваш атрибут транзакции будет проигнорирован. В вашем случае, если вы вызываете метод otherMethod() из метода, который не имеет транзакции, или приостановленной транзакции (т. Е. NOT_SUPPORTED), то это просто вызов POJO.

Технически говоря, другой метод() будет «ездить поверх» транзакции someMethod(), если бы он существовал. Например, у вас NOT_SUPPORTED для someMethod(), но если он был ТРЕБУЕТСЯ или REQUIRES_NEW, то otherMethod() будет участвовать в этой транзакции. Откат для someMethod() также приведет к откату от otherMethod().

прямо сейчас SomeMethod() занимает много времени, чтобы обработать информацию до достижения otherMethod() и поэтому время транзакции из

Это другой вопрос в целом. Возможно, вы захотите увеличить тайм-аут транзакции и подумайте о том, чтобы запустить это как отдельный асинхронный процесс.

+0

Спасибо! это делает теперь намного больше смысла! – coderatchet

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