我的应用程序中有一些我无法理解的行为。我有1个有状态Bean,1个无状态Bean,并且我想从SLB的SFB 1方法(WEB页面的解析)中调用。可以,但是SLB调用将JMS消息发送到另一个应用程序的业务方法,并且由于事务类型(必需),所有消息都在同一时间收到。
因此,我已将sendind方法的事务类型更改为REQUIRES_NEW,但相同,所有消息均在同一时间接收。
通过将解析方法更改为REQUIRES_NEW,我异步接收消息。那么如何解释这种行为呢?
总结一下:
SFB method -> REQUIRED
SLB method (parsing of WEB page, urls stored in String[]) -> REQUIRED
SLB method JMS -> REQUIRED
==> JMS messages are received synchronously
SFB method -> REQUIRED
SLB method -> REQUIRED
SLB method JMS -> REQUIRES_NEW
==> JMS messages are received synchronously
SFB method -> REQUIRED
SLB method -> REQUIRES_NEW
SLB method JMS -> REQUIRES_NEW
==> JMS messages are received asynchronously
我希望案例2能够异步发送JMS消息...
感谢您的澄清
奥利维尔
最佳答案
您没有显示代码,但是我怀疑您是从同一个SLB实例的parse方法调用SLB中的send方法。在那种情况下,方法调用是直接方法调用,它不会通过bean代理,因此send方法上的事务注释将被完全忽略。
你有
SFB -> transactional proxy -> SLB -> SLB
你应该在哪里
SFB -> transactional proxy -> SLB -> transactional proxy -> SLB
最简单的方法是将send方法放在单独的SLB中。