我一直在使用GlassFish服务器处理项目以使用我的java代码连接JMS服务。 我已经创建了connectionFactory,queue和Topic,如下所述。
1. jms/GlassFishBookConnectionFactory connectionfactory
2. jms/GlassFishBookQueue queue
3. jms/GlassFishBookTopic
这是我为上述连接连接到JMS服务的java代码。我一直在按照给定网址的步骤来处理它。 http://www.packtpub.com/article/setting-glassfish-jms-and-working-message-queues 我刚开始研究JMS服务。我不是很完美。我已经下载了java.jms jar文件并将其解压缩。
package net.ensode.glassfishbook;
import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.*;
public class MessageSender
{
@Resource(mappedName = "jms/GlassFishBookConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/GlassFishBookQueue")
private static Queue queue;
public void produceMessages()
{
MessageProducer messageProducer;
TextMessage textMessage;
try
{
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(queue);
textMessage = session.createTextMessage();
textMessage.setText("Testing, 1, 2, 3. Can you hear me?");
System.out.println("Sending the following message: "
+ textMessage.getText());
messageProducer.send(textMessage);
textMessage.setText("Do you copy?");
System.out.println("Sending the following message: "
+ textMessage.getText());
messageProducer.send(textMessage);
textMessage.setText("Good bye!");
System.out.println("Sending the following message: "
+ textMessage.getText());
messageProducer.send(textMessage);
messageProducer.close();
session.close();
connection.close();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new MessageSender().produceMessages();
}
}
目前我编译此代码时。我收到的错误就像
Exception in thread "main" java.lang.NullPointerException
at net.ensode.glassfishbook.MessageSender.produceMessages(MessageSender.java:26)
at net.ensode.glassfishbook.MessageSender.main(MessageSender.java:58)
答案 0 :(得分:2)
显然,资源没有被注入到您的类中,因为您将其作为独立应用程序运行。
引用您已关联的文章:
在深入研究此代码的详细信息之前,提醒读者可能已经注意到此类是独立Java应用程序,因为它包含main方法。由于此类是独立的,因此它在应用程序服务器外执行 。尽管如此,我们可以看到一些资源注入其中,特别是连接工厂和队列。我们可以将资源注入此代码的原因,即使它在应用程序服务器之外运行,是因为 GlassFish包含一个名为appclient 的实用程序。
该实用程序允许我们“包装”可执行JAR文件并允许它访问应用程序服务器资源。要执行前面的代码,假设它打包在一个名为jmsptpproducer.jar的可执行JAR文件中,我们将在命令行中键入以下命令:
appclient -client jmsptpproducer.jar
尝试按上述方式运行该应用程序。
答案 1 :(得分:0)
使用name而不是mappedName。 name是JNDI名称,mappedName是产品特定名称。请参阅API doc
@Resource(名称= “JMS / GlassFishBookConnectionFactory”)
public static ConnectionFactory connectionFactory;