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服务器
这里写图片描述
点击【新建】,弹出下面页面,开始填写信息,这里给jms服务器起名为JMSServer-0(默认的)
这里写图片描述
点击【下一步】,目标那选择当前服务器(AdminServer)
这里写图片描述
点击完成
二、新建jms模块
早期weblogic可以不用构建jms模块直接新建jms连接工厂,队列等,新版本采用jms模块来组织jms连接工厂等。
左侧域结构->服务->消息传送->jms模块
这里写图片描述
点击【新建】按钮,填写名称,这里为SystemModule-0
这里写图片描述
点击【下一步】,勾选要部署的服务器AdminServer
这里写图片描述
点击【下一步】
这里写图片描述
这个页面中有一项“是否要向此jms模块中添加资源”,这个勾不勾选都可以,勾选的话在完成jms模块配置后可以立即配置资源(连接工厂,队列等),不勾选也可以稍后再配。勾选后进人下面界面:
这里写图片描述
三、新建子部署
子部署是一个很让我困惑的概念,感觉有很多实际的项目中并不需要建子部署,在网上也没有找到解释子部署这一概念的,在《经典java EE企业应用实战》这本书中找到了相关的说明。
jms模块采用子部署管理其内部资源定位,可看做是一种便捷的管理方式。我们常看到需要将某个组件、服务部署到某个服务器实例上,而此处的子部署就相当于多个服务器的集合,当把某个服务、组件部署到指定子部署时,这就意味着该服务、组件将被同时部署到所对应的全部服务器实例上。

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

测试程序
为了方便看到结果,这里注册个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;

/**
 * <p>Title:TestWeblogicMdb</p>
 * <p>Description: 测试weblogic上的jms服务,注意引入wlfullclient.jar或weblogic.jar高版本</p>   
 * @author yuanxj
 * @date 2016-2-16
 */
public class TestWeblogicMdb {
    public static void main(String[] args) {
        try {
            Hashtable<Object,Object> env = new Hashtable<Object,Object>();          
            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;

/**
 * <p>Title:WeblogicMdb</p>
 * <p>Description: </p> 
 * @author yuanxj
 * @date 2016-2-16
 */
public class WeblogicMdb implements MessageListener{

    /* (non-Javadoc)
     * <p>Title:onMessage</p>
     * <p>Description:</p>
     * @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>

重新启动,运行客户端代码,可看到如下结果:
这里写图片描述

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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
WebLogic源码是指用于构建WebLogic服务器的源代码。WebLogic是一种流行的Java应用服务器,它提供了广泛的功能和性能,用于开发和部署企业级应用程序。 WebLogic的源码可以帮助开发人员深入了解服务器背后的工作原理和实现细节。通过研究源码,开发人员可以学习到如何处理网络连接、线程管理、事务处理、安全性、集群等关键功能。此外,源代码还提供了扩展和自定义的机会,以满足特定应用程序的需求。 WebLogic的源码主要是由Java编写的,因此开发人员需要熟悉Java语言和相关的开发工具。在源码,开发人员可以找到各种模块和组件的实现,如HTTP服务器、EJB容器、JMS消息队列等。通过仔细阅读源码,开发人员可以了解到这些组件是如何相互交互并提供服务的。 然而,需要注意的是,WebLogic源码是一种专业的开发资源,其包含大量的代码和复杂的逻辑。因此,对于没有足够经验和知识的开发人员来说,理解和修改源代码可能是一项挑战。在使用源码时,开发人员应该遵循最佳实践和准确的文档。 总之,WebLogic源码是用于构建WebLogic服务器的重要资源。它提供了深入了解服务器内部运作的机会,并为开发人员提供了扩展和自定义的能力。通过仔细研究源码,开发人员可以提高他们的开发技能,并创建更加强大和可靠的企业级应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值