基于JMX通知框架的AJAX深度开发
2008-02-23 07:52:12来源:互联网 阅读 ()
本文将详细描述一种AJAX架构的优点-它可以把管理状态"广播"到一个能够使用浏览器的用户基上而不必等待页面更新。
这种架构是一个通用模型的扩展-可用于把JMX事件和属性记载到一个服务器端日志文件中;而且,这种变化进一步把管理信息记录或"广播"到(支持AJAX的)用户基。
在本文中,我们将特别分析AJAX请求/响应模型和把管理数据绘制到页面的过程,还有漂亮的JMX通知框架-所有这些都通过一个装配的servlet清晰地集成到一起。
接下来我们还会粗略地看一下通常在标准AJAX讨论中所不及的内容-安全和容量模型。
本文中,我们使用BEA WebLogic 8.1用作这些软件的发布平台,尽管这里的架构和方法也适用于其它J2EE应用程序服务器。
一、关键需求
针对于企业Java和J2EE应用程序的系统管理栈形成了问题解析管道的一部分-在此,Java/J2EE应用程序与一个管理层进行交互以监视潜在的问题,例如应用程序服务器线程饥饿,堆溢出或到一个数据库的陈旧连接等。
管理层通常包括JMX Mbeans-要装配并使用哪个应用程序,以及其它一些产品例如读取这些JMX属性的Wily Introscope和HP OpenView-如果超过一个事先配置的门槛值,那么它能够从Wily中得到警告。
这个模型存在一个问题-如果系统在后台出现问题的话,针对JMX管理的服务器端模式将无法帮助浏览器端客户,因为这种模型全部是以服务器为中心的。例如,如果一新的J2EE Web应用程序要被发布或该应用程序在几分钟内将要关闭-因为Wily检测到一个问题,那么在浏览器上的用户并不知道发生了这么紧迫的管理事件!
通过全面地允许用户进入问题解析管道,系统管理员可以管理终端用户体验-通过把管理信息广播到用户基并在一定程度上控制用户的行为来实现。
为了通过HTTP协议实现把管理信息传递给客户,存在这样一个问题:如果客户端用户不是公开地使用GET或POST更新页面而是偷偷地更新一隐蔽的框架,那么管理方面如何把管理信息发送到一个HTTP客户?
二、方案描述
本文要实现一简单的AJAX脚本,它将从MBean服务器取得以XML消息形式的管理信息并经由一个servlet解决这个问题。这些管理信息必须被加以管理并且被反馈到所有的参与其中的能够接收AJAX请求的应用程序服务器。
在服务器端:
·一个J2EE应用程序服务器簇用于服务于来自基于浏览器的用户和在线事务处理(OLTP)用户基(例如有两个或四个服务器)的请求。通过使用一个第三方Web服务器,用户请求被跨越该簇(OLTP簇)平衡装载。
·一个标准MBean(UserWeb)用于存储管理信息,如加上元数据属性的管理消息。该Mbean宿主在J2EE"管理"服务器和在OLTP簇上的J2EE服务器上。
·在管理服务器上,由系统管理员使用针对JMX的HTMLAdaptor来设置警告状态,重试间隔(在相邻XMLHttp-Requests之间的间隔)以及警告消息-例如"System Down in 10 Minutes."。然后,管理员把该状态广播到管理服务器上的Mbeans-由该管理服务器来把它们的状态重置到master管理状态。
在客户端:
·支持AJAX的客户端使用一个XMLHttpRequest(它调用一个servlet以返回XML消息形式的相关的MBean值)来检索状态、重试间隔和消息。
·然后由客户端JavaScript分析这个XML消息,重置重试间隔并且用管理消息重画屏幕的一部分。
·在retry-interval秒之后,该客户进行另外一个XMLHttpRequest并且客户周期再次开始。
三、 基本架构
图1显示出全面的解决方案体系结构,其中表1描述了相应的基本架构元素。
图1 方案架构
元素 | 描述 |
标准MBean(UserWeb) | 用于警告状态和消息的属性,还有getter/setters和一个方法来广播(通知)MBean状态 |
MBean助理(UserWebMBeanHelper) | 包装装配的代码以便于使用UserWeb MBean |
MBean服务器 | J2EE容器内的MBean服务器 |
Servlet(Admin.java) | 装配的Servlet,基于UserWebMBean的内容格式化XML响应 |
事件听者 (ManagementListener.java) |
Singleton-它用管理服务器上的UserWeb MBean把自己注册为一个"alert.broadcast"类型事件的听者 |
客户端AJAX引擎(admin.js) | 用于管理XMLHttpRequest-/-repaint周期的JavaScript |
客户端描述(main.jsp) | 装配的JSP。AJAX基于MBean属性启动该页面 |
HTML适配器包装器(StartHTMLAdaptor.java) | 在听端口 100启动一个HTMLAdaptorServer以实现到MBeans的HTTP存取 |
(一) JMX通知模型
这个模型包含两个部件:
·MBean-为本地和远程注册的听者激活事件
·听者-它用MBean注册自己以听取由该MBean所产生的事件
第一个由UserWeb Mbean来实现,第二个由ManagementListener来实现。
(二) 管理用户信息的JMX MBean
UserWeb标准的MBean是一个简单类-它包含关键的属性和方法(表2)。
元素 | 描述 |
AlertEnabled | 如果AlertStatus>-1,则为真 |
AlertMessage | 用户将在屏幕上看到的信息 |
AlertReady | 如果AlertStatus>0,则为真 |
CallBack | 在每两个XMLHttpRequest之间的毫秒数 |
BroadcastState | 方法-它用一个事件(alert.broadcast)(它把Mbean状态作为事件数据传递)来通知在本地/远程JVM上的所有已注册的听者 |