달력

072018  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  Enterprise Java Technologies Tech Tip에 오신 여러분을 환영합니다
Enterprise Java Technologies
테크팁
2006년 5월 4일자
  이번 호에서는,

» EJB 3.0을 이용하여 웹 서비스 개발하기
» 커스텀 빈을 이용하여 GlassFish 관리 시스템 확장하기

에 대해 다룹니다.

이 팁들은 Java EE 5의 오픈소스 구현(GlassFish)을 이용하여 개발되었으며, GlassFish 프로젝트 페이지에서 GlassFish를 다운로드 받으실 수 있습니다.

-샘플 아카이브 다운로드 받기-
EJB 3.0을 이용하여 웹 서비스 개발하기
커스텀 빈을 이용하여 GlassFish 관리 시스템 확장하기

EJB 3.0을 이용하여 웹 서비스 개발하기
 

Java EE, JSR 109를 위한 웹 서비스 명세에서는 웹 서비스를 구현하는 두 가지 방법을 정의한다. 그 중 한 가지 방법은 자바 클래스 프로그래밍 모델에 기초한 것으로, 웹 서비스가 웹 컨테이너에서 실행되는 자바 클래스에 의해 구현된다. 또 다른 방법은 EJB(Enterprise JavaBeans) 프로그래밍 모델에 기초한 것으로, 웹 서비스가 EJB 컨테이너에서 실행되는 stateless 세션 빈으로 구현된다. 이전의 테크 팁 JAX-WS를 이용한 웹 서비스 개발에서는 자바 클래스 프로그래밍 모델과 JAX-WS(Java API for XML Web Services) 2.0, JSR 224를 이용하여 웹 서비스를 개발하는 방법에 대해 알아보았다. 이번 팁에서는 JAX-WS와 EJB 프로그래밍 모델을 이용하여 웹 서비스를 개발하는 방법을 배우게 될 것인데, 특히 EJB 3.0 stateless 세션 빈을 이용하여 Calculator 서비스(이전 테크 팁에서 다룬 것과 동일한 Calculator 서비스)를 구현하는 방법에 대해 자세히 살펴보도록 하자.

본 팁에는 예제 패키지가 포함되어 있고, 이 예제에는 EJB 3.0 기반의 Calculator 서비스에 액세스하는 독립형 자바 클라이언트가 설명되어 있다. 또한 여기에는 GlassFish라고 불리는 Java EE 5의 오픈 소스 레퍼런스 구현이 사용되었다. GlassFish는 GlassFish 커뮤니티 다운로드 페이지에서 다운로드할 수 있다.

EJB 3.0 Stateless 세션 빈 클래스 작성하기

우선 서비스를 위한 stateless 세션 빈을 작성하는 것부터 시작해보자. Java EE 5 플랫폼에서 크게 개선된 내용 중 하나로 대폭 단순해진 EJB 프로그래밍 모델을 들 수 있는데, 이는 Enterprise JavaBeans 3.0 Specification, JSR-220에 정의되어 있다. 단순화된 기능 중 한 가지를 예로 들면, 빈 구현 클래스가 더 이상 javax.ejb.SessionBean 또는 javax.ejb.EntityBean 인터페이스를 구현하도록 요구하지 않는다는 것이다. 단순히 클래스에 주석을 달기만 하면 클래스를 세션 빈이나 엔티티 빈으로 선언할 수 있는데, 실례로 클래스에 @Stateless 주석을 달면 클래스를 stateless 세션 빈으로 선언할 수 있다.

EJB 3.0은 다음과 같이 빈 구현 클래스를 위한 추가 규칙을 명시한다.

  • 클래스는 반드시 public으로 선언되어야 하며 어떤 인자도 받지 않는 기본값 생성자(constructor)를 가져야 한다.

  • 클래스는 절대로 final 또는 abstract여서는 안 되며 반드시 톱 레벨 클래스여야 한다.

  • 클래스는 finalize() 메소드를 정의해서는 안 된다.

EJB 3.0에서 단순화된 또 한 가지 내용은 세션 빈을 위한 컴포넌트 인터페이스 또는 홈 인터페이스가 더 이상 요구되지 않는다는 점이다. 세션 빈이 필요로 하는 한 가지 인터페이스는 빈의 비즈니스 메소드를 정의하는 비즈니스 인터페이스이다. 비즈니스 인터페이스의 비즈니스 메소드는 컴포넌트 인터페이스의 비즈니스 메소드와 달리 java.remote.RemoteException을 throw할 필요가 없지만 비즈니스 메소드는 임의의 애플리케이션 예외와 관련하여 throws 절을 정의할 수 있다. 또한 EJB 3.0 비즈니스 메소드는 staticfinal이 될 수 없다.

이러한 단순화와 규칙을 전제로 하여, EJB 3.0 프로그래밍 모델을 따르는 Calculator 클래스의 stateless 세션 빈에 대해 알아보자(Calculator 클래스의 소스 코드는 설치된 예제 패키지의 엔드포인트 디렉토리에 들어 있음).

package endpoint; import javax.ejb.Stateless; @Stateless public class Calculator { public Calculator() {} public int add(int i, int j) { int k = i +j ; System.out.println(i + "+" + j +" = " + k); return k; } }

EJB 3.0 빈은 javax.ejb.SessionBean 인터페이스를 구현할 필요가 없기 때문에 더 이상 ejbActivateejbPassivate와 같은 비구현 라이프사이클 메소드를 포함시킬 필요가 없다. 따라서 훨씬 단순하고 완벽한 클래스가 생성된다. EJB 3.0에 정의된 다양한 주석들은 컴포넌트를 위한 배치 기술자 작성의 필요성을 줄이거나 없애줌으로써 개발자 및 배치자의 부담을 상당히 덜어준다.

EJB 3.0 빈을 웹 서비스로 표시하기

빈을 웹 서비스로 만들려면 간단히 클래스에 @WebService 주석을 달면 된다. 이것은 javax.jws.WebService 패키지에 정의된 주석 타입으로, Java Platform, JSR 181을 위한 웹 서비스 메타데이터에 지정되어 있다. 다음은 웹 서비스로 표시된 Calculator 클래스 코드이다.

package endpoint; import javax.ejb.Stateless; import javax.jws.WebService; @Stateless @WebService public class Calculator { public Calculator() {} public int add(int i, int j) { int k = i +j ; System.out.println(i + "+" + j +" = " + k); return k; } }

자바 클래스를 @WebService 주석으로 표시하면 서비스 구현 클래스가 된다. 단, 서비스 엔드포인트 인터페이스를 구현할 필요가 없다는 점에 유의할 것. JSR 109에 따르면, javax.jws.WebService 주석이 첨부된 서비스 구현 빈을 제공하기만 하면 된다. 그런 다음 배치 툴을 이용해서 자바 WSDL 매핑을 위한 JAX-WS 규칙을 적용함으로써 서비스 엔드포인트 인터페이스는 물론, WSDL 문서까지 생성할 수 있다.

웹 서비스 패키지하기

EJB 프로그래밍 모델에 기초한 웹 서비스는 JAR 파일로 패키지되어야 하는데, 즉 @WebService 주석을 이용하여 서비스 구현 빈 클래스(독립 클래스가 있을 경우에는 이와 함께)와 서비스 엔드포인트 인터페이스 클래스(명시적으로 제공될 경우)를 패키지하기만 하면 된다. 이 외에도, @Stateless 주석은 ejb-jar.xml을 패키지해야 하는 수고를 덜어주기도 한다. 이와 대조적으로, EJB 2.0이나 이전 버전에 기초한 웹 서비스를 JAX-RPC 방식으로 패키지하는 경우에는 사용자가 서비스 엔드포인트 인터페이스 클래스, 서비스 구현 빈 클래스(및 독립 클래스), 생성된 portable artifacts, JAX-RPC 매핑 파일, 웹 서비스 배치 기술자(webservices.xmlejb-jar.xml) 등을 제공해야만 했다.

JSR 224, JSR 109, JSR 181 및 JSR 220의 경우, 애플리케이션 서버 배치 툴을 이용하여 웹 서비스 배치를 위한 배치 기술자(사용자가 명시적으로 제공하지 않은 경우)를 비롯하여 필요한 모든 artifacts를 생성할 수 있다. EJB JAR 파일에 번들로 포함된 이 artifacts는 EJB 컨테이너에 배치된다. 배치자는 전술한 artifacts를 명시적으로 제공하고 배치 시 이를 EJB 모듈에 패키지함으로써 @WebService@Stateless 주석에 의해 지정된 값들을 오버라이트할 수 있다. 본 팁의 경우에는 다음 파일들이 배치될 EJB 모듈에 패키지되어 있다.

endpoint/Calculator.class endpoint/jaxws/Add.class endpoint/jaxws/AddResponse.class

나머지 배치 artifacts는 애플리케이션 서버(이 경우 GlassFish)에 의해 생성된다.

클라이언트 작성하기

웹 서비스를 배치한 후에는 클라이언트 프로그램으로 액세스가 가능한데, 클라이언트는 @WebServiceRef 주석을 이용하여 EJB 3.0 기반의 웹 서비스에 레퍼런스를 선언한다. @WebServiceRef 주석은 javax.xml.ws 패키지에 포함되어 있으며, Java Platform, JSR 181을 위한 JAX-WS 2.0 웹 서비스 메타데이터에 지정되어 있다. 본 팁에 사용된 클라이언트 프로그램 JAXWSClient의 소스 코드를 살펴보면(JAXWSClient의 소스 코드는 설치된 예제 패키지의 client 디렉토리에 들어 있음), 다음과 같은 내용을 확인할 수 있다.

@WebServiceRef(wsdlLocation= "http://localhost:8080/CalculatorService/Calculator?WSDL") static endpoint.CalculatorService service;

@WebServiceRef 내의 wsdlLocation 파라미터의 값은 일종의 URL로, 레퍼런스된 서비스의 WSDL 파일의 위치를 나타낸다. (@WebServiceRef 주석은 옵션으로 제공되는 추가 속성을 지원하며, 이 옵션 속성은 JAX-WS 2.0 스펙의 섹션 7.9에 지정되어 있다.) service로 명명된 정적 변수는 애플리케이션 클라이언트 컨테이너에 의해 인젝트된다.

JAXWSClient의 소스 코드를 좀더 살펴보면 다음과 같은 내용을 확인할 수 있다.

endpoint.Calculator port = service.getCalculatorPort();

service 오브젝트는 웹 서비스의 Calculator 포트에 액세스하기 위한 getCalculatorPort 메소드를 제공한다. 단, endpoint.CalculatorServiceendpoint.Calculator 모두 wsimport 유틸리티를 이용하여 생성되는 portable artifacts라는 점에 유의할 것. wsimport 유틸리티는 JAX-WS artifacts 생성에 사용되는데, 예제 프로그램 실행 시 클라이언트 구축을 위해 호출된다.

포트를 획득한 후에는 오브젝트 상에서 자바 메소드를 호출하는 것처럼 포트 상에서 비즈니스 메소드를 호출할 수 있다. 예를 들어, JAXWSClient의 다음 행은 Calculator의 add 메소드를 호출한다.

int ret = port.add(i, 10);

예제 코드 실행하기

본 테크팁에는 예제 패키지가 포함되어 있으며, 예제 패키지에서는 테크팁에서 다룬 기법을 예시한다. 예제를 설치하고 실행하려면 다음의 작업 절차를 따르도록 한다.

  1. GlassFish를 아직 구하지 못했다면 GlassFish 커뮤니티 다운로드 페이지에서 다운로드한다.

  2. 그런 다음 아래의 환경 변수를 설정한다.

    GLASSFISH_HOME: GlassFish의 설치 장소(가령 C:\Sun\AppServer)을 표시해야 한다.

    ANT_HOME: ant의 설치 장소를 표시해야 한다. ant는 다운로드한 GlassFish 번들에 포함되어 있다. (Windows에서는 lib\ant 서브디렉토리에 위치함)

    JAVA_HOME: 사용자 시스템에서의 JDK 5.0 위치를 표시해야 한다.

    아울러, ant 위치를 각자의 PATH 환경 변수에 추가한다.

  3. 해당 테크팁의 예제 패키지를 다운로드하여 압축을 푼다. 이 때, 새로 압축이 풀린 디렉토리는 <sample_install_dir>/ttmar2006ejb-ws로 표시되어야 하는데, 여기서 <sample_install_dir>은 예제 패키지가 설치된 디렉토리이다. 예를 들어, Windows의 C:\에 압축을 해제했다면 새로 생성된 디렉토리는 C:\ttmar2006ejb-ws가 되어야 한다. ttmar2006ejb-ws 아래의 ejb-techtip 디렉토리에는 예제를 위한 소스 파일과 기타 지원 파일이 포함되어 있다.

  4. ejb-techtip 디렉토리로 이동하여 build.properties 파일을 적절히 편집해야 하는데, 예를 들어 admin 호스트가 원격인 경우에는 admin.host의 기본값(localhost)을 해당 원격 호스트로 변경하면 된다.

  5. 다음 명령어를 입력하여 GlassFish를 시작한다.

    <GF_install_dir>/bin/asadmin start-domain domain1

    이 때, <GF_install_dir>은 GlassFish가 설치된 디렉토리를 나타낸다.

  6. ejb-techtip 디렉토리에서 다음 명령어를 실행한다.

    ant build

    빌드 디렉토리가 생성되고 클래스가 컴파일된 다음, 컴파일된 클래스가 빌드 디렉토리로 들어간다. 또한 아카이브 디렉토리와 JAR 파일이 생성되고, JAR 파일이 아카이브 디렉토리로 들어간다.

    ant deploy

    이 명령어는 JAR 파일을 GlassFish 상에 배치한다.

    ant build-client

    이 명령어는 portable artifacts를 생성하고 클라이언트 소스 코드를 컴파일한다.

    ant run

    이 명령어는 애플리케이션 클라이언트를 실행하고 Calculator 서비스에서 add 연산을 10회 호출하여 0에서 9까지의 숫자에 10을 추가한다. 이 때, 다음과 같은 내용이 표시되어야 한다.

    실행:

    [echo] Executing appclient with client class as client.JAXWSClient [exec] Retrieving port from the service endpoint.CalculatorService@159780d [exec] Invoking add operation on the calculator port [exec] Adding : 0 + 10 = 10 [exec] Adding : 1 + 10 = 11 [exec] Adding : 2 + 10 = 12 [exec] Adding : 3 + 10 = 13 [exec] Adding : 4 + 10 = 14 [exec] Adding : 5 + 10 = 15 [exec] Adding : 6 + 10 = 16 [exec] Adding : 7 + 10 = 17 [exec] Adding : 8 + 10 = 18 [exec] Adding : 9 + 10 = 19
  7. GlassFish에서 EJB 모듈을 배치 해제하려면 다음 명령어를 실행한다.

    ant undeploy

저자 소개

Manisha Umbarje는 Sun Java System Application Server의 제품 엔지니어링 그룹 소속임.

맨위로

커스텀 빈을 이용하여 GlassFish 관리 시스템 확장하기
 

J2SE(Java 2 Platform, Standard Edition) 5.0에서 크게 개선된 부분으로 모니터링과 관리 기능을 들 수 있으며, J2SE 5.0에 도입된 주요 특징에는 instrumented JVM(Java Virtual Machine)과 JVM을 모니터하고 감시하기 위한 java.lang.management API가 포함된다. 또한 API는 메모리 이용률, 스레드 상태, 클래스 로딩 활동, 가비지 컬렉션 전략 등을 비롯하여 다양한 JVM 관련 정보에 대한 로컬 및 원격 액세스를 가능하게 해준다. 이와 같이 강화된 통합 관리 및 모니터링 지원 기능은 J2SE 5.0 기반의 어떠한 관리 애플리케이션에서도 이용이 가능하다.

GlassFish와 MBeans

이런 기능을 활용하는 툴 중 하나가 바로 Java EE 5의 오픈 소스 애플리케이션 서버 구현인 GlassFish인데, GlassFish 애플리케이션 서버는 자체의 관리 인프라 내에서 J2SE 5.0 기반의 강화된 모니터링 및 관리 기능을 모두 활용한다. 또한 여기에는 플랫폼 MBean 서버를 이용하여 애플리케이션 서버 MBeans를 등록하는 기능도 포함되어 있다. Management Beans(일명 "MBeans")는 JMX(Java Management Extensions) 스펙에 준한 디자인 패턴을 따르는 자바 오브젝트로, 리소스를 공급하는 데 이용된다. 본 팁은 사용자가 JMX에 대한 기본 지식을 이미 가지고 있는 것으로 가정한다. JMX에 관한 개요를 보려면 테크팁 JMX 기술 이해하기를 참조할 것.

J2SE 5.0에 함께 도입된 플랫폼 MBean 서버는 JVM에 내장된 JMX 기반 에이전트로, 관리 애플리케이션이 MBeans에 액세스할 수 있게 해준다. 이 에이전트는 JVM에서 실행되는 모든 매니지드 컴포넌트에 의해 공유될 수 있다. GlassFish는 플랫폼 MBean 서버를 통해 시스템과 애플리케이션별로 MBeans에 대한 종합적이고 통합된 모니터링 및 관리 뷰를 제공할 수 있으며, J2SE 5.0 이전에 요구되었던 것처럼 자체 에이전트의 인스턴스를 생성하는 대신 이 내장 에이전트를 이용할 수 있다. 애플리케이션 서버 MBeans는 플랫폼 MBean 서버 리포지토리에 등록되기 때문에, 자바 모니터링 및 관리 콘솔(JConsole)과 같은 툴은 애플리케이션 서버 MBeans에 의해 제공되는 모든 리소스에 관한 정보를 디스플레이할 수 있다.

GlassFish와 커스텀 MBeans

사용자는 자체 커스텀 MBeans를 생성하여 등록함으로써 GlassFish의 관리 기능을 확장할 수 있다. 커스텀 MBeans는 모니터링 및 관리 기능의 동적 인젝션을 가능케 해줄 뿐 아니라 instrumented 커스텀 MBean 속성을 지속시켜 줌으로써 애플리케이션 서버를 재시작해야 할 경우에라도 활성 상태를 그대로 유지할 수 있게 한다. 커스텀 MBeans의 유용성을 엿볼 수 있는 한 가지 예가 바로 GlassFish의 자체 관리 프레임워크인데, 이는 규칙 기반의 이벤트 관리 시스템으로, 사용자는 커스텀 MBeans로 구현되는 커스텀 액션을 시스템 관리 규칙에 추가할 수 있다.

예제: 모니터링 및 관리 기능 확장하기

본 팁에서는 커스텀 MBeans를 이용하여 GlassFish의 모니터링 및 관리 기능을 확장하는 예제를 제시하고, 이 예제를 통해 웹 서비스로부터 정기적으로 획득하는 데이터를 처리하는 Java EE 애플리케이션을 확장해 보도록 한다. 또한 관리 확장을 위해 모니터 대상 이벤트, 그리고 그 이벤트에 대한 응답으로 애플리케이션이 취할 액션을 추가하도록 한다.

이벤트는 이메일 주소 목록을 업데이트하는 것이고, 액션은 업데이트된 이메일 주소 목록으로 이메일을 전송하는 것이다. 이 시나리오에서, 웹 서비스의 클라이언트이기도 한 커스텀 MBean은 웹 서비스를 폴링한 후에 이메일 주소 목록을 업데이트한다. 하지만, 이 예제에서는 단순화를 위해서 이메일 주소의 문자열이 커스텀 MBean의 속성으로 되어 있다. 사용자는 JConsole을 이용하여 직접 목록을 수정하고, 속성이 수정되면 리스닝 커스텀 MBean에 통지가 이루어진다. 그런 다음 리스닝 커스텀 MBean이 업데이트된 이메일 주소 목록(즉, 업데이트된 속성의 값)에 이메일을 전송하여 이벤트를 처리한다.

본 테크팁에는 예제 아카이브가 포함되어 있으며, 여기에는 예제를 위한 소스 코드, 그리고 컴파일된 클래스를 비롯하여 예제에서 사용되는 클래스를 위한 javadoc이 함께 포함되어 있다.

1단계: 셋업

초기 설정 작업부터 시작해보자. GlassFish를 아직 구하지 못했다면 GlassFish 다운로드 페이지에서 다운로드한 다음 아래의 환경변수를 설정한다.

  • GLASSFISH_HOME. GlassFish의 설치 장소(가령 C:\Sun\AppServer)을 표시해야 한다.

  • JAVA_HOME. 사용자 시스템에서의 JDK 5.0 위치를 표시해야 한다.

2단계: GlassFish 시작하기

다음 명령어를 입력하여 GlassFish를 시작한다.

<GF_install_dir>/bin/asadmin start-domain domain1

이 때, <GF_install_dir>은 GlassFish가 설치된 디렉토리를 나타낸다.

3단계: 예제 아키이브 다운로드하기

해당 팁의 예제 아카이브를 다운로드하여 압축을 푼다.

jar xvf ttmar2006custmbean.jar

압축을 풀고 나면 META-INF, techtip 및 javadoc 디렉토리가 표시되어야 한다. techtip 디렉토리에는 예제용 소스 코드, 그리고 컴파일된 클래스가 포함되어 있다.

4단계: 커스텀 MBeans 생성하기

본 예제에서는 2개의 커스텀 MBeans--이벤트 소스용과 이벤트 청취용(이벤트 "싱크")--를 사용한다. 이 2개의 MBeans를 위한 소스 코드는 techtip/src 디렉토리에 들어 있다.

커스텀 MBean은 MBean 인터페이스와 MBean 구현 클래스를 필요로 하는데, 이벤트 소스용 커스텀 MBean 인터페이스는 EventSourceCustomMBean이며, 그 구현 클래스는 EventSourceCustom이다. 그리고 이벤트 싱크를 위한 커스텀 MBean 인터페이스는 EventSinkCustomMBean이며, 그 구현 클래스는 EventSinkCustom이다.

커스텀 MBeans를 위한 소스 파일을 생성한 후에는 파일들을 com.example.mbeans 패키지 구조에 컴파일할 수 있다(이는 옵션사항이며, 컴파일된 클래스는 예제 아카이브에 포함되어 있음). 파일을 컴파일하려면 다음을 입력한다.

javac -d . EventSourceCustom.java EventSourceCustomMBean.java javac -d . EventSinkCustom.java EventSinkCustomMBean.java

EventSinkCustom 클래스를 컴파일할 때는 각 사용자의 클래스패스에 mail.jaractivation.jar 파일이 들어 있는지 확인해야 한다.

5단계: 커스텀 MBean 클래스 복사하기

com/example/mbeans 디렉토리와 그 내용을 MBean 클래스로더 디렉토리에 복사한다. MBean 클래스로더 디렉토리는 <domain>/applications/mbeans이고, 이 때 <domain>은 애플리케이션이 배치된 도메인을 나타낸다. 본 예제에서는 애플리케이션이 기본값 GlassFish 도메인인 domain1에 배치된 것으로 가정한다. 따라서 com/example/mbeans 디렉토리와 그 내용을 <GF_install_dir>/glassfish/domains/domain1/applications/mbeans에 복사한다. 그러면 /com/example/mbeans 디렉토리가 생성되고 커스텀 MBean 클래스와 인터페이스가 <GF_install_dir>/glassfish/domains/domain1/applications/mbeans에 복사된다.

6단계: 이벤트 소스 커스텀 MBean 배치하기

다음과 같이 이벤트 소스 커스텀 MBean, EventSourceCustom을 배치한다(명령어는 한 행에 입력해야 한다).

<GF_install_dir>/bin/asadmin create-mbean --user admin --passwordfile password.txt --port 4848 com.example.mbeans.EventSourceCustom

플랫폼 MBean 서버에 EventSourceCustom이 등록된다.

다음 명령어를 이용하여 커스텀 MBean이 배치되었는지 확인할 수 있다(명령어는 한 행에 입력해야 한다).

<GF_install_dir>/bin/asadmin list-mbeans --user admin --passwordfile password.txt

다음과 같은 내용이 표시되어야 한다.

com.example.mbeans.EventSourceCustom user:impl-class-name=com.example.mbeans.EventSourceCustom, name=com.example.mbeans.EventSourceCustom Enabled Command list-mbeans executed successfully.

7단계: 이벤트 싱크 커스텀 MBean 배치하기

다음과 같이 이벤트 싱크 커스텀 MBean, EventSinkCustom을 배치한다(명령어는 한 행에 입력해야 한다).

<GF_install_dir>/bin/asadmin create-mbean --user admin --passwordfile password.txt --port 4848 --objectname "user:impl-class-name=com.example.mbeans.EventSinkCustom, name= custom-event-sink" --attributesHostName=<yourmailserver>:Id=<yourId>: Password=<yourpw> com.example.mbeans.EventSinkCustom

단, 명령어의 HostName, Id, Password 등의 파라미터에 유의할 것. 메일 서버에 접속하려면 이 파라미터들이 지정되어야 한다. 파라미터는 커스텀 MBean의 속성이다. <yourmailserver>는 각자의 메일 서버 이름으로, <yourId>는 각자의 ID로, <yourpw>는 각자의 비밀번호로 대체한다.

앞에서 언급한 것처럼, instrumented 커스텀 MBean 속성을 지속시켜 줌으로써 애플리케이션 서버를 재시작해야 할 경우에라도 활성 상태를 그대로 유지할 수 있다. 따라서, 명령어의 파라미터를 지정하면 커스텀 MBean의 런타임 파라미터가 구성된다. 하지만 MBean이 생성된 후에는 서버가 재시작하더라도 파라미터는 기존의 상태를 지속하게 된다.

이번에도 다음 명령어를 이용하여 커스텀 MBean이 배치되었는지 확인할 수 있다(명령어는 한 행에 입력해야 한다).

<GF_install_dir>/bin/asadmin list-mbeans --user admin --passwordfile password.txt

다음과 같은 내용이 표시되어야 한다.

com.example.mbeans.EventSourceCustom user:impl-class-name=com.example.mbeans.EventSourceCustom, name=com.example.mbeans.EventSourceCustom Enabled com.example.mbeans.EventSinkCustom user:impl-class-name=com.example.mbeans.Event SinkCustom, name=custom-event-sink Enabled Command list-mbeans executed successfully.

8단계: 이메일 목록 업데이트하기

본 예제에서는 JConsole을 이용하여 이메일 주소의 문자열이 포함된 커스텀 MBean의 속성을 업데이트한다.

다음 명령어를 입력하여 JConsole을 시작한다.

<JAVA_HOME>/bin/jconsole

JConsole를 시작하면 Local/Remote/Advanced JMX 접속 탭이 있는 접속 대화상자가 표시되어야 한다. Remote 탭을 클릭하고 해당 호스트(localhost), 포트(GlassFish의 JMX 접속 서버는 포트 8686에서 청취), 사용자 이름(admin), 비밀번호(adminadmin) 등의 값을 입력한다.

Remote 탭의 디스플레이에서 Connect 버튼을 클릭하면 RMI 커넥터를 통해 플랫폼 MBean 서버로의 접속이 이루어진다. 이어지는 Connection 창에서 MBeans 탭을 클릭하고, 창의 왼쪽 구획에 위치한 MBean 트리에서 사용자 브랜치를 확장한다. com.example.mbeans.EventSourceCustom 아래에 서버 엔트리가 표시될 때까지 사용자 브랜치의 하위 브랜치들을 계속 확장하고, 서버 엔트리를 클릭한다. 이제 창의 오른쪽 패널에 있는 Infor 탭에 MBean에 관한 정보가 표시되어야 한다.

창의 오른쪽 패널에 있는 Attributes 탭을 클릭한 다음 EmailRecipientsString 속성을 위한 값 필드에 각자의 이메일 주소를 입력한다.

EmailRecipientsString 속성을 변경하면 이벤트 소스 커스텀 MBean이 통지를 발송하는데, 이 때 AttributeChangeNotification 클래스에 의해 정의되는 통지를 청취하고 이 속성의 새 값을 가져온다. 다음은 이 작업과 관련한 EventSinkCustom 내의 코드이다.

AttributeChangeNotification attrnotif = (AttributeChangeNotification) notif; String newEmailIdStr = (String)attrnotif.getNewValue();

이어서 이벤트 싱크 커스텀 MBean이 업데이트된 주소로 이메일을 전송한다.

9단계: 이메일 확인하기

리스닝 커스텀 MBean이 각자의 주소로 이메일을 전송했는지 확인하기 위해 우선 이메일을 살펴본다. 다음과 같은 메시지가 수신되어야 한다.

This message has been generated and sent as part of the Glassfish Techtip sample example execution

더 자세한 내용은 다음 사이트를 참조할 것.

저자 소개

Nandini Ektare는 썬 마이크로시스템즈의 썬 자바 시스템 애플리케이션 서버 개발 그룹 소속으로, JMX와 Java EE이 그녀의 주요 관심 분야이다.

Kedar Mhaswade는 썬 마이크로시스템즈의 스태프 엔지니어로, JSR 003: Java Management Extensions 전문가 그룹의 일원이다. 그의 주요 관심 분야로는 오픈소스 소프트웨어, JMX, Java EE 등이 있다.

맨위로

본 메일은 수신을 동의한 회원님에게만 발송됩니다.
본 메일의 수신을 거부하거나 수신주소를 변경하려면 SKDN@Sun.com으로 문의 주시기 바랍니다.

SKDN(Sun Korea Developers Network)에서 J2EE/J2SE 테크팁 등 다양한 아티클들을 참고하세요.

Copyright 2003-2006 Sun Korea, Ltd. All rights reserved.


Posted by Tornado tornado