JMX(Java Management Extensions) 원격 API를 사용하여 JMX(Java Management Extension) 클라이언트 프로그램 개발
JMX(Java™ Management Extensions) 커넥터 스펙과 JMX 원격 API(Application Programming Interface)(JSR 160)를 개발할 수 있습니다. 프로그램은 RMI-IIOP(Remote Method Invocation over Internet Inter-ORB Protocol)를 통해 통신할 수 있습니다.
시작하기 전에
JSR 160, JMX API, 관리 Beans(MBeans)에 대해 학습하십시오. JSR 160에 대한 자세한 정보는 웹(http://www.jcp.org/en/jsr/detail?id=160)에서 JSR 160: JMX(Java Management Extensions) 원격 API를 참조하십시오. JMX API 및 MBean에 대한 자세한 정보는 API(Application Programming Interface) 문서를 참조하십시오.
이 태스크 정보
관리 콘솔, wsadmin 유틸리티 또는 JMX(Java Management Extension) 프로그래밍을 통해 WebSphere® Application Server 환경을 관리할 수 있습니다. JMX 프로그래밍을 통해 환경을 관리할 수 있도록 JMX 원격 API를 사용하여 JMX 원격 클라이언트 프로그램을 개발하려면 이 태스크를 완료하십시오.
프로시저
결과
RMI 연결을 통해 배치 관리자에 대한 연결을 설정하고 노드 에이전트 MBean을 통해 애플리케이션 서버를 시작했습니다.
예
다음 씬 클라이언트 코드 예제를 사용하여 JMX 클라이언트를 작성하고 사용하십시오.
일부 구문은 인쇄를 위해 여러 줄로 표시됩니다.
import java.io.File;
import java.util.Date;
import java.util.Set;
import java.util.Hashtable;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectName;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JMXRemoteClientApp implements NotificationListener {
private MBeanServerConnection mbsc = null;
private ObjectName nodeAgent;
private ObjectName jvm;
private long ntfyCount = 0;
private static String userid = null;
private static String pwd = null;
public static void main(String[] args)
{
try {
JMXRemoteClientApp client = new JMXRemoteClientApp();
String host=args[0];
String port=args[1];
String nodeName =args[2];
userid =args[3];
pwd = args[4];
client.connect(host,port);
// Find a node agent MBean
client.getNodeAgentMBean(nodeName);
// Invoke the launch process.
client.invokeLaunchProcess("server1");
// Register for node agent events
client.registerNotificationListener();
// Run until interrupted.
client.countNotifications();
} catch (Exception e) {
e.printStackTrace();
}
}
private void connect(String host,String port) throws Exception
{
String jndiPath="/WsnAdminNameService#JMXConnector";
JMXServiceURL url =
new JMXServiceURL("service:jmx:iiop://"+host+"/jndi/corbaname:iiop:"+host+":"+port+jndiPath);
Hashtable h = new Hashtable();
//Specify the user ID and password for the server if security is enabled on server.
System.out.println("Userid is " + userid);
System.out.println("Password is " + pwd);
if ((userid.length() != 0) && (pwd.length() != 0)) {
System.out.println("adding userid and password to credentials...");
String[] credentials = new String[] {userid , pwd };
h.put("jmx.remote.credentials", credentials);
} else {
System.out.println("No credentials provided.");
}
//Establish the JMX connection.
JMXConnector jmxc = JMXConnectorFactory.connect(url, h);
//Get the MBean server connection instance.
mbsc = jmxc.getMBeanServerConnection();
System.out.println("Connected to DeploymentManager");
}
private void getNodeAgentMBean(String nodeName)
{
// Query for the object name of the node agent MBean on the given node
try {
String query = "WebSphere:type=NodeAgent,node=" + nodeName + ",*";
ObjectName queryName = new ObjectName(query);
Set s = mbsc.queryNames(queryName, null);
if (!s.isEmpty()) {
nodeAgent = (ObjectName)s.iterator().next();
System.out.println("NodeAgent mbean found "+ nodeAgent.toString());
} else {
System.out.println("노드 에이전트 MBean was not found");
System.exit(-1);
}
} catch (Exception e) {
System.out.println(e);
System.exit(-1);
}
}
private void invokeLaunchProcess(String serverName)
{
// Use the launch process on the node agent MBean to start
// the given server.
String opName = "launchProcess";
String signature[] = { "java.lang.String" };
String params[] = { serverName };
boolean launched = false;
try {
Boolean b = (Boolean)mbsc.invoke(nodeAgent, opName, params, signature);
launched = b.booleanValue();
if (launched)
System.out.println(serverName + " was launched");
else
System.out.println(serverName + " was not launched");
} catch (Exception e) {
System.out.println("Exception invoking launchProcess: " + e);
}
}
private void registerNotificationListener()
{
// Register this object as a listener for notifications from the
// node agent MBean. Do not use a filter and do not use a handback
// object.
try {
mbsc.addNotificationListener(nodeAgent, this, null, null);
System.out.println("Registered for event notifications");
} catch (Exception e) {
System.out.println(e);
}
}
public void handleNotification(Notification ntfyObj, Object handback)
{
// Each notification that the node agent MBean generates results in
// a call to this method.
ntfyCount++;
System.out.println("***************************************************");
System.out.println("* Notification received at " + new Date().toString());
System.out.println("* type = " + ntfyObj.getType());
System.out.println("* message = " + ntfyObj.getMessage());
System.out.println("* source = " + ntfyObj.getSource());
System.out.println(
"* seqNum = " + Long.toString(ntfyObj.getSequenceNumber()));
System.out.println("* timeStamp = " + new Date(ntfyObj.getTimeStamp()));
System.out.println("* userData = " + ntfyObj.getUserData());
System.out.println("***************************************************");
}
private void countNotifications()
{
// Run until stopped.
try {
while (true) {
Thread.currentThread().sleep(60000);
System.out.println(ntfyCount + " notification have been received");
}
} catch (InterruptedException e) {
}
}
}