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();
}
}
你能幫我解決這個問題嗎?你需要其他的信息來調試嗎?
是的。我從servlet調用,它不適合我。如果我在JAVA程序中創建上面的代碼,它工作得很好。另一方面,當我從servlet調用時,我會在一段時間後在服務器中看到以下WARNING消息。 WARN [SimpleConnectionManager]連接遠程客戶端時檢測到一個問題 – user331311 2010-07-15 17:46:09
順便說一句,我使用的是JBOSS 5.1,而我的servlet程序在WEB-INF/lib文件夾中沒有任何東西。 – user331311 2010-07-15 17:47:34
@mmuthu - 只是爲了咧嘴,將相同的jar添加到您在獨立程序中使用的WEB-INF/lib中。首先解決您的連接問題。 – 2010-07-15 18:18:09