JMX 기술의이해 JMX(Java Management Extensions) 는프로그래머들에게자바어플리케이션의모니터링과관리기능을제공한다. 실제로이 API는웹서버에서네트워크디바이스, 웹폰에이르기까지자바로이용가능한것은어느것이든로컬혹은원격으로처리할수있게한다. JMX 기술은 JCP(Java Community Process) 에의해개발된밀접한관계의두스펙, Java Specification Request (JSR) 3: Java Management Extensions (JMX) Specification 와 JSR 160: Java Management Extensions (JMX) Remote API 1.0에의해정의된다. 이번테크팁에서는 JMX 아키텍처를소개하고간단한 MBean(Managed Beans) 을생성하는방법을소개하기로한다. JMX 기술을사용하면 MBean(Managed Bean) 으로알려진하나이상의사용자 JavaBean 오브젝트를통해 ( 리소스를호출하는 ) 한기계안의애플리케이션, 디바이스, 또는서비스를원격으로제어할수있다. 이 MBean 들은그후핵심관리오브젝트서버 (MBean 서버 ) 에등록된다. MBean 서버는리소스에접근하기원하는모든원격매니저에대한관리에이전트역할을한다. JMX 환경 JMX 스펙은아키텍처를세개의티어 (tier) 로정의하고있다. 먼저설명할두레벨은 JSR 3 에서정의된 instrumentation tier 와 agent tier 이다.
Instrumentation Tier. 어플리케이션, 디바이스, 서비스와같은리소스들은 MBean (Managed Bean) 이라고불리는자바오브젝트를이용하여설치된다. MBean 은원격으로관리하고모니터링하는 JMX 에이전트를통해속성과연산으로구성된관리인터페이스를보여준다. Agent Tier. JMX 에이전트의주요컴포넌트는 MBean 서버이며, 이는 Mbean 이등록되는코어관리에이전트오브젝트서버이다. JMX 에이전트는또한 MBean 을핸들링하기위한서비스들을포함하고있다. JMX 에이전트는직접적으로리소스를제어하고관리가가능하도록한다. 세번째티어인원격관리레벨은 JSR 160 에부분적으로정의되어있다. Remote Management Tier. 이티어는에이전트 JVM(Java Virtual Machine) 외부의원격관리어플리케이션으로부터접근가능한 JMX 에이전트를만드는프로토콜어덥터 (adaptor) 와커넥터 (connector) 를정의한다.(JSR160 에는단지커넥터만정의.) 커넥터는원격클라이언트가 JMX-aware 이고로컬클라이언트가보게될것과같은 JMX API 를볼때사용된다. 어덥터는원격클라이언트가 SNMP (Simple Network Management Protocol) 나 CIM/WBEM(Common Information Model and Web Based Enterprise Management) 같은일반관리프로포콜을이용할때사용된다.
일반적으로 JMX 를사용하는개발자는다음의세분류로나누어진다. 리소스를관리하기위해 MBean 을작성하는개발자. 이때, JMX 기술은관리를위해보여지는인터페이스를정의한다. 개발자는 MBean 과리소스자체간의 " 접착체 " 책임을가진다. 에이전트를생성하고배치하는개발자. 다음과같은전형적인몇개의태스크를수행한다 : o MBean 서버를생성하거나플랫폼에의해제공되어지는것을사용한다. o MBean 네이밍컨벤션을이용하여리소스를나타내는 MBean 들을등록한다. o 플랫폼 (RMI/SNMP) 에의해공급된커넥터와프로토콜어뎁터를형성하거나, 리소스가원격으로접근되었을때는커스텀커넥터나어덥터를추가한다 원격매니저를작성하는개발자. JMX 에이전트와상호작용하는커넥터나프로토콜을선택하고, 나타난 MBean 을통해원격으로관리되는리소스의뷰를구축한다.
다음은 JMX 스펙에의해정의된 MBean 의네가지타입이다. 표준 Mbean (Standard MBean): 표준 Mbean 은그메소드의이름에나타나듯이관리인터페이스이다. 메소드는인터페이스의내성에의해보여진다다. 표준 MBeans 은 MBean 의가장일반적인타입이다. 대부분의개발자는이외의 MBean 타입을생성할필요가없다. 다이나믹 MBean(Dynamic MBean): 다이나믹 MBean 은메소드이름의 introspection 을통하는대신 javax.management. DynamicMBean 인터페이스를이용하여관리인터페이스를프로그램적으로구현한다. 이를위해서는관리를위해나타나는속성과작용을표현하는정보클래스에의존한다. Dynamic MBean 은 MBean 의관리인터페이스가컴파일시알려지지않았을때-예를들어, XML 파일을파싱하는데결정되었을때-종종사용된다. 모델 MBean(Model MBean): 모델 MBean 은일반적이고형성가능한 MBean 으로써어플리케이션이어떤리소스든지다이나믹하게설치하는데사용한다. 본질적으로, 관리인터페이스와실제리소스가프로그램적으로설정되도록구현되어온것이다이나믹 MBean 이다. 이로인해 Java 다이나믹관리에이전트에연결된어떤매니저라도 MBean 모델을다이나믹하게실증하고형성할수있다. 오픈 MBean(Open MBean): 오픈 MBean 은데이터타입에특정제한을가진다이나믹 MBean 이며,
이는관리어플리케이션과이들의관리자들이런타임시발견되는새로운관리오브젝트들을이해하고사용할수있게한다. 오픈 MBean 은 JMX 스펙에따르는넓은범위의애플리케이션에오픈될필요가있는리소스를설치하는데있어유동적인수단을제공한다. JMX 관련관리인터페이스를생성하는데에는전형적으로최소두단계의과정으로진행된다. 첫번째단계에서는 Mbean 을 MBean 서버와함께등록하는에이전트는물론, MBean 인터페이스를생성한다. 두번째단계는원격관리어플리케이션을사용하여 MBean 을관리하는것이다. JMX 스펙은사용자가원격관리어플리케이션으로부터 JMX 에이전트를접근하는것을허락하는커넥터들의표준을정의한다. 이는다른프로토콜을사용하는 JMX 커넥터들이같은관리인터페이스를제공하기때문에유용하다. 이로써관리애플리케이션이커뮤니케이션프로토콜의사용유무에관계없이투과성있게리소스를관리할수있다. JMX 에이전트는또한 JMX 스펙에는따르지않으나 JMX 에이전트를지원하는시스템혹은어플리케이션에의해사용될수있다. 표준 Mbean 인터페이스만들기 가상의온도계장치를위한 MBean 을만들어보자. 소스코드는이테크팁의샘플아카이브 (ttfeb2005jmx.jar) 를참조하기바란다. 첫번째로해야할것은, MBean 인터페이스를생성하여리소스를 " 설치 " 하는것이다. 다시말하자면, 리소스의설치에접근을구현하기위해서는 Mbean 을생성해야하는것이다. 다음은간단한 MBean 의예제이다. public interface ThermometerMBean {
// Attributes public double gettemperature(); public double getmaximumtemperature(); public double getminimumtemperature(); // Operations public void resetmaxandmin(); MBean 의인터페이스는일반적으로읽고쓸수있는 ( 또는둘다 ) 이름별, 타입별속성들과활성화될수있는이름별, 타입별작용들로구성되어있다. JMX 기술은또한 Java 이벤트모델을기반으로하는일반적노티피케이션모델을정의한다. JMX 에이전트와 MBeans 는이노티피케이션모델을사용하여관리애플리케이션이나다른 Mbean 들과같이필요로하는곳에중요한정보를전송할수있다. 그러나이예제에서는노티피케이션을사용하지않는다. 다음단계는 MBean 인터페이스의구현을생성하는것인데, 이것은꽤간단하다. 여기서우리는단순하게가상의 static 싱글톤접근자를호출하는 Thermometer 라는클래스를생성한다. 접근자는온도데이터를
갖고있는오브젝트에대해레퍼런스를얻는다. 표준 Mbean 을위해서, 구현클래스의이름과 MBean 인터페이스의이름은마지막부분의 "MBean" 을빼고는반드시같아야한다. ( 예를들어 ThermometerMBean 은 Thermometer 이다.) public class Thermometer implements ThermometerMBean { // Attributes public double gettemperature() { return getmystaticdeviceinterface().gettemperature(); public double getmaximumtemperature() { return getmystaticdeviceinterface().getmax(); public double getminimumtemperature() { return getmystaticdeviceinterface().getmin();
// Operations public void resetmaxandmin() { getmystaticdeviceinterface().resetmaxandmin(); //... JMX 에이전트생성하기 리소스가 MBean 에의해설치된후에는 JMX 에이전트를통해관리될수있다. MBean 은같이작용하는 JMX 에이전트에대해별다른지식을필요로하지않는다. 이로써애플리케이션, 시스템, 네트워크의개발자들은복잡한관리시스템에대한이해필요없이표준방법으로제품을관리할수있다. 에이전트는서버에위치한서비스들로부터도움을받는다. 에이전트서비스는 MBean 서버에등록된 Mbean 에서의관리작용을수행할
수있는오브젝트이다. 에이전트에관리지능을포함시킴으로써, JMX 기술은좀더강력한관리어플리케이션을허용하게된다. JMX 에이전트의핵심컴포넌트는 MBean 서버이며, Mbean 이등록되는관리오브젝트서버이다. JMX 에이전트는또한 Mbean 을관리하기위한서비스들과관리어플리케이션에의해접근허락이되는적어도하나의커뮤니케이션커넥터를포함한다. 다음은간단한에이전트를위한소스코드이다. import java.lang.management.*; import javax.management.*; public class ThermometerAgent { private MBeanServer server = null; public ThermometerAgent() { server = ManagementFactory.getPlatformMBeanServer(); Thermometer tbean = new Thermometer();
ObjectName tbeanname = null; try { tbeanname = new ObjectName( "ThermometerAgent:type=Thermometer"); server.registermbean(tbean, tbeanname); catch(exception e) { e.printstacktrace(); public static void main(string argv[]) { ThermometerAgent agent = new ThermometerAgent(); System.out.println( "Agent is ready... Press Enter to close"); try { System.in.read(); catch (Exception e) {
e.printstacktrace(); 예제구동하기 예제를구동하기위해서는 J2SE 1.5 가필요하다. 1. 이번테크팁에대한샘플아카이브 (ttfeb2005jmx.jar) 를다운로드한다. 2. 예제압축파일을다운로드받은디렉토리를변경하고, 다음과같이샘플아카이브에대한 JAR 파일의압축을푼다. 3. jar xvf ttfeb2005jmx.jar 예제를위한소스코드가나타날것이다.
4. 표준 javac 컴파일러를사용하여클래스들을컴파일한다. 5. 다음명령어를사용하여에이전트클래스를구동시킨다. 6. java -Dcom.sun.management.jmxremote ThermometerAgent 7. 새로운쉘이나명령프롬프트의경우 jconsole 툴 (J2SE bin 디렉토리에있음 ) 을시작하기바란다. 에이전트가등록되면, 다음과비슷한화면이나타난다. 6. JMX 에이전트에접속한다. MBeans 탭을클릭하고왼쪽에있는트리중 ThermometerAgent 엔트리의 Thermometer MBean 을선택한다. Attributes 탭을선택하면최고, 최저, 현재
온도에대한온도계속성이나타날것이다. 7. Operations 탭을클릭하면 resetmaxandmin() 버튼을보게될것이다.