차례
고친 과정 | |
---|---|
고침 $Revision: 1.1 $ | $Date: 2002/04/10 14:11:51 $ |
http Adaptor는 MX4J 에이전트와 interface하는 기본적인 방법을 제공한다. HTTP 요청을 JMX 요청으로 변환하는 기능을 가지는 HTTP 1.0 서버를 포함하고 있다. 이는 스트링, 숫자, boolean이 아닌 데이터를 조작할 수 없다는 어려운 몇가지 제약을 가진다. HTTP 트래픽의 장점으로 방화벽과 일반적인 브라우저 클라이언트에서 가능하다는 장점을 가진다.
MX4J의 HttpAdaptor는 기본적으로 XML 데이터를 처리하도록 만들어졌다. 요청은 대개 http 방식으로 만들어지며, 기본적으로 XML 트리를 구축하여 응답한다. 그러나 ProcessorMBean을 정의하여 "skin"을 만들수 있다. 이는 XML 트리를 처리하며, 그것을 가지고 다른 일을 할 수 있다. 프로세서는 또한 서버가 이해하지 못하는 요청을 처리하는 책임을 가지게 될 것이다. 이런 방식으로 적합한 프로세서가 이미지와 원본 HTML파일을 제공할 수 있다. 현재 두개의 프로세서들이 정의되어 있다 :
DefaultProcessorMBean: 트리를 Text로 Publish하도록 XML 트리를 변경하지 않는다. content-type은 text/xml로 정의한다. 이렇케하면 대개 사용자 브라우저가 XML 텍스트를 표시하게 될 것이다. 이 프로세서는 XML 파일 이외에 다른 데이터를 제공하지 않는다.
XSLTProcessorMBean: 이 프로세서는 XSLT를 이용하여 XML 트리를 HTML로 변환하는 일을 한다. JAXP-호환 XSLT를 사용하여야 한다. 이 프로그램은 Xalan XSLT processor 와 Saxon XSLT processor(이 글을 작성할 때 어떠한 Saxon 버전에서도 동작하지 않았다)에서 테스트되었다. 또 프로세서는 이미지나 HTML 데이터를 제공할 수 있다.
VelocityProcessorMBean: To be built...
프로세서가 MBean이라는 것은 deploy 될 수 있고, runtime시에 변경할 수 있다는 것을 의미한다. HttpAdaptorMBean는 Processor를 설정하는 두가지 메소드들을 정의한다. 프로세서가 정의되지 않았거나 에러가 난다면, DefaultProcessor가 사용될 것이다.
HttpAdaptor는 HttpAdaptorMBean 인터페이스에 정의된 MBean이다. 다음과 같은 파라미터를 가진다.
Port: 서버가 리슨할 포트를 정의한다. 기본값은 8080이다.
Host: 리슨할 서버의 호스트이름을 정의한다. 기본값은 localhost이다. 이는 다른 컴퓨터에서는 서버에 접속할수 없다는 것이다. 이는 보안상의 이유때문이다. 명시적으로 서버를 오픈해야 된다.
Alive: 서버가 동작중인지 아닌지를 알려주는 Boolean 프로퍼티
Processor: XML 트리 생성후에 사용될 프로세서를 설정한다. ProcessorName을 설정하면 null이 된다.
AuthenticationMethod: 인증 방법을 설정한다. 유효한 값은 none / basic / digest가 있다. security 장을 참고하라.
ProcessorName: XML 프로세서로 사용될 MBean's ObjectName을 설정한다. 설정하면 Processor가 null이 된다. MBean은 mx4j.adaptor.http.ProcessorMBean 인터페이스를 구현하여야 한다.
SocketFactory: 기본 소켓 Factory를 다른 것으로 대체한다. 예를 들어, mx4j.adaptor.http.ssl.SSLFactory와 같은..
HttpAdaptor는 보안을 보장하기위한 방법이 없다. 그러나, 기본적은 인증은 제공된다.
기본 인증은 보호의 미약한 형태를 제공하는 방법이다. 설정되면, 사용자 브라우저가 사용자 이름과 패스우드를 묻고, Adaptor에 저장된 것과 비교 하는 방법이다. 사용자 이름/패스워드 쌍을 추가하려면 addAuthorization메소드를 사용하면 된다. 전에 언급했듯이, 사용자 이름과 패스워드는 약한 encoding(base64)으로 전송되어 basic 인증은 미약한다. 그러나, 이는 secured 네트웍이나 SSL을 통하는 데에 사용되면, 완벽해 질 수 있다.
HttpAdaptor는 일반 소켓대신 SSL을 사용할 수 있다. 이를 위해 다음 3 단계가 필요하다 :
Install JSSE:
SSL 지원되도록 Adaptor를 실행하려면 JSSE가 필요하다. 여기 서 제공하는 JSSE 1.0.2 버전을 사용하거나 JDK 1.4를 사용할 수 있다. JSSE는 3개의 jar파일들이 들어있고, 이를 classpath에 추가해야 한다. : jsse.jar, jcert.jar, jnet.jar파일이다. 또 다른 방법은 이 파일들을 JAVA_HOME/lib/ext 디렉토리에 놓는 방법이다. JDK 1.4를 사용하는 경우에는 이런 과정이 필요없다.서버 인증서 생성하기:
서버 인증서를 생성하기 위해서 keytool 명령어를 사용할 수 있다. 예를 들어
keytool -genkey -keystore certs,
여기서 certs는 keystore파일 이름이다. keystore에 대한 패스워드와 인증서 구분 이름에 대한 프롬프트가 나올 것이다. 브라우저는 아마도 자신이 키를 사인했기 때문에(self-signed) 키의 유효성에 대한 경고메시지를 표시할 것이다.
Configure HttpAdaptor:
마지막으로 기본 소켓 factory를 SSL Factory로 변경하여야 한다. 이를 하기 위해서 SocketFactory 속성을 mx4j.adaptor.http.ssl.SSLFactory객체에 전달하여야 한다. SSLFactory는 방금전에 당신의 keystore와 key로 설정되어야 한다.이후, HttpAdaptor를 실행하고, http://host:port대신에 https://host:port를 사용한다.
SSLFactory는 인증서 keystore를 찾기위한 몇가지 파라미터를 포함한다. 이들은 SSLFactory 관리 인터페이스에 있다.
HttpAdaptor를 사용하려면, MBean을 인스턴스화해야 하며, 서버에 등록해야 한다. 그 후 원하는 파라미터를 설정하고, operation을 초기화 하기위해서 start를 invoke한다. 주의할 것은 xerces와 같은 JAXP-호환 파서를 CLASSPATH에 추가해야 한다. XSLTAdaptor를 사용하려면, xalan.jar를 CLASSPATH에 추가해야 한다. SSL를 사용하려면, JSSE jar파일들을 추가해야 한다.
예 3.1. HttpAdaptor 초기화 하기
import mx4j.adapter.http.HttpAdaptor; MBeanServer server = ...; HttpAdaptor adapter = new HttpAdaptor(); ObjectName name = new ObjectName("Server:name=HttpAdaptor"); server.registerMBean(adapter, name); adapter.setPort(XXX); adapter.setHost("XXX"); adapter.start(); or... server.createMBean("mx4j.adaptor.http.HttpAdaptor", name, null); server.setAttribute(name, new Attribute("Port", new Integer(XXX))); server.setAttribute(name, new Attribute("Host", "XXX")); server.invoke(name, "start", null, null);
기본이외의 프로세서를 사용하려면, 다음과 초기화하고 설치해야 한다.
예 3.2. 기본외 프로세서 설치
MBeanServer server = ...; ObjectName name = new ObjectName("Server:name=HttpAdaptor"); ObjectName processorName = new ObjectName("Server:name=XSLTProcessor"); server.createMBean("mx4j.adaptor.http.HttpAdaptor", name, null); server.createMBean("mx4j.adaptor.http.XSLTProcessor", processorName, null); server.setAttribute(name, new Attribute("ProcessorName", processorName));
HttpAdaptor는 요청을 해석하고 어떤 동작을 실행하는 일을 한다. Adaptor는 사용가능한 요청의 리스트를 가지고 있고, XML 결과(혹은 예외 등..) 트리를 만든다. 새로운 request 처리기(handler)는 mx4j.adaptor.http.HttpCommandProcessor를 구현을 만들어 추가하고, HttpAdaptor에 추가하여 사용할 수 있다. 그러나, 이것은 일반 사용자에 의해 일반적으로 될 수 있는 것은 아니다.
다음이 현재 사용가능한 요청(request)와 결과, 필요한 파라미터의 목록이다.
http://host:port/serverbydomain도메인 그룹별로 사용가능한 MBean의 리스트를 반환한다. 결과 트리는 다음과 같다.
<Server> <Domain name="Http"> <MBean classname="mx4j.adaptor.http.HttpAdaptor" description="HttpAdaptor MBean" objectname="Http:name=HttpAdaptor"></MBean> <MBean classname="mx4j.adaptor.http.XSLTProcessor" description="XSLT Processor" objectname="Http:name=XSLTProcessor"></MBean> </Domain> <Domain name="JMImplementation"> <MBean classname="javax.management.MBeanServerDelegate" description="" objectname="JMImplementation:type=MBeanServerDelegate"></MBean> </Domain><Domain name="Test"> </Server>
request는 다음 파라미터를 받아들일(accept) 수 있다 :
http://host:port/server는 서버에 있는 모든 MBean들의 리스트를 반환한다. 결과트리는 다음과 같다:
<Server> <MBean objectname="Http:name=HttpAdaptor"></MBean> <MBean objectname="Http:name=XSLTProcessor"></MBean> <MBean objectname="JMImplementation:type=MBeanServerDelegate"></MBean> </Server>
이 request는 다음의 파라미터를 처리할 수 있다:
http://host:port/mbean?objectname=XXX http://host:port/mbean?objectname=Test:name=test1 참고하는 MBean의 설명을 반환한다. request에 대상 objectname이 전달되어야만 한다. request ~ 에 대한 결과는 다음과 같다.
<MBean classname="test.mx4j.adaptor.http.HttpAdaptorXMLTest$TestClass" description="" objectname="Test:name=test1"> <Attribute availability="RO" description="" name="Double" type="java.lang.Double" value="0.0"/> <Attribute availability="RW" description="" name="Str" type="java.lang.String" value="t1"/> <Attribute availability="RO" description="" name="True" type="boolean" value="true"/> <Constructor description="" name="test.mx4j.adaptor.http.HttpAdaptorXMLTest$TestClass"> <Parameter description="" id="0" name="" type="java.lang.String"/> </Constructor> <Operation description="" impact="unknown" name="aMethod" return="java.lang.Boolean"> <Parameter description="" id="0" name="" type="java.lang.String"> </Parameter> </Operation> <Operation description="" impact="unknown" name="anotherMethod" return="void"> <Parameter description="" id="0" name="" type="java.lang.String"></Parameter> <Parameter description="" id="1" name="" type="int"></Parameter> </Operation> <Notification description="test" name="name"> <Type name="test1"></Type> <Type name="test2"></Type> </Notification> </MBean>
request다음과 같은 추가 파라미터를 수용할 수 있다 :
http://host:port/setattribute?objectname=XXX&attribute=XXX&value=XXX Sets the value of an attribute. This is an operation request attribute의 값을 설정한다. 이 request는 데이터 요청이 아니라, 동작 요청이다. 모든 operation request는 아래와 같이 MBeanOperation 트리로 반환된다.
<MBeanOperation> <Operation objectname="Test:name=test1" operation="setattribute" result="success"/> </MBeanOperation>오류가 있다면 다음과 같이 표시된다.
<MBeanOperation> <Operation errorMsg="Attribute Number not found" objectname="Test:name=test1" operation="setattribute" result="error"/> </MBeanOperation>
request는 다음과 같은 파라미터를 필요로 한다.
http://host:port/invoke?objectname=XXX&operation=XXX&type0=XXX&value0=XXX... 대상 MBean의 operation을 invoke한다.
<MBeanOperation> <Operation objectname="Test:name=test1" operation="invoke" result="success" return="true"/> </MBeanOperation>
다음 파라미터들이 필요하다 :
http://host:port/delete?objectname=XXX 대상 MBean을 제거함
<MBeanOperation> <Operation objectname="Test:name=test1" operation="delete" result="success"/> </MBeanOperation>
다음 파라미터가 필요함 :
http://host:port/create?class=XXX&objectname=XXX&type0=XXX&value0=XXX... 해당되는 생성자를 invoke(호출)하여 대상 MBean을 생성한다.
<MBeanOperation> <Operation objectname="Test:name=test1" operation="invoke" result="success" return="true"/> </MBeanOperation>
다음 파라미터가 필요함 :
http://host:port/constructors?classname=mx4j.adaptor.http.HttpAdaptor 클래스에 대한 사용가능한 생성자를 MBean 서버에 쿼리한 결과는 다음과 같다.
<Class classname="mx4j.adaptor.http.HttpAdaptor"> <Constructor name="mx4j.adaptor.http.HttpAdaptor"> <Parameters ...> </Parameters> </Constructor> </Class>
다음 파라미터가 필요함 :