posts - 42,comments - 83,trackbacks - 0

                  有些情況下,客戶希望集成外部MOM來存儲消息,比如MQSeries, ActivemQ5.2。集成外部MOM時(shí),Weblogic可以通過幾種不同的方式實(shí)現(xiàn),Foreign JMS ServerForeign JNDI ProviderMessage BridgeForeign JMS ServerForeign JNDI Provider工作方式類似,只做JNDI轉(zhuǎn)發(fā),客戶端最終會和外部MOM上的destination直接通信。而對于Message Bridge,需要通過在Weblogic配置本地destination,客戶端發(fā)送、接收消息的時(shí)候,連接的本地destination,然后由Weblogic實(shí)現(xiàn)本地destination和外部MOM上的destination的通信。而對于外部jndi,我們又有兩種方式,可以使用apacheActiveMQInitialContextFactory(基于jndi.properties)也可以使用sunRefFSContextFactory(基于文件)

              本文通過實(shí)例step-by-step介紹如何通過Foreign JMS ServerForeign JNDI Provider Weblogic92ActiveMQ5.2集成起來。

          1:下載并安裝ActiveMQ5.2
             
          下載鏈接為http://activemq.apache.org/activemq-520-release.html,我們可以下載bin格式的,解壓后可以直接啟動。

          2:啟動ActiveMQ5.2,配置destination
             
          執(zhí)行$ACTIVEMQ_HOME\bin下的activemq.cmd.shActiveMQ啟動后,我們可以訪問admin console(http://localhost:8161/admin/)并創(chuàng)建destination。進(jìn)入console后,點(diǎn)擊Queues,然后點(diǎn)擊create,創(chuàng)建我們自己的destination。我創(chuàng)建的queue叫做fjin.Queue_2,我們后面將使用這個(gè)queue,如下,



          3:生成jndi.properties
             
          這個(gè)文件對于thin client來說是必須的,而對于weblogic我們不需要這個(gè)文件,我們只要在配置Foreign JMS ServerForeign JNDI Provider 的時(shí)候,直接在jndi properties中輸入name/value對就可以了。
             
          java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
             
          java.naming.provider.url = tcp://localhost:61616
             
          connectionFactoryNames = fjin.JMSConnectionFactory
             
          queue.fjin.Queue_2 = fjin.Queue_2
             
          這里fjin.JMSConnectionFactory是客戶端在lookup時(shí)需要用的(如果客戶端是weblogic,那么他將作為remote jndi name,而最終客戶端程序使用的是weblogic中定義的local jndi name),而queue.fjin.Queue_2queue是指定destination類型,我們在做lookup時(shí),需要去掉queue.,對于=后面fjin.Queue_2, 則是指我們在ActiveMQ中配置的物理queueThin client使用這個(gè)文件的時(shí)候,需要將他放在classpath(將該文件所在的目錄加入classpath即可)

          4:生成RefFSContextFactory所需要的文件
             
          如果使用RefFSContextFactory作為jndi provider context factory,我們要生成對應(yīng)的文件。文件的生成可以通過下面的程序?qū)崿F(xiàn)(類似于MQSeriesJMSAdmin),用于物理queuejndi name的綁定. 使用RefFSContextFactory 時(shí)需要fscontext.jar,這個(gè)jar不是jdk標(biāo)準(zhǔn)包中的內(nèi)容,可以從如下http://java.sun.com/products/jndi/downloads/index.html下載。

          運(yùn)行這個(gè)程序前,我們要在e:/tmp下創(chuàng)建一個(gè)activemq_fs_jndi目錄,程序執(zhí)行后,該目錄下會生成一個(gè).bindings文件,這個(gè)文件將來用于RefFSContextFactory做本地解析。其實(shí)fs.Queue_2, fs.JMSConnectionFactory是我們將來foreigh jms server/foreign jndi provider中使用的remote jndi name

          5:設(shè)置Weblogic classpath
             
          因?yàn)槲覀儗⑹褂?/span>ActiveMQInitialContextFactoryRefFSContextFactory兩種方式,因此我們需要將對應(yīng)的jar包放入classpath(startWeblogic.cmd/sh),如下:

          6:配置Foreign JMS ServerForeign JNDI Provider
             
          前面我們說過,集成可以通過Foreign JMS ServerForeign JNDI Provider,而這兩種方式其實(shí)都是基于jndi的,而jndi可以用兩種方式,組合起來的話,會有四種方式。這里不作一一羅列,以如下兩種方式作為實(shí)例,
              Foreign JMS Server + ActiveMQInitialContextFactory
              Foreign JNDI Provider + RefFSContextFactory

          6.1Foreign JMS Server + ActiveMQInitialContextFactory
             
          6.1.1:首先我們在weblogic中配置一個(gè)foreign jms server,如下:


              這里jndi properties和我們在jndi.properties文件中的內(nèi)容一樣,只是少了initial context factoryprovider url的指定。注意:queue.fjin.Queue_2queue指定的是destination類型,而fjin.Queue_2指的是將來客戶端要lookupjndi name。其格式為:
              queue.jndiName = physical queu name
             
          topic.jndiName = physical topic name
             
          connectionFactoryNames = jndiName1,jndiName2,...

              6.1.2:配置foreign jms server中的destinationconnection factory


              這里remote jndi name指我們在jndi properties中設(shè)定的destinationconnection factoyjndi name,而local jndi name將被用于客戶端lookup

              6.1.3:客戶端測試程序
             
          配置完成后,我們可以通過客戶端程序進(jìn)行消息發(fā)送測試,如下:

          1             String providerUrl="t3://localhost:7008";
          2             String cfName="jms.JMSConnectionFactory";
          3             String destName="jms.Queue_2";
          4             Properties pro=new Properties(); 
          5             pro.put(Context.INITIAL_CONTEXT_FACTORY,
          6                     "weblogic.jndi.WLInitialContextFactory"); 


          6.2:
          Foreign JNDI Provider + RefFSContextFactory
             
          6.2.1: 配置一個(gè)foreign jndi provider,如下:

              6.2.2:配置jndi links
             
          我們需要配置兩個(gè)jndi links,一個(gè)是destination,一個(gè)是connection factory。其中,remote jndi name需要和我們在FSJNDI生成的.binding中的名字一致,比如fs.Queue_2



          6.2.3
          配置完成后,我們可以通過客戶端程序進(jìn)行消息發(fā)送測試,如下
          :

          1             String providerUrl="t3://localhost:7008";
          2             String cfName="wlsfs.JMSConnectionFactory";
          3             String destName="wlsfs.Queue_2";
          4             Properties pro=new Properties(); 
          5             pro.put(Context.INITIAL_CONTEXT_FACTORY,
          6                     "weblogic.jndi.WLInitialContextFactory"); 


          7
          thin client測試
             
          對于不通過weblogic,直接用jndi連接activeMQ的客戶端,我們需要jndi.properties文件,并這個(gè)文件要放入該client執(zhí)行時(shí)的classpath中。假如jndi.properties中設(shè)定如下:
              java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
             
          java.naming.provider.url = tcp://localhost:61616
             
          connectionFactoryNames = fjin.JMSConnectionFactory
             
          queue.fjin.Queue_2 = physical.Queue_2

          對于上面的jndi properties文件,我們在寫客戶端時(shí),需要lookupjndi name: fjin.Queue_2, fjin.JMSConnectionFactory,如下:

          1             String providerUrl="tcp://localhost:61616";
          2             String cfName="fjin.JMSConnectionFactory";
          3             String destName="fjin.Queue_2";
          4             Properties pro=new Properties(); 
          5             pro.put(Context.INITIAL_CONTEXT_FACTORY,
          6                     "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
          posted on 2009-07-10 15:07 走走停停又三年 閱讀(2138) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 板桥市| 芷江| 涿州市| 庄河市| 东港市| 富川| 元朗区| 昂仁县| 丰都县| 襄汾县| 徐水县| 阿荣旗| 莱芜市| 安乡县| 陇南市| 台东县| 如东县| 龙南县| 哈尔滨市| 改则县| 南江县| 蓬安县| 邛崃市| 青岛市| 舒兰市| 龙游县| 沙湾县| 蕲春县| 崇仁县| 赤峰市| 宝鸡市| 福州市| 屯留县| 洛浦县| 屏南县| 景洪市| 中西区| 安阳县| 武定县| 高陵县| 大关县|