从 wildfly 发送 jms 消息

Sending jms messages from wildfly

我正在开发基于 jms 的 wildfly 应用程序(wildfly 8,java 7)。我必须使用基于 Rx Java 的事件驱动库。我想从我必须提供给库函数的侦听器发送 jms 消息。问题是用于发送 jms 消息的基于标准 EJB 的机制在 Rx Java 处理程序内部不起作用。疯狂的猜测是我不能在 Rx Java 流中注入/使用基于注释的 EJB jms 机制,因为它们不是由 EJB 容器生成的(或将 EJB bean 作为 Rx Java 处理程序传递)。我尝试从独立的 java 应用程序发送来自 EJB 单例的 jms 消息,遵循像 this 这样的教程。这种方法的问题是 wildfly 的独立实例找不到索引工厂 org.jboss.naming.remote.client.InitialContextFactory 的依赖项。或者如果我尝试添加 maven 依赖项,wildfly 甚至不会部署

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-jms-client-bom</artifactId>
    <version>${version.wildfly}</version>
    <type>pom</type>
</dependency>

到我的应用程序 fat jar。任何想法将不胜感激,因为我在这件事上对 EJB 的理解非常缺乏。

您可以在不依赖注入的情况下使用 EJB 来查找 InitialContext。

编写 Singleton EJB 代码后,您需要了解 "EJB name on JNDI registry" 之后您可以执行以下操作:

Context ctx = new InitialContext()
MyStatlessBeanInterface bean = ctx.lookup("FULL NAME BEAN"); 
bean.sendJMSMessage();

Wilfly 在部署时在控制台中打印 EJB 名称,但您可以在以下位置阅读有关约定的信息:

https://docs.jboss.org/author/display/AS71/JNDI+Reference

您还可以在以下位置获得有关查找的更多信息:

https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/usclient003.htm