messagelistener或mdb可以是有状态的吗?

时间:2015-03-06 11:06:36

标签: ejb message-driven-bean jca stateful

与我关于jca入站事务管理的问题有关。 How to control XAResource in inbound jca resource adapter for conversational transaction?

对于入站资源适配器,我需要保持事务处于打开状态并在该事务中执行不同的操作。

这可以通过使消息端点@Stateful来解决,但我不清楚这是否允许。

3.1 EJB规范声明(第5.1节)

消息驱动的bean实例没有会话状态。这意味着当所有bean实例不参与服务客户端消息时,它们是等效的。

我发现TomiTribe(公司behin TomEE)的创始人David Blevins发表了一篇文章,声称这是允许的。 https://github.com/dblevins/jca-quickstart/wiki/Inbound-Connectors-MDBs-Today

另一种方法是尝试自己管理XAResrouce,但还没有运气......

编辑: 请注意,JCA规范说明(第13.5节)

请注意,createEndPoint方法调用提供的端点实例是a 实现端点消息监听器类型的代理和 MessageEndpoint接口,它不是实际的端点。

所以,afaik并不保证每次通过代理时实际的监听器都是相同的。

1 个答案:

答案 0 :(得分:0)

让我回答我自己的问题。

规范中没有任何内容可以允许这样做。规范中提到的部分说明mdbs不是有状态的。

然而,我与David Blevins有过接触,David Blevins回答说:  "简短的回答是他们对Wildfly和TomEE以及GlassFish是有状态的,我不记得了。"

因此它可能适用于您的平台,但不要期望这些行为可以跨服务器或甚至同一应用程序服务器的不同版本移植。