由于下一个项目中要用到JMS,事先准备。于是计划学习OpenJMS,首先跑通P2P服务。于是跑到OpenJMS官方网站翻译了他们的部分文档。 首先要到他们官方网站下载按转包,然后启动服务bin/startup.bat,再可以打开GUI服务管理界面bin/admin.bat。然后将以下包导入到工程当中去:
1.commons-logging-1.0.4.jar
2.concurrent-1.3.4.jar
3.jms-1.1.jar
4.openjms-0.7.7-beta-1.jar
5.openjms-net-0.7.7-beta-1.jar
6.spice-jndikit-1.2.jar
7.openjms-common-0.7.7-beta-1.jar
然后可以看看 翻译的文档。
最后跑通程序,再看源代码。理解它的设计理念 等等。-_-!
OpenJMS使用文档(译)
2008.11.14
1.概述。
文档主要描述消息的发送,接受(包括同步的和异步的)。
2.设置。
通常JMS首先通过JNDI上下文得到ConnectionFactory,然后创建Connection实例和Session实例。
代码例子:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "tcp://localhost:3035/");
Context context = new InitialContext(properties);
通过以上代码初始化上下行文。
为了以后开发方便,你可以自己配置jndi.properties 来加载。
Jndi.properties格式如下:
java.naming.factory.initial=org.exolab.jms.jndi.InitialContextFactory
java.naming.provider.url=tcp://myhost:3035
然后就直接用以下代码得到context:
import javax.naming.Context;
import javax.naming.InitialContext;
Context context = new InitialContext();
创建ConnectionFactory:
import javax.jms.ConnectionFactory;
ConnectionFactory factory =
(ConnectionFactory) context.lookup("ConnectionFactory");
创建Connection,
import javax.jms.Connection;
Connection connection = factory.createConnection();
创建Session,
import javax.jms.Session;
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
2.发送消息。
发送消息首先要获得一个目的地(他这里说的目的地其实就是一个服务)。
消息可能是一个Queue(用于p2p) 也可能是一个Topic(用于订阅/发布)。消息发送使用MessageProducer。
说了一大堆,下面开始了:
搜寻一个目的地。
目的地实例被绑定在JNDI。 OpenJMS预设置服务目的地,包括Topic named "topic1" ,能够这样子得到:
import javax.jms.Topic;
Destination destination = (Destination) context.lookup("topic1");
发送消息:
import javax.jms.MessageProducer;
import javax.jms.TextMessage;
connection.start();
MessageProducer sender = session.createProducer(destination);
TextMessage message = session.createTextMessage("Hello World!");
sender.send(message);
3.接收消息。
异步:
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
MessageConsumer receiver = session.createConsumer(destination);
receiver.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage text = (TextMessage) message;
System.out.println("Received message: " + message.getText());
}
});
connection.start();
同步:
import javax.jms.MessageConsumer;
import javax.jms.TextMessage;
MessageConsumer receiver = session.createConsumer(destination);
connection.start();
TextMessage message = (TextMessage) receiver.receive();
System.out.println("Received message: " + message.getText());