我的应用程序中有一些我无法理解的行为。我有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中。

10-06 08:34