Weblogic Jms简单使用
1 基本用法
对于Weblogic Jms的使用可以分为两部分,一部分是Weblogic作为服务端发布对应的Jms服务为客户端程序提供服务,一部分是我们的应用程序作为客户端发布消息到Jms服务端或从Jms服务端获取消息进行消费。
1.1 Jms服务端
Weblogic作为Jms服务端提供Jms服务需要在Weblogic的控制台进行一些配置,主要是Jms服务器和Jms模块。Jms服务器作为Jms服务的核心提供Jms服务,也可以说是作为Jms模块的一个管理容器;Jms模块下可以进行ConnectionFactory、Topic、Queue等资源的定义,Weblogic允许我们通过JNDI对它们进行访问。
1.1.1配置Jms服务器
首先我们需要配置一个Jms服务器。在控制台左边的域结构下面找到对应的域,进入到服务->消息传送->Jms服务器,如下图所示。
然后在右边出现的列表点击“新建”按钮进入新建Jms服务器的导航页面,之后根据提示一步一步操作即可。
1.1.2配置Jms模块
配置好Jms服务器后我们需要配置对应的Jms模块,Jms模块用来分模块管理一组资源,一个Jms模块下可包括ConnectionFactory、Topic、Queue等资源。在控制台左边的域结构下面,进入到服务->消息传送->Jms模块,如下图所示。
然后在右边出现的列表中点击“新建”按钮进入新建Jms模块的导航界面,之后就根据提示进行操作即可。新建好Jms模块后,我们可以在Jms模块列表点击对应Jms模块的链接到对应Jms模块下的资源列表页面,在对应的资源列表页面,我们点击“新建”按钮新建对应的资源。
1.2 Jms客户端
1.2.1Jar包导入
在进行客户端开发的时候我们首先需要导入对应的jar包。按照Weblogic官网文档的说明,我们在开发Weblogic Jms客户端的时候只需要把wlclient.jar和wljmsclient.jar加入classpath即可。这两个jar包在Weblogic安装目录(WL_HOME)下的server/lib目录下,如:/home/weblogic/Oracle/Middleware/Oracle_Home/wlserver/server/lib。但是我在开发的时候只导入这两个jar包,客户端程序跑不起来,错误信息是“Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed: No”。而加上wlfullclient.jar则访问正常。wlfullclient.jar默认不在WL_HOME/server/lib目录下,需要我们在WL_HOME/server/lib目录下通过运行“java –jar wljarbuilder.jar”来生成,生成后的wljarbuilder.jar非常大,有60多M,可以将里面一些与工程现有jar包有冲突的类删除。
1.2.2程序开发
客户端程序的开发的时候获取如ConnectionFactory、Topic、Queue等这些在服务端配置的资源时都需要通过JNDI从服务端获取。所以我们首先得构造一个获取JNDI对象的Context。在构造Context时我们需要提供两个参数,Context.PROVIDER_URL和Context.INITIAL_CONTEXT_FACTORY,这两个参数都由Weblogic提供,第一个参数表示提供JNDI对象的服务地址,这里对应的值是“t3://host:port”,host是Weblogic服务主机的IP地址,port是对应的端口;第二个参数是用于获取InitialContext的InitialContextFactory接口的实现类名称,对于Weblogic而言,它应当是“weblogic.jndi.WLInitialContextFactory”。这里我针对它提供了一个工具类,这个工具类的主要作用是把Context封装起来了,然后提供了对应的根据JNDI名称获取对应对象的方法,还封装了一个ConnectionFactory,提供了获取Connection的方法。
import java.io.IOException;
import java.util.Hashtable;
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.log4j.Logger;
public class JmsUtil {
private static Context context;
private static final Properties props = new Properties();
private static final ConnectionFactory connectionFactory;
private static final String CONNECTION_FACTORY_JNDI = "weblogic.jms.XAConnectionFactory";
private static final Logger logger = Logger.getLogger(JmsUtil.class);
static {