访问 MBean 属性和操作的示例
您可使用 Liberty 访问 Java™ 管理扩展 (JMX) 管理 Bean (MBean) 的属性以及调用其操作。
在您获得 MBeanServer 实例(对于 Liberty 上运行的应用程序)或 MBeanServerConnection 实例(对于外部客户机)之后,可以访问 Liberty 所提供 MBean 的属性或者调用这些 MBean 的操作。请参阅在 Liberty 上使用 JMX MBean。
以下代码示例假定变量 mbs 是 MBeanServer 或 MBeanServerConnection 实例。可以使用所提供的方法,以类似于 Java 反射的方式来访问属性和调用操作。此外,每个 MBean 的管理接口具有用于属性的 getter 方法及用于操作的方法。可使用这些接口,方法是实现某个 javax.managementJMX.newMBeanProxy 方法或某个 javax.management.JMX.newMXBeanProxy 方法以便 MXBean 获取代理对象。管理接口的名称以“MXBean”结尾。对于管理接口的名称,请参阅 所提供 MBean 的列表。
示例 1:检查应用程序“myApp”的状态
import javax.management.ObjectName;
import javax.management.JMX;
import com.ibm.websphere.application.ApplicationMBean;
...
ObjectName myAppMBean = new ObjectName(
"WebSphere:service=com.ibm.websphere.application.ApplicationMBean,name=myApp");
if (mbs.isRegistered(myAppMBean)) {
String state = (String) mbs.getAttribute(myAppMBean, "State");
// alternatively, obtain a proxy object
ApplicationMBean app = JMX.newMBeanProxy(mbs, myAppMBean, ApplicationMBean.class);
state = app.getState();
}
示例 2:从应用程序“myApp”获取 Servlet“Example Servlet”的响应时间统计信息
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.JMX;
import com.ibm.websphere.webcontainer.ServletStatsMXBean;
...
ObjectName servletMBean = new ObjectName("WebSphere:type=ServletStats,name=myApp.Example Servlet");
if (mbs.isRegistered(servletMBean)) {
CompositeData responseTimeDetails = (CompositeData) mbs.getAttribute(servletMBean, "ResponseTimeDetails");
CompositeData responseTimeReading = (CompositeData) responseTimeDetails.get("reading");
Double mean = (Double) responseTimeReading.get("mean");
Double standardDeviation = (Double) responseTimeReading.get("standardDeviation");
// alternatively, obtain a proxy object
ServletStatsMXBean servletStats = JMX.newMXBeanProxy(mbs, servletMBean, ServletStatsMXBean.class);
StatisticsMeter meter = servletStats.getResponseTimeDetails();
StatisticsReading reading = meter.getReading();
mean = reading.getMean();
standardDeviation = reading.getStandardDeviation();
}
示例 3:创建 Web 服务器插件配置文件
import com.ibm.websphere.webcontainer.GeneratePluginConfigMBean;
...
ObjectName pluginMBean = new ObjectName("WebSphere:name=com.ibm.ws.jmx.mbeans.generatePluginConfig");
if (mbs.isRegistered(pluginMBean)) {
mbs.invoke(pluginMBean, "generatePluginConfig", new Object[] {
"installRoot", "serverName"}, new String[] {
String.class.getName(), String.class.getName()
});
// alternatively, use a proxy object
GeneratePluginConfigMBean plugin = JMX.newMBeanProxy(mbs, name, GeneratePluginConfigMBean.class);
plugin.generatePluginConfig("installRoot", "serverName");
}
示例 4:查询 Web Service 端点的状态
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
...
// Init mbs as needed
MBeanServerConnection mbs;
// Get MBeanInfo for specific ObjectName
ObjectName objName = new ObjectName("WebSphere:feature=jaxws,bus.id=testCXFJMXSupport-Server-Bus, type=Bus.Service.Endpoint,service=\"{http://jaxws.samples.ibm.com.jmx/}TestEndpointService\", port=\"TestEndpoint\",instance.id=1816106538");
MBeanInfo beanInfo = mbsc.getMBeanInfo(objName);
// Go through attributes to find the interested one
for (MBeanAttributeInfo attr : beanInfo.getAttributes()) {
if (attr.getName().equals("State")) {
String status = String.valueOf(mbs.getAttribute(objName, attr.getName()));
break; }
}
示例 5:关闭 CXF 服务器总线
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
...
// Init mbsc as needed
MBeanServerConnection mbs;
// Get MBeanInfo for specific ObjectName
ObjectName objName = new ObjectName("WebSphere:feature=jaxws,bus.id=testCXFJMXSupport-Server-Bus, type=Bus,instance.id=1618108530");
MBeanInfo beanInfo = mbsc.getMBeanInfo(objName);
// Go through operation to find the interested one and invoke
for (MBeanOperationInfo operation : beanInfo.getOperations()) {
if (operation.getName().equals("shutdown")) {
mbs.invoke(objName, operation.getName(), new Object[] { true }, new String[] { boolean.class.getName() });
break; }
}