配置WebLogic Tuxedo Connector

WebLogic Tuxedo Connector (WTC) 是一個兼容 JCA ( J2EE 連接器架構)的軟件組件,它提供 Tuxedo 服務和 WebLogic Server 部署的企業應用程序之間的互操作性。 WebLogic Server 組件能夠使用 WTC 與 Tuxedo 服務進行通信, Tuxedo 服務也能夠調交互用基於 WebLogic Server 的 EJB 。

  手動配置 WebLogic Tuxedo Connector 是非常沉悶乏味且易於出錯的操作,從這種觀點出發,本文提出了兩種編程式可選解決方案。第一種基於 JMX ,第二種基於對命令行方式的 weblogic.Admin 工具的使用。本文提供了 Java 類庫,既能生成所需的 JMX 對象又能生成基於 weblogic.Admin 的 shell 文件。

  Tuxedo 服務已經存在多年了,而且很多 EIS (企業信息系統)就是以這種服務功能爲基礎,比如事務支持、域和 ACL (訪問控制列表)安全、域級別故障轉移和反饋、以及高級消息服務。另一方面, J2EE 應用程序不能保持與現有的信息系統隔離;它們必須能夠支持 Tuxedo 事務,在 CORBA Java 和 CORBA C++ 之間進行互操作,同時也要能夠在 Java RMI/IIOP 和 Tuxedo CORBA 之間互操作。

  WTC 實現了所有這些方案和一些其他可能類似 JATMI ( Java 應用程序到事務監控器接口)的實現方案,其中 JATMI 是一種與 Tuxedo ATMI 類似的協議。

  WTC 實現了所有這些方案和一些其他可能類似 JATMI ( Java 應用程序到事務監控器接口)的實現方案,其中 JATMI 是一種與 Tuxedo ATMI 類似的協議。

  說明了 Tuxedo 服務對於 EIS 的重要性,並說明了 WTC 在 EIS 和基於新技術的 J2EE 組件之間所起的關聯作用之後,本文的目標是給出在 WebLogic Server 環境中幾個 WTC 配置的例子。事實上,爲了雙向連接到 Tuxedo 域而對 WebLogic Server 進行配置以便使用 WTC 就是一件費力且易於出錯的事情,本文給出了兩種編程式配置解決方案。它們爲基於 WebLogic Server 控制檯的方案提供了一種選擇,這也許是已知的最佳方法。兩種方案其中之一是以使用 weblogic.Admin 工具爲基礎,並且必將令系統管理員受益。另一個方案是以 JMX ( Java Management Extension )爲基礎,並極有可能吸引開發人員的注意力。

  不論採用哪種方案, WTC 配置過程都基於下列一般步驟:

  • 創建一個 WTC 服務。
  • 創建一個本地 Tuxedo 訪問點。
  • 創建一個遠程 Tuxedo 訪問點。
  • 導出服務。
  • 導入服務。
  • 爲服務器分配新創建的 WTC 服務。

  在全文中,我們都將遵循這些步驟,並且我們將對在三個配置方案中分別執行的方法進行強調。

通過 WebLogic Server 控制檯配置 WTC

  這是爲您的應用程序配置 WTC 的標準方法。它包括了對 WebLogic Server 控制檯 GUI 的使用。雖然有很多優點(其中最重要的是其簡單性),但這種方案也具有費力、重複、易錯等缺點。啓動 WebLogic Server 和它的管理控制檯之後,您可按照下列步驟來配置 WTC 服務。

  • 創建WTC 服務。 在 Administration Console 屏中 , 部署 Services 節點並單擊 WTC 。將顯示 WTC Services 屏。單擊 Configure a New WTC Service 超鏈接。新顯示的屏包括兩個文本域: WTC 服務的名字和它的部署優先權順序。單擊 Create 按鈕來新建一個 WTC 服務。
  • 創建本地 Tuxedo 訪問點。 確保已選中新建服務。單擊該服務頁的“ Content ”選項卡,並在新顯示的頁面中單擊“ Local Aps ”選項卡。要創建新的 Tuxedo 本地訪問點,單擊“ Configure a New Local Tuxedo Access Point ”超鏈接。在 Tuxedo 本地訪問點的“ General ”選項卡中,填寫域“ Access Point ”、“ Access Point ID ”和“ Network Address ”。其中第一個域是用戶選擇名,第二個和第三個域必須與 bdmconfig Tuxedo 配置文件的 DM_TDOMAIN 段相關聯。在同一屏的“ Connections ”選項卡中的默認域值對於大多數情況都是適用的,除非當前 Tuxedo 的版本是 6.5 版,則其中的“ Interoperate ”域必須爲“ Yes ”。爲了簡單起見,我們都假設本頁“ Security ”選項卡中的“ Security ”域爲“ None ”,這意味着不需要任何基於用戶口令的驗證。
  • 創建遠程 Tuxedo 訪問點。 確保已選中新創建的服務。單擊該服務頁的“ Contents ”選項卡,並在新顯示的頁面中單擊“ Remote Aps ”選項卡。要創建新的 Tuxedo 遠程訪問點,單擊“ Configure a New Remote Tuxedo Access Point ”超鏈接。在 Tuxedo 遠程訪問點的“ General ”選項卡中,填寫域“ Access Point ”、“ Access Point ID ”、“ Local Access Point ”和“ Network Address ”。其中第一個域是用戶選擇名,第二個和第四個域必須與 bdmconfig Tuxedo 配置文件的 DM_TDOMAIN 段相關聯。第三個域必須是我們在先前步驟中所選擇的本地 Tuxedo 訪問點名。在同一屏的“ Connections ”選項卡中的默認域值對於大多數情況都是適用的。爲了簡單起見,我們將接受該頁的“ Security ”選項卡中的所有域的默認值。
  • 導出服務。 導出的 WTC 服務基本是部署在容器中的無狀態的會話 EJB ,也許將由 Tuxedo 服務調用。要導出服務,確保已選中新創建的服務。單擊該服務頁的“ Contents ”選項卡,並在新顯示的頁面中單擊“ Exported ”選項卡。要導出 WTC 服務,單擊“ Configure a New Exported Service ”超鏈接。在“ General ”選項卡中,“ Resource name ”域必須與 bdmconfig Tuxedo 配置文件的 DM_REMOTE_SERVICES 段相關聯。第二個域,“ Local Access Point ”,必須是我們在先前步驟中所選擇的本地 Tuxedo 訪問點名。下一個域,“ EJB Name ”,必須與相應已部署的無狀態會話 bean 中的 weblogic-ejb-jar.xm 部署描述文件的 jndi-name 段有相同值。最後 ,“ Remote name ”域可不填,除非 bdmconfig Tuxedo 配置文件在 DM_REMOTE_SERVICES 段中提及 RNAME 參數;在這種情況下,這兩個值必須相關。
  • 導入服務。 導入的 WTC 服務基本上是可由 WebLogic Server 部署組件調用的 Tuxedo 服務。要導入服務,確保已選中新創建的服務。單擊該服務頁的“ Contents ”選項卡,並在新顯示的頁面中單擊“ Imported ”選項卡。要導入 WTC 服務,單擊“ Configure a New Imported Service ”超鏈接。在“ General ”選項卡中,“ Resource name ”域必須與 bdmconfig Tuxedo 配置文件的 DM_LOCAL_SERVICES 段相關聯。第二個和第三個域分別是先前定義的本地和遠程 Tuxedo 訪問點。最後 ,“ Remote name ”域可不填,除非 bdmconfig Tuxedo 配置文件在 DM_LOCAL_SERVICES 段中提及 RNAME 參數;在這種情況下,這兩個值必須相關。
  • 爲服務器分配新創建的服務。 確保已選中新創建的服務。單擊該服務頁的“ Target and Deploy ”選項卡,並在“ Targets ”域中,檢查與當前服務器相關聯的框是否已選中。單擊“ Apply ”按鈕來將改動付諸實現。

  正如您所見,通過WebLogic Server管理控制檯來配置WTC的確是非常費力的,因爲我們必須自己進行很多操作。另外,如果我們需要創建幾個這樣的WTC域,我們將不得不重複這些操作。這增加了在配置過程中犯錯的機會。在這種情況下,關於能創建基於WTC參數的新配置工具的想法顯得十分具有吸引力。

通過 JMX 配置 WTC

  作爲一個可對其進行完全管理的分佈式資源,能夠通過 JMX ( Java Management Extension )使 WebLogic Server 儀表化。這將通過 Mbean 服務器實現,它作爲獨立 WebLogic 實例上的 Mbeans 的主機,允許客戶創建、訪問、檢索並修改 WebLogic 域分佈對象(比如 JDBC 連接池、 JMS 服務器、目的地和工廠)。從 WTC 的角度出發,你能夠通過創建新的特定 WTCMbeans 來創建新 WTC 域。

  在以編程的方式創建並處理 WebLogic 分佈對象的過程中,我們既可以使用 JMX 標準類的接口(由向 Mbean 傳遞操作名和一系列參數來調用 Mbean 的操作組成),也可以使用 WebLogic 的類型安全實現(它爲每個 Mbean 類型提供了獨立接口)。

  因爲 WebLogic 域可能分佈在多個計算機上,這些計算機具有不同部署,而且資源的目標各不相同,所以每個 WebLogic 實例的 Mbean 服務器將擁有三個不同的 Mbeans 集:

  • 對公開資源配置的屬性和操作的 Mbeans 進行配置
  • 運行時的 Mbeans 提供關於資源運行狀態的信息
  • Security Mbeans 提供對 WebLogic 的安全框架的直接訪問

  提到WTC域時,我們將集中在配置Mbeans上。這種類型的Mbeans擁有對所有託管資源(如web服務器、集羣、JDBC連接池和更多的包括WTC域在內的資源)的配置。

  WebLogic 實例上的 Mbean 服務器能夠通過 weblogic.management.MbeanHome 接口到達。可以獲得以下 home 接口的兩種實現:

  • Local Home 接口提供對本地 Mbeans 的訪問, Mbeans 位於 Mbean 服務器上,且屬於當前的 WebLogic Server 實例。

     

  • Administration Home 接口,僅向管理服務器開放,提供對特定的管理服務器 Mbeans 和其他所有由託管服務器宿主的 Mbeans 的訪問。

     

  Home接口既能通過查找服務器的JNDI樹檢索,又能通過WebLogic特定的幫助類檢索。例如,以下代碼對本地home接口進行檢索:

  import weblogic.management.*;
MBeanHome localHome = (MBeanHome)Helper.getMBeanHome
(username,password, url, serverName);

  以上代碼調用 Helper 類的 getMBeanHome() 方法,向它傳遞用戶名、密碼、 WebLogic Server URL 和服務器名。類似地,要檢索管理 home 接口,則調用相同 Helper 類的 getAdminMBeanHome 方法,但只需向其傳送用戶名、密碼和管理服務器 URL ,如下例所示:

清單 2 檢索管理 home 接口

  import weblogic.management.*;
MBeanHome localHome = (MBeanHome)Helper.getAdminMBeanHome
(username, password, url);

  使用 JNDI ( Java 命令目錄接口)也同樣容易。本地和管理返回地址存儲在 MBeanHome.LOCAL_JNDI_NAME 常量和 MBeanHome.ADMIN_JNDI_NAME 常量中。以下代碼示例顯示瞭如何進行:

 清單 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);

  我們已經能夠檢索本地 / 管理接口,接下來將查看怎樣在 JMX 中實現配置 WTC 域所需的 6 步。

 

創建 WTC 服務。這可通過使用 home 接口的 createAdminMBean() 方法,並向其傳遞新的 WTC 域名、要創建的 Mbean 的類型和當前 WebLogic Server 域名來實現。

 

清單 4 創建 WTC 服務。

  WTCServerMBean wtcServerMBean = homeMBean.createAdminMBean ("myWTCDomain",
    "WTCServer", "myWebLogicServerDomain");

 

創建本地 Tuxedo 訪問點。要實現那個目標我們需要創建另一個 WTCLocalTuxDom 類型的管理 Mbean ,並設置其訪問點、訪問點 ID 、網絡地址、連接策略和安全屬性,同時還要將其作爲先前創建的 WTCServer Mbean 的組件添加。

 

清單 5 創建本地 Tuxedo 訪問點。

   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);

 

創建遠程 Tuxedo 訪問點。要實現那個目標我們需要創建另一個 WTCRemoteTuxDom 類型的管理 Mbean ,並設置其訪問點、訪問點 ID 、網絡地址和本地訪問點屬性,同時還要將其作爲先前創建的 WTCServer Mbean 的組件添加。

 

清單 6 創建遠程 Tuxedo 訪問點。

   WTCRemoteTuxDomMBean wtcRemoteTuxDomMBean = (WTCRemoteTuxDomMBean)
    homeMBean.createAdminMBean("myRemoteTuxDom",
    "WTCRemoteTuxDom",
    "myWebLogicServerDomain");
    wtcRemoteTuxDomMBean.setAccessPoint
    ("myRemoteAccessPoint");
    wtcRemoteTuxDomMBean.setAccessPointId("myRemoteAccessPointId");
    wtcRemoteTuxDomMBean.setNWAddr("myRemoteNetworkAddress");
    wtcRemoteTuxDomMBean.setLocalAccessPoint("myLocalTuxDom");
    wtcServerMBean.addRemoteTuxDom(wtcRemoteTuxDomMBean);

 

導出服務。要實現那個目標我們需要創建另一個 WTCExport 類型的管理 Mbean ,並設置其資源名、本地訪問點和 JNDI 名屬性,同時還要將其作爲先前創建的 WTCServer Mbean 的組件添加。

 

清單 7 導出服務。

   WTCExportMBean wtcExportMBean = (WTCExportMBean)
    homeMBean.createAdminMBean
    ("myRemoteTuxDom", "WTCExport",
    "myWebLogicServerDomain");
    wtcExportMBean.setResourceName
    ("myExportedResource");
    wtcExportMBean.setLocalAccessPoint
    ("myLocalTuxDom");
    wtcExportMBean.setEJBName
    ("myResourceJndiName");
    wtcServerMBean.addExport(wtcExportMBean);

 

導入服務。要實現那個目標我們需要創建另一個 WTCImport 類型的管理 Mbean ,並設置其資源名、本地訪問點和遠程訪問點列表屬性,同時還要將其作爲先前創建的 WTCServer Mbean 的組件添加。

 

清單 8 導入服務。

   WTCImportMBean wtcImportMBean = (WTCImportMBean)
    homeMBean.createAdminMBean
    ("myRemoteTuxDom","WTCImport",
    "myWebLogicServerDomain");
    wtcImportMBean.setResourceName
    ("myImportedResource");
    wtcImportMBean.setLocalAccessPoint
    ("myLocalAccessPoint");
    wtcImportMBean.setRemoteAccessPointList
    ("myRemoteAccessPoint");
    wtcServerMBean.addImport(wtcImportMBean);

 

爲服務器分配新創建的服務。現在所有的管理對象已經創建好,我們只需定位我們的 Mbean 服務器。 WTCServerMBean 類的 addTarget() 方法代表這一過程的完成。注意我們通過調用 home 接口的 getMBeanServer() 方法來檢索 MBean 服務器實例的這一方法。

 

清單 9 爲服務器分配 WTC 服務。

  wtcServerMBean.addTarget
    ((TargetMBean)homeMBean.getMBeanServer());

使用 weblogic.Admin 工具配置 WTC

  weblogic.Admin 是一個能用於編寫 WebLogic Server 腳本的 Java 工具。因爲 weblogic.Admin 能夠操縱 JMX 數據,所以將它用來配置 WTC 域也許會比較簡便。

  在我們能夠使用 weblogic.Admin 工具配置 WTC 域前,我們必須理解 WebLogic 是怎樣對其 Mbeans 進行命名的。每個由 Mbean 服務器宿主的 Mbean 都擁有獨一無二的名稱,並且每個名稱都使用 JMX ObjectName 類的實例構建,它們擴展了 ObjectName 來攜帶附加信息。 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

  現在讓我們看一下怎樣通過該工具配置 WTC 域。

 

創建 WTC 服務。

 

 java weblogic.Admin -url t3://localhost:8001 -username weblogic
    -password weblogic CREATE
    -mbean "myDomain:Name=myWtcService,Type=WTCServer"

 

創建本地 Tuxedo 訪問點。

 

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" 

 

創建遠程 Tuxedo 訪問點。

 

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

  另一個允許用戶對創建、查看、監控或修改 Mbeans 等活動進行記錄的靈活工具是 WLShell ,該工具也許能從 dev2dev web 站點下載。關於它的詳細文檔可在網址 http://www.wlshell.com/上找到 。

結束語

  使用 WebLogic Administration Console 來配置 WTC 域也許在某些方案中實用,但它很快就會產生重複性,並生成錯誤。編程式解決方案能夠緩解這個問題,本文對這樣的兩種方案進行了說明。第一種以標準 JMX 解決方案爲基礎,而第二種方案使用功能強大的、以 weblogic.Admin 工具爲基礎的腳本命令。

  本文所附代碼樣例提供了對這些想法的實現。

原文出處

http://dev2dev.bea.com/products/wlserver81/articles/TuxedoConnector.jsp

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章