Jms 为什么';Wildfly是否允许我的应用程序访问org.Hornetq(Hornetq&x27;的API)?

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

我真的需要帮助

我有一个简单的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代码:

@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