📄 inspectmbean.jsp
字号:
<%@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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -