Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
// This is the target.
// ===================================
filterChain.doFilter(req, resp);
// ===================================
} catch (Exception e) {
} finally {
tracer.endThreadInfoCapture("Servlets", getClass().getName(), uri);
}
}
Java运行时监控,第2部分: 编译后插装和性能监控(6)时间:2011-02-13 IBM Nicholas Whitehead清单 6 展示了清单 5 的过滤器的 web.xml 部署描述符的相关片断: 清单 6. servlet 过滤器部署描述符
EJB 客户端截取程序与上下文传递 前面的例子侧重于服务器端组件,但一些诸如客户端截取这样的插装实现方法也是存在的。Ajax 客户机可以注册度量 XMLHttpRequest 运行时间的性能监听器,并可以在下一个请求的参数列表末尾承载请求的 URI(对于复合名称)和运行时间。有些 Java EE 服务器,如 JBoss,允许使用客户端的截取程序,本质上这些截取程序与 EJB 3 截取程序所作的工作相同,并且它们也能够承载下一个请求中的度量提交。 监控中的客户端通常都会被忽视。所以下次听到用户抱怨您的应用程序太慢时,不要因为服务器端的监控确保服务器端是良好的就无视这些抱怨。客户端的插装可以确保您所度量的正是用户所体验的,它们可能不会总是与服务器端的指标一致。 一些 Java EE 实现支持的客户端截取程序被实例化并绑定在 EJB 的客户端。这意味着如果一个远程客户机通过远程方法调用(Remote Method Invocation,RMI)协议调用服务器上的 EJB,则也可以从远程客户机无缝收集到性能数据。在远程调用的任一端实现截取程序类都会实现在两者间传递上下文的能力,从而获取额外的性能数据。 下面的例子展示了一对截取程序,它们共享数据并获得传输时间(传送请求和响应的运行时间)以及客户机方面对服务器的远程请求的响应时间。该例子使用了 JBoss 应用服务器的客户端和服务器端的 EJB 3 截取程序专有的实现。 这对截取程序通过在相同负载内承载上下文数据,将上下文数据作为 EJB 调用传递到同一个调用。上下文数据包括: 客户端发出请求的时间:EJB 客户机截取程序发出请求时的请求的时间戳 服务器端接收请求的时间:EJB 服务器端截取程序接收请求时的请求的时间戳 服务器端发送响应的时间:EJB 服务器端截取程序将响应回送给客户机时的响应的时间戳 调用参数被当作一个栈结构,上下文数据通过这个结构进出参数。上下文数据由客户端截取程序放入该调用中,再由服务器端截取程序取出,然后传入到 EJB 服务器 stub。数据返回时则按此过程的逆向过程传递。图 3 展示了这个流程: 图3. 客户机和服务器 EJB 截取程序的数据流 Java运行时监控,第2部分: 编译后插装和性能监控(7)时间:2011-02-13 IBM Nicholas Whitehead为这个例子构建截取程序需要为客户机和服务器实现 org.jboss.aop.advice.Interceptor 接口。该接口有一个重要的方法:
这个方法引入了调用封装 的理念,根据这个理念,一个方法的执行被封装成为一个独立对象 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |