JMXProxyServletpublic class JMXProxyServlet extends HttpServlet This servlet will dump JMX attributes in a simple format
and implement proxy services for modeler. |
Fields Summary |
---|
protected MBeanServer | mBeanServerMBean server. | protected org.apache.tomcat.util.modeler.Registry | registry |
Methods Summary |
---|
private void | appendHead(java.lang.StringBuffer sb, java.lang.String value, int start, int end)
if (end < 1) return;
int pos=start;
while( end-pos > 78 ) {
sb.append( value.substring(pos, pos+78));
sb.append( "\n ");
pos=pos+78;
}
sb.append( value.substring(pos,end));
| public void | doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)Process a GET request for the specified resource.
response.setContentType("text/plain");
PrintWriter writer = response.getWriter();
if( mBeanServer==null ) {
writer.println("Error - No mbean server");
return;
}
String qry=request.getParameter("set");
if( qry!= null ) {
String name=request.getParameter("att");
String val=request.getParameter("val");
setAttribute( writer, qry, name, val );
return;
}
qry=request.getParameter("get");
if( qry!= null ) {
String name=request.getParameter("att");
getAttribute( writer, qry, name );
return;
}
qry=request.getParameter("qry");
if( qry == null ) {
qry = "*:*";
}
listBeans( writer, qry );
| public java.lang.String | escape(java.lang.String value)
// The only invalid char is \n
// We also need to keep the string short and split it with \nSPACE
// XXX TODO
int idx=value.indexOf( "\n" );
if( idx < 0 ) return value;
int prev=0;
StringBuffer sb=new StringBuffer();
while( idx >= 0 ) {
appendHead(sb, value, prev, idx);
sb.append( "\\n\n ");
prev=idx+1;
if( idx==value.length() -1 ) break;
idx=value.indexOf('\n", idx+1);
}
if( prev < value.length() )
appendHead( sb, value, prev, value.length());
return sb.toString();
| public void | getAttribute(java.io.PrintWriter writer, java.lang.String onameStr, java.lang.String att)
try {
ObjectName oname = new ObjectName(onameStr);
Object value = mBeanServer.getAttribute(oname, att);
writer.println("OK - Attribute get '" + onameStr + "' - " + att
+ "= " + escape(value.toString()));
} catch (Exception ex) {
writer.println("Error - " + ex.toString());
}
| public void | init()Initialize this servlet.
// --------------------------------------------------------- Public Methods
// Retrieve the MBean server
registry = Registry.getRegistry(null, null);
mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
| public boolean | isSupported(java.lang.String type)
return true;
| public void | listBeans(java.io.PrintWriter writer, java.lang.String qry)
Set names = null;
try {
names=mBeanServer.queryNames(new ObjectName(qry), null);
writer.println("OK - Number of results: " + names.size());
writer.println();
} catch (Exception e) {
writer.println("Error - " + e.toString());
return;
}
Iterator it=names.iterator();
while( it.hasNext()) {
ObjectName oname=(ObjectName)it.next();
writer.println( "Name: " + oname.toString());
try {
MBeanInfo minfo=mBeanServer.getMBeanInfo(oname);
// can't be null - I thinl
String code=minfo.getClassName();
if ("org.apache.commons.modeler.BaseModelMBean".equals(code)) {
code=(String)mBeanServer.getAttribute(oname, "modelerType");
}
writer.println("modelerType: " + code);
MBeanAttributeInfo attrs[]=minfo.getAttributes();
Object value=null;
for( int i=0; i< attrs.length; i++ ) {
if( ! attrs[i].isReadable() ) continue;
if( ! isSupported( attrs[i].getType() )) continue;
String attName=attrs[i].getName();
if( attName.indexOf( "=") >=0 ||
attName.indexOf( ":") >=0 ||
attName.indexOf( " ") >=0 ) {
continue;
}
try {
value=mBeanServer.getAttribute(oname, attName);
} catch( Throwable t) {
log("Error getting attribute " + oname +
" " + attName + " " + t.toString());
continue;
}
if( value==null ) continue;
if( "modelerType".equals( attName)) continue;
String valueString=value.toString();
writer.println( attName + ": " + escape(valueString));
}
} catch (Exception e) {
// Ignore
}
writer.println();
}
| public void | setAttribute(java.io.PrintWriter writer, java.lang.String onameStr, java.lang.String att, java.lang.String val)
try {
ObjectName oname=new ObjectName( onameStr );
String type=registry.getType(oname, att);
Object valueObj=registry.convertValue(type, val );
mBeanServer.setAttribute( oname, new Attribute(att, valueObj));
writer.println("OK - Attribute set");
} catch( Exception ex ) {
writer.println("Error - " + ex.toString());
}
|
|