Weblogic构建jms服务

不仅Activemq提供的jms服务,Weblogic也提供了jms服务,很多项目是部署在Weblogic中,使用其提供的jms服务也是很多企业的选择,一直没亲手试过,今天试了下,遇到的小问题还挺多,看来眼过百变不如手过一遍,下面就记录下操作步骤。构建完成后还会实现个小例子来测试下,这里主要进行点对点模式构建。
Weblogic构建jms服务基本都是下面四个步骤(假设域已建好):
1. 新建jms服务器
2. 新建jms模块
3. 新建子部署
4. 新建资源
首先要登录Weblogic控制台(版本为weblogic 10),http://localhost:9101/console/
一、新建jms服务器
左侧域结构->服务->消息传送->jms服务器
Weblogic构建jms服务_第1张图片
点击【新建】,弹出下面页面,开始填写信息,这里给jms服务器起名为JMSServer-0(默认的)
Weblogic构建jms服务_第2张图片
点击【下一步】,目标那选择当前服务器(AdminServer)
Weblogic构建jms服务_第3张图片
点击完成
二、新建jms模块
早期weblogic可以不用构建jms模块直接新建jms连接工厂,队列等,新版本采用jms模块来组织jms连接工厂等。
左侧域结构->服务->消息传送->jms模块
Weblogic构建jms服务_第4张图片
点击【新建】按钮,填写名称,这里为SystemModule-0
Weblogic构建jms服务_第5张图片
点击【下一步】,勾选要部署的服务器AdminServer
Weblogic构建jms服务_第6张图片
点击【下一步】
Weblogic构建jms服务_第7张图片
这个页面中有一项“是否要向此jms模块中添加资源”,这个勾不勾选都可以,勾选的话在完成jms模块配置后可以立即配置资源(连接工厂,队列等),不勾选也可以稍后再配。勾选后进人下面界面:
Weblogic构建jms服务_第8张图片
三、新建子部署
子部署是一个很让我困惑的概念,感觉有很多实际的项目中并不需要建子部署,在网上也没有找到解释子部署这一概念的,在《经典java EE企业应用实战》这本书中找到了相关的说明。
jms模块采用子部署管理其内部资源定位,可看做是一种便捷的管理方式。我们常看到需要将某个组件、服务部署到某个服务器实例上,而此处的子部署就相当于多个服务器的集合,当把某个服务、组件部署到指定子部署时,这就意味着该服务、组件将被同时部署到所对应的全部服务器实例上。

点击新建的模块,进人后看到tab页上有子部署,点击进入
Weblogic构建jms服务_第9张图片
点击【新建】按钮,弹出下面页面,新部署起名为testQueue
Weblogic构建jms服务_第10张图片
点击下一步后,选择目标,勾选刚才新建的jms服务器,不要勾选AdminServer
Weblogic构建jms服务_第11张图片
点击完成,子部署配置结束。
Weblogic构建jms服务_第12张图片
四、新建资源–队列
点击模块进人后,下方有资源概要,如下图,
Weblogic构建jms服务_第13张图片
点击【新建】,进人下面界面,可以建连接工厂和队列、主题等
Weblogic构建jms服务_第14张图片
勾选队列,点击下一步,填写名称和jndi名称,这样设置jndi名称为gt3.esb.jms.mdb.BaseQueueAsynMDBean
Weblogic构建jms服务_第15张图片
点击下一步,选择刚才新建的子部署
Weblogic构建jms服务_第16张图片
点击完成
Weblogic构建jms服务_第17张图片
五、新建资源–连接工厂
新建连接工厂和新建队列步骤相似
Weblogic构建jms服务_第18张图片
点击下一步
Weblogic构建jms服务_第19张图片
填写名称和jndi名称,这里为gt3.esb.jms.con.ESBConnectionFactory
点击下一步
Weblogic构建jms服务_第20张图片
点击【高级定位】
Weblogic构建jms服务_第21张图片
进人界面选择子部署,选择和队列一样的子部署,点击完成。不知道原因是什么,如果选择默认定位不选子部署,程序中不能查找到队列。

测试程序
为了方便看到结果,这里注册个mdb监听刚才新建的队列。
客户端(生产者):TestWeblogicMdb.java

package com.css.sword.jms;

import java.util.Hashtable;

import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

/**
 * 

Title:TestWeblogicMdb

*

Description: 测试weblogic上的jms服务,注意引入wlfullclient.jar或weblogic.jar高版本

* @author yuanxj * @date 2016-2-16 */
public class TestWeblogicMdb { public static void main(String[] args) { try { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env.put(Context.PROVIDER_URL,"t3://localhost:9101"); InitialContext ic = new InitialContext(env); QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)ic.lookup("gt3.esb.jms.con.ESBConnectionFactory"); QueueConnection queueConn = queueConnectionFactory .createQueueConnection(); //create session QueueSession qSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); //find queue by JNDI lookup Queue queue = (Queue)ic.lookup("gt3.esb.jms.mdb.BaseQueueAsynMDBean"); //create sender QueueSender qSender = qSession.createSender(queue); //create message Message msg = qSession.createTextMessage("Message is from JMS Sender!"); qSender.send(msg); } catch (Exception e) { e.printStackTrace(); } } }

服务端–mdb:WeblogicMdb.java

package com.css.sword.jms;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * 

Title:WeblogicMdb

*

Description:

* @author yuanxj * @date 2016-2-16 */
public class WeblogicMdb implements MessageListener{ /* (non-Javadoc) *

Title:onMessage

*

Description:

* @param arg0 * @see javax.jms.MessageListener#onMessage(javax.jms.Message) */
@Override public void onMessage(Message arg0) { // TODO Auto-generated method stub if(arg0 instanceof TextMessage) { TextMessage txtMsg = (TextMessage) arg0; try { System.out.println("接收到的消息为:"+txtMsg.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

将该类打包放到weblogic部署目录中,然后配置weblogic的ejb-jar.xml和weblogic-ejb-jar.xml两个文件
ejb-jar.xml中添加如下片段

<message-driven>
            <ejb-name>testMDB</ejb-name>
            <ejb-class>com.css.sword.jms.WeblogicMdb</ejb-class>
            <transaction-type>Bean</transaction-type>
            <message-destination-type>javax.jms.Queue</message-destination-type>
            <activation-config>
                <activation-config-property>
                    <activation-config-property-name>acknowledgeMode</activation-config-property-name>
                    <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>destinationType</activation-config-property-name>
                    <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
                </activation-config-property>
            </activation-config>
        </message-driven>

weblogic-ejb-jar.xml中添加如下片段

<weblogic-enterprise-bean>
        <ejb-name>testMDB</ejb-name>
        <message-driven-descriptor>
            <destination-jndi-name>gt3.esb.jms.mdb.BaseQueueAsynMDBean</destination-jndi-name>
            <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
            <connection-factory-jndi-name>gt3.esb.jms.con.ESBConnectionFactory</connection-factory-jndi-name>   
        </message-driven-descriptor>
    </weblogic-enterprise-bean>

重新启动,运行客户端代码,可看到如下结果:
Weblogic构建jms服务_第22张图片

测试时注意引入wlfullclient.jar或weblogic.jar高版本

你可能感兴趣的:(java后端,远程调用,jms,weblogic)