Liberty:存取 MBean 屬性和作業的範例

您可以使用 Liberty,來存取「Java™ 管理延伸 (JMX)」管理 Bean (MBean) 的屬性,以及呼叫其作業。

取得 MBeanServer 實例(若為執行於 Liberty 的應用程式) 或 MBeanServerConnection實例(若為外部用戶端)之後,您可以存取 Liberty 所提供之 MBean 的屬性或呼叫其作業。請參閱 在 Liberty 上使用 JMX MBean

下列程式碼範例假設 mbs 變數是一個 MBeanServerMBeanServerConnection 實例。 您可以利用所提供的方法,以類似於 Java 反射的方式來存取屬性和作業。 另外,每個 MBean 都有一個管理介面含有屬性的 getter 方法以及作業的各種方法。您可以實作其中一個 javax.managementJMX.newMBeanProxy 方法,或 MXBean 的其中一個 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;
	}
}

指示主題類型的圖示 參照主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwlp_mbeans_operation
檔名:rwlp_mbeans_operation.html