我无法运行JMS

时间:2016-06-10 17:10:41

标签: java jms

我尝试在使用JMS时执行简单的Sender-Receiver示例。

我已经在eclipse中编写了代码,但是当我执行查找时收到此错误:

需要在环境或系统属性,applet参数或应用程序资源文件中指定类名:java.naming.factory.initial

您可以在这里找到代码:

接收器:

public class Receiver {
    static Context ictx = null;

    public static void main(String[] args) throws Exception {
        ictx = new InitialContext();
        Queue queue = (Queue) ictx.lookup("queue");
        QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf");
        ictx.close();

        QueueConnection qc = qcf.createQueueConnection();
        QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
        QueueReceiver qrec = qs.createReceiver(queue);
        TextMessage msg;
        qc.start();

        int i;
        for (i = 0; i < 10; i++) {
            msg = (TextMessage) qrec.receive();
            System.out.println("Msg received: " + msg.getText());
        }

        qc.close();
    }
}

发信人:

public class Sender {
    static Context ictx = null;

    public static void main(String[] args) throws Exception {
        ictx = new InitialContext();
        Queue queue = (Queue) ictx.lookup("queue");
        QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf");
        ictx.close();

        QueueConnection qc = qcf.createQueueConnection();
        QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
        QueueSender qsend = qs.createSender(queue);
        TextMessage msg = qs.createTextMessage();

        for (int i = 0; i < 10; i++) {
            msg.setText("Test number " + i);
            qsend.send(msg);
        }

        qc.close();
    }
}

哪里出错?我是否需要在像glassfish这样的服务器上运行它?

2 个答案:

答案 0 :(得分:0)

您需要一个底层实现,如Apache ActiveMQ,glassfish或任何其他JMS供应商。根据所选的产品,需要设置相应的Jars和Queue才能使程序正常工作。

答案 1 :(得分:0)

您正在使用查找来创建connectionfactory和队列等资源。要使用查找,您需要预先配置jndi资源。

如果您打算只执行一个简单的生产者 - 消费者(发送者 - 接收者)jms示例,您可以查看使用ActiveMQ作为消息代理的这个简单示例:http://activemq.apache.org/hello-world.html