2010-07-15 92 views
0

我試圖在JBOSS 5.1中調出hello world MDB,以瞭解如何將我們的消息應用程序導入JBOSS 5.1消息。簡單的世界MDB讓我有了一個有線問題。 MDB部署良好,在啓動JBOSS 5.1 AS時沒有問題。然而,當我試圖從一個客戶端,它也運行JBoss 51拋出以下異常發送消息,JBOSS 5.1升級 - 消息發送問題

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> 

的jboss.xml:

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

,我使用它的servelt和獨立程序的客戶端代碼是完全一樣像下面那樣,

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(); 
     } 
     } 

你能幫我解決這個問題嗎?你需要其他的信息來調試嗎?

回答

0

你是從一個Servlet調用這個嗎?如果是這樣的話:
您的WEB-INF/lib文件夾中有錯誤的jar文件。
5.0你需要...... 把javassist.jar和jboss-AOP-jdk50.jar在我的WEB-INF/lib文件夾,使其工作

在另一方面:在您的代碼關閉您的資源反向採購訂單,並在最後一個塊中完成。

+0

是的。我從servlet調用,它不適合我。如果我在JAVA程序中創建上面的代碼,它工作得很好。另一方面,當我從servlet調用時,我會在一段時間後在服務器中看到以下WARNING消息。 WARN [SimpleConnectionManager]連接遠程客戶端時檢測到一個問題 – user331311 2010-07-15 17:46:09

+0

順便說一句,我使用的是JBOSS 5.1,而我的servlet程序在WEB-INF/lib文件夾中沒有任何東西。 – user331311 2010-07-15 17:47:34

+0

@mmuthu - 只是爲了咧嘴,將相同的jar添加到您在獨立程序中使用的WEB-INF/lib中。首先解決您的連接問題。 – 2010-07-15 18:18:09