- 在Jboss EAP 7.0.6 GA,IBM MQ 9上,我有一个MDB用于使用队列消息。
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(); } } }
- 我将 wmq.jmsra.rar 复制到了../ standalone / deployments
- 将用于队列,通道等的资源适配器子系统添加到standalone-full.xml中
- 但是我收到以下错误
java.lang.NoClassDefFoundError: Failed to link com/ryzorbent/demo/jms/EFRSTestMDB (Module "deployment.TestJbossMDB.jar:main" from Service Module Loader): javax/jms/MessageListener
答案 0 :(得分:1)
由于您的错误,wmq.jmsra.rar
不包含诸如javax/jms/MessageListener
之类的JMS API类。在Limitations and Known Problems中说:
IBMWebSphere®MQ 7.5资源适配器的部署不会为您的部署加载javax.jms.api模块。它还不支持新的Jave EE 7注释,例如@ JMSConnectionFactoryDefinitions,@ 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端队列的名称-通常用大写字母表示,很像您的队列管理器和通道。