![[z/OS]](../images/ngzos.gif)
Java 管理扩展动态代理概念
Java™ 管理扩展 (JMX) 动态代理协调多进程服务器之间的 MBean 请求。本节将讨论与 JMX 动态代理相关的各主要术语。
- 控制进程
- 接收请求并将它们分发给服务方进程,以使应用程序服务器能够处理这些请求。
- 服务方进程
- 从控制进程接收工作并执行所接收的工作。
- Unicall 选项与 multicall 选项
- 当请求调用任意一个或多个服务方进程时,在 proxyInvocationType 方法上使用
unicall 选项。当请求转至多个服务方进程,且各服务方进程返回不同的结果时,在
proxyInvocationType 方法上使用 multicall 选项。
以下示例显示了一个 MBean 描述符,该描述符在最初开发时确定为单进程模型(更改前),然后再修改为多进程模型(更改后)。
更改前
更改后<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="SampleStateMBean" version="6.0" description="Sample State MBean for the documentation example."> <attribute description="The name of the MBean." getMethod="getMBeanName" name="mbeanName" type="java.lang.String"/> <attribute description="The state of the MBean."name="state" getMethod="getState" setMethod="setState" type="java.lang.String"/> <operation description="Initialize the State MBean." impact="ACTION" name="initializeState" role="operation" targetObjectType="objectReference" type="void"> <signature> <parameter description="The name of the MBean." name="mbeanName" type="java.lang.String"/> <parameter description="The initial state of the MBean." name="mbeanName" type="java.lang.String"/> </signature> </operation> </MBean>
在 platform 属性上指定 dynamicproxy 将使该用户 MBean 以动态代理方式运行。如果 MBean 描述符上不存在平台属性,那么在 WebSphere® Application Server for z/OS® 上部署的用户 MBean 将自动使用动态代理方式。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="SampleStateMBean" version="6.0" platform="dynamicproxy" description="Sample State MBean for the documentation example."> <attribute description="The name of the MBean." getMethod="getMBeanName" name="mbeanName" type="java.lang.String"/> <attribute description="The state of the MBean."name="state" getMethod="getState" setMethod="setState" type="java.lang.String"/> proxyInvokeType="unicall" proxySetterInvokeType="multicall"/> <operation description="Initialize the State MBean." impact="ACTION" name="initializeState" role="operation" targetObjectType="objectReference" type="void" proxyInvokeType="multicall"> <signature> <parameter description="The name of the MBean." name="mbeanName" type="java.lang.String"/> <parameter description="The initial state of the MBean." name="mbeanName" type="java.lang.String"/> </signature> </operation> </MBean>
如“更改后”示例中所示,更新属性 XML 标记或操作 XML 标记,从而在多进程环境中指定 unicall 行为或 multicall 行为。如果不存在 proxyInvokeType 选项或 proxySetterInvokeType 选项,那么行为将缺省为下列其中一个值:proxyInvokeType=unicall (for the getMethod) proxyInvokeType=multicall (for the setMethod)
在“更改后”示例中,getMBeanName 方法和 getState 方法以 unicall 行为运行。setState 方法和 initializeState 方法则以 multicall 行为运行。
- 单进程模型
- 单进程应用程序服务器具有一个服务器运行时。MBean 通常充当每个主运行时组件的一个实例:一个 Enterprise JavaBeans (EJB) 容器、一个 Web 容器和一个 Java 2 Platform Enterprise Edition (J2EE) 连接管理器等。此模型假设服务器上的每个 MBean 调用都在同一个进程和同一个 Java 虚拟机 (JVM) 中运行。
- 多进程模型
- 多进程模型声明单个服务器实例是多个在单个操作进程中运行的 Java 虚拟机 (JVM) 的联合。控制进程负责这种服务器功能,如通信端点、授权、资源恢复和工作负载管理。所有其他
JVM 都是工作程序 JVM,这些 JVM 中的应用程序请求运行。这些 JVM
只从控制进程获取指示,并只与控制进程进行交互。
所有入站和出站请求都要通过控制进程。客户机请求到达控制进程。控制进程在 MVS™ 工作负载管理器 (WLM) 的帮助下将工作分派给服务方进程。
服务方进程的数量由 WLM 管理,并根据需要而变化。该需要是根据安装特定的性能目标而估量的,它以 WLM 策略表示。每个服务方进程都是相同的,并且它们主管必需的应用程序服务器组件来启用 J2EE 应用程序编程模型。服务方进程依赖于控制进程的多项服务,如通信、安全性和事务控制。
多进程模型是在单进程模型的基础上加上其他一些对 Java 管理扩展 (JMX) 基础结构的需求。对于多进程服务器的管理请求通常要求在组成应用程序服务器的多个进程之间进行协调。JMX 基础结构包括用于启用此协调的其他工具。
- 对于动态代理 MBean 的状态对象支持
- com.ibm.websphere.management.dynamicproxy.StateObject 类:MBean 提供程序扩展了 StateObject 抽象类。指定 StateObject 类的子类,这样 JMX 运行时就能在动态代理 MBean 完成初始化之前对其进行实例化。JMX 运行时将 StateObject 类与动态代理调用处理程序接口进行连接,以了解此动态代理在 MBean 方法运行前后的当前状态。JMX 运行时还将 StateObject 类与结果聚集接口类和事件处理程序接口类进行连接,以支持相应的聚集应用程序。
- 结果聚集处理程序支持接口
- com.ibm.websphere.management.dynamicproxy.AggregationHandler 类:结果聚集处理程序支持接口定义 MBean 提供程序用于在启用动态代理的 WebSphere Application Server for z/OS MBean 中处理结果聚集的方法。 在 MBeanDescriptor MBean XML 标记上指定 aggregationHandlerClass 属性。为使用 multicall proxyInvokeType 选项且返回值的 MBean 方法实现此接口。此接口确定了用于处理该聚集的方法。然后,它将适当地聚集服务方进程传回控制进程的所有服务方 MBean 结果,再编译单个结果以返回给调用者。
- 事件聚集处理程序支持接口
- com.ibm.websphere.management.dynamicproxy.EventHandler 接口类:事件聚集处理程序支持接口定义 MBean 提供程序用于在启用动态代理的 WebSphere Application Server for z/OS MBean 中处理事件聚集的方法。 在 MBeanDescriptor MBean XML 标记上指定 eventHandlerClass 属性。该接口处理所有到达的服务方 MBean 事件,并将它们聚集起来,以从多个服务方 MBean 中过滤掉重复的事件。它将一个事件送回到动态代理 MBean 的侦听器。该接口根据 MBean 提供程序的需求来调整当前动态代理 MBean 状态。
- 调用处理程序支持接口
- com.ibm.websphere.management.dynamicproxy.InvocationHandler 类:调用处理程序支持接口定义 WebSphere Application Server for z/OS 动态代理 MBean 在需要状态管理信息时所实现的 preInvoke 和 postInvoke 方法。在需要使用 multicall 调用类型的情况下,MBean 使用此信息来协调服务方 MBean。在 MBeanDescriptor MBean XML 标记上指定 invocationHandlerClass 属性。对于在调用更改其状态的方法前后需要进行状态管理的动态代理 MBean 使用此接口。
- 用户 MBean
- 用户 MBean 驻留在服务方进程中,它通过由其动态创建的代理 MBean
来处理请求,此代理 MBean 在控制进程内部运行。MBean 提供程序可以将处理程序与用户
MBean 打包在一起,从而使该提供程序可在下列情况中采用其自己的专用处理:
- 结果聚集
- 事件聚集
- 调用处理
- 对象的状态管理