由于IBM WAS上的JMS资源,MessageDriven应用程序无法启动

由于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

我构建了一个简单的MDB应用程序,该应用程序侦听jms.Queue,并将其部署在IBM WAS 8.5.5(IBM MQ作为jms代理)上,当尝试启动它时,我收到以下错误(很抱歉使用西里尔字母符号,尝试进行近距离翻译):

ejb mdb模块ejb jar.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>

我的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中更新了相应的引用。