OSGi Extender Model 구현

  1. BundleActivator를 구현하는 Activator 클래스를 하나 만든다. 여기에 main 메소드를 구현하고, Felix 프레임웍 인스턴스를 생성한다. Auto-Start 시킬 것들이 있으면 AutoActivator.AUTO_START_PROP + ".순서번호" 설정에 우겨넣고 프레임웍 인스턴스 생성자에 Activator 목록을 넘길 때 AutoActivator를 같이 넘겨준다.
  2. BundleActivator 필수 요소인 start와 stop을 구현한다. start 메소드에서 실제적인 어플리케이션 초기화 및 시작이 이루어지도록 하면 된다. start 하는 중에 적절히 BundleTracker를 구현해서 넣을 필요가 있다.
  3. BundleTracker는 번들이 인스톨되고 언인스톨되는 이벤트를 추적하기 위한 것이다. 익스텐더 모델은 번들이 들어오고 나갈 때 자기가 직접 생명 주기 등 모든 자질구레한 삽질을 하겠다는 것이니, Bundle Tracker가 반드시 필요하다. Bundle Tracker 구현은 BundleContext.addBundleListener() 메소드를 호출해서 이벤트를 구독하는 것으로 완료된다. 물론 이미 시스템 패키지 등으로 프레임웍 기동 시에 기설치된 패키지는 그냥 BundleContext.getBundles() 메소드로 호출해서 처리하면 된다. 이벤트 구독 종료 시에는 당연히 BundleContext.removeBundleListener() 메소드다.
  4. 플러그인 인터페이스는 적절히 번들 매니페스트에 사용할 속성 문자열을 정의해주면 되겠다. 이걸 보고 확장 플러그인을 구현해 놓으면, Bundle Tracker에서 이벤트 받은 다음, 미리 정한 매니페스트 속성을 Bundle.getHeaders()로 꺼내어 확인한 다음, 특정 리소스나 클래스 등을 Bundle.getResource()나 Bundle.loadClass()로 로딩하면 된다.
크라켄 같은 경우는 이미 로그 메시지를 처리 중인 필터 체인으로부터 필터를 제거하려는 경우, 필터 체인에서 필터를 제거하고 번들을 내려야 한다. 기본으로 잘 만들어져 있는 서비스 모델을 그대로 쓰기는 어렵고 해서 extender model + hosted framework로 간다.
by xeraph | 2008/08/27 16:51 | 학술 | 트랙백 | 덧글(0)
트랙백 주소 : http://xeraph.com/tb/4576986
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글