core-jgi/jboss/server/adempiere/deploy/jmx-console.war/inspectMBean.jsp

310 lines
8.6 KiB
Plaintext

<%@page contentType="text/html"
import="java.net.*,java.util.*,javax.management.*,javax.management.modelmbean.*,
org.jboss.jmx.adaptor.control.Server,
org.jboss.jmx.adaptor.control.AttrResultInfo,
org.jboss.jmx.adaptor.model.*,
java.lang.reflect.Array"
%>
<%! public String fixDescription(String desc)
{
if (desc == null || desc.equals(""))
{
return "(no description)";
}
return desc;
}
%>
<html>
<head>
<title>MBean Inspector</title>
<link rel="stylesheet" href="style_master.css" type="text/css">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<jsp:useBean id='mbeanData' class='org.jboss.jmx.adaptor.model.MBeanData' scope='request'/>
<%
ObjectName objectName = mbeanData.getObjectName();
String objectNameString = mbeanData.getName();
MBeanInfo mbeanInfo = mbeanData.getMetaData();
MBeanAttributeInfo[] attributeInfo = mbeanInfo.getAttributes();
MBeanOperationInfo[] operationInfo = mbeanInfo.getOperations();
%>
<table width="100%">
<table>
<tr>
<td><img src="images/logo.gif" align="left" border="0" alt="JBoss"></td>
<td valign="middle"><h1>JMX MBean View</h1></td>
<tr/>
</table>
<ul>
<table>
<tr>
<td>MBean Name:</td>
<td><b>Domain Name:</b></td>
<td><%= objectName.getDomain() %></td>
</tr>
<%
Hashtable properties = objectName.getKeyPropertyList();
Iterator it = properties.keySet().iterator();
while( it.hasNext() )
{
String key = (String) it.next();
String value = (String) properties.get( key );
%>
<tr><td></td><td><b><%= key %>: </b></td><td><%= value %></td></tr>
<%
}
%>
<tr><td>MBean Java Class:</td><td colspan="3"><jsp:getProperty name='mbeanData' property='className'/></td></tr>
</table>
</ul>
<table cellpadding="5">
<tr>
<td><a href='HtmlAdaptor?action=displayMBeans'>Back to Agent View</a></td>
<td>
<td><a href='HtmlAdaptor?action=inspectMBean&name=<%= URLEncoder.encode(request.getParameter("name")) %>'>Refresh MBean View</a></td>
</tr>
</table>
<hr>
<h3>MBean description:</h3>
<%= fixDescription(mbeanInfo.getDescription())%>
<hr>
<h3>List of MBean attributes:</h3>
<form method="post" action="HtmlAdaptor">
<input type="hidden" name="action" value="updateAttributes">
<input type="hidden" name="name" value="<%= objectNameString %>">
<table cellspacing="1" cellpadding="1" border="1">
<tr class="AttributesHeader">
<th>Name</th>
<th>Type</th>
<th>Access</th>
<th>Value</th>
<th>Description</th>
</tr>
<%
boolean hasWriteable = false;
for(int a = 0; a < attributeInfo.length; a ++)
{
MBeanAttributeInfo attrInfo = attributeInfo[a];
String attrName = attrInfo.getName();
String attrType = attrInfo.getType();
AttrResultInfo attrResult = Server.getMBeanAttributeResultInfo(objectNameString, attrInfo);
String attrValue = attrResult.getAsText();
String access = "";
if( attrInfo.isReadable() )
access += "R";
if( attrInfo.isWritable() )
{
access += "W";
hasWriteable = true;
}
String attrDescription = fixDescription(attrInfo.getDescription());
%>
<tr>
<td><%= attrName %></td>
<td><%= attrType %></td>
<td><%= access %></td>
<td>
<%
if( attrInfo.isWritable() )
{
String readonly = attrResult.editor == null ? "readonly" : "";
if( attrType.equals("boolean") || attrType.equals("java.lang.Boolean") )
{
// Boolean true/false radio boxes
Boolean value = Boolean.valueOf(attrValue);
String trueChecked = (value == Boolean.TRUE ? "checked" : "");
String falseChecked = (value == Boolean.FALSE ? "checked" : "");
%>
<input type="radio" name="<%= attrName %>" value="True" <%=trueChecked%>>True
<input type="radio" name="<%= attrName %>" value="False" <%=falseChecked%>>False
<%
}
else if( attrInfo.isReadable() )
{ // Text fields for read-write string values
%>
<input type="text" name="<%= attrName %>" value="<%= (attrValue != null ? attrValue : "") %>" <%= readonly %>>
<%
}
else
{ // Empty text fields for write-only
%>
<input type="text" name="<%= attrName %>" <%= readonly %>>
<%
}
}
else
{
if( attrType.equals("[Ljavax.management.ObjectName;") )
{
// Array of Object Names
ObjectName[] names = (ObjectName[]) Server.getMBeanAttributeObject(objectNameString, attrName);
if( names != null )
{
%>
<table>
<%
for( int i = 0; i < names.length; i++ )
{
%>
<tr><td>
<a href="HtmlAdaptor?action=inspectMBean&name=<%= URLEncoder.encode(( names[ i ] + "" )) %>"><%= ( names[ i ] + "" ) %></a>
</td></tr>
<%
}
%>
</table>
<%
}
}
// Array of some objects
else if( attrType.endsWith("[]"))
{
Object arrayObject = Server.getMBeanAttributeObject(objectNameString, attrName);
if (arrayObject != null) {
%>
<table>
<%
for (int i = 0; i < Array.getLength(arrayObject); ++i) {
%>
<tr><td><%=Array.get(arrayObject,i)%></td></tr>
<%
}
%>
</table>
<%
}
}
else
{
// Just the value string
%>
<%= attrValue %>
<%
}
}
if( attrType.equals("javax.management.ObjectName") )
{
// Add a link to the mbean
if( attrValue != null )
{
%>
<a href="HtmlAdaptor?action=inspectMBean&name=<%= URLEncoder.encode(attrValue) %>">View MBean</a>
<%
}
}
%>
</td>
<td><%= attrDescription%></td>
</tr>
<%
}
%>
</table>
<% if( hasWriteable )
{
%>
<input type="submit" value="Apply Changes">
<%
}
%>
</form>
<hr>
<h3>List of MBean operations:</h3>
<%
for(int a = 0; a < operationInfo.length; a ++)
{
MBeanOperationInfo opInfo = operationInfo[a];
boolean accept = true;
if (opInfo instanceof ModelMBeanOperationInfo)
{
Descriptor desc = ((ModelMBeanOperationInfo)opInfo).getDescriptor();
String role = (String)desc.getFieldValue("role");
if ("getter".equals(role) || "setter".equals(role))
{
accept = false;
}
}
if (accept)
{
MBeanParameterInfo[] sig = opInfo.getSignature();
%>
<form method="post" action="HtmlAdaptor">
<input type="hidden" name="action" value="invokeOp">
<input type="hidden" name="name" value="<%= objectNameString %>">
<input type="hidden" name="methodIndex" value="<%= a %>">
<hr align='left' width='80'>
<h4><%= opInfo.getReturnType() + " " + opInfo.getName() + "()" %></h4>
<p><%= fixDescription(opInfo.getDescription())%></p>
<%
if( sig.length > 0 )
{
%>
<table cellspacing="2" cellpadding="2" border="1">
<tr class="OperationHeader">
<th>Param</th>
<th>ParamType</th>
<th>ParamValue</th>
<th>ParamDescription</th>
</tr>
<%
for(int p = 0; p < sig.length; p ++)
{
MBeanParameterInfo paramInfo = sig[p];
String pname = paramInfo.getName();
String ptype = paramInfo.getType();
if( pname == null || pname.length() == 0 || pname.equals(ptype) )
{
pname = "arg"+p;
}
%>
<tr>
<td><%= pname %></td>
<td><%= ptype %></td>
<td>
<%
if( ptype.equals("boolean") || ptype.equals("java.lang.Boolean") )
{
// Boolean true/false radio boxes
%>
<input type="radio" name="arg<%= p%>" value="True"checked>True
<input type="radio" name="arg<%= p%>" value="False">False
<%
}
else
{
%>
<input type="text" name="arg<%= p%>">
<%
}
%>
</td>
<td><%= fixDescription(paramInfo.getDescription())%></td>
</tr>
<%
}
%>
</table>
<%
}
%>
<input type="submit" value="Invoke">
</form>
<%
}
}
%>
</td></tr>
</table>
</body>
</html>