存取 MBean 屬性和作業的範例
您可以使用 Liberty 設定檔,來存取「Java™ 管理延伸 (JMX)」管理 Bean (MBean) 的屬性,以及呼叫其作業。
取得 MBeanServer 實例(若為執行於 Liberty 設定檔的應用程式)或 MBeanServerConnection實例(若為外部用戶端)之後,您可以存取 Liberty 設定檔所提供之 MBean 的屬性或呼叫其作業。 請參閱 在 Liberty 設定檔上使用 JMX MBean。
下列程式碼範例假設 mbs 變數是一個 MBeanServer 或 MBeanServerConnection 實例。 您可以利用所提供的方法,以類似於 Java 反射的方式來存取屬性和作業。 另外,每個 MBean 都有一個管理介面含有屬性的 getter 方法以及作業的各種方法。 您可以透過 MBean 的其中一個 javax.managementJMX.newMBeanProxy 方法,或其中一個 javax.management.JMX.newMXBeanProxy 方法,來使用這些介面以取得虛擬物件。 管理介面的名稱結尾是 "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");
// 或是取得虛擬物件
ApplicationMBean app = JMX.newMBeanProxy(mbs, myAppMBean, ApplicationMBean.class);
state = app.getState();
}
範例 2:從 "myApp" 應用程式取得 "Example Servlet" 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");
// 或是取得虛擬物件
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()
});
// 或是使用虛擬物件
GeneratePluginConfigMBean plugin = JMX.newMBeanProxy(mbs, name, GeneratePluginConfigMBean.class);
plugin.generatePluginConfig("installRoot", "serverName");
}
範例 4:查詢 Web 服務端點的狀態
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
...
// 依照需要來起始 mbs
MBeanServerConnection mbs;
// 取得特定 ObjectName 的 MBeanInfo
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);
// 遍歷各屬性來尋找有用的屬性
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;
...
// 依照需要來起始 mbsc
MBeanServerConnection mbs;
// 取得特定 ObjectName 的 MBeanInfo
ObjectName objName = new ObjectName("WebSphere:feature=jaxws,bus.id=testCXFJMXSupport-Server-Bus,
type=Bus,instance.id=1618108530");
MBeanInfo beanInfo = mbsc.getMBeanInfo(objName);
// 遍歷各作業來尋找有用的作業並呼叫
for (MBeanOperationInfo operation : beanInfo.getOperations()) {
if (operation.getName().equals("shutdown")) {
mbs.invoke(objName, operation.getName(), new Object[] { true }, new String[] { boolean.class.getName() });
break;
}
}