用JMX管理你的web应用

这是来自TSS的一篇文章,以一个简单的例子说明如何在web应用中使用JMX管理你的组件。

http://www.theserverside.com/resources/article.jsp?l=JMXWebApps

一般我们使用jmx就是为了让你的资源(就是一些需要管理的bean)增加可管理性,将你需要管理的对象包装成Mbean,然后注册到MbeanServer中。我们的管理客户端通过Mbeanserver调用Mbean接口暴露的属性或操作,以达到动态管理组件的目的。大概看了一下这篇文章,简单分析一下关键在以下几点:

1。看下面Mbean实现 MyJspStats的代码 ,在构造器中通过weblogic的jndi服务得到MBeanServer并将自己注册到MBeanServer。它这里使用了weblogic服务器的Mbeanserver,这里你当然也可以创建自己的MBeanServer,将它放在Application中。
public class MyJspStats implements MyJspStatsMBean {

    MBeanServer server = null; // MBeanServer

    int starts = 0;  // Number abandoned at start page
    int selects = 0;  // Number abandoned at selection
    int confirms = 0;  // Number abandoned before confirmation
    int completions = 0;  // Number of completed user Tx

    Hashtable inStart = new Hashtable(); // Track user Tx started
    Hashtable inSelect = new Hashtable(); // Track user Tx in select
    Hashtable inConfirm = new Hashtable(); // Track user Tx in confirm

    /** A no-argument constructor is necessary for Beans in JSPs **/
    public MyJspStats() {
 try {
     Environment env = new Environment();
     env.setProviderUrl("t3://localhost:7001");
     env.setSecurityPrincipal("weblogic"); // username
     env.setSecurityCredentials("weblogic"); // password
     Context myCtx = env.getInitialContext();
     MBeanHome mbeanHome =
  (MBeanHome)myCtx.lookup("weblogic.management.home.localhome");
     server = mbeanHome.getMBeanServer();

     ObjectName objName =
  new ObjectName(mbeanHome.getDomainName()+
          ":Name=MyJspStats,Type=MyJspStats");

// Register MBean so MBean can be accessed by remote managers
     server.registerMBean(this, objName);

 } catch (Exception ex) {
     System.err.println("Cannot get MBeanServer: "+ex);
 }
    }
......

2。看下面在jsp中使用MyJspStats的代码,使用jsp的usebean标签在application范围内创建对象。
<jsp:useBean id="mbean" class="sample.MyJspStats" scope="application"/>

<%
mbean.updateTx(request.getSession(true), "START");
%>

<p><b>Start a Transaction</b><p>
<p><a HREF="page2.jsp">Transfer Money Between Accounts</a>
<p><a HREF="abortpage.jsp">Abort Transaction</a>

3。下面是管理页面,在管理页面上,如何取得Mbeanserver,以及调用Mbean的管理操作。
MBeanHome mbeanHome = (MBeanHome)myCtx.lookup("weblogic.management.home.localhome");
  MBeanServer server = mbeanHome.getMBeanServer();
  这里以同样的方式取得MBeanServer。
  server.getAttribute(objName, "Completions")
  这便是取得Mbean的属性了。


<%@ page import="
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.management.ObjectName;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import javax.management.MBeanServer;
" %>

<h3>User Transaction Statistics</h3>

<table border="3"><tbody><tr>
<td><b>User Transaction Stage</b></td>
<td><b>Number of Transactions</b></td> </tr>
<%
  Environment env = new Environment();
  env.setProviderUrl("t3://localhost:7001");
  env.setSecurityPrincipal("weblogic"); // username
  env.setSecurityCredentials("weblogic"); // password
  Context myCtx = new InitialContext();
  MBeanHome mbeanHome = (MBeanHome)myCtx.lookup("weblogic.management.home.localhome");
  MBeanServer server = mbeanHome.getMBeanServer();

  ObjectName objName = new ObjectName(mbeanHome.getDomainName()+":Name=MyJspStats,Type=MyJspStats");

  out.print("<tr><td>Completions</td><td>"
    +server.getAttribute(objName, "Completions")+"</td></tr>");
  out.print("<tr><td>Abandonded at Confirm</td><td>"
    +server.getAttribute(objName, "Confirms")+"</td></tr>");
  out.print("<tr><td>Abandonded at Select</td><td>"
    +server.getAttribute(objName, "Selects")+"</td></tr>");
  out.print("<tr><td>Abandonded at Start</td><td>"
    +server.getAttribute(objName, "Starts")+"</td></tr>");
%>
</tbody></table>

总结例子的用法,由于在Web应用中,本身就有现成的Web服务,可以直接取得Mbeanserver,通过简单的jsp来访问。如果是在应用程序中,要通过web方式管理,就需要使用Http适配器了,同样也可以使用Rmi适配器使之可以通过远程调用的方式管理,只要将适配器同时注册到Mbeanserver中就可以了。

你可能感兴趣的:(jsp,Web,weblogic,application,jmx,import)