在glassfish服务器消息队列上发送消息

在glassfish服务器消息队列上发送消息,glassfish,jms,Glassfish,Jms,我只是测试在glassfish服务器队列上发送消息,因此我在glassfish服务器上创建了JMSResource,如下所示: 现在我已经在Netbeans IDE中创建了一个java应用程序。这是我的Java文件:- import javax.annotation.Resource; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; impo

我只是测试在glassfish服务器队列上发送消息,因此我在glassfish服务器上创建了JMSResource,如下所示:

现在我已经在Netbeans IDE中创建了一个java应用程序。这是我的Java文件:-

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;

public class MessageSender
{
  @Resource(mappedName = "jms/ConnectionFactory")
  private static ConnectionFactory connectionFactory;
  @Resource(mappedName = "jms/Queue")
  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);

      messageProducer.close();
      session.close();
      connection.close();
    }
    catch (JMSException e)
    {
      e.printStackTrace();
    }
  }
  public static void main(String[] args)
  {
    new MessageSender().produceMessages();
  }
}
现在,当我运行这个简单的应用程序时,它在创建ConnectionFactory时出错:

Exception in thread "main" java.lang.NullPointerException
    at simplesendamq.MessageSender.produceMessages(MessageSender.java:33)
    at simplesendamq.MessageSender.main(MessageSender.java:55)

GF客户端必须使用JNDI查找来获取连接工厂 和消息目的地(主题/队列)

因此,您必须形成JNDI上下文(在其中设置主机、ORB端口和其他神奇参数),并在类路径中包含某些库(需要使用GF)

我的例子是:

Receiver.java

    import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

    public class Receiver implements MessageListener {
        public static void main(String[] args) throws JMSException, NamingException {
            try {
                Properties props = new Properties();

                props.setProperty("java.naming.factory.initial",
                                  "com.sun.enterprise.naming.SerialInitContextFactory");
                props.setProperty("java.naming.factory.url.pkgs",
                                  "com.sun.enterprise.naming");
                props.setProperty("java.naming.factory.state",
                                  "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
                props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
                props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

                // Gets the JNDI context
                Context jndiContext = new InitialContext(props);

                // Looks up the administered objects
                ConnectionFactory connectionFactory = (ConnectionFactory)
                        jndiContext.lookup("my.connection.factory");

                Queue queue = (Queue) jndiContext.lookup("my.test.queue");

                // Creates the needed artifacts to connect to the queue
                Connection connection = connectionFactory.createConnection();

                Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

                MessageConsumer consumer = session.createConsumer(queue);

                connection.start();   

            } catch(Exception e) {
                e.printStackTrace();
            }
        }

     @Override
    public void onMessage(Message message) {
        System.out.println("onMsg!");
    }
    }
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>examples.my</groupId>
    <artifactId>jms-test</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.sun.messaging</groupId>
            <artifactId>imqjmsra</artifactId>
            <version>4.4</version>
        </dependency>

        <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>jms-api</artifactId>
            <version>1.1-rev-1</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.common</groupId>
            <artifactId>common-util</artifactId>
            <version>3.0</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.appclient</groupId>
            <artifactId>gf-client</artifactId>
            <version>3.0-b74b</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.appclient.server</groupId>
            <artifactId>appclient-server-core</artifactId>
            <version>3.0-b74b</version>
        </dependency>

        <dependency>
            <groupId>com.sun.corba</groupId>
            <artifactId>glassfish-corba-orb</artifactId>
            <version>3.0.1-b001</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.security</groupId>
            <artifactId>security</artifactId>
            <version>3.0-b74b</version>
        </dependency>
    </dependencies>

</project>

4.0.0
我的
jms测试
1
com.sun.messaging
imqjmsra
4.4
javax.jms
jmsapi
1.1-rev-1
org.glassfish.common
公共用途
3
org.glassfish.appclient
gf客户端
3.0-b74b
org.glassfish.appclient.server
appclient服务器核心
3.0-b74b
com.sun.corba
玻璃鱼corba球
3.0.1-b001
org.glassfish.security
安全
3.0-b74b

上述代码中的第33行是空行(第33行应该是发生NullPointerException的行)。请在您的申请表中填写准确的代码。还有一件事-你把你的班级放在了什么样的项目中?企业应用程序客户端还是其他什么?