我尝试在使用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这样的服务器上运行它?
答案 0 :(得分:0)
您需要一个底层实现,如Apache ActiveMQ,glassfish或任何其他JMS供应商。根据所选的产品,需要设置相应的Jars和Queue才能使程序正常工作。
答案 1 :(得分:0)
您正在使用查找来创建connectionfactory和队列等资源。要使用查找,您需要预先配置jndi资源。
如果您打算只执行一个简单的生产者 - 消费者(发送者 - 接收者)jms示例,您可以查看使用ActiveMQ作为消息代理的这个简单示例:http://activemq.apache.org/hello-world.html