(자바네트워크,자바JMX동영상)JAVA JMX란? JMX HelloWorld, MBean, JMX Agent개요, JMX 아키…

(자바네트워크,자바JMX동영상)JAVA JMX란? JMX HelloWorld, MBean, JMX Agent개요, JMX 아키텍처

 

JMX란?

JMX(Java Management Extensions)는 JAVA 응용프로그램의 모니터링과 관리기능을 제공합니다.

웹사이트를 통해 원격의 Web Server, WAS, DB등의 상태 모니터링, Start, Stop등의 기능, 디바이스 상태, 각종 서비스제어 등의 기능을 제공할 수 있습니다.

JMX 기술을 사용하여 리소스를 관리하려면 Java 프로그래밍 언어로 리소스를 관리해야 하는데, MBeans로 알려진 Java 객체를 사용하여 리소스를  관리합니다. 

 

JMX MBean이란?

JMX의 MBean은 JMX Agent를 통해 관리되는 응용프로그램 또는 시스템 리소스 입니다. 

표준 MBean은 XXXMBean이라는 Java 인터페이스와 해당 인터페이스를 구현하는 XXX라는 Java 클래스를 작성하여 정의됩니다. 

다음 규칙을 따라야합니다. 

리소스의 상태는 getter와 setter를 통해 완전히 설명.

MBean은 최소한 하나의 public 생성자를 제공. 

 

JMX 아키텍처 3레벨

 

1. Instrumentation Tier

 

MBean과  관리 가능한 리소스들을 포함합니다.

애플리케이션, 장치 또는 서비스와 같은 관리되는 리소스는 Mbean (Managed Beans)이라는 Java 개체를 사용하여 관리 됩니다.

MBean은 원격 관리 및 모니터링을위한 JMX Agent를 통해 관리되는데속성 인터페이스를 클라이언트에 노출합니다.

 

 

2. Agent Tier

 

JMX Agent는 리소스를 직접 제어하고 원격 관리 애플리케이션(클라이언트)에서 사용할 수 있도록 하는 표준 Agent입니다.

JMX Agent의 핵심 구성 요소는 MBean이 등록 된 서버 인 MBeanServer로  MBean의 등록 관리하기 위한 서비스들을 포함하고  있습니다. 즉 MBean을 위한 레지스트리 이며, 모든 클라이언트는 MBeanServer를 통해야 MBean을 다룰 수 있습니다.

 JMX Agent는 리소스를 제어하고 클라이언트에서 접근할 수 있는 표준 Agent 입니다.

 

3. Remote Management(Distributed)Tier  

리소스나 서비스를 관리하는(실제 어떤 서비스를 수행하는) 응용 프로그램이 JMX 에이전트와 통신 할 수 있도록 하는 구성 요소를 포함합니다.

클라이언트가 접근 가능한 JMX Agent를 만드는 프로토콜 Adaptor와 Connector를 정의합니다.

MBeanServer는 프로토콜 Adaptor와 Connector를 이용하여 클라이언트에서 JMX Agent에 액세스 할 수 있도록 합니다.

프로토콜 Adaptor 및 표준 Connector를 사용하면 JMX Agent의 Java VM (Java Virtual Machine) 외부에 있는 원격 관리 애플리케이션(클라이언트)에서 JMX Agent에 접근할 수 있습니다.

 

6a3bf7a6ac8615f5e1ad168d241a2de4_1600085
 

“HelloWorld”

 

-HelloMBean.java (Mbean Interface)
-Hello.java (MBean Interface 구현체)
-HelloAgent.java (JMX Agent)

 

-HelloClient.java(JMX Client)


 

package jmx.hello;

 

/**

 * MBean interface name = implementation class name + MBean. 

 * 표준 MBean은 XXXMBean이라는 Java 인터페이스와 해당 인터페이스를 구현하는 

 * XXX이라는 Java 클래스를 작성하여 정의됩니다. 

 */

public interface HelloMBean {

public void setMessage(String message);

public String sayHello();

}




package jmx.hello;

/**
 * MBean 인터페이스 구현체
 *
 */
public class Hello implements HelloMBean {
private String message = null;
public Hello() {
this.message = "Hello JMX!";
}

public Hello(String message) {
this.message = message;
}

@Override
public void setMessage(String message) {
this.message = message;
}

@Override
public String sayHello() {
return "JMX Message ::: " + this.message;
}

}


package jmx.hello;

import java.rmi.registry.LocateRegistry;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

/**
 * 자원이 MBeans에 의해 관리되도록 구현되면
 * 해당 자원의 관리는 JMX Agent에 의해 수행됩니다.
 * JMX Agent의 핵심 구성 요소는 MBeanServer 이며,
 * MBeanServer 는 MBean이 등록 된 관리 오브젝트 서버입니다. 
 * 
 * JMX 에이전트에는 MBean을 관리하는 서비스들도 포함되어 있습니다. 
 */
public class HelloAgent {
private MBeanServer mbs = null;

public HelloAgent() {

// 도메인명을 문자열로 받아 MBeanServer 생성
mbs = MBeanServerFactory.createMBeanServer("HelloDomain");

// MBean의 인스턴스 생성
Hello helloMBean = new Hello();

try {
LocateRegistry.createRegistry(7777);
JMXServiceURL serviceUrl = 
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/hello");

// HelloWorld MBean Name 정의
// 도메인명 : NAME=VALUE,,,,
ObjectName helloMBeanName = new ObjectName("HelloDomain:name=helloMBean");
// helloName으로 helloBean을 등록
mbs.registerMBean(helloMBean, helloMBeanName);
// Client에서 접속하도록 커넥터 생성 및 시작
JMXConnectorServer connector = 
JMXConnectorServerFactory.newJMXConnectorServer(serviceUrl, null, mbs);
connector.start();

} catch (Exception e) {
e.printStackTrace();
}
}
// 키 입력이 있을 때 까지 계속 실행되도록
private static void waitForEnterPressed() {
try {
System.out.println("Press  to continue...");
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* JMX 에이전트 Main은 ManagementFactory 클래스의 getPlatformMBeanServer () 
* 메소드를 호출하여 플랫폼에 의해 생성되고 초기화 된 MBean 서버를 가져 오는 것으로 시작합니다.
* @param argv
*/
public static void main(String argv[]) {
new HelloAgent();
System.out.println("HelloAgent is running...");
HelloAgent.waitForEnterPressed();
}
}



package jmx.hello;

import java.util.Arrays;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.RuntimeErrorException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class HelloClient {
public static void main(String[] args) {
foo();
}

public static void foo() {

try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/hello");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

// MBeanServerConnection 취득
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

// Get domains from MBeanServer
String domains[] = mbsc.getDomains();
Arrays.sort(domains);
for (String domain : domains) {
System.out.println(domain);
}

// JMX Agent에서 등록한 ObjectName 생성
ObjectName helloMBeanName = new ObjectName("HelloDomain:name=helloMBean");

// MBeanServerConnection을 통해 MBean을 직접 접근하는 대신
// MBean에 대한 전용 Proxy 생성 
HelloMBean hello = JMX.newMBeanProxy(mbsc, helloMBeanName, HelloMBean.class, true);

// MBean의 메서드를 원격 호출
hello.setMessage("방가방가~~");
System.out.println(hello.sayHello());   

} catch (RuntimeErrorException e) {
System.out.println("Error --->" + e);
e.printStackTrace();
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}

실행

HelloAgent 실행

HelloAgent is running...
Press  to continue...


HelloClient 실행

HelloDomain
JMImplementation
JMX Message ::: 방가방가~~



#JMX란, #JMX강좌, #JMX강의, #자바JMX, #JMX개요, #JMX, #자바자원관리, #자바, #자바교육, #자바강의, #자바강좌, #JAVA, #JAVA강의, #JAVA강좌, #JAVA, #자바동영상, #JAVA동영상, #자바네트워크, #JAVA영상,

 

 

 

 

 

 

 

 

 

Comments