[英]Why the java code for connecting to JMS service is not compiling?
我一直在使用GlassFish服务器来处理通过Java代码与JMS服务连接的项目。 我已经创建了connectionFactory,queue和Topic,如下所述。
1. jms/GlassFishBookConnectionFactory connectionfactory
2. jms/GlassFishBookQueue queue
3. jms/GlassFishBookTopic
这是我的Java代码,可以通过上述连接连接到JMS服务。 我一直在按照给定的url的步骤进行操作。 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)
显然,资源没有注入到您的类中,因为您将其作为独立的应用程序运行。
引用您链接的文章:
在深入研究此代码的细节之前,机敏的读者可能已经注意到,该类是一个独立的Java应用程序,因为它包含一个main方法。 由于此类是独立的,因此它在应用程序服务器外部执行。 尽管如此,我们仍然可以看到一些资源被注入其中 ,特别是连接工厂和队列。 即使代码在应用程序服务器外部运行,我们也可以将资源注入该代码的原因是, GlassFish包含一个名为appclient的实用程序 。
该实用程序使我们可以“包装”可执行的JAR文件,并允许其访问应用程序服务器资源 。 要执行前面的代码,并假定将其打包在名为jmsptpproducer.jar的可执行JAR文件中,我们将在命令行中键入以下命令:
appclient -client jmsptpproducer.jar
尝试如上所述运行该应用程序。
使用名称而不是mappedName。 name是JNDI名称,mappedName是产品特定的名称。 请参阅API文档
@Resource(名称= “JMS / GlassFishBookConnectionFactory”)
公共静态ConnectionFactory connectionFactory;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.