通过从 Netty 事件循环注入 EJB 的 JMS 主题发布消息的正确方法是什么?

What is the correct way to publish a message over JMS topic which has been injected in an EJB from a Netty event loop?

我有一个 @Singleton 启动于 @Startup 的 EJB,此 bean 使用 netty 侦听多播流量。我想做的是,在通过多播收到消息后,发送关于注入主题的 JMS 消息(在 Wildfly 上,使用 JMS 2.0,我有以下内容:)

  @Resource(lookup = "java:/jboss/exported/jms/topic/appUpdates")
  private Topic appUpdate;

  @Inject
  private JMSContext context;

我知道主题和发布消息没有问题如果我在ejb 中有@Scheduled 函数,我可以愉快地创建发布者并发送消息。但是,尝试从 netty 事件循环上下文发布 JMS 消息会导致:

2:10:34,441 ERROR [stderr] (nioEventLoopGroup-0-1) java.lang.RuntimeException: javax.naming.NameNotFoundException: java:comp/TransactionSynchronizationRegistry 12:10:34,441 ERROR [stderr] (nioEventLoopGroup-0-1) at org.jboss.as.messaging.deployment.JMSContextProducer$JMSContextWrapper.getDelegate(JMSContextProducer.java:217)

所以我的问题是,从比方说 非jboss 上下文(Netty 事件循环)发布到 JMS 主题的正确方法是什么?

编辑:我现在看到我试图让我的 bean 侦听多播流量实际上是在破坏 EJB 规范,所以,现在的问题是,除了编写资源适配器之外,是否有更简单的方法如何做到这一点?

(服务器:Wildfly 8.2。0.Final 使用独立-full.xml 配置)

我之前的回答是废话 - 正确的 方法是创建一个 JCA 资源适配器 - 我最终创建了它。现在我不再需要 JMS 主题,因为我的 MDB 直接侦听来自 inbound 连接的事件。

唯一的麻烦是关于如何使用 1.7 规范(使用注释)执行此操作的文档很少,因此必须查看用于 1.5 等的 xml 配置并应用适当的注释.