具有WebSphere MQ 9的WildFly 10:onMessage MDB部署错误

时间:2019-03-14 05:06:44

标签: java ibm-mq wildfly-10

  
      
  1. 在Jboss EAP 7.0.6 GA,IBM MQ 9上,我有一个MDB用于使用队列消息。
  2.   
    package com.ryzorbent.demo.jms;

    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.ejb.TransactionAttribute;
    import javax.jms.JMSException;

    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;

    import org.jboss.ejb3.annotation.ResourceAdapter;

    @MessageDriven(name="EFRSTestMDB", activationConfig = {
            @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"),
            @ActivationConfigProperty(propertyName = "hostName", propertyValue = "localhost"),
            @ActivationConfigProperty(propertyName = "port", propertyValue = "1414"),
            @ActivationConfigProperty(propertyName = "channel", propertyValue = "SYSTEM.DEF.SVRCONN"),
            @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "EFRS_UAT"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/QUEUE"),
            @ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT")
        })

    @ResourceAdapter(value = "wmq.jmsra.rar")
    //@TransactionAttribute(value = "NoTransaction")

    public class EFRSTestMDB implements MessageListener {


        @Override
        public void onMessage(Message inMessage) {
            TextMessage message = (TextMessage)inMessage;
            try {
                System.out.println(String.format("Hello, %s", message.getText()));
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }

    }
  
      
  1. 我将 wmq.jmsra.rar 复制到了../ standalone / deployments
  2.   
  3. 将用于队列,通道等的资源适配器子系统添加到standalone-full.xml中
  4.   
  5. 但是我收到以下错误
  6.   
java.lang.NoClassDefFoundError: Failed to link com/ryzorbent/demo/jms/EFRSTestMDB (Module "deployment.TestJbossMDB.jar:main" from Service Module Loader): javax/jms/MessageListener

2 个答案:

答案 0 :(得分:1)

由于您的错误,wmq.jmsra.rar不包含诸如javax/jms/MessageListener之类的JMS API类。在Limitations and Known Problems中说:

  

IBMWebSphere®MQ 7.5资源适配器的部署不会为您的部署加载javax.jms.api模块。它还不支持新的Jave EE 7注释,例如@ JMSConnectionFactoryDe​​finitions,@ JMSDestinationDefinition。必须在配置中具有messaging-activemq子系统才能启用它。如果您不希望启动JBoss EAP消息服务器,请添加一个空的messages-activemq子系统。

因此,您必须像上述那样添加JMS api jar。

答案 1 :(得分:0)

h使用IBM MQ消息传递时,请始终以“完整”服务器配置文件开始,例如standalone-full.xml。 “完整”配置文件包括JMS消息传递。

作为旁注,我看到您的激活规范具有:

        @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/QUEUE"),

因此,您已将useJNDI设置为false,但是您拥有的目的地肯定看起来像JNDI名称。当useJNDI设置为false时,目标名称是IBM MQ端队列的名称-通常用大写字母表示,很像您的队列管理器和通道。