Beispiele für den Zugriff auf MBean-Attribute und -Operationen
Sie können Liberty verwenden, um auf die Attribute von JMX-MBeans (Java™ Management Extensions) zuzugreifen und die Operationen dieser MBeans aufzurufen.
Sobald Sie eine MBeanServer-Instanz (für eine in Liberty ausgeführte Anwendung) oder eine MBeanServerConnection-Instanz (für einen externen Client) erhalten haben, können Sie auf die Attribute der in Liberty bereitgestellten MBeans zugreifen und die MBean-Operationen aufrufen. Nähere Informationen hierzu finden Sie unter Mit JMX-Beans in Liberty arbeiten.
In den folgenden Codebeispielen wird angenommen, dass die Variable mbs eine Instanz von MBeanServer oder MBeanServerConnection ist. Sie können die bereitgestellten Methoden verwenden, um ähnlich wie bei der Java-Reflexion auf die Attribute und Operationen zuzugreifen. Alternativ hat jede MBean eine Managementschnittstelle mit Getter-Methoden für die Attribute und Methoden für die Operationen. Sie können diese Schnittstellen verwenden, indem Sie eine der javax.managementJMX.newMBeanProxy-Methoden oder eine der javax.management.JMX.newMXBeanProxy-Methoden für MXBeans implementieren, um ein Proxy-Objekt anzufordern. Der Name einer Managementschnittstelle endet mit "MXBean". Die Namen der Managementschnittstellen finden Sie unter Liste der bereitgestellten MBeans.
Beispiel 1: Status der Anwendung "myApp" überprüfen
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");
// alternativ ein Proxy-Objekt anfordern
ApplicationMBean app = JMX.newMBeanProxy(mbs, myAppMBean, ApplicationMBean.class);
state = app.getState();
}
Beispiel 2: Antwortzeitstatistiken für das Servlet "Example Servlet" aus der Anwendung "myApp" abrufen
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");
// alternativ ein Proxy-Objekt anfordern
ServletStatsMXBean servletStats = JMX.newMXBeanProxy(mbs, servletMBean, ServletStatsMXBean.class);
StatisticsMeter meter = servletStats.getResponseTimeDetails();
StatisticsReading reading = meter.getReading();
mean = reading.getMean();
standardDeviation = reading.getStandardDeviation();
}
Beispiel 3: Web-Server-Plug-in-Konfigurationsdatei erstellen
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()
});
// alternativ ein Proxy-Objekt verwenden
GeneratePluginConfigMBean plugin = JMX.newMBeanProxy(mbs, name, GeneratePluginConfigMBean.class);
plugin.generatePluginConfig("installRoot", "serverName");
}
Beispiel 4: Status des Web-Service-Endpunkts abfragen
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
...
// MBS ggf. initialisieren
MBeanServerConnection mbs;
// MBeanInfo für jeweiligen ObjectName abrufen
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);
// Attribute durcharbeiten, um das gewünschte zu finden
for (MBeanAttributeInfo attr : beanInfo.getAttributes()) {
if (attr.getName().equals("State")) {
String status = String.valueOf(mbs.getAttribute(objName, attr.getName()));
break;
}
}
Beispiel 5: CXF-Serverbus beenden
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
...
// mbsc ggf. initialisieren
MBeanServerConnection mbs;
// MBeanInfo für jeweiligen ObjectName abrufen
ObjectName objName = new ObjectName("WebSphere:feature=jaxws,bus.id=testCXFJMXSupport-Server-Bus,
type=Bus,instance.id=1618108530");
MBeanInfo beanInfo = mbsc.getMBeanInfo(objName);
// Operationen durcharbeiten, um die gewünschte zu finden, und Operation aufrufen
for (MBeanOperationInfo operation : beanInfo.getOperations()) {
if (operation.getName().equals("shutdown")) {
mbs.invoke(objName, operation.getName(), new Object[] { true }, new String[] { boolean.class.getName() });
break;
}
}