차례
고친 과정 | |
---|---|
고침 $Revision: 1.2 $ | $Date: 2002/09/27 09:36:09 $ |
MX4J는 NamingService, CosNamingService 이렇게 2가지 MBean을 갖고 있다. 이것들은 각각 MBean으로써 JDK에 함께 제공되는 rmiregistry와 tnameserv 툴을 wrap한 것이다.
이는 같은 JVM내에서 MBean으로 rmiregistry를 시작하게 한다. 다른 MBean으로,
RMI MBean(문서내의 예제 참고) 혹은 RMI 어댑터로..
MBean클래스 이름은 mx4j.tools.naming.NamingService이다.
Naming MBean의 사용은 JDK와 함께 모든 필요한 클래스들이 제공되었기 때문에 추가적인 라이브러리를 필요로 하지 않는다.
Naming MBean은 JMX 에이전트에 쉽게 배치될 수 있다. 다음의 코드는 JMX 에이전트에 어떻케 배치되는지를 보여준다.
예 4.1. Naming MBean의 배치
MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName naming = new ObjectName("Naming:type=registry"); server.createMBean("mx4j.tools.naming.NamingService", naming, null);
Naming MBean을 rmiregistry로 사용하려면, 먼저 시작되어있어야 한다. Naming MBean은 관리 인터페이스의 start()과 stop()메소드를 단순히 호출함으로서 원하는 대로 시작되고 중지될 수 있다.
예 4.2. Naming MBean의 시작과 중지
NamingServiceMBean mbean = (NamingServiceMBean)StandardMBeanProxy.create(NamingServiceMBean.class, server, naming); mbean.start(); ... mbean.stop(); MBeanServer를 사용하는 방법 server.invoke(naming, "start", new Object[0], new String[0]); ... server.invoke(naming, "stop", new Object[0], new String[0]);
rmiregistry가 실행될 port를 지정하는 것이 가능하다. 단순히 Naming MBean의 생성자에 파라미터를 전달하면 된다. 기본값은 1099 포트에서 동작한다.
예 4.3. 기본 포트값을 변경하기
MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName naming = new ObjectName("Naming:type=registry"); server.createMBean("mx4j.tools.naming.NamingService", naming, null, new Object[] {new Integer(2099)}, new String[] {"int"}); or NamingService mbean = new NamingService(3099); server.registerMBean(mbean, naming); MLet 파일을 통해서(적당한 코드 베이스 지정해서) <MLET CODE="mx4j.tools.naming.NamingService" ARCHIVE="mx4j-tools.jar" CODEBASE="../lib/"> <ARG TYPE="int" VALUE="4099"> </MLET>
rmiregistry의 포트를 실행시에 변경하는 것도 가능하다. Naming MBean을 실행하고, 잠시 중지한다. 실행되는 포트를 변경하고, 다시 시작한다. 그러면 새 포트에서 요청을 받게 될 것이다. 다음에서 이런 변경 절차를 볼 수 있다.
예 4.4. 실행시 포트를 변경하기
MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName naming = new ObjectName("Naming:type=registry"); server.createMBean("mx4j.tools.naming.NamingService", naming, null); NamingServiceMBean mbean = (NamingServiceMBean)StandardMBeanProxy.create(NamingServiceMBean.class, server, naming); mbean.start(); ... mbean.stop(); mbean.setPort(5099); mbean.start();
CosNamingService MBean은 NamingService MBean과 아주 흡사하다.
다른 MBean들처럼 같은 JVM안에서 tnameserv를 시작하게 해준다.
이 MBean의 클래스는 mx4j.tools.naming.CosNamingService이다.
CosNamingService MBean을 사용할 때는 추가적인 라이브러리가 필요하지 않다. 필요한 것들이 JDK와 함께 배포되기 때문이다.
CosNamingService MBean은 NamingService MBean과 거의 같은 방법으로 JMX 에이전트에 쉽게 배치할 수 있다.
NamingService MBean과 똑같이 CosNamingService MBean 반드시
MBeanServer에 최초로 등록되어야 한다.
그리고 드러난 관리 인터페이스를 사용하여 시작한다.
NamingService MBean와 같은 방법으로 들어오는 연결을
기다리는 서비스의 포트를 설정하는 것이 가능하다.
CosNamingService가 NamingService와 다른 한가지는 NamingService는 생성하고, 시작하고, 중지하기 쉬운 API를 제공하며 CosNamingService는 그렇지 못하다.
그 결과로 tnameserv는 Runtime.exec()
를
사용해서 시작(start)하고 MBean을 시동하여 생성된 프로세스들을 kill해야만 중지(stop)할 수 있다.
외부의 프로세스를 시작하거나 중지하는 것은
start();과 stop(); 메쏘드에서
프로세스가 실제 시작하기 전에(혹은 중지하기 전에) 리턴될 수가 있기 때문에,
CosNamingService MBean은 관리용 인터페이스에서
setDelay(); 메쏘드를 제공한다.
이는 start();와 stop(); 메쏘드들이
외부 프로세스를 시작한 후(종료한 후) 리턴하기 전에 기다리기 위함이다.
제안된 딜레이값은 대략 1000-5000 밀리초이나, 이 값은 하드웨어나
OS에 상당히 밀접한 관계가 있다.
다른 중요한 것은 tnameserv는 반드시 PATH 환경변수에 위치해야 한다는 것이다. 일반적으로 PATH 환경변수에 $JAVA_HOME/bin이 포함된다.