Java JBOSS 5.1升级-消息传递问题

Java JBOSS 5.1升级-消息传递问题,java,jboss,jms,jboss5.x,ibm-mq,Java,Jboss,Jms,Jboss5.x,Ibm Mq,我试图在JBoss5.1中创建一个hello world MDB,看看如何将消息传递应用程序引入JBOSS 5.1消息传递。简单的hellow world MDB给了我一个有线问题。MDB部署良好,在启动JBOSS 5.1 AS时没有问题。然而,当我试图从运行JBOSS 51的客户端发送消息时,抛出了以下异常: 09:03:24,790 ERROR [STDERR] java.lang.NullPointerException 09:03:24,790 ERROR [STDERR] at

我试图在JBoss5.1中创建一个hello world MDB,看看如何将消息传递应用程序引入JBOSS 5.1消息传递。简单的hellow world MDB给了我一个有线问题。MDB部署良好,在启动JBOSS 5.1 AS时没有问题。然而,当我试图从运行JBOSS 51的客户端发送消息时,抛出了以下异常:

09:03:24,790 ERROR [STDERR] java.lang.NullPointerException
09:03:24,790 ERROR [STDERR]     at org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.java:87)
09:03:24,790 ERROR [STDERR]     at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
09:03:24,791 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
09:03:24,791 ERROR [STDERR]     at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170)
09:03:24,791 ERROR [STDERR]     at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
09:03:24,791 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
09:03:24,791 ERROR [STDERR]     at org.jboss.jms.client.delegate.ClientConnectionDelegate.createSessionDelegate(ClientConnectionDelegate.java)
09:03:24,791 ERROR [STDERR]     at org.jboss.jms.client.JBossConnection.createSessionInternal(JBossConnection.java:269)
09:03:24,791 ERROR [STDERR]     at org.jboss.jms.client.JBossConnection.createQueueSession(JBossConnection.java:165)
但是,当我尝试从独立的JAVA程序连接时,消息传递工作正常。我不知道我现在该做什么。以下是配置:

ejb-jar.xml:

<message-driven>
      <ejb-name>HelloWorldMDB</ejb-name>
      <ejb-class>com.yodlee.messaging.mdbs.HelloWorldMDB</ejb-class>
      <transaction-type>Container</transaction-type>
      <message-driven-destination>
        <destination-type>javax.jms.Queue</destination-type>
        <subscription-durability>Durable</subscription-durability></message-driven-destination>
      <resource-ref>
        <res-ref-name>HelloWorldMDB</res-ref-name>
        <res-type>javax.jms.QueueConnectionFactory</res-type>
        <res-auth>Container</res-auth></resource-ref> 
</message-driven>

你能帮我解决这个问题吗?您需要任何其他信息来调试吗?

您是从Servlet调用它的吗?如果是:
WEB-INF/lib文件夹中的JAR错误。
对于5.0,您需要。。。 将javassist.jar和jboss-aop-jdk50.jar放在我的WEB-INF/lib文件夹中以使其工作


另一个注意事项是:在代码中,按相反的获取顺序关闭资源,并在finally块中完成。

是。我是从servlet调用的,它对我不起作用。如果我在JAVA程序中创建上面的代码,它将非常好地工作。另一方面,当我从servlet调用时,经过一段时间后,我在服务器中看到以下警告消息。警告[SimpleConnectionManager]检测到与远程客户端的连接存在问题。顺便说一句,我使用的是JBOSS 5.1,我的servlet程序在WEB-INF/lib文件夹中没有任何内容。@mmuthu-仅用于GRIN,将与独立程序中相同的JAR添加到WEB-INF/lib中。首先解决你的连接问题。我尝试了应对JAR,甚至将JBOSS消息传递升级到1.4.6GA版本。我也有同样的例外
<message-driven>
                <ejb-name>HelloWorldMDB</ejb-name>
                <destination-jndi-name>queue/HelloWorldQueue</destination-jndi-name>
                <mdb-user>mqm</mdb-user>
                <mdb-passwd>mqm</mdb-passwd>
                <resource-ref>
                        <res-ref-name>HelloWorldMDB</res-ref-name>
                        <jndi-name>MDBDLQCF</jndi-name>
                </resource-ref>
</message-driven>
Properties env = new Properties();

        String queueName = "queue/HelloWorldQueue";
        String CFname = "ConnectionFactory";

        env.put(Context.PROVIDER_URL, "jnp://....:1099");
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "org.jnp.interfaces.NamingContextFactory");
        env
                .put(Context.URL_PKG_PREFIXES,
                        "org.jboss.naming:org.jnp.interfaces");

        try {
            InitialContext ctx = new InitialContext(env);

            System.out.println("Looking up for queue");
            System.out.println(ctx.lookup(queueName).getClass().getName());
            Queue destination = (Queue) ctx.lookup(queueName);

            System.out.println(destination.getQueueName());

            System.out.println("Looking up for connection factory");
            System.out.println(ctx.lookup(CFname).getClass().getName());
            QueueConnectionFactory qcf = (QueueConnectionFactory)ctx.lookup(CFname);

            System.out.println("getting connection");
            QueueConnection conn = qcf.createQueueConnection("abc", "abc");
            System.out.println("creating session");
            QueueSession queueSession = conn.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);


            QueueSender sender = queueSession.createSender(destination);

            TextMessage message = queueSession.createTextMessage();

            message.setText("Test Message");

            System.out.println("Sending Message...");

            sender.send(message);
            System.out.println("Finished Sending Message.");

            sender.close();
            conn.close();
            queueSession.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        }