基于JMX通知框架的AJAX深度开发(3)
2008-02-23 07:52:12来源:互联网 阅读 ()
图2 使用HTMLAdaptor看到的MBean视图
因而,UserWeb.broadcastState()方法被执行-它同步地通知所有的听者有关admin MBean的状态:
public void broadcastState() throws Exception {
try {
Notification n = new Notification("alert.broadcast", "ExampleApp:Name=UserWeb", 0);
n.setUserData(new UserWeb(this));
this.sendNotification(n);
}
catch (Exception e) {
throw e;
}
}
因为数据在网络上是串行化传输的,所以这种并非暂时的对象图必须是可串行化的。
六、使用听者接收来自MBean Props的通知
所谓的事件听者就是ManagementListener Singleton。在管理服务器上的JMX通知框架远程调用ManagementListener中的handleNotification()方法-该方法存在于每个OLTP簇JVMs(它们是在服务器启动时注册的)上的每一个听者之中:
public void handleNotification(Notification notification, Object handback) {
System.out.println("Received alert: " notification.getType());
//取得来自通知的事件userdata
Object userData = notification.getUserData();
if (userData instanceof UserWeb) {
//来自于destin8 Web
UserWeb WebVo = (UserWeb)userData;
UserWebMBeanHelper helper = MBeanHelperFactory.getWebHelper();
//使用MbeanHelper从值对象获取数据并放入本地MBean中
helper.setAlertMessage(WebVo.getAlertMessage());
helper.setAlertStatus(WebVo.getAlertStatus());
helper.setCallBack(WebVo.getCallBack());
helper.setRefreshAlertStatus(WebVo.getRefreshAlertStatus());
}
}
"master" UserWeb数据被置入本地用户Web MBean中-经由它的MBean助理来实现。因而,每个管理服务器被用master UserWeb状态所更新。这就是JMX元素所具有的功能。
七、 管理状态的AJAX请求
要使浏览器客户端支持AJAX,需要具备如下:
·main.jsp-被装配的JSP页面,它能够检查(JMX)警告状态并向服务器查询警告。这个.jsp文件包括admin.js
·admin.js-这是一个JavaScript实用程序,它使用XMLHttpRequest来向服务器查询管理状态,分析XML响应,并且重画屏幕的"status"区域
被包含在main.jsp中的JavaScript描述如下:
<script type="text/javascript" src="./js/admin.js" ></script>
不是连续地查询,而是只有启动浏览器警告功能时我们才进行查询。我们使用UserWebMBeanHelper来检查这个功能。如果该功能被启动,那么当页面加载时,JavaScript函数initAdmin()将被调用:
<%
if (MBeanHelperFactory.getWebHelper().isAlertEnabled()) {
%>
<body bgcolor="#F4FFE4" onload="initAdmin();">
<%
} else {
%>
<body bgcolor="#F4FFE4">
<%
}
%>
重画的'status'屏幕区域定义如下:
<span id="adminBanner" class="style1"></span>
"adminBanner"将被使用来标记可重画的区域-当分析XML响应并提取消息时。
这个initAdmin()方法调度一个JavaScript方法trapAlert()-这个方法在callbackTimeout毫秒后执行:
function setCallback() {
callBack = setTimeout('trapAlert()',callbackTimeout);
}
function initAdmin() {
setCallback();
}
注意,是由trapAlert()方法来实现启动XMLHttpRequest:
function trapAlert() {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.onreadystatechange = processRequest;
req.open("GET", './admin?reqid=0', true);
req.send(null);
}
在此,HTTP GET用来读数据(只使用了一个小的请求参数),并且目标是admin servlet。这个请求是异步的,并且当请求状态变化时,processRequest JavaScript函数被调用:
req.onreadystatechange = processRequest;
在继续处理前等待一个响应,这看上去似乎非常合理;然而,如果一个网络或服务器问题导致一个事务无法完成,那么你要冒着使你的脚本挂起来的危险。相比之下,一个相应于onreadystatechange事件的异步调用更为灵活些。
在请求完成时,processRequest事件处理器被调用:
function processRequest() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessages();
}
....
setCallback();//只有完成时才这样做
}
}
列表1(见下载源码)显示了所有可用的状态码。当请求完成并且返回HTTP状态代码200(OK)时,parseMessages()方法被调用以从XML消息中提取数据。然后,再次调度trapAlert()方法。如果XML响应有一个不同的重试间隔,那么这个值会由parseMessages()函数设置。
八、分析XML响应并重画屏幕
parseMessages()函数首先提取XML响应
response = req.responseXML;
然后,它提取有关警告状态,警告文本和重试间隔等的元素:
itemStatus = response.getElementsByTagName('status')[0].firstChild.nodeValue;
itemText = response.getElementsByTagName('textBody')[0].firstChild.nodeValue;
callbackTimeout = parseInt(response.getElementsByTagName('callBack')[0].firstChild.nodeValue);
然后,警告文本被重画到adminBanner文档元素(见上):
document.getElementById("adminBanner").innerHTML= itemText;
该警告消息显示在如图3所示的屏幕上。
图3 重画的屏幕
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:在AJAX开发中集成数据库技术
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
