作者·2010-04-19 14:15
·

基于 JMX 在 WebSphere 集群上部署 Java EE 应用

字数 16731阅读 3465评论 0赞 0
本文介绍如何基于 JMX 将 Java EE 应用部署到 WebSphere 集群的方法。本文首先将向您阐述 WebSphere 集群架构,然后着重讲解如何基于 JMX 来部署 WebSphere 应用,文中探讨了部署应用到 WebSphere ND 集群和部署应用到单个 WebSphere 服务器之间的异同,并通过程序实例演示如何基于 JMX 将一个 Java EE 应用程序及相关 JMS 应用部署到 WebSphere ND 集群环境中。

WebSphere 集群架构介绍

WebSphere 集群面向企业应用,旨在提高应用程序的可用性、可扩展性以及性能的方案。一个 WebSphere 集群环境可以由多个工作在不同节点的 WebSphere Application Server 实例组成,对外提供服务时则表现为一个单一的逻辑应用服务器。每个集群由一个部署管理器(DM:Deployment Manager)来统一管理集群中应用程序的部署及其他集群控制功能,部署在集群之上的应用程序运行在集群环境的所有应用服务器中,从而获得集群环境所带 来的高可用性,负载均衡等优势。图 1 演示了一个简单的 Websphere 集群配置拓扑结构。集群中包含三个成员,节点 A 同时包含了集群 1 的部署管理器,所有应用都将通过它自动部署到集群所有节点的应用服务器上。


图 1. Websphere 集群简单示例
图 1. Websphere 集群简单示例




回页首


WebSphere 的应用程序部署方法简介

WebSphere Application Server 提供了几种方案来部署安装应用程序,可安装的应用程序文件类型也是多种多样,常见的包括企业归档文件(EAR)、企业 bean(EJB)、Web 归档文件(WAR)、会话启动协议(SIP)模块(SAR)、资源适配器(连接器或 RAR)以及应用程序客户机模块。目前有以下几种常见的 Websphere 应用程序部署方法,包括 :

  • 基于 WebSphere 管理控制台安装向导进行部署

此种方法通过在 WebSphere 控制台导航树,单击应用程序 > 安装新的应用程序,按照向导的指示信息操作来部署选择待安装的应用程序文件,并按照向导提示一步一步完成安装。

这种方法优点是方便易用,直接通过 WebSphere 控制界面进行部署,但不适用于在产品安装程序中自动部署 Java 应用程序。

  • 基于 wsadmin 脚本进行部署

wsadmin 脚本可以用于控制和操作 WebSphere Application Server,它是 WebSphere 提供的一种操作界面。利用 wsadmin 脚本部署应用程序要求在对应的部署脚本中或在命令提示符下调用 AdminApp 对象的 install 命令。

该 种部署通过编写脚本实现,优点是简单易操作,不用编写 java 程序,不用编译,缺点是依赖于本地 wsadmin 环境支持,因此只能用于本地部署,无法完成远程安装。此外,脚本部署虽然容易,但是不容易实现一些对交互功能要求较高的操作,从而不适合一些复杂的、需要 和 WebSphere Application Server 进行较多信息交互的安装程序使用。关于使用 wsadmin 部署应用的信息,请参考 WebSphere Application Server 环境配置与应用部署最佳实践

  • 按照 Java Application Deployment(JSR 88)方法定义了 Java EE DeploymentManager 对象的 Java 程序。

Java Specification Request 88:Java Application Deployment(JSR 88)定义了一套跨平台的 Java 应用部署标准,这种部署方法支持将应用程序部署到不同类型的应用程序服务器上,使独立软件厂商能够开发可以部署在任何 Java EE 认证应用服务器上的 Java EE 应用程序。很多 Java 应用服务器都支持 JSR 88,例如 WebSphere Application Server。JSR 88 着重于实现部署已打包好的应用程序包,对于其他和被部署的应用程序相关的 WebSphere 资源(例如 JMS 资源、数据库连接资源等),则无法进行管理和配置,还是需要依靠 WebSphere 的 JMX 这类管理接口来实现。

另外,JSR 88 的跨平台优点使得很多跨平台开发、部署工具都采用其来实现应用程序包在各类 Java 应用服务器上无差别的部署。JSR 也支持远程安装和部署。

  • 使用 JMX(Java Management Extensions) 管理进行部署

此 种方法通过调用 WebSphere Application Server 实现的 JMX 管理接口完成部署,WebSphere 的 JMX 管理接口非常强大,可以用它访问和管理 WebSphere 的各种资源。应该说,JMX 接口提供的功能几乎覆盖了 WebSphere 所有的可管理功能项。所以,基于 JMX 接口能够比较容易的访问和配置 WebSphere 的内部资源项。因此,针对一些部署比较复杂、需要频繁获取 WebSphere 的内部资源、对安装过程的自动化和智能化要求较高的安装程序来说,JMX 是较好的选择。当然,WebSphere 实现的 JMX 接口也支持远程的安装,同时还支持对 WebSphere 内部其他资源的配置,例如消息服务的配置、数据库连接资源的配置等。





回页首


JMX 框架介绍

JMX 是用来为应用程序植入管理功能的框架,它是一套标准的代理和服务,提供了将 Java 资源列出到系统管理基础结构的标准方法。使用 JMX 框架,Java 应用程序服务器(例如,WebSphere Application Server)可实现一些特定的管理功能,如列出配置设置,以及编辑设置。此外,此框架还包括可用于监视事务(如应用程序服务器的启动)的通知功能,实现 对服务程序的实时监控等。

JMX 是对应用程序的资源进行管理的 Java 标准,用 Java 程序实现,客户程序可以通过 JMX API 对应用程序的资源进行管理。

JMX 体系结构如图 2 所示,包括三层:

  • 检测层:规定如何将资源合并到受管 Bean(MBean :Managed Bean)中。
  • 代理程序层:由 MBean Server 和代理程序组成,它们提供管理基础结构。可实现包括监视、事件通知、计时器服务。
  • 管理层:定义外部管理应用程序如何根据协议、API 等等与底层进行交互。

图 2. JMX 体系结构
图 2. JMX 体系结构




回页首


WebSphere Application Server 中的 JMX 实现

在 WebSphere Application Server(WAS)中,JMX 作为应用程序服务器的核心管理功能接口被实现。WAS 包含有一个 JMX 代理,所有系统组件都被当作 MBean 接受管理。WAS 的 JMX 代理能够支持两类连接器,分别是 RMI/IIOP 和 SOAP/HTTP(S) ,该代理提供外部程序对应用程序服务器资源的远程访问能力。WAS 所含的所有管理工具都使用这些 JMX 工具来实现其功能。同样 WAS 自身包含的管理工具也是使用 JMX 接口来实现对应用服务器的管理。

WebSphere 集群需要管理和监控分布在不同节点之上的应用程序服务器,因此,WebSphere 集群实现一套特别的分布式 JMX 架构来实现对集群的管理,该分布式管理体系结构具有以下几个特点:

  • 首先,本地应用服务器上的本地 MBean 注册在本地的 Mbean 服务器上。
  • 其次,本地 MBean 服务器可以将消息传递到外部的 MBean 服务器,外部 MBean 服务器可以运行在节点代理、部署管理器或者其他应用服务器上,这些外部 MBean 服务器需要创建一个 MBean 代理来连接并接受来自于特定应用服务器上的 MBean 服务器的消息。
  • 中间层的节点代理上,该节点内所有应用服务器都通过一个 MBean 代理接入。节点代理也创建了本地 MBean 服务器,用于传送消息给上层 MBean 代理。
  • 在最上层的 WebSphere 集群的部署管理服务器上,同样创建了 MBean 代理,用于接收来自特定节点代理的消息。

WebSphere 集群中的 JMX 分层消息传递和管理结构如图 3 所示。


图 3.JMX 的 WAS 分布式管理
图 3.JMX 的 WAS 分布式管理




回页首


在 WebSphere 集群上部署 Java EE 应用

基于以上 WebSphere 的 JMX 实现架构,本节将首先介绍集群部署和单个服务器部署之间的区别,随后讲解如何基于 JMX 实现应用程序在 WebSphere 集群上的部署。

WebSphere 单机服务部署和 WebSphere 集群部署的区别

WebSphere 单机应用服务器作为一个唯一的应用服务器进行部署时,一个应用服务器上可以同时部署和运行一个或多个 Java EE 应用,图 4 说明了在单机服务器配置中安装应用的过程。单机部署中,安装程序可以通过 JMX 直接调用本地的 MBean 服务器,完成对本地应用服务器的操作和部署应用,本地的部署过程不涉及节点代理和集群的部署管理器。应用配置直接保存在本地,安装文件也直接在本地解压并 存放在本地路径中。


图 4. 在单机服务器配置中部署应用
图 4. 在单机服务器配置中部署应用

而在 WebSphere 集群环境中部署应用则有些不同,图 5 说明了在 Network Deployment 环境中部署应用的过程。

  1. 首先,安装程序直接调用部署管理服务器上的 MBean 进行部署操作。
  2. 部署配置先存放于主配置库,随后通过配置同步操作把应用程序从主配置库复制到各个目标节点的配置库中。
  3. 同步操作结束时,应用程序的安装文件(如 EAR)将在目标节点所在的安装目的路径展开。
  4. 部署完成之后,当安装的应用启动时,各个 WAS 实例将从配置库中读取应用的元数据并进行绑定。
  5. 在应用客户发出请求时,WAS 实时地从安装目的路径读取应用业务逻辑,比如 EJB, servlets 和 JSP。

图 5. 在 Network Deployment 配置中部署应用
图 5. 在 Network Deployment 配置中部署应用

基于以上不同之处,在采用 JMX 实现单机服务器安装和集群安装时,基于 JMX 的 Java 部署程序将存在以下不同点:

模块安装目标位置选定上存在不同

如果是部署应用程序到单个服务器,则当部署结束,保存系统配置变化时,部署目标服务器被指定为目的地的单个应用服务器名称。目标服务器被指定为 WebSphere:cell=cellName,node=nodeName,server=serveName。按如下代码部署应用程序到单个服务器的安装目的地。

String target = "WebSphere:cell=zxvm2Node01Cell,node=zxvm2Node01,server=server1";

而部署应用程序到集群时,由于需要同步部署服务器与个体节点上的配置,应用文件被拷贝到远程节点,对应的目标服务器也将改变。目标集群被指定为 WebSphere:cell=cellName,cluster=clusterName, 如下代码行所示,IRMCLUSTER 被指定为部署目标。

String target = “WebSphere:cell=zxvm2Cell01,cluster=IRMCLUSTER”;

安装程序连接部署目标服务器时属性设置存在不同。

在 部署到单服务器时 , 部署 Java 程序连接的是应用服务器,如在清单 1 中第 3 行的主机名标明了服务器所在主机的可解析网络名称,在第 4 行中服务器的连接器侦听的端口号 , 在单服务器安装中,应用程序服务器的 SOAP 连接器的缺省端口号是 8880。

而部署应用程序到集群时,清单 1 中第三行主机名将使用集群部署管理器所在主机的可解析网络名称,连接器侦听的端口号是部署管理器的连接器侦听的端口号,SOAP 连接器的缺省端口号是 8879。


清单 1. 部署目标属性设置
1) Properties clientProps = new Properties();
2) connectProps.setProperty(AdminClient.CONNECTOR_TYPE,
3) AdminClient.CONNECTOR_TYPE_SOAP);
4) connectProps.setProperty(AdminClient.CONNECTOR_HOST, "hostname");
5) connectProps.setProperty(AdminClient.CONNECTOR_PORT, "8879");
6) AdminClient adminClient = null;
7) ......
8) adminClient = AdminClientFactory.createAdminClient(clientProps);

将 Java EE 应用部署到 WebSphere ND 集群的部署实例

下面,本文将通过示例如何基于 JMX 部署 Java EE 应用到 WebSphere 集群,该演示示例通过以下步骤创建。

第一步,用特定于 WAS 的绑定信息来填充即将被部署的企业归档(EAR)文件。

  1. 创建控制器并用相应的选项来填充 EAR 文件,见清单 2 第 6-12 行。其中第 6 行获得 AppDeploymentController ,AppDeploymentController 以 EAR 文件为参数,它创建一系列 AppDeploymentTask(任务),这些任务被部署程序用来收集绑定信息,有的任务数据还可以被修改。
  2. 运行缺省绑定生成器,这是可选的,见清单 2 第 3-5 行。
  3. 保存并关闭 EAR 文件,见清单 2 第 13 行。当在不同的任务中得到所有必须的绑定信息后,任务数据需要被保存到 EAR 文件中,这样组装好的 EAR 文件可以被安装到 WebSphere 中
  4. 获取将传递至 installApplication MBean(API)的安装选项表,见清单 2 第 14 行。安装选项可以在应用程序安装时直接进行传递。

清单 2. 用特定于 WAS 的绑定信息填充被部署的企业归档(EAR)文件
1) Hashtable prefs = new Hashtable();
2) prefs.put(AppConstants.APPDEPL_LOCALE, Locale.getDefault());
3)
4) Properties defaultBnd = new Properties();
5) prefs.put(AppConstants.APPDEPL_DFLTBNDG, defaultBnd);
6) defaultBnd.put(AppConstants.APPDEPL_DFLTBNDG_VHOST, "default_host");
7)
8) AppDeploymentController controller = AppDeploymentController
.readArchive(earFile, prefs);
9) AppDeploymentTask task = controller.getFirstTask();
10) while (task != null) {
11) String[][] data = task.getTaskData();
12) task.setTaskData(data);
13) task = controller.getNextTask();
14) }
15) controller.saveAndClose();
16)
17) Hashtable options = controller.getAppDeploymentSavedResults();

第 二步,连接到 WAS。要执行安装等管理功能要获得基于 JMX 的 AppManagement MBean,而要获得 AppManagement MBean 首先要创建一个 AdminClient 以建立到 WebSphere 服务器的连接。创建 AdminClient 的过程参见清单 3,第 4 行之后填写目标服务器(集群)的属性,常用属性有主机名,端口号,连接协议类别。接协议主要有两类:SOAP,RMI,本文中的例子为 SOAP。


清单 3. 连接到 WAS

1) String host = "zxvm2";
2) String port = "8879";
3)
4) Properties config = new Properties();
5) config.put(AdminClient.CONNECTOR_HOST, host);
6) config.put(AdminClient.CONNECTOR_PORT, port);
7) config.put(AdminClient.CONNECTOR_TYPE,
AdminClient.CONNECTOR_TYPE_SOAP);
8) AdminClient _soapClient = AdminClientFactory
.createAdminClient(config);

第三步,创建应用程序管理代理。应用程序管理代理被用来执行统一管理功能,如安装部署应用程序。创建应用程序管理代理方法如下。

AppManagement proxy = AppManagementProxy.getJMXProxyForClient(_soapClient);

第四步,设置直接由任务收集的部署选项。清单 4 第 1 行把本地信息作为优先选择。第 2 行到第 6 行指定模块的目标集群。


清单 4. 直接由任务收集的部署选项

1) options.put(AppConstants.APPDEPL_LOCALE, Locale.getDefault());
2)
3) String target = "WebSphere:cell=zxvm2Cell01,cluster=IRMCLUSTER";
4)
5)
6) Hashtable module2server = new Hashtable();
7) module2server.put("Test4Cluster.jar+META-INF/application.xml", target);
8) module2server.put(
"Test4ClusterClient.jar+META-INF/application.xml", target);
9) options.put(AppConstants.APPDEPL_MODULE_TO_SERVER, module2server);

第五步,创建用于侦听安装事件的通知过滤器并添加侦听器。
JMX 支持对特定的管理事件进行监视,某些事件会生成通知,比如安装应用程序。清单 5 第 1,2 行创建监听安装事件的过滤器。第 3-5 行获取 AppManagement MBean 的 ObjectName。第 6 行添加侦听器,第一个参数是 AppManagement MBean 的 ObjectName。第二个参数标识必须实现 NotificationListener 接口的侦听器对象。本例中,发出调用的对象是侦听器。第三个参数是一个过滤器,您可以用它指出想要接收哪些通知。如果您保留这个值为 null ,您将会接收到来自这个 MBean 的所有通知。最后一个参数是一个 handback 对象,您可以这样设置 JMX,当它发出一个通知时,就把这个对象返回。


清单 5. 创建用于侦听安装事件的通知过滤器并添加侦听器

1) NotificationFilterSupport myFilter = new NotificationFilterSupport();
2) myFilter.enableType(AppConstants.NotificationType);
3) Iterator iter = _soapClient.queryNames(
4) new ObjectName(
"WebSphere:node=zxvm2CellManager01,type=AppManagement,*"), null).iterator();
5) ObjectName on = (ObjectName) iter.next();
6) _soapClient.addNotificationListener(on, this, myFilter, null);

第六步,安装应用程序。安装应用程序接口是异步执行,会马上退出。如果超时请等待,以使程序不会结束。

proxy.installApplication(earFile, appName, options, null);

Thread.sleep(300000);

第七步,侦听 Java 管理扩展(JMX)通知,以推测操作完成的时间。当安装完成时,除去侦听器,然后退出。


清单 6. 侦听 Java 管理扩展(JMX)通知

1) public void handleNotification(Notification notf, Object handback) {
2) AppNotification ev = (AppNotification) notf.getUserData();
3)
4) if (ev.taskName.equals(eventTypeToCheck)
&& (ev.taskStatus.equals(AppNotification.STATUS_COMPLETED) ||
ev.taskStatus
.equals(AppNotification.STATUS_FAILED))) {
5) try {
6) _soapClient.removeNotificationListener(on, this);
7) } catch (Throwable th) {
8) System.out.println("Error removing listener: " + th);
9) }
10) System.exit(0);
11) }else {
12) System.out.println("install in progress");
13) }
14) }

将消息服务应用部署到 WebSphere ND 集群的服务集成总线上

由 于很多 Java EE 应用都使用 JMS(Java Message Service)实现应用之间的消息传递,在 WebSphere 集群部署中,相关的 JMS 应用也需要正确部署到集群环境中。 在 WAS 中,消息传递平台构建在服务集成总线(SIB)之上,它是企业服务总线(ESB) 的一个实现,是将不同应用程序连接在一起实现组件之间无缝集成的一种新方法。本节举例展示如何采用 Java 管理扩展 (JMX) 在集群环境中配置 JMS。

本示例(图 6)将一个集群作为服务集成总线的成员,演示部署一个发布 / 订阅消息模式。集群包括节点 1 中的服务器 1 和节点 2 中的服务器 2。


图 6. 集群作为服务集成总线的成员
图 6. 集群作为服务集成总线的成员

部署步骤列举如下。

  • 创建一个服务集成总线
  • 将集群添加为服务集成总线的一个成员
  • 创建主题空间作为目的地
  • 创建消息引擎
  • 创建主题连接工厂
  • 创建主题
  • 创建激活规范
  • 保存配置

第一步,创建一个 SIB

SIB 是一个逻辑概念。应用服务器(或集群)是总线的成员。作为同一总线的成员的所有应用服务器都共享一个公共基础设施,应用服务器可以在其中交换信息。

清 单 7 是准备工作,其中第 1 行取得 AdminClien 对象(清单 3),第 2 行取得配置服务 (ConfigServic) 对象,配置服务对象用来进行各种配置操作。第 3 行建立会话 , 配置服务支持会话;也就是说,直到保存命令被发出,所有通过配置服务进行的查询和修改才会被存入配置库。第 4-7 行取得集群 ObjectName,第 8-10 行取得单元 ObjectName。


清单 7. 创建一个服务集成总线准备工作

1) AdminClient adminClient = AdminClientFactory.createAdminClient(connectProps);
2) ConfigServiceProxy configService = new ConfigServiceProxy(adminClient);
3) Session session = new Session();
4)
5) ObjectName cluster1 = ConfigServiceHelper.createObjectName(null," ServerCluster",
clusterName);
6) ObjectName[] matches = configService.queryConfigObjects(session,null,
cluster1, null);
7) cluster1 = null;
8) cluster1 = matches[0];
9)
10) ObjectName cell = ConfigServiceHelper.createObjectName(null,
"Cell",cellName);
11) matches = configService.queryConfigObjects(session, null,cell, null);
12) cell = matches[0];

清单 8 中,创建了一个 SIB,SIB 支持使用基于消息的体系结构和面向服务体系结构的应用程序。总线是一组作为总线成员的一个或多个相互连接的服务器或服务器集群。应用程序在其中一个与其总 线成员相关联的消息传递引擎上连接到总线。清单 8 中第 1 行到第 5 行填写总线属性。总线有哪些属性可以用 wsadmin 命令 $AdminConfig attributes SIBus 获得。


清单 8. 创建了一个服务集成总线

1) AttributeList attrs = new AttributeList();
2) attrs.add(new Attribute("name", busName));
3) attrs.add(new Attribute("secure", new Boolean(false)));
4) attrs.add(new Attribute("discardMsgsAfterQueueDeletion",new Boolean(false)));
5) attrs.add(new Attribute("highMessageThreshold", new Long(50000)));
6) ObjectName sib = configService.createConfigData(session, cell,
"SIBus", "SIBus", attrs);

第二步,将集群添加为服务集成总线的一个成员,并指定集群名称。

attrs = new AttributeList();

attrs.add(new Attribute("cluster", clusterName));

ObjectName busMember = configService.createConfigData(session, sib, "busMembers", "SIBusMember", attrs);

第三步,创建主题空间作为目的地,见清单 9。

主 题空间是发布 / 预订主题组成的层次结构,并带有在关联服务集成总线上的每个消息传递引擎中自动定义的发布点。其中第 1-5 行填写主题空间属性,主题空间所拥有的属性可以用 wsadmin 命令 $AdminConfig attributes SIBTopicSpace 获得。


清单 9. 创建主题空间作为目的地

1) attrs = new AttributeList();
2) attrs.add(new Attribute("identifier", "Test.Topic.Space"));
3) attrs.add(new Attribute("description", ""));
4) attrs.add(new Attribute("sendAllowed", new Boolean(true)));
5) attrs.add(new Attribute("receiveAllowed", new Boolean(true)));
6) ObjectName busDestination = configService.createConfigData(session, sib,
"SIBTopicSpace", "SIBTopicSpace", attrs);

第四步,创建消息引擎,见清单 10。

消 息传递引擎是服务器组件,它提供服务集成总线的核心消息传递功能。消息传递引擎管理总线资源并允许应用程序与总线进行通信。其中第 4-8 行填写消息引擎属性,消息引擎所拥有的属性可以用 wsadmin 命令 $AdminConfig attributes SIBMessagingEngine 获得。


清单 10. 创建消息引擎

1) String messagingEngineName = nodeName + "." + clusterName
+ "-TestBus";
2) String uuid = (String) configService.getAttribute(session, sib, "uuid");
3) Long highMessageThreshold = (Long) configService.getAttribute(session, sib,
"highMessageThreshold");
4) AttributeList attributelist = new AttributeList();
5) ConfigServiceHelper.setAttributeValue(attributelist, "name", messagingEngineName);
6) ConfigServiceHelper.setAttributeValue(attributelist, "busName", busName);
7) ConfigServiceHelper.setAttributeValue(attributelist, "busUuid", uuid);
8) ConfigServiceHelper.setAttributeValue(attributelist, "highMessageThreshold",
highMessageThreshold);
9) ObjectName messagingEngine = configService.createConfigData(session, cluster1,
"SIBMessagingEngine", "SIBMessagingEngine", attributelist);
10) uuid = (String) configService.getAttribute(session,
11) messagingEngine, "uuid");
12) attributelist = new AttributeList();
13) ConfigServiceHelper.setAttributeValue(attributelist, "engineUuid",uuid);
14)
15) ObjectName objectname5 = configService.createConfigData(session, busMember,
"target", "SIBusMemberTarget", attributelist);

第五步,创建主题连接工厂,见清单 12。

在 清单 11 获得资源适配器 ObjectName。主题连接工厂用于创建与 JMS 主题目标的相关 JMS 提供程序的连接(用于进行发布和预订消息传递)。其中第 4-8 行填写主题连接工厂属性,主题连接工厂属性可以用 wsadmin 命令 $AdminConfig attributes J2CConnectionFactory 获得。


清单 11. 获得资源适配器 ObjectName

1) ObjectName ra = ConfigServiceHelper.createObjectName(null,
"J2CResourceAdapter", "SIB JMS Resource Adapter");
2) matches = configService.queryConfigObjects(session, cluster1, ra, null);
3) ra = matches[0];


清单 12. 创建主题连接工厂

1) ObjectName queueConnectionDefinition = getConnectionDefinition(configService,
session, ra, "javax.jms.TopicConnectionFactory");
2)
3) AttributeList attrs = new AttributeList();
4) attrs.add(new Attribute("connectionDefinition", queueConnectionDefinition));
5)
6) attrs.add(new Attribute("name", "TestTopicConnectionFactory"));
7) attrs.add(new Attribute("jndiName", "test/jms/topicfactory"));
8) attrs.add(new Attribute("manageCachedHandles", new Boolean(false)));
9) attrs.add(new Attribute("logMissingTransactionContext", new Boolean(false)));
10)
11) ObjectName topic = configService.createConfigData(session, ra,
"J2CConnectionFactory", "J2CConnectionFactory", attrs);

第六步,创建 JMS 主题。

资 源适配器 ObjectName 对象 ra 在清单 11 中获得。JMS 主题作为发布 / 预订消息传递的目标而使用。其中清单 13 中第 1-4 行填写主题属性 , 主题属性可以用 wsadmin 命令 $AdminConfig attributes J2CAdminObject 获得。


清单 13. 创建 JMS 主题

1) AttributeList attrs = new AttributeList();
2) attrs.add(new Attribute("adminObject", queueAdminObject));
3) attrs.add(new Attribute("name", "TestTopic"));
4) attrs.add(new Attribute("jndiName", "Test/jms/TestTopic"));
5) ObjectName topic = configService.createConfigData(session, ra,
"J2CAdminObject", "J2CAdminObject", attrs);

第七步,创建激活规范,见清单 14。

资 源适配器 ObjectName 对象 ra 在清单 11 中获得。JMS 激活规范与一个或多个消息驱动的 bean 相关联并为它们提供接收消息所需的配置。其中第2 - 6行填写激活规范属性,激活规范属性可以用 wsadmin 命令 $AdminConfig attributes J2CActivationSpec 获得。


清单 14. 创建激活规范

1) ObjectName activationSpec = getActivationSpec(configService, session, ra,
"javax.jms.MessageListener",
"com.ibm.ws.sib.api.jmsra.impl.JmsJcaActivationSpecImpl");
2)
3) AttributeList attrs = new AttributeList();
4) attrs.add(new Attribute("activationSpec", activationSpec));
5) attrs.add(new Attribute("name", "TestActivation"));
6) attrs.add(new Attribute("jndiName", "Test/jms/TestActivation"));
7) attrs.add(new Attribute("destinationJndiName", "Test/jms/TestTopic"));
8) ObjectName j2cActivationSpec = configService.createConfigData(session, ra,
"J2CActivationSpec", "J2CActivationSpec", attrs);

第八步,保存配置。

configService.save(session, false);

保存了会话,在这个会话中进行的所有配置更改才会进入 config 目录,当部署管理器进行同步时,这些改变会保存到各个集群成员。





回页首


总结

有多种方法可以用来部署应用程序到 WebSphere 应用服务器系列产品中。相比较而言,由于基于 JMX 能够更容易地操作和控制应用服务器,因此更加适合于相对复杂且对安装过程中的自动化和效率要求较高的企业级应用产品的安装。

转至:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0908_sunyan_jmxdeploy/index.html

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广