Jython MBean

Carlos Quiroz

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

고친 과정
고침 $Revision: 1.2 $$Date: 2002/06/07 14:09:56 $

소개

JythonRunner MBean은 jython 스크립트를 실행하는데 사용될 수 있다. 주요 목적은 스크립트로 쉽게 제어할 수 있고, 실행시에 변경되고 deploy될 수 있기 때문에 관리 작업에 사용하기 위해서 이다. MBean 클래스는 mx4j.tools.jython.JythonRunner이다.

다음 두가지 방식으로 사용할 수 있다.

  • runScript메소드를 호출하여 사용

  • Timer나 Monitor로 부터의 notification을 리슨하여 사용

MBean의 사용은 jython이 설치되어 있어야 한다. http://www.jython.org에서 다운로드 받을 수있다. Jython은(version 2.1)로 인스톨러인 하나의 클래스 파일로 배포되며, 실행하면 jython 배보본을 /usr/local/jython-2.1 혹은 C:\Java\jython-2.1디렉토리에 설치하게 된다. Jython은 jython standard library를 사용하길 원하느냐에 따라 두가지 방법으로 실행될 수 있다.

standard 라이브러리를 사용한다면, 설치 디렉토리에 있는 jython.jar를 클래스 패스에 추가한다.

java -cp /usr/local/jython-2.1/jython.jar:mx4j-jmx.jar:mx4j-tools.jar

이런 방법으로 jython은 설치 디렉토리를 찾을 수 있고 거기서 부터 라이브러리를 로드 할 수 있다. python.path 변수를 설정함으로서 같은 효과를 얻을 수 있다.

java -Dpython.path=/usr/local/jython-2.1 -cp jython.jar:mx4j-jmx.jar:mx4j-tools.jar

표준 라이브러리를 필요로 하지 않는다면(대부분의 JMX task에 대한 경우에), jython.jar파일만 시스템 클래스 패스에 잡으면 된다.

설정

MBean은 MBean을 설정하는데 사용되는 적은 수의 파라미터를 가진다. 여기엔 MBean이 ObservedObjectname과 Notification Name이 notification을 리슨하기 위하여 사용되는 설정을 포함한다. 스크립트와 스크립트파일 파라미터는 스크립트의 컨텐츠를 지시한다. 간단한 스크립트에 대해서 스크립트 파라미터를 사용할 수 있다. 스크립트를 컴파일 할수 있도록 하기위해서 파일을 지시하는게 좋다. 스크립트 파일은 실제로 URL이고 그래서 http 위치를 지시할 수 있다.

고유 함수들

스크립트를 쉽게 사용하기 위해서 몇몇 변수들의 생성자, 클래스, 함수들이 스크립트에서 사용할 수 있다. 가장 중요한 것은 현재 MBean Server를 지시하는 server이다. 서버 변수는 MBeanServer 객체와 모든 변수가 유효하다. 스크립트는 다음과 같이 작성할 수 있다 :

# write all the "test:name=test" mbean operations
[print operation for operation in server.getMBeanInfo(ObjectName("test:name=test")).operations]
추가적으로 모든 javax.management.* 클래스가 이미 사용가능한 ObjectName이나 Attribute 같은 Object들을 만들수 있도록 import 되어 있다.

몇가지 유틸리티 함수와 클래스들이 있다 :

  • proxy Proxy클래스는 접근하기 편리하도록 objectname을 wrap하는 proxy 클래스를 제공한다(StandardMBeanProxy 클래스와 동일하다). 직접 가져오고 속성을 변경하고 메소드를 호출할 수 있다. 예를 들어 :

    #
    # Assume the MBean with ObjectName Test:name=jython has name and time attributes and a method start()
    #
    o = ObjectName("Test:name=jython")
    p = proxy(o)
    # you can access functions directly
    print p.name
    p.time = 12343
    # also works with functions
    p.start()
    

  • mbeans(query)는 쿼리에 맞는 서버의 mbean들의 리스트를 반환한다. 쿼리 형식은 "*:*"형식이다. 생략될 수 있으며, 이 함수는 모든 mbean들을 반환한다.

  • instances(classname, query)는 서버내의 클래스 이름의 인스턴스를 가지는 mbean들의 리스트를 반환한다. 서버는 optional하게 쿼리 메소드를 수용한다.