<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rednight

    0x2B|~0x2B,That's not a question,Just do it.
    posts - 32, comments - 14, trackbacks - 0, articles - 0
    WLS 9.1與MQ v5.3 通過JMS Bridge通信配置

    時間:2006-06-27
    作者:孟和
    瀏覽次數: 1229
    本文關鍵字:WebLogic,?MQ,?JMS,?MQSeries,?JMS Bridge
    文章工具
    推薦給朋友?推薦給朋友
    打印文章?打印文章

      最近參與一個系統的原型開發,原型要求演示WebLogic Server9.1與其他第三方產品的通信支持,包括與IBM MQSeries的雙向交互、與Tuxedo的雙向交互、支持與.NET的通過Web Service交互等。我負責完成與IBM MQSeries的雙向交互這部分,在網上找了不少文章,發現其中基本都是基于WebLogic Server 8.1實現的。因為WebLogic Server 9.1在JMS上有很大的增強,所以我參考以前的文章,自己實現了WebLogic Server 9.1與IBM MQSeries 5.3的雙向交互并且進行了測試。想必很多同行會遇到跟我一樣的問題,特此撰文一片跟大家分享。本文配置在window xp上測試成功。

    概述

      目標是實現WebLogic Server 9.1和IBM MQSeries5.3之間的的雙向交互,包括:

    • WebLogic Server 9.1消息轉發給IBM MQSeries5.3
    • IBM MQSeries 5.3消息轉發給WebLogic Server 9.1

      具體地,將WebLogic Server9.1隊列WLSSendQueue的消息轉發到IBM MQSeries 5.3隊列MQReceiveQueue,同時將IBM MQSeries 5.3隊列MQSendQueue的消息轉發到WebLogic Server 9.1隊列WLSSendQueue。

      WebLogic Server包含一個完整的、有豐富特性的消息服務器。第三方的消息服務器(如IBM MQSeries),只要其提供了JMS API的實現,也可以在其中運行。Messaging Bridge是一種由WebLogic Server提供的J2EE設備,用于轉發兩個消息提供者的消息。你可以使用Messaging Bridge將消息從一個消息提供者的目的地(隊列或者主題)移至另外一個消息提供者的目的地。因此,當WebLogic應用程序需要與第三方消息提供者 (比如IBM MQSeries)進行交互時,Messaging Bridge就可以承擔這個中間角色。我們需要做如下配置:

    • 通過WebLogic控制臺建立兩個WebLogic隊列:發送隊列WLSSendQueue和接收隊列WLSReceiveQueue。
    • 類似地,通過MQ資源管理器建立兩個MQ本地隊列:發送隊列MQSendQueue和接收隊列MQReceiveQueue。
    • 為 了實現消息轉發需要建立兩個Messaging Bridge:WLS2MQBridge 和MQ2WLSBridge 。WLS2MQBridge:將WebLogic發送隊列WLSSendQueue的消息轉發到MQ接收隊列MQReceiveQueue; MQ2WLSBridge:將MQ發送隊列MQSendQueue的消息轉發到WebLogic接收隊列WLSReceiveQueue。
    • 為 了實現事務性消息轉發, WebLogic需要使用XAQueueConnectionFactory,而MQ需要使用MQXAQueueConnectionFactory。這 就確定了WebLogic需要使用支持XA的連接工廠,MQ必須采用綁定的模式,并且WebLogic和MQ必須安裝在同一臺機器上。

    WLS配置

      WebLogic Server 9.1在WebLogic JMS的配置、部署和動態管理方面引入了重要的改進。它對JMS 1.1規范提供官方支持。此外,在系統中添加了人們期待已久的消息排序高級特性。XML API的XML消息處理功能得到了增強。在WebLogic 9.1平臺上使用JMS非常輕松有趣、可靠且迅速。下面是現有新特性中的一些亮點。

    • 自動化的 JMS 故障恢復

        自動化的JMS故障恢復是業內期待已久的特性。JMS利用“Automatic WebLogic Server Migration”特性來提供自動化的JMS故障恢復。在整個WebLogic Server實例進行故障恢復時,JMS也將自動從故障中恢復過來。盡管其他的一些JMS服務器提供商已經利用一些復雜裝置提供了這樣的功能,但 WebLogic 9.1的實現是最直觀而清晰的。

    • 排序單元

        消息排序是大多數消息處理應用程序的一項基本要求。WebLogic Server JMS即使在集群環境中也能確保消息的順序處理。它甚至可以定義多個組來將消息分組,這樣每個組都擁有自己的處理順序(如圖1所示)。

      圖1

    • 存儲轉發 (SAF)

        WebLogic存儲轉發(store and forward, SAF)服務使WebLogic Server能在通過WebLogic Server實例部署的應用程序間可靠地交付信息。SAF的強大功能使得我們可以很容易地將多個消息服務鏈接在一起(如圖2所示)。

      圖2

    • Messaging Bridge具有如下優點:
      • 不需要編碼,純配置,加速你的開發;
      • 靈活的體系結構,容易配置多個Messaging Bridges,并且而且可以動態的啟動和停止單個Messaging Bridge;
      • 采用即取即用的MQ 適配器,實現全面的MQ JMS 支持,能夠設定MQ 主題查詢;
      • 充分利用WebLogic容器進行服務管理,并且集中所有的Bridges資源在一個線程池;
      • 全面的事務處理能力,兩階段事務處理;
      • 全面的JCA 支持;
      • 確保服務質量和連接管理,實實在在的一次性服務;
      • 控制臺監視能力;
      • 集成BEA WebLogic應用與外部消息提供商,以便將新的應用與現有的投資連接起來。

    創建Server域

      創建Server Domain, domain名稱jms_domain

    修改啟動文件

      修改WebLogic的啟動文件startWebLogic.cmd。將IBM MQSeries和IBM MQSeries Java的安裝目錄加到WebLogic path下,同時將MQ JMS Java類包加入到WebLogic classpath下:

    @rem added the following to configure messaging bridge with local MQSeries installation
    set MQ_INSTALL_PATH=D:\installed\MQ
    set MQ_JAVA_INSTALL_PATH=D:\installed\MQ\Java
    set MQ_JAVA_LIB=%MQ_JAVA_INSTALL_PATH%\lib
    set MQ_CLASSPATH=%MQ_JAVA_LIB%\com.ibm.mq.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\com.ibm.mqbind.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\com.ibm.mqjms.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\fscontext.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\jms.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\jndi.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\jta.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\ldap.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%\providerutil.jar
    
    set MQ_PATH=%MQ_INSTALL_PATH%\in;%MQ_JAVA_INSTALL_PATH%\in;
           %MQ_JAVA_INSTALL_PATH%\lib
    set PATH=%MQ_PATH%;%PATH%
    set CLASSPATH=%MQ_CLASSPATH%;%WEBLOGIC_CLASSPATH%;
           %POINTBASE_CLASSPATH%;%JAVA_HOME%\jre\lib\rt.jar;
          %WL_HOME%\server\lib\webservices.jar;%CLASSPATH%
    

    配置JMS

      注意WLS91的連接工廠和隊列要到JMS Modules下面設置:

    • 創建文件后備存儲BridgeFileStore
    • 創建JMS服務器BridgeJMSServer,和Paging Store設為" BridgeFileStore" ,Target為adminServer
    • 創建支持XA的連接工廠WLSCFXA,JNDI Name為bridge.wlsCFXA
    • 創建JMS發送隊列WLSSendQueue,JNDI名稱為bridge.wlsSendQueue,Target為BridgeJMSServer
    • 創建JMS接收隊列WLSReceiveQueue,JNDI名稱為bridge.wlsReceiveQueue,Target為BridgeJMSServer

    配置Messaging Bridge Destination

    • JMS Bridge Destination名稱為MQReceiveBridgeDestination
      • Adapter JNDI Name: eis.jms.WLSConnectionFactoryJNDIXA
      • Connection URL為file:/D:/installed/MQ/Queues,
      • Initial Context Factory為com.sun.jndi.fscontext.RefFSContextFactory,
      • Connection Factory JNDI Name為bridge.mqQCFXA,
      • Destination JNDI Name為bridge.mqReceiveQueue
      • Destination Type: Queue
    • JMS Bridge Destination名稱為MQSendBridgeDestination
      • Adapter JNDI Name: eis.jms.WLSConnectionFactoryJNDIXA
      • Connection URL為file:/D:/installed/MQ/Queues,
      • Initial Context Factory為com.sun.jndi.fscontext.RefFSContextFactory,
      • Connection Factory JNDI Name為bridge.mqQCFXA,
      • Destination JNDI Name為bridge.mqSendQueue
      • Destination Type: Queue
    • JMS Bridge Destination名稱為WLSReceiveBridgeDestination
      • Adapter JNDI Name: eis.jms.WLSConnectionFactoryJNDIXA
      • Connection URL為t3://localhost:7001,
      • Initial Context Factory為weblogic.jndi.WLInitialContextFactory,
      • Connection Factory JNDI Name為bridge.wlsCFXA,
      • Destination JNDI Name為bridge.wlsReceiveQueue
      • Destination Type: Queue
      • User Name: weblogic(域配置時指定的)
      • User Password: weblogic(域配置時指定的)
    • JMS Bridge Destination名稱為WLSSendBridgeDestination
      • Adapter JNDI Name: eis.jms.WLSConnectionFactoryJNDIXA
      • Connection URL為t3://localhost:7001,
      • Initial Context Factory為weblogic.jndi.WLInitialContextFactory,
      • Connection Factory JNDI Name為bridge.wlsCFXA,
      • Destination JNDI Name為bridge.wlsSendQueue,
      • Destination Type: Queue
      • User Name: weblogic(域配置時指定的)
      • User Password: weblogic(域配置時指定的)

    配置Messaging Bridge

    • JMS Bridge名稱為MQ2WLSBridge
      • Source Bridge Destination:  MQSendBridgeDestination
      • Target Bridge Destination:  WLSReceiveBridgeDestination
      • Quality Of Service:      Exactly-Once
      • Started:            Yes
    • JMS Bridge名稱為WLS2MQBridge
      • Source Bridge Destination:  WLSSendBridgeDestination
      • Target Bridge Destination:  MQReceiveBridgeDestination
      • Quality Of Service:      Exactly-Once
      • Started:            Yes

    MQ 配置

      IBM MQSeries是IBM的商業通訊中間件(Commercial Messaging Middleware)。IBM MQSeries提供一個具有工業標準,安全,可靠的信息傳輸系統。它的功能是控制和管理一個集成的商業應用,使得組成這個商業應用的多個分支程序(模塊)之間通過傳遞信息完成整個工作流程。IBM MQSeries具有特殊的技術防止信息重復傳送,確保信息一次且僅一次(once-and-only-once)傳遞,保證傳輸的可靠性。本文使用的 MQ版本為IBM MQSeries 5.3。

      IBM MQSeries基本由一個消息傳輸系統和一個應用程序接口組成,其資源是消息和隊列(Messaging and Queuing)。

      隊列管理器(Queue Manager):管理隊列的系統,實現網絡通信,保證消息安全可靠地傳輸到目的地。用于確保隊列之間的信息提供,包括網絡中不同系統上的的遠程隊列之間的信息提供。并保證網絡故障或關閉后的恢復。

      隊列:一個安全的信息存儲區。因為信息存放在隊列中,所以應用程序可以相互獨立的運行,以不同的速度,在不同的時間,在不同的地點。

      本地隊列:對程序而言,本地隊列屬于該程序所連接的隊列管理器。

      遠程隊列:該隊列不屬于該程序所連接的隊列管理器,而只是遠端隊列管理器的隊列在本地的定義。

      傳輸隊列:它是一個本地隊列,保存了指定要發送到遠端的消息。

      死信隊列:它是一個本地隊列,用于存放無法傳遞的消息。

      通道:在兩個隊列管理器之間建立起來的數據傳輸鏈路。

      應用程序接口:應用程序和信息系統之間通過MQSeries API實現的接口。

    Install MQ

    • 安裝過程中選擇自定義安裝模式,并確保安裝JMS所需的Java jar包支持如下圖:

      (缺省安裝未包含)

    Install MQ

    確認MQ服務已啟動。

      可通過MicroSoft windows控制面板中管理工具下的服務控制臺確認。如下圖:

    確認MQ服務已啟動

    從程序菜單啟動MQ 資源管理器

      如果程序提示試用版過期,可以通過修改系統時間搞定.我就是修改到了2004年。

    通過MQ資源管理器創建一個通道

      建立名為BRIDGE.CHANNEL的通道,其他參數缺省設置。

    通過MQ資源管理器創建一個通道

    通過MQ資源管理器創建兩個本地隊列

      建立兩個本地隊名為MQReceiveQueue, MQSendQueue,其他參數缺省設置。

    通過MQ資源管理器創建兩個本地隊列

    更新MQ安裝目錄下與JMS配置相關的文件

      JMSAdmin.config文件位于%MQ_INSTALLL_HOME_PATH%\Java\bin,主要定義JNDI服務的提供商,即JMS Server Factory和URL。%MQ_INSTALLL_HOME_PATH%\Java\bin目錄下新建目錄bridgeconfig,將JMSAdmin.config文件拷貝到bridgeconfig。

      使用Sun的文件JNDI服務Factory,故定義

      ?

    INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
    PROVIDER_URL=file:/D:/installed/MQ/Queues
    SECURITY_AUTHENTICATION=none
    (例子中,MQ安裝目錄%MQ_INSTALLL_HOME_PATH%為:D:/installed/MQ/)
    JMSAdmin.bat文件也位于%MQ_INSTALLL_HOME_PATH%\Java\bin,此文件用于啟動MQ的JMS命令行管理界面,要設置啟動JMS命令行管理界面所需環境變量。在JMSAdmin.bat中添加如下環境變量:
    set MQ_JAVA_INSTALL_PATH=D:\installed\MQ\Java
    set MQ_JAVA_LIB=%MQ_JAVA_INSTALL_PATH%lib
    set MQ_CLASSPATH=%MQ_JAVA_LIB%com.ibm.mq.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%com.ibm.mqbind.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%com.ibm.mqjms.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%fscontext.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%jms.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%jta.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%ldap.jar
    set MQ_CLASSPATH=%MQ_CLASSPATH%;%MQ_JAVA_LIB%providerutil.jar
    

    進入MQ的JMS命令行管理界面綁定MQ的JMS Factory以及JMS本地隊列

    • 開啟MicroSoft Windows的Dos窗口(cmd.exe)
    • 進入MQ安裝目錄下的java目錄下的bin目錄
    • 運行JMSAdmin.bat并通過-cfg參數指定JMSAdmin.config文件位置

        本次例子中輸入:D:\ installed\MQ\Java\bin>jmsadmin -cfg? .\bridgeconfig\jmsadmin.config

      進入MQ的JMS命令行管理界面綁定MQ的JMS Factory以及JMS本地隊列

    • 如上圖所示界面,生成一個MQXAQueueConnectionFactory對象,Messaging Bridge將使用這個工廠對象建立MQ的XA連接,使用命令DEFINE XAQCF,起名:bridge.mqQCFXA。
    • 生成JMSQueue對象來綁定MQ隊列MQReceiveQueue。
    • 生成JMSQueue對象來綁定MQ隊列MQSendQueue。
    • 使用dis ctx命令,查看目前已有的對象和綁定,可以看到XA連接工廠和隊列都已綁定。

    測試

    MQ發送,WLS接收

    1. MQ發送隊列放入測試消息

      MQ發送隊列放入測試消息

    2. 在WLS控制臺監測消息到達

      在WLS控制臺監測消息到達

    WLS發送,MQ接收

    1. WLS發送隊列放入測試消息

        執行下面的代碼,給WLS發送隊列放入測試消息

        ?

      package com.bea;
      import javax.naming.InitialContext;
      import javax.naming.Context;
      import javax.naming.NamingException;
      import javax.jms.*;
      import java.util.Hashtable;
      /**
       * Created by IntelliJ IDEA.
       * User: pmeng
       * Date: 2006-6-3
       * Time: 14:54:08
       */
      public class SendMessageTest {
          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:7001");
                  InitialContext ctx = new InitialContext(env);              
                  QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("bridge.wlsCFXA");
                  QueueConnection connection = factory.createQueueConnection();
                  QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                  Queue queue = (Queue) ctx.lookup("bridge.wlsSendQueue");
                  connection.start();
                  QueueSender queueSender = session.createSender(queue);
                  TextMessage msg = session.createTextMessage();
                  msg.setText("Menghe.");
                  queueSender.send(msg);
              }
              catch (NamingException e) {
                  System.out.println("NamingException:" + e.getMessage());
                  e.printStackTrace();
              }
              catch (JMSException e) {
                  System.out.println("JMSException:" + e.getMessage());
                  e.printStackTrace();
              }
          }
      }
      
    2. MQ資源管理器查看接收到的消息

      MQ資源管理器查看接收到的消息

    參考資料

    1. BEA WebLogic Server 8.1 JMS與 IBM MQSeries 集成方案,周海根,
      http://dev2dev.bea.com.cn/techdoc/20040411784.html
    2. BEA WebLogic 8.1 JMS 與IBM MQ v5.3 通過JMS Message Bridge通信配置,陳仁祥
      http://e-docs.bea.com/wls/docs91/messaging.html

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 美女在线视频观看影院免费天天看| 亚洲M码 欧洲S码SSS222| 黄床大片免费30分钟国产精品| 亚洲人成网站在线观看播放动漫 | 亚洲国产精品VA在线看黑人| 免费黄网在线观看| 国产黄色免费网站| 久久中文字幕免费视频| 国产精品小视频免费无限app| 亚洲gay片在线gv网站| 亚洲一级毛片中文字幕| 久久精品国产亚洲夜色AV网站 | 特级毛片在线大全免费播放| 国产午夜亚洲精品| 亚洲第一页中文字幕| 人人狠狠综合久久亚洲婷婷| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 国产偷国产偷亚洲高清在线| 亚洲国产乱码最新视频| 亚洲视频手机在线| 亚洲精选在线观看| 亚洲人成在线观看| 亚洲最大福利视频网站| 亚洲av午夜福利精品一区| 国产日产亚洲系列最新| 亚洲一区二区三区在线播放| 亚洲国产综合久久天堂| www.亚洲精品| 亚洲黄黄黄网站在线观看| 亚洲国产精品专区在线观看| 免费又黄又爽的视频| 亚洲国产午夜福利在线播放| 亚洲综合精品网站| 在线观看午夜亚洲一区| 在线a亚洲v天堂网2019无码| 亚洲欭美日韩颜射在线二| 亚洲AV无码第一区二区三区| 久久精品国产亚洲av麻豆 | 最近中文字幕电影大全免费版 | 亚洲精品国产高清嫩草影院| 亚洲国产成人精品女人久久久 |