KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > webjmx > example > AgentServlet


1 /*
2  * AgentServlet.java
3  *
4  * Created on October 23, 2001, 4:31 PM
5  */

6  
7 package org.webjmx.example;
8
9 import java.util.*;
10 import java.io.*;
11 import java.net.*;
12 import javax.servlet.*;
13 import javax.servlet.http.*;
14 import javax.management.*;
15
16 import com.sun.jdmk.comm.*;
17
18
19 import org.webjmx.adapter.*;
20 import org.webjmx.tags.JMXTaglibConstants;
21
22 /** This servlet instantiates an HtmlAdaptorServer on port 8083 in the local MBeanServer
23  * when it's initialized. It also instantiates test instances of the SimpleStandard
24  * and SimpleDynamic MBeans in the local MBeanServer.
25  *
26  * You can also optionally have the Servlet instantiate MBean instances in other
27  * MBeanServers through Servlet initialization parameters starting with "locator".
28  *
29  * If you address a request to the servlet it will response with a simple listing
30  * of the MBeans registered with the local MBeanServer.
31  *
32  * @author John Aronson
33  */

34 public class AgentServlet extends HttpServlet
35     implements JMXTaglibConstants
36 {
37     private MBeanServer server = null;
38     
39     /** Initializes the servlet.
40     */

41     public void init(ServletConfig config)
42         throws ServletException
43     {
44         super.init(config);
45         doInit();
46     }
47     
48     /** instanitate some test MBeans.
49     */

50     public void doInit()
51         throws ServletException
52     {
53         if(Boolean.getBoolean(DEBUG_PROP)) log("AgentServlet init()");
54         List l = MBeanServerFactory.findMBeanServer(null);
55         if(Boolean.getBoolean(DEBUG_PROP)) log("MBeanServer count:" +l.size());
56         if(l.size() > 0)
57             server = (MBeanServer)l.get(0);
58         else
59             server = MBeanServerFactory.createMBeanServer("Local");
60         if(Boolean.getBoolean(DEBUG_PROP)) log("initalizing local server instance: " +server);
61
62     HtmlAdaptorServer html = new HtmlAdaptorServer(8086);
63     ObjectName ob_name = null;
64     try
65         {
66             if(Boolean.getBoolean(DEBUG_PROP)) com.sun.jdmk.Trace.parseTraceProperties();
67         ob_name = new ObjectName("Adaptor:name=html,port=8086");
68         if(Boolean.getBoolean(DEBUG_PROP)) log("OBJECT NAME: " + ob_name);
69         server.registerMBean(html, ob_name);
70
71             Enumeration e = getServletConfig().getInitParameterNames();
72             while(e.hasMoreElements())
73             {
74                 String JavaDoc paramName = (String JavaDoc)e.nextElement();
75                 if(!paramName.startsWith("locator"))
76                     continue;
77                 String JavaDoc locator = getServletConfig().getInitParameter(paramName);
78                 l = AdapterFactory.findMBeanServer(locator);
79                 if(Boolean.getBoolean(DEBUG_PROP)) log("server list: " +l);
80                 if(l.size() == 0)
81                     return;
82
83                 if(Boolean.getBoolean(DEBUG_PROP)) log("initalizing local server instance: " +server);
84                 server = (MBeanServer)l.get(0);
85                 if(Boolean.getBoolean(DEBUG_PROP)) log("server: " +server);
86
87                 ob_name = new ObjectName("MBeanInfo", "name", "SimpleStandard");
88                 if(Boolean.getBoolean(DEBUG_PROP)) log("creating sample MBean with OBJECT NAME: " + ob_name);
89                 server.createMBean("org.webjmx.example.SimpleStandard", ob_name);
90
91                 ob_name = new ObjectName("MBeanInfo", "name", "SimpleDynamic");
92                 if(Boolean.getBoolean(DEBUG_PROP)) log("creating sample MBean with OBJECT NAME: " + ob_name);
93                 server.createMBean("org.webjmx.example.SimpleDynamic", ob_name);
94             }
95             
96             /*ObjectName sname = new ObjectName("JMImplementation:type=MBeanServerDelegate");
97             MBeanInfo minfo = server.getMBeanInfo(sname);
98             MBeanAttributeInfo attrs[] = minfo.getAttributes();
99             System.out.println("attribute count: " +attrs.length);
100             for(int i = 0; i < attrs.length; i++)
101                 System.out.println(attrs[i].getName() +" : " +server.getAttribute(sname, attrs[i].getName()));*/

102         }catch(Exception JavaDoc e)
103         {
104         log("Errors initializing MBeanServers ...");
105         e.printStackTrace();
106         return;
107     }
108         html.start();
109     }
110
111     /** Destroys the servlet.
112     */

113     public void destroy()
114     {
115         if(server != null)
116             MBeanServerFactory.releaseMBeanServer(server);
117     }
118
119     /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
120     * @param request servlet request
121     * @param response servlet response
122     */

123     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
124         throws ServletException, java.io.IOException JavaDoc
125     {
126         response.setContentType("text/html");
127         java.io.PrintWriter JavaDoc out = response.getWriter();
128         // output your page here
129
out.println("<html>");
130         out.println("<head>");
131         out.println("<title>Servlet</title>");
132         out.println("</head>");
133         out.println("<body>");
134         List l = MBeanServerFactory.findMBeanServer(null);
135         for(int i = 0; i < l.size(); i++)
136         {
137             MBeanServer s = (MBeanServer)l.get(i);
138             out.println("Server: " +s +"<br>");
139             Iterator it = ((Set)s.queryNames(null, null)).iterator();
140             while(it.hasNext())
141                 out.println("<li>MBean: " +it.next() +"<br>");
142             out.println("<hr>");
143         }
144         out.println("</body>");
145         out.println("</html>");
146         out.close();
147     }
148
149     /** Handles the HTTP <code>GET</code> method.
150     * @param request servlet request
151     * @param response servlet response
152     */

153     protected void doGet(HttpServletRequest request, HttpServletResponse response)
154         throws ServletException, java.io.IOException JavaDoc
155     {
156         processRequest(request, response);
157     }
158
159     /** Handles the HTTP <code>POST</code> method.
160     * @param request servlet request
161     * @param response servlet response
162     */

163     protected void doPost(HttpServletRequest request, HttpServletResponse response)
164         throws ServletException, java.io.IOException JavaDoc
165     {
166         processRequest(request, response);
167     }
168
169     /** Returns a short description of the servlet.
170     */

171     public String JavaDoc getServletInfo()
172     {
173         return "Servlet which initializes the local and remote MBeanServers of the WEBJMX Sample App";
174     }
175     
176     public static void main(String JavaDoc args[])
177     {
178         AgentServlet servlet = new AgentServlet();
179         
180         //run some test queries
181
try
182         {
183             servlet.doInit();
184     
185             List l = MBeanServerFactory.findMBeanServer(null);
186             for(int i = 0; i < l.size(); i++)
187             {
188                 MBeanServer s = (MBeanServer)l.get(i);
189                 System.out.println("server: " +s);
190                 ObjectName ob_name = new ObjectName(s.getDefaultDomain(), "name", "SimpleStandard");
191                 Set set = s.queryNames(ob_name, null);
192                 System.out.println("query size: " +set.size());
193                 set = s.queryNames(new ObjectName(s.getDefaultDomain() +":name=SimpleStandard"), null);
194                 System.out.println("query size: " +set.size());
195             }
196         }catch(Exception JavaDoc ex)
197         {
198             ex.printStackTrace();
199         }
200     }
201 }
202
Popular Tags