Jms 为什么';Wildfly是否允许我的应用程序访问org.Hornetq(Hornetq&x27;的API)?
我真的需要帮助 我有一个简单的Java客户机(由Eclipse在容器外部运行)。 我在本地主机上运行了Wildfly 9。 我在Wildfly上部署了一个简单的MDB作为ear包 客户端对“jms/RemoteConnectionFactory”执行JNDI查找 它使用了HornetQJMSConnectionFactory。 它向MDB侦听的队列发送ObjectMessage MDB的onMessage(Message msg)显示它接收消息。 msg是HornetQoObjectMessage的一个实例。 但是,当我尝试向HornetQoObjectMessage投射msg以便检索对象时,它失败了 核心错误似乎是HornetQoObjectMessage的NoClassDefFoundError,因此我的应用程序无法访问HornetQAPI(我想是org.HornetQ模块) 注意:强制转换在try-catch块中,但是没有从my-catch块输出到Wildfly日志 我已经在下面粘贴了MDB代码 My module.xml 并从Wildfly日志中提取相关行。 很明显,这条信息已经到了。请参阅带有“XXXXXXXXX”前缀的行。 然后失败 ear没有war模块 注意:我添加@ApplicationScoped只是因为有人建议它解决我之前发布的一个问题。这是我现在的问题吗 请帮忙 MDB代码:Jms 为什么';Wildfly是否允许我的应用程序访问org.Hornetq(Hornetq&x27;的API)?,jms,wildfly,hornetq,Jms,Wildfly,Hornetq,我真的需要帮助 我有一个简单的Java客户机(由Eclipse在容器外部运行)。 我在本地主机上运行了Wildfly 9。 我在Wildfly上部署了一个简单的MDB作为ear包 客户端对“jms/RemoteConnectionFactory”执行JNDI查找 它使用了HornetQJMSConnectionFactory。 它向MDB侦听的队列发送ObjectMessage MDB的onMessage(Message msg)显示它接收消息。 msg是HornetQoObjectMessag
@MessageDriven(
activationConfig ={
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="maxSession",propertyValue="1"),
@ActivationConfigProperty(propertyName="destination", propertyValue="jms/goSendToServerQueue")
})
public class GoMsgBean implements MessageListener {
@ApplicationScoped
@Inject
@JMSConnectionFactory ("java:jboss/DefaultJMSConnectionFactory")
private JMSContext jmsCtx;
@Resource(name = "java:jboss/exported/jms/goSendToClientQueue")
private Queue sendToClientQueue;
public GoMsgBean () {
}
@PostConstruct
public void myInit () {
System.out.println("XXXXXXXXXX Post Construct - GoMsgBean");
}
@PreDestroy
public void myDestroy () {
System.out.println("XXXXXXXXXX Post Destroy - GoMsgBean");
}
public void onMessage(Message msg) {
System.out.println("XXXXXXXXXX Greetings From GoMsgBean.onMessage()");
System.out.println("XXXXXXXXXX Message Type is " + msg.getClass().getSimpleName());
try {
HornetQObjectMessage oMsg = (HornetQObjectMessage) msg;
System.out.println("XXXXXXXXXX Successfully Cast msg to HornetQObjectMessage");
System.out.println("XXXXXXXXXX Object Type is " + oMsg.getObject().getClass().getSimpleName());
} catch (ClassCastException e) {
System.out.println("XXXXXXXXXX ClassCastException");
} catch (JMSException e) {
System.out.println("XXXXXXXXXX JMSException ");
} catch (Exception e) {
System.out.println("XXXXXXXXXX " + e.getClass().getSimpleName()");
}
}
}
MODULE.XML
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.acmemq">
<dependencies>
<!-- we depend on org.hornetq module since we will send messages to -->
<!-- the HornetQ server embedded in the local WildFly instance -->
<module name="org.hornetq" />
</dependencies>
</module>
HornetQ是JMS API的一个实现细节,您不应该依赖它,而应该“只”使用API本身。您应该将其强制转换为“ObjectMessage”。顺便说一下,在使用ObjectMessage;)之前,您可以先看一下谢谢似乎我的客户机的JNDI查找“jms/RemoteConnectionFactory”生成了一个HornetQoObjectConnectionFatory,其会话最终将HornetQoObjectMessage发送到我的MDB的onMessage(Message msg)方法。尝试将消息强制转换为ObjectMessage时出错。完全违背直觉,但我已经被迫从玻璃鱼到野蝇,所以也许我在其他地方做了一些事情来获得野蝇的联系,把事情搞砸了。将在本周末从头开始重做客户端,以查看是否可以发送一条普通的旧ObjectMessage。下周我会让每个人都知道。也许你的war/ear中有jms.jar,这会与服务器上的jms.jar冲突。
Calling "D:\Bulletproof\bpWildFly\bin\standalone.conf.bat"
Setting JAVA property to "C:\Program Files\Java\jdk1.8.0_05\bin\java"
===============================================================================
JBoss Bootstrap Environment
JBOSS_HOME: "D:\Bulletproof\bpWildFly"
JAVA: "C:\Program Files\Java\jdk1.8.0_05\bin\java"
JAVA_OPTS: "-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MaxPermSize=256M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jbos
s.byteman"
===============================================================================
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0
...
13:59:09,204 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 60) WFLYTX0013: Node identifier property is set to the default value. Please make
sure it is unique.
13:59:09,880 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-6) WFLYJCA0001: Bound data source [java:jboss/datasources/ExampleDS]
13:59:09,994 WARN [org.jboss.as.messaging] (MSC service thread 1-6) WFLYMSG0001: AIO wasn't located on this platform, it will fall back to using pure
Java NIO.
13:59:10,010 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-1) WFLYDS0013: Started FileSystemDeploymentService for directory D:\
Bulletproof\bpWildFly\standalone\deployments
...
13:59:13,067 WARN [org.jboss.weld.Validator] (MSC service thread 1-8) WELD-001440: Scope type @javax.enterprise.context.ApplicationScoped() used on i
njection point [BackedAnnotatedField] @ApplicationScoped @Inject @JMSConnectionFactory private org.america3.gotest.server.messaging.GoMsgBean.jmsCtx
13:59:13,076 WARN [org.jboss.weld.Validator] (MSC service thread 1-8) WELD-001440: Scope type @javax.enterprise.context.ApplicationScoped() used on i
njection point [BackedAnnotatedField] @ApplicationScoped @Inject @JMSConnectionFactory private org.america3.gotest.server.messaging.GoMsgBean.jmsCtx
13:59:13,316 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 9.0.2.Final (WildFly Core 1.0.2.Final) started in 6207ms - Starte
d 480 of 676 services (264 services are lazy, passive or on-demand)
#START UP COMPLETED#
#MESSAGE RECEIVED#
14:01:04,983 INFO [stdout] (Thread-3 (HornetQ-client-global-threads-1527152166)) XXXXXXXXXX Post Construct - GoMsgBean
14:01:04,985 INFO [stdout] (Thread-3 (HornetQ-client-global-threads-1527152166)) XXXXXXXXXX Greetings From GoMsgBean.onMessage()
14:01:04,986 INFO [stdout] (Thread-3 (HornetQ-client-global-threads-1527152166)) XXXXXXXXXX Message Type is HornetQObjectMessage
14:01:04,987 INFO [stdout] (Thread-3 (HornetQ-client-global-threads-1527152166)) XXXXXXXXXX Post Destroy - GoMsgBean
14:01:04,989 ERROR [org.jboss.as.ejb3.invocation] (Thread-3 (HornetQ-client-global-threads-1527152166)) WFLYEJB0034: EJB Invocation failed on component GoMsgBean for method public void org.america3.gotest.server.messaging.GoMsgBean.onMessage(javax.jms.Message):javax.ejb.EJBTransactionRolledbackException: WFLYEJB0457: Unexpected Error
...
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/hornetq/jms/client/HornetQObjectMessage
...
... 52 more
Caused by: java.lang.ClassNotFoundException: org.hornetq.jms.client.HornetQObjectMessage from [Module "deployment.GoTest.ear.GoTest.jar:main" from Service Module Loader]
...
... 80 more
14:01:05,002 ERROR [org.hornetq.ra] (Thread-3 (HornetQ-client-global-threads-1527152166)) HQ154004: Failed to deliver message: javax.ejb.EJBTransactio
nRolledbackException: WFLYEJB0457: Unexpected Error
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleInCallerTx(CMTTxInterceptor.java:153)
...
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/hornetq/jms/client/HornetQObjectMessage
...
... 52 more
Caused by: java.lang.ClassNotFoundException: org.hornetq.jms.client.HornetQObjectMessage from [Module "deployment.GoTest.ear.GoTest.jar:main" from Service Module Loader]
...
... 80 more