2장. MX4J 확장(Extensions) 및 유틸리티

차례

확장(Extensions)
Standard MBean descriptions
유틸리티
standard MBean에 대한 MBeanServer Invocation을 위한 Proxy
DynamicMBean 구현을 위한 기본 클래스 AbstractDynamicMBean
MX4J 구현과 상호작용하기(interacting)
내부 logging 전송
MBeanServerInterceptor 설정

확장(Extensions)

Simone Bordet

(번역)전 준식(locus@nextel.co.kr)

Jin Woo, Min (Korean Translation)

고친 과정
고침 $Revision: 1.2 $$Date: 2002/09/27 09:34:06 $

MX4J는 JMX 스펙에 몇가지 확장을 제공한다. 그래도, MBean의 호환성은 보장된다. 이는 사용자 MBean 또한 같은 방식으로 모든 JMX Spec 구현 서버에서 동작할 수 있다는 것을 보장한다. 그러나, MX4J 구현으로 사용될 때, 몇가지 부가적인 이점이 제공된다.

Standard MBean descriptions

MBean이 standard MBean으로서 코딩될 때, JMX 에이전트는 이에 대한 메타데이터 정보의 생성을 해야할 책임이 있다. 반대로, dynamic MBean으로 코딩될 때, 프로그래머는 public MBeanInfo getMBeanInfo(); method of the DynamicMBean 인터페이스를 통해서 JMX 에이전트에 노출할 메타데이터 정보를 만들어야할 책임이 있다.

비록 JMX 에이전트는 standard MBean에 대한 어트리뷰트, operation, 생성자, notification에 대한 정보를 추출할 수 있지만, 어트리뷰트 설명, operation 설명, 파라미터 이름과 설명 등등의 사용자 정보를 추출할 수 없다.

이러한 정보는 파라미터와 연계된 설명을 읽기만 해도 operation 파라미터가 무엇을 의미하는지를 즉시 이해할 수 있어, 관리용 어플리케이션의 사용자에게는 매우 중요하다. 어트리뷰트에 있어서도 마찬가지이다.

MX4J는 standard MBean의 속성, Operation, 생성자, notification에 대한 파라미터 이름과 설명을 customize할 수 있는 기능을 제공한다. 이런 customization은 다음 몇가지 어휘적인 패턴을 따르는 클래스를 구현함으로서 가능하다. standard MBean과 JMX 에이전트에 대한 관리 인터페이스를 표현하는 Java 인터페이스에서도 매우 유사하게 일어난다.

MBean 프로그래머는 MBean 클래스의 FQN(Full Qualified Name)과 같은 이름을 가지며, "MBeanDescrition"으로 끝나는 클래스를 작성하며, mx4j.MBeanDescription interface 나 mx4j.MBeanDescriptionAdapter를 확장하는(extends) 클래스를 구현하여야 한다.

예를 들어 my.package.MyService라는 MBean 클래스를 가지고 있다면, Java 인터페이스 my.package.MyServiceMBean에서 정의된 관리 인터페이스를 가지게 될 것이고, mx4j.MBeanDescription인터페이스를 구현하며, MBean에 대한 설명과, 파라미터이름을 명시하는 my.package.MyServiceMBeanDescription라는 이름의 클래스를 추가할 수 있다.

예 2.1. standard MBean에 대한 설명을 명시하기

		
public interface MyServiceMBean
{
	public void start();
	public void setStatus(int status);
}

public class MyService implements MyServiceMBean
{
	public MyService(String type) {...}
	public void start() {...}
	public void stop() {...}
	public void setStatus(int status) {...}
}

public class MyServiceMBeanDescription extends MBeanDescriptionAdapter
{
	public String getConstructorDescription(Constructor ctor)
	{
		// Only one constructor
		return "Creates a new instance of my personal service";
	}

	public String getConstructorParameterName(Constructor ctor, int index)
	{
		// Constructor has only one parameter
		return "type";
	}

	public String getConstructorParameterDescription(Constructor ctor, int index)
	{
		// Constructor has only one parameter
		return "The type of the service. Valid values are 'VOLATILE' or 'PERMANENT'.";
	}

	public String getAttributeDescription(String attribute)
	{
		// There is only one attribue, 'Status'
		return "The status of the service. Can be set to ON=1, OFF=0";
	}

	public String getOperationDescription(Method operation)
	{
		String name = operation.getName();
		if (name.equals("start"))
		{
			return "Starts the service. After the service is started its status is ON";
		}
		else if (name.equals("stop"))
		{
			return "Stops the service. After the service is stopped its status is OFF";
		}
		else
		{
			return super.getOperationDescription(operation);
		}
	}
}