下面具体来介绍服务器搭建,在http://openjms.sourceforge.net/downloads.html下载openJms,解压后在系统环境变量中加入OPENJMS_HOME=安装路径,在 \openjms-0.7.6.1\bin 里,有openJms的运行脚本,执行 startup 启动,弹出一个新的窗口,服务就运行在新窗口内,shutdown 为停止命令;下面写段JMS的测试代码:
import java.util.*;
import javax.jms.*;
import javax.naming.*;
public class QueueSend {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
//这个地方是核心部分需要服务器的支持-------------提供一个公共访问空间(客户端和服务端交互的空间)
//openJms默认的端口是1099
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");//在jms 服务器安装目录下config/openjms.xml中这个值可以根据需求修改
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//产生JMS队列发送器
QueueSender queueSender =
queueSession.createSender(queue);
//发送数据到JMS
TextMessage message = queueSession.createTextMessage();
message.setText("Hello, I'm openJms.");
queueSender.send(message);
System.out.println(
""信息写入JMS服务器队列");
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上是把我们新建的消息“Hello, I'm openJms” 发送到 jms服务器中queue1中,我们可以运行jms服务器bin下的admin.bat查看我们queue1中的消息数目1;
下面我们可以或取jms服务器中我们刚才发送的消息代码如下:
import java.util.*;
import javax.jms.*;
import javax.naming.*;
public class QueueReceiveSynchronous {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");//这个地方是核心部分需要服务器的支持-------------提供一个公共访问空间(客户端和服务端交互的空间)
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//启动接收队列线程
queueConnection.start();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//产生JMS队列接收器
QueueReceiver queueReceiver =
queueSession.createReceiver(queue);
//通过同步的方法接收消息
Message message = queueReceiver.receive();
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage) message).
getText();
System.out.println(messageText);
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上的代码可以把我们刚才发送到JMS服务上的消息“Hello, I'm openJms”取出来;以上两个java类不需要新建WEB工程直接新建JAVA工程就可以,需要加入额外的包:
commons-logging-1.0.4.jar
excalibur-util-concurrent-1.3.1.jar
jms-1.1.jar
openjms-0.7.7-beta-1.jar
openjms-common-0.7.7-beta-1.jar
openjms-net-0.7.7-beta-1.jar
openjms-tools-0.7.7-beta-1.jar
spice-jndikit-1.2.jar