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 -propertyAccessPointId MyLclAccessPtId-property NWAddr //footse:9010-property ConnectionPolicy ON_DEMAND-property Security NONE"java weblogic.Admin ... SET -mbean"myDomain:Name=myWtcService,Type=WTCServer -propertyLocalTuxDomsmyDomain: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 -propertyAccessPointIdMyRemoteAccessPtId -property NWAddr //footse:9020-property LocalAccessPointMyLclAccessPt"java weblogic.Admin ... SET -mbean"myDomain:Name=myWtcService,Type=WTCServer -propertyRemoteTuxDomsmyDomain: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 ExportsmyDomain: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 RemoteAccessPointMyRemoteAccessPt -property LocalAccessPoint MyLclAccessPt"java weblogic.Admin ... SET -mbean"myDomain:Name=myWtcService,Type=WTCServer-property ImportsmyDomain:Name=myImportedResources,Type=WTCImport,WTCServer=myWtcService"
- 为服务器分配新创建的服务。
java weblogic.Admin ... SET -mbeanmyDomain:Name=myWtcService,Type=WTCServer-property TargetsmyDomain:Name=myServer,Type=Server
另一个允许用户对创建、查看、监控或修改 Mbeans 等活动进行记录的灵活工具是 WLShell ,该工具也许能从 dev2dev web 站点下载。关于它的详细文档可在网址 http://www.wlshell.com 上找到
最后欢迎大家访问我的个人网站:1024s
本文链接:https://my.lmcjl.com/post/15136.html
4 评论