Computer(IT)/JAVA

Getting started with OSGi : OSGi 시작하기 파트 1 - 당신의 첫번째 번들

약탄치킨 2008. 9. 29. 14:35
반응형

저자 : Neil Bartlett < njbartlett at gmail dot com >
역자 : 권 정혁 < guruguru at gmail dot com >

 

글원본 : http://www.eclipsezone.com/eclipse/forums/t90365.html - Getting started with OSGi : Your First Bundle

 

 

다음 1-2주간, EclipseZone 에서 OSGi 에 관한 짧은 시리즈 글들을 연재할 예정입니다. 이 글들이 모여서 OSGi 프로그래밍 기술을 마스터 하는 쉬운 경로를 만들어 줄 것입니다. 하지만 각각의 글들은 단 한 개의 새로운 기술만을 소개할 것이며, 약 10분이내에 살펴볼 수 있을 것입니다. 또한 우리는 OSGi 개발이 얼마나 쉬운지를 보여주고 싶으므로, 개발을 위해 Eclipse 를 사용하지 않고 텍스트 에디터와 기본 커맨드 라인 툴 만을 사용할 예정입니다. 자, "Getting started with OSGi" 시리즈에 온 것을 환영합니다.

기본 작업환경을 만들어야 하므로, 첫 번째 글은 다른 글에 비해 다소 길어질 예정입니다. 시작하기 전에, 실행하기 위한 OSGi 프레임워크를 필요로 합니다. 우리가 선택할 수 있는 세 개의 오픈소스 구현 들이 있습니다. Apache Felix , Knopflerfish, 그리고 Equinox. 어떤 것을 선택하든 우리가 작성할 코드는 똑같겠지만 실행방법은 다소 다를 수 있습니다. 여기가 EclipseZone 이므로, 우린 Equinox 를 사용할 것이며, Equinox 는 Eclipse 자체가 사용하는 런타임입니다. 설치된 Eclipse 가 있다면 거기서 복사하실 수 있습니다. org.eclipse.osgi_3.2.1.R32x_v20060919.jar 파일을 찾고 빈 디렉토리로 복사하세요. (NB : 버전 번호는 어떤 Eclipse 버전이 설치되어야 있느냐에 따라 약간 다를수 있습니다. ) 만약 Eclipse 설치본이 없다면, http://download.eclipse.org/eclipse/equinox/ 에서 Jar 파일을 다운로드 할 수 있습니다.

명령들을 짧게 하기 위해, 이 Jar 파일의 이름을 equinox.jar 로 변경합시다. 우리의 개발디렉토리에서 커맨드창을 열고 아래의 커맨드를 실행합니다.


> java -jar equinox.jar -console

몇 초안에, osgi> 프롬프트가 보일 것입니다. 축하합니다. 당신은 이제 OSGi 를 실행하셨습니다!

osgi> 프롬프트는 프레임워크를 컨트롤할 수 있도록 하는 Equinox 의 명령들을 실행할 수 있게 합니다. help 를 입력해서 명령 리스트를 보고, 그 중 몇 개와 놀아 보도록 하세요. 해보셨나요 ? 그럼 ss 를 입력해보세요. 이것은 가장 자주 사용하는 명령입니다. 이것은 "Short Status : 간략한 상태보기" 를 의미하며, 우리에게 설치된 번들의 리스트와 현재 어떤 상태인지를 보여줍니다. ( "번들:Bundle"은 OSGi 개념에서의 모듈입니다. 당신이 만약 Eclipse 개발자라면, 이것을 플러그인 이라고 알고 있을 수도 있습니다. 기본적으로 번들과 플러그인은 같은 것입니다. )

Equinox 는 다음과 같은 내용을 출력합니다.


Framework is launched.
 
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919

이것은 단 하나의 번들이 설치되어있고, 실행중인 상태(Active)이며 그것이 시스템 번들이라는 것을 알려줍니다. 이것은 OSGi 에서 특수한 번들이며 항상 존재하고, 프레임워크 자신을 나타냅니다.

자, 이제 우리의 번들을 작성해봅시다. 위와 같은 디렉토리에 HelloActivator.java 라는 파일을 만들고 아래의 코드를 그 파일에 복사하세요.

 

import org.osgi.framework.*;
 
public class HelloActivator implements BundleActivator {

  public void start(BundleContext context) {
    System.out.println("Hello EclipseZone Readers!");
  }
 
  public void stop(BundleContext context) {

    System.out.println("Goodbye EclipseZone Readers!");
  }
}

번들은 또한 자신의 다양한 메타데이터 정보(이름,버전과 같은)를 가지고 있는 Manifest 파일을 필요로 합니다. HelloWorld.mf 라는 파일을 만들고 아래의 텍스트를 그 파일에 복사하세요. 이 파일이 마지막에 꼭 한 개의 빈 줄을 가지도록 확인해 주세요, 그렇지 않으면 Jar 커맨드 라인툴이 이 파일을 잘라먹을 겁니다.(역자주 : 만약 번들 시작시에 Activator 가 이상하다는 에러가 난다면 아마 빈 줄을 넣는걸 빠트리신 걸 겁니다. )


Manifest-Version: 1.0
Bundle-Name: HelloWorld
Bundle-Activator: HelloActivator
Bundle-SymbolicName: HelloWorld
Bundle-Version: 1.0.0
Import-Package: org.osgi.framework


자 이제 새로운 커맨드 창을 열고 ( OSGi 가 실행하도록 내버려 두기 위함입니다. ) 다음 커맨드를 이용하여 Jar 파일을 만듭니다.


> javac -classpath equinox.jar HelloActivator.java
> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class

이제 OSGi 콘솔로 돌아가서, install file:HelloWorld.jar 라고 입력합니다. 결과는 "Bundle id is 1" 일겁니다. 다시 ss 를 입력하면 아래와 같은 내용을 보실 수 있습니다.


Framework is launched.
 
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919
1       INSTALLED   HelloWorld_1.0.0

우리의 HelloWorld 번들이 설치되었습니다만 아직 실행상태(Active)는 아니네요. 이 상태가 무엇을 의미하는지는 차후의 글에서 살펴보기로 하고, 여기선 그냥 start 1 을 입력해서 번들을 시작하도록 합니다. "1" 은 첫 번째 컬럼에 나와있는 번들의 ID 입니다. 이렇게 입력하면 "HelloEclipseZone Readers!" 라는 메시지를 보실 수 있을 것입니다. 다시 stop 1 을 입력하면 "Goodbye EclipseZone Readers!" 를 볼수 있습니다. 지겨울 때까지 반복해보세요. 때때로 ss 를 입력해서 번들의 상태가 바뀌는 것을 보는 것도 잊지 마시구요.

이 안에서 무슨 일이 일어난걸까요 ? 우리의 코드는 BundleActivator 인터페이스를 구현하고, 프레임워크에게 우리한테 중요한 LifeCycle 이벤트를 알릴 수 있도록 하였습니다. 번들이 시작되면, 프레임워크는 start 메소드를 호출하고, 번들이 멈출 때 stop 메소드를 호출하여 줍니다. 이런 일 들은 Manifest 파일에 있는 "Bundle-Activator: HelloActivator" 에 의해 가능해 집니다. 위 라인이 프레임워크에게 우리 번들 안의 어떤 클래스가 Activator 인지를 알려줍니다. 일반적으로 우리는 풀 클래스 이름을 적어주지만, 게을러서 그냥 디폴트 패키지명을 사용했습니다.

이것으로 우리의 첫 번째 글을 마칩니다. 다음에 뵙겠습니다.

(출처 : http://xguru.net/blog/443.html)


반응형