| 時(shí)間:2005-03-31 作者:Nicolas Duminil 瀏覽次數: 1969 本文關(guān)鍵字:WTC, tuxedo, JCA |
|

WebLogic Tuxedo Connector (WTC) 是一個(gè)兼容 JCA ( J2EE 連接器架構)的軟件組件,它提供 Tuxedo 服務(wù)和 WebLogic Server 部署的企業(yè)應用程序之間的互操作性。 WebLogic Server 組件能夠使用 WTC 與 Tuxedo 服務(wù)進(jìn)行通信, Tuxedo 服務(wù)也能夠調交互用基于 WebLogic Server 的 EJB 。
手動(dòng)配置 WebLogic Tuxedo Connector 是非常沉悶乏味且易于出錯的操作,從這種觀(guān)點(diǎn)出發(fā),本文提出了兩種編程式可選解決方案。第一種基于 JMX ,第二種基于對命令行方式的 weblogic.Admin 工具的使用。本文提供了 Java 類(lèi)庫,既能生成所需的 JMX 對象又能生成基于 weblogic.Admin 的 shell 文件。
Tuxedo 服務(wù)已經(jīng)存在多年了,而且很多 EIS (企業(yè)信息系統)就是以這種服務(wù)功能為基礎,比如事務(wù)支持、域和 ACL (訪(fǎng)問(wèn)控制列表)安全、域級別故障轉移和反饋、以及高級消息服務(wù)。另一方面, J2EE 應用程序不能保持與現有的信息系統隔離;它們必須能夠支持 Tuxedo 事務(wù),在 CORBA Java 和 CORBA C++ 之間進(jìn)行互操作,同時(shí)也要能夠在 Java RMI/IIOP 和 Tuxedo CORBA 之間互操作。
WTC 實(shí)現了所有這些方案和一些其他可能類(lèi)似 JATMI ( Java 應用程序到事務(wù)監控器接口)的實(shí)現方案,其中 JATMI 是一種與 Tuxedo ATMI 類(lèi)似的協(xié)議。
WTC 實(shí)現了所有這些方案和一些其他可能類(lèi)似 JATMI ( Java 應用程序到事務(wù)監控器接口)的實(shí)現方案,其中 JATMI 是一種與 Tuxedo ATMI 類(lèi)似的協(xié)議。
說(shuō)明了 Tuxedo 服務(wù)對于 EIS 的重要性,并說(shuō)明了 WTC 在 EIS 和基于新技術(shù)的 J2EE 組件之間所起的關(guān)聯(lián)作用之后,本文的目標是給出在 WebLogic Server 環(huán)境中幾個(gè) WTC 配置的例子。事實(shí)上,為了雙向連接到 Tuxedo 域而對 WebLogic Server 進(jìn)行配置以便使用 WTC 就是一件費力且易于出錯的事情,本文給出了兩種編程式配置解決方案。它們?yōu)榛?WebLogic Server 控制臺的方案提供了一種選擇,這也許是已知的最佳方法。兩種方案其中之一是以使用 weblogic.Admin 工具為基礎,并且必將令系統管理員受益。另一個(gè)方案是以 JMX ( Java Management Extension )為基礎,并極有可能吸引開(kāi)發(fā)人員的注意力。
不論采用哪種方案, WTC 配置過(guò)程都基于下列一般步驟:
在全文中,我們都將遵循這些步驟,并且我們將對在三個(gè)配置方案中分別執行的方法進(jìn)行強調。
通過(guò) WebLogic Server 控制臺配置 WTC
這是為您的應用程序配置 WTC 的標準方法。它包括了對 WebLogic Server 控制臺 GUI 的使用。雖然有很多優(yōu)點(diǎn)(其中最重要的是其簡(jiǎn)單性),但這種方案也具有費力、重復、易錯等缺點(diǎn)。啟動(dòng) WebLogic Server 和它的管理控制臺之后,您可按照下列步驟來(lái)配置 WTC 服務(wù)。
正如您所見(jiàn),通過(guò)WebLogic Server管理控制臺來(lái)配置WTC的確是非常費力的,因為我們必須自己進(jìn)行很多操作。另外,如果我們需要創(chuàng )建幾個(gè)這樣的WTC域,我們將不得不重復這些操作。這增加了在配置過(guò)程中犯錯的機會(huì )。在這種情況下,關(guān)于能創(chuàng )建基于WTC參數的新配置工具的想法顯得十分具有吸引力。
通過(guò) JMX 配置 WTC
作為一個(gè)可對其進(jìn)行完全管理的分布式資源,能夠通過(guò) JMX ( Java Management Extension )使 WebLogic Server 儀表化。這將通過(guò) Mbean 服務(wù)器實(shí)現,它作為獨立 WebLogic 實(shí)例上的 Mbeans 的主機,允許客戶(hù)創(chuàng )建、訪(fǎng)問(wèn)、檢索并修改 WebLogic 域分布對象(比如 JDBC 連接池、 JMS 服務(wù)器、目的地和工廠(chǎng))。從 WTC 的角度出發(fā),你能夠通過(guò)創(chuàng )建新的特定 WTCMbeans 來(lái)創(chuàng )建新 WTC 域。
在以編程的方式創(chuàng )建并處理 WebLogic 分布對象的過(guò)程中,我們既可以使用 JMX 標準類(lèi)的接口(由向 Mbean 傳遞操作名和一系列參數來(lái)調用 Mbean 的操作組成),也可以使用 WebLogic 的類(lèi)型安全實(shí)現(它為每個(gè) Mbean 類(lèi)型提供了獨立接口)。
因為 WebLogic 域可能分布在多個(gè)計算機上,這些計算機具有不同部署,而且資源的目標各不相同,所以每個(gè) WebLogic 實(shí)例的 Mbean 服務(wù)器將擁有三個(gè)不同的 Mbeans 集:
提到WTC域時(shí),我們將集中在配置Mbeans上。這種類(lèi)型的Mbeans擁有對所有托管資源(如web服務(wù)器、集群、JDBC連接池和更多的包括WTC域在內的資源)的配置。
WebLogic 實(shí)例上的 Mbean 服務(wù)器能夠通過(guò) weblogic.management.MbeanHome 接口到達??梢垣@得以下 home 接口的兩種實(shí)現:
Home接口既能通過(guò)查找服務(wù)器的JNDI樹(shù)檢索,又能通過(guò)WebLogic特定的幫助類(lèi)檢索。例如,以下代碼對本地home接口進(jìn)行檢索:
import weblogic.management.*;MBeanHome localHome = (MBeanHome)Helper.getMBeanHome(username,password, url, serverName);
以上代碼調用 Helper 類(lèi)的 getMBeanHome() 方法,向它傳遞用戶(hù)名、密碼、 WebLogic Server URL 和服務(wù)器名。類(lèi)似地,要檢索管理 home 接口,則調用相同 Helper 類(lèi)的 getAdminMBeanHome 方法,但只需向其傳送用戶(hù)名、密碼和管理服務(wù)器 URL ,如下例所示:
清單 2 檢索管理 home 接口
import weblogic.management.*;MBeanHome localHome = (MBeanHome)Helper.getAdminMBeanHome(username, password, url);
使用 JNDI ( Java 命令目錄接口)也同樣容易。本地和管理返回地址存儲在 MBeanHome.LOCAL_JNDI_NAME 常量和 MBeanHome.ADMIN_JNDI_NAME 常量中。以下代碼示例顯示了如何進(jìn)行:
清單 3 使用 JNDI 檢索本地 home 接口。
Hashtable ht = new Hashtable();ht.put (Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");ht.put(Context.PROVIDER_URL, "t3://adminserver:8001");InitialContext ic = new InitialContext (ht);MBeanHome localHome = (MBeanHome)ic.lookup (MBeanHome.LOCAL_JNDI_NAME);
我們已經(jīng)能夠檢索本地 / 管理接口,接下來(lái)將查看怎樣在 JMX 中實(shí)現配置 WTC 域所需的 6 步。
清單 4 創(chuàng )建 WTC 服務(wù)。
WTCServerMBean wtcServerMBean = homeMBean.createAdminMBean ("myWTCDomain", "WTCServer", "myWebLogicServerDomain");
清單 5 創(chuàng )建本地 Tuxedo 訪(fǎng)問(wèn)點(diǎn)。
WTCLocalTuxDomMBean wtcLocalTuxDomMBean = (WTCLocalTuxDomMBean) homeMBean.createAdminMBean("myLocalTuxDom","WTCLocalTuxDom", getWebLogicDomainName()); wtcLocalTuxDomMBean.setAccessPoint(getLocalAccessPointName()); wtcLocalTuxDomMBean.setAccessPointId(getLocalAccessPointId()); wtcLocalTuxDomMBean.setNWAddr(getLocalNetworkAddress()); wtcLocalTuxDomMBean.setConnectionPolicy("ON_DEMAND"); wtcLocalTuxDomMBean.setSecurity("NONE"); wtcServerMBean.addLocalTuxDom(wtcLocalTuxDomMBean);
清單 6 創(chuàng )建遠程 Tuxedo 訪(fǎng)問(wèn)點(diǎn)。
WTCRemoteTuxDomMBean wtcRemoteTuxDomMBean = (WTCRemoteTuxDomMBean) homeMBean.createAdminMBean("myRemoteTuxDom", "WTCRemoteTuxDom", "myWebLogicServerDomain"); wtcRemoteTuxDomMBean.setAccessPoint ("myRemoteAccessPoint"); wtcRemoteTuxDomMBean.setAccessPointId("myRemoteAccessPointId"); wtcRemoteTuxDomMBean.setNWAddr("myRemoteNetworkAddress"); wtcRemoteTuxDomMBean.setLocalAccessPoint("myLocalTuxDom"); wtcServerMBean.addRemoteTuxDom(wtcRemoteTuxDomMBean);
清單 7 導出服務(wù)。
WTCExportMBean wtcExportMBean = (WTCExportMBean) homeMBean.createAdminMBean ("myRemoteTuxDom", "WTCExport", "myWebLogicServerDomain"); wtcExportMBean.setResourceName ("myExportedResource"); wtcExportMBean.setLocalAccessPoint ("myLocalTuxDom"); wtcExportMBean.setEJBName ("myResourceJndiName"); wtcServerMBean.addExport(wtcExportMBean);
清單 8 導入服務(wù)。
WTCImportMBean wtcImportMBean = (WTCImportMBean) homeMBean.createAdminMBean ("myRemoteTuxDom","WTCImport", "myWebLogicServerDomain"); wtcImportMBean.setResourceName ("myImportedResource"); wtcImportMBean.setLocalAccessPoint ("myLocalAccessPoint"); wtcImportMBean.setRemoteAccessPointList ("myRemoteAccessPoint"); wtcServerMBean.addImport(wtcImportMBean);
清單 9 為服務(wù)器分配 WTC 服務(wù)。
wtcServerMBean.addTarget ((TargetMBean)homeMBean.getMBeanServer());
使用 weblogic.Admin 工具配置 WTC
weblogic.Admin 是一個(gè)能用于編寫(xiě) WebLogic Server 腳本的 Java 工具。因為 weblogic.Admin 能夠操縱 JMX 數據,所以將它用來(lái)配置 WTC 域也許會(huì )比較簡(jiǎn)便。
在我們能夠使用 weblogic.Admin 工具配置 WTC 域前,我們必須理解 WebLogic 是怎樣對其 Mbeans 進(jìn)行命名的。每個(gè)由 Mbean 服務(wù)器宿主的 Mbean 都擁有獨一無(wú)二的名稱(chēng),并且每個(gè)名稱(chēng)都使用 JMX ObjectName 類(lèi)的實(shí)例構建,它們擴展了 ObjectName 來(lái)攜帶附加信息。 Mbean 的名字遵循以下格式:
<domain>:Name=<name>,Type=<type>[,Location=<server>][<attr>=<value>]*
where:
<domain> is the name of the WebLogic domain to which the MBean server belongs
<name> is the name of the resource associated with the MBean
<type> is the name of the MBean
<server> is the name of the server hosting the MBean server
<attr> and <value> are name-value pairs for MBean attributes
現在讓我們看一下怎樣通過(guò)該工具配置 WTC 域。
java weblogic.Admin -url t3://localhost:8001 -username weblogic -password weblogic CREATE -mbean "myDomain:Name=myWtcService,Type=WTCServer"
java weblogic.Admin ... CREATE -mbean "myDomain:Name=myLoclTuxDom, Type=WTCLocalTuxDom,WTCServer=myWtcService" java weblogic.Admin ... SET -mbean "myDomain:Name=myLoclTuxDom,Type=WTCLocalTuxDom,WTCServer=myWtcService -property AccessPoint MyLclAccessPt -property AccessPointId MyLclAccessPtId -property NWAddr //footse:9010 -property ConnectionPolicy ON_DEMAND -property Security NONE" java weblogic.Admin ... SET -mbean "myDomain:Name=myWtcService,Type=WTCServer -property LocalTuxDoms myDomain:Name=myLoclTuxDom,Type=WTCLocalTuxDom, WTCServer=myWtcService"
java weblogic.Admin ... CREATE -mbean "myDomain:Name=myRemoteTuxDom, Type=WTCRemoteTuxDom,WTCServer=myWtcService" java weblogic.Admin ... SET -mbean "myDomain:Name=myRemoteTuxDom,Type=WTCRemoteTuxDom,WTCServer=myWtcService -property AccessPoint MyRemoteAccessPt -property AccessPointId MyRemoteAccessPtId -property NWAddr //footse:9020 -property LocalAccessPoint MyLclAccessPt" java weblogic.Admin ... SET -mbean "myDomain:Name=myWtcService,Type=WTCServer -property RemoteTuxDoms myDomain:Name=myRemoteTuxDom,Type=WTCRemoteTuxDom, WTCServer=myWtcService"
java weblogic.Admin ... CREATE -mbean "myDomain:Name=myExportedResources, Type=WTCExport,WTCServer=myWtcService" java weblogic.Admin ... SET -mbean "myDomain:Name=myExportedResources,Type=WTCExport, WTCServer=myWtcService -property ResourceName myExportedService -property EJBName myServiceJNDIName -property LocalAccessPoint MyLclAccessPt" java weblogic.Admin ... SET -mbean "myDomain:Name=myWtcService,Type=WTCServer -property Exports myDomain:Name=myExportedResources, Type=WTCExport,WTCServer=myWtcService"
java weblogic.Admin ... CREATE -mbean "myDomain:Name=myImportedResources, Type=WTCImport,WTCServer=myWtcService" java weblogic.Admin ... SET -mbean "myDomain:Name=myImportedResources,Type=WTCImport, WTCServer=myWtcService -property ResourceName myImportedService -property RemoteAccessPoint MyRemoteAccessPt -property LocalAccessPoint MyLclAccessPt" java weblogic.Admin ... SET -mbean "myDomain:Name=myWtcService,Type=WTCServer -property Imports myDomain:Name=myImportedResources, Type=WTCImport,WTCServer=myWtcService"
java weblogic.Admin ... SET -mbean myDomain:Name=myWtcService,Type=WTCServer -property Targets myDomain:Name=myServer,Type=Server
另一個(gè)允許用戶(hù)對創(chuàng )建、查看、監控或修改 Mbeans 等活動(dòng)進(jìn)行記錄的靈活工具是 WLShell ,該工具也許能從 dev2dev web 站點(diǎn)下載。關(guān)于它的詳細文檔可在網(wǎng)址 http://www.wlshell.com 上找到 。
結束語(yǔ)
使用 WebLogic Administration Console 來(lái)配置 WTC 域也許在某些方案中實(shí)用,但它很快就會(huì )產(chǎn)生重復性,并生成錯誤。編程式解決方案能夠緩解這個(gè)問(wèn)題,本文對這樣的兩種方案進(jìn)行了說(shuō)明。第一種以標準 JMX 解決方案為基礎,而第二種方案使用功能強大的、以 weblogic.Admin 工具為基礎的腳本命令。
本文所附代碼樣例提供了對這些想法的實(shí)現。
原文出處
http://dev2dev.bea.com/products/wlserver81/articles/TuxedoConnector.jsp
聯(lián)系客服