동적 컨텐츠 관리
일반적으로 기능 Manifest 파일의 Subsystem-Content 헤더에 번들을 나열하여 번들을 런타임 환경에 설치합니다. 그러나 사용자 작성 기능의 Subsystem-Content의 일부로 사용자 작성 번들을 설치하여 OSGi 번들을 동적으로 추가 및 제거할 수도 있습니다. 사용자 작성 번들은 추가 번들을 설치 및 제어하기 위해 OSGi 번들 컨텍스트를 얻습니다.
Liberty에서 번들 설치, 시작, 중지 및 설치 제거
- 번들 설치
- FeatureBundleA를 작성하여 다음
메소드 중 하나를 사용하여 OSGi 번들 컨텍스트인
org.osgi.framework.BundleContext를 얻을 수 있습니다.
- BundleActivator 인터페이스인 org.osgi.framework.BundleActivator를 구현하십시오. 시작 메소드의 BundleContext 매개변수가 OSGi 프레임워크에 의해 전달되며, 이것은 해당 번들이 활성화될 때 사용자 작성 번들에 사용 가능합니다. BundleActivator 인터페이스에 대한 자세한 정보는 단순 활성화로 OSGi 번들 개발의 내용을 참조하십시오.
- OSGi 선언 서비스(DS) 또는 블루프린트 같이 다른 메소드나 인터페이스를 통해 번들 컨텍스트에 대한 액세스를 제공하는 사용 가능한 스펙을 구현하십시오. 자세한 정보는 text="OSGi 선언 서비스(DS)를 사용하여 고급 기능 작성" 및 블루프린트 번들을 참조하십시오.
FeatureBundleA가 번들 컨텍스트를 얻은 후, installBundle(String location) 또는 installBundle(String location, InputStream stream) 메소드를 사용하여 추가 번들을 설치할 수 있습니다.
동적으로 설치되는 번들은 기본 재시작 시에 상태를 재개합니다. 정리 시작 사이에 지속되지 않으며 재설치가 필요합니다. 자세한 내용은 번들 캐싱을 참조하십시오.
- 번들 시작
- 설치된 번들이 시작되기 원하는 경우, 번들의 start 메소드를 호출하는 것은 설치 번들인 FeatureBundleA의 책임입니다.
- 번들 중지 및 설치 제거
- 사용자 작성 기능인 UserFeatureA가 서버 구성에서 제거되는
경우 FeatureBundleA가 중지되고 설치 제거됩니다. FeatureBundleA의 설치 제거는 FeatureBundleA에 의해 설치된 모든 번들의 설치 제거를
트리거합니다(아직 설치 제거되지 않은 경우). org.osgi.framework.Bundle.uninstall() 메소드가 각
번들에 대해 호출되어 해당 번들을 중지하고 설치 제거합니다. 이 설치 제거 프로세스는
FeatureBundleA가 다른 수단에 의해 설치 제거되는
경우에도 적용됩니다.
서버가 중지될 때 UserFeatureA가 서버 구성에서 제거되는 경우, UserFeatureA에 의해 설치된 번들이 다음 서버 시작 시에 제거됩니다. 번들의 시작 레벨이 기본값에서 수정되지 않은 경우 번들은 다시 시작되기 전에 제거됩니다. 번들의 시작 레벨이 수정된 경우 다시 시작된 후에도 제거되지 않을 수 있습니다.
OSGi 코어 스펙에 따라서 org.osgi.framework.Bundle 및 org.osgi.framework.BundleContext 인터페이스를 사용하여 FeatureBundleA에 의해 기타 라이프사이클 관리 태스크가 수행됩니다.
Liberty에서 번들 캐싱, 패키지 가시성 및 프로그래밍 모델 지원
- 번들 캐싱
- 서버가 시스템 종료될 때, 모든 현재 설치된 번들이 중지되고 OSGi 메타데이터가 번들 캐시에 지속됩니다. 기본 시작 시에 이러한 설치된 번들이 이전 상태로 돌아갑니다. 정리 시작 시에 FeatureBundleA에 의해 설치된 모든 번들에서 지속적 데이터가 삭제됩니다. 결국 정리 시작 시에 이들 번들은 재개되지 않습니다. UserFeatureA가 아직 서버 구성에 있는 경우 FeatureBundleA 자체는 기능 관리자에 의해 재설치되기 때문에 재개됩니다. 정리 시작 후에 임의의 번들을 재설치하려는 경우 재설치를 수행하는 것은 FeatureBundleA의 책임입니다. 사용자에게 정리 시작을 알리지는 않지만, OSGi BundleContext getBundle(String location) 메소드를 사용하여 번들이 설치되었는지 여부를 확인할 수 있습니다.
- 패키지 가시성
- 동적으로 설치되고 기능 Manifest 파일의
Subsystem-Content 헤더에 나열되지 않는 번들은
다음 가시성을 갖습니다.
- 동적으로 설치된 번들은 현재 구성된 기능 세트가 제공하는 모든 API 및 SPI 패키지를 가져올 수 있습니다.
- API 또는 SPI로서 선언되지 않은 동일한 제품 확장 내에서 다른 번들에 의해 내보내지는 패키지는 동적으로 설치된 번들에 보이지 않습니다.
- 동적으로 설치된 번들로부터 내보내지는 패키지는 API 또는 SPI로서 선언될 수 없습니다.
- 동적으로 설치된 번들로부터 내보내지는 패키지 가져오기에 대한 제한사항은 없습니다.
- 프로그래밍 모델 지원
- 동적으로 설치된 번들은 적합한 런타임 기능이 해당 기능을 사용 가능으로 구성된 경우 OSGi 엔터프라이즈 스펙의 구현을 사용할 수 있습니다.