一、 引言
jmx(java管理扩展)提供了一组工具用来管理本地和远程应用程序、系统对象、设备等。 本文将解释如何使用jmx(jsr 160)来远程控制web应用程序,并将解释应用程序中可用于jmx客户的代码,同时将展示使用如mc4j和jmanage等的不同客户如何连接到支持jmx的应用程序。此外,我们还将详细地讨论使用rmi协议和jndi来保护通讯层。
首先我们要分析一个简单的web应用程序,它监控已经登陆的用户数目并通过一个安全的jmx服务来显示该项统计。我们还将运行这个应用程序的多个实例并且从所有的运行实例中跟踪这个统计数字。当然,你可以下载这个示例web应用程序。它需要你安装j2se 5.0 sdk并且你的java_home环境变量指向基安装目录。j2se 5.0实现了1.2版本的jmx api和jmx 1.0版本的remote api。同时还需要一个支持servlet的容器;我使用的是apache tomcat 5.5.12。另外,我还使用apache ant来构建这一示例应用程序。
二、 建立示例应用程序
首先,你要下载示例应用程序并且使用ant war(更多的细节见build.xml中的注释)来创建一个war文件。把jmxapp.war复制到tomcat的webapps目录。假定tomcat正在运行于你的本地机器的端口8080,那么该应用程序的url将是:
http://localhost:8080/jmxapp
如果你看到一个提示你输入名字和口令的登陆屏幕,那么一切已经就绪了。
三、 跟踪一些有意义的数据
本文中的应用程序使用struts框架来提交登录表单。一旦提交结束,即执行loginaction.execute(..)方法-它将简单地检查是否用户的id为"hello"以及是否其口令为"world"。如果二者都正确,那么登录成功并且控制被导向login_success.jsp;如果不正确,那么我们返回到登录表单。根据登录成功与否决定调用incrementsuccesslogins(httpservletrequest)方法还是incrementfailedlogins(httpservletrequest)方法。现在,让我们先分析一下incrementfailedlogins(httpservletrequest):
| private void incrementfailedlogins(httpservletrequest request) { httpsession session = request.getsession(); servletcontext context =session.getservletcontext(); integer num = (integer) context.getattribute( constants.failed_logins_key); int newvalue = 1; if (num != null) { newvalue = num.intvalue() + 1; } context.setattribute( constants.failed_logins_key, new integer(newvalue)); } |
| public interface loginstatsmbean { public int getfailedlogins(); public int getsuccesslogins(); } |
| public int getfailedlogins() { servletcontext context = config.getservletcontext(); integer val = (integer) context.getattribute( constants.failed_logins_key); return (val == null) ? 0 : val.intvalue(); } |
| public class jmxagent { public jmxagent() { //初始化jmx服务器 } public void start() { //启动jmx服务器 } //在应用程序结束时调用 public void stop() { //停止jmx服务器 } } |
| mbeanserver server = mbeanserverfactory.creatembeanserver(domain); server.registermbean(new loginstats(),new objectname(domain+ ":name=loginstats")); |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器