由于IBM WAS上的JMS资源,MessageDriven应用程序无法启动
我构建了一个简单的MDB应用程序,该应用程序侦听jms.Queue,并将其部署在IBM WAS 8.5.5(IBM MQ作为jms代理)上,当尝试启动它时,我收到以下错误(很抱歉使用西里尔字母符号,尝试进行近距离翻译): ejb mdb模块ejb jar.xml:由于IBM WAS上的JMS资源,MessageDriven应用程序无法启动,jms,websphere,ibm-mq,message-driven-bean,Jms,Websphere,Ibm Mq,Message Driven Bean,我构建了一个简单的MDB应用程序,该应用程序侦听jms.Queue,并将其部署在IBM WAS 8.5.5(IBM MQ作为jms代理)上,当尝试启动它时,我收到以下错误(很抱歉使用西里尔字母符号,尝试进行近距离翻译): ejb mdb模块ejb jar.xml: @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValu
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")},
name = "MdbListener")
public class MdbListener implements MessageListener {
public void onMessage(Message message) {
System.out.println("MdbListener called...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http:/java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0" metadata-complete="false">
<display-name>My MDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>MdbListener</display-name>
<ejb-name>MdbListener</ejb-name>
<ejb-class>ru.aparfenov.mdb.MdbListener</ejb-class>
<message-destination-ref>
<message-destination-ref-name>jms/mdbtest/queue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Consumes</message-destination-usage>
<message-destination-link>jms/mdbtest/queue</message-destination-link>
</message-destination-ref>
</message-driven>
</enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
<message-driven name="MdbListener">
<message-destination-ref name="jms/mdbtest/queue" binding-name="jms/mdbtest/queue" />
</message-driven>
</ejb-jar-bnd>
我的MDB
MdbListener
MdbListener
ru.aparfenov.mdb.MdbListener
jms/mdbtest/queue
javax.jms.Queue
消耗
jms/mdbtest/queue
ejb mdb模块ibm ejb jar bnd.xml:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")},
name = "MdbListener")
public class MdbListener implements MessageListener {
public void onMessage(Message message) {
System.out.println("MdbListener called...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http:/java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0" metadata-complete="false">
<display-name>My MDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>MdbListener</display-name>
<ejb-name>MdbListener</ejb-name>
<ejb-class>ru.aparfenov.mdb.MdbListener</ejb-class>
<message-destination-ref>
<message-destination-ref-name>jms/mdbtest/queue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Consumes</message-destination-usage>
<message-destination-link>jms/mdbtest/queue</message-destination-link>
</message-destination-ref>
</message-driven>
</enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
<message-driven name="MdbListener">
<message-destination-ref name="jms/mdbtest/queue" binding-name="jms/mdbtest/queue" />
</message-driven>
</ejb-jar-bnd>
当我打开ear时,我总是被要求指出目标资源的JNDI名称。
我的所有JMS资源:队列连接工厂、队列、激活规范和WebSphere MQ消息传递提供程序都在相同的Cell=AParfenovNode02Cell范围内。并且资源适配器在J2C激活规范中看到了我的活动规范以及相应的范围。
我的消息传递提供程序本机库路径设置为C:\Program Files(x86)\IBM\WebSphere MQ\java\lib64。
此外,我还有一个web应用程序,它成功地使用了相同的JMS资源,并将消息写入JMS/mdbtest/queue。
有人能帮我吗?看起来您正试图将此用于您的JNDI位置:
jms/mdbtest/queue # Queue
jms/mdbtest/queue/activespec #ActivationSpec
但是jms/mdbtest/queue是一个上下文,因为它有子级
相反,尝试以下方法:
jms/mdbtest/queue/queue
jms/mdbtest/queue/activespec
看起来您正试图将其用于JNDI位置:
jms/mdbtest/queue # Queue
jms/mdbtest/queue/activespec #ActivationSpec
但是jms/mdbtest/queue是一个上下文,因为它有子级
相反,尝试以下方法:
jms/mdbtest/queue/queue
jms/mdbtest/queue/activespec
非常感谢你!这是一个真正不明显的错误,我永远也不会说出来。现在它可以精确地工作了-我将队列JNDI名称更改为jms/mdbtest/localqueue,并更新了activespec中的相应引用。非常感谢!这是一个真正不明显的错误,我永远也不会说出来。现在它可以精确地工作了——我将队列JNDI名称更改为jms/mdbtest/localqueue,并在activespec中更新了相应的引用。