为什么连接到JMS服务的java代码没有编译?
我一直在使用GlassFish服务器进行项目工作,以使用java代码连接JMS服务。 我已经创建了connectionFactory、队列和主题,如下所述为什么连接到JMS服务的java代码没有编译?,java,glassfish,jms,Java,Glassfish,Jms,我一直在使用GlassFish服务器进行项目工作,以使用java代码连接JMS服务。 我已经创建了connectionFactory、队列和主题,如下所述 1. jms/GlassFishBookConnectionFactory connectionfactory 2. jms/GlassFishBookQueue queue 3. jms/GlassFishBookTopic 下面是我的java代码,用于连接到上述连接的JMS服务。我一直在按照给定url的步骤进行操作。 我刚刚开始研究JM
1. jms/GlassFishBookConnectionFactory connectionfactory
2. jms/GlassFishBookQueue queue
3. jms/GlassFishBookTopic
下面是我的java代码,用于连接到上述连接的JMS服务。我一直在按照给定url的步骤进行操作。
我刚刚开始研究JMS服务。我在这方面做得并不完美。我已经下载了java.jmsjar文件并将其解压缩
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是特定于产品的名称。见 @资源(name=“jms/GlassFishBookConnectionFactory”)
公共静态连接工厂连接工厂 嗯,这不是编译错误,而是运行时错误。代码编译了,但您有一个NullpointerException-很可能是因为您在容器外运行代码…您的标题有误,代码编译了,但在使用
NPE
运行时失败。您的代码中哪一行是26?@A4L我如何才能使其可行。我刚刚开始一起编写java和JMS。它的解决方案是什么。@Robinhood从我在文章中了解到的是,glassfish附带了一个工具,您可以使用它来运行您的独立应用程序,就像它在glassfish应用程序容器中运行一样。您需要将应用程序/类导出到jar文件,然后使用该工具运行应用程序。请参阅我在回答中引用的文章内容。一般来说,只需将jar添加到jmsptproducer
,这样就可以使用java-jar jmsptproducer.jar
调用它?但是,另一个类将如何使用生产者?