Ejb 运行简单MDB应用程序时出错
我正在尝试运行以下程序。我正在使用glassfish server 3.1.2来启用此MDB。然后我也无法运行它Ejb 运行简单MDB应用程序时出错,ejb,glassfish-3,Ejb,Glassfish 3,我正在尝试运行以下程序。我正在使用glassfish server 3.1.2来启用此MDB。然后我也无法运行它 package com.mdb; import javax.jms.ConnectionFactory; import javax.jms.Queue; import javax.jms.Connection; import javax.jms.Session; import javax.jms.QueueBrowser; import javax.jms.Message; imp
package com.mdb;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Connection;
import javax.jms.Session;
import javax.jms.QueueBrowser;
import javax.jms.Message;
import javax.jms.JMSException;
import javax.annotation.Resource;
import java.util.Enumeration;
import javax.ejb.Stateless;
/**
* The MessageBrowser class inspects a queue and displays the messages it
* holds.
*/
@Stateless
public class MessageClient {
@Resource(mappedName = "jms/ConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/Queue")
private static Queue queue;
/**
* Main method.
*
* @param args the queue used by the example
*/
public static void main(String[] args) {
Connection connection = null;
try {
System.out.println("1");
connection = connectionFactory.createConnection();
System.out.println("2");
Session session = connection.createSession(
false,
Session.AUTO_ACKNOWLEDGE);
QueueBrowser browser = session.createBrowser(queue);
Enumeration msgs = browser.getEnumeration();
if (!msgs.hasMoreElements()) {
System.out.println("No messages in queue");
} else {
while (msgs.hasMoreElements()) {
Message tempMsg = (Message) msgs.nextElement();
System.out.println("Message: " + tempMsg);
}
}
} catch (JMSException e) {
System.err.println("Exception occurred: " + e.toString());
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
}
}
}
}
}
问题是我在运行它时会产生以下怀疑
Exception in thread "main" java.lang.NullPointerException
at com.mdb.MessageClient.main(MessageClient.java:35)
这里可能有什么问题?您构建的不是MDB。它是一个浏览队列的无状态会话bean MDB具有@MessageDriven注释。每当收到消息时,就会调用它 除此之外,您可能希望使用“lookup”属性而不是“mappedName”属性。后者起源于远古时代,当时人们对任何事情都还不确定,需要一个临时的黑客来让事情神奇地工作 在无状态bean中使用静态字段和静态main方法毫无意义。如果您通过主方法访问bean,那么您根本不使用bean,您只是调用一个孤立的类全局方法。如果有的话,这可能是你的NPE的来源
解决办法并不简单。您似乎完全混淆了JavaEE和JavaSE,以及实例和静态方法 您构建的不是MDB。它是一个浏览队列的无状态会话bean MDB具有@MessageDriven注释。每当收到消息时,就会调用它 除此之外,您可能希望使用“lookup”属性而不是“mappedName”属性。后者起源于远古时代,当时人们对任何事情都还不确定,需要一个临时的黑客来让事情神奇地工作 在无状态bean中使用静态字段和静态main方法毫无意义。如果您通过主方法访问bean,那么您根本不使用bean,您只是调用一个孤立的类全局方法。如果有的话,这可能是你的NPE的来源
解决办法并不简单。您似乎完全混淆了JavaEE和JavaSE,以及实例和静态方法 您的connectionFactory可能为空您的connectionFactory可能为空