MBean 속성 및 조작의 액세스 예
Liberty를 사용하여 JMX(Java™ Management Extensions) 관리 Bean(MBean)의 조작을 호출하고 속성에 액세스할 수 있습니다.
MBeanServer 인스턴스(Liberty에서 실행 중인 애플리케이션의 경우) 또는 MBeanServerConnection 인스턴스(외부 클라이언트의 경우)를 확보한 이후에는 Liberty에서 제공하는 MBean의 조작을 호출하거나 속성에 액세스할 수 있습니다. Liberty에서 JMX MBean에 대해 작업을 확인하십시오.
다음 코드 예제에서는 mbs 변수가 MBeanServer 또는 MBeanServerConnection 인스턴스라고 가정합니다. 제공된 메소드를 사용하여 Java 리플렉션과 유사한 방식으로 속성과 조작에 액세스할 수 있습니다. 또는 각 MBean에는 속성에 대한 Getter 메소드와 조작에 대한 메소드가 포함된 관리 인터페이스가 있습니다. MXBean이 프록시 오브젝트를 가져올 수 있도록 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");
// alternatively, obtain a proxy object
ApplicationMBean app = JMX.newMBeanProxy(mbs, myAppMBean, ApplicationMBean.class);
state = app.getState();
}
예 2: "myApp" 애플리케이션에서 "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: 웹 서버 플러그인 구성 파일 작성
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: 웹 서비스 엔드포인트의 상태 조회
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;
}
}