OSGi 애플리케이션 찾기
org.apache.aries.blueprint 패키지의 클래스를 사용하여 OSGi 애플리케이션 프로그래밍 모델을 확장할 수 있습니다. 이 써드파티 SPI는 blueprint-1.0 서버 기능을 통해 제공합니다. 확장기능을 적용하려면 OSGi 애플리케이션 번들에 액세스해야 합니다. Liberty 프로파일에서 OSGi 애플리케이션은 서브시스템으로 실행됩니다. OSGi 애플리케이션을 찾으려면 사용자 기능에서 ServiceTracker를 작성하면 됩니다.
이 태스크 정보
이 주제에서는 실행 중인 OSGi 애플리케이션을 찾을 수 있는 사용자 기능 개발자에 대해 설명합니다. 이 태스크는 종종 OSGi 애플리케이션에 프로그래밍 모델 확장기능을 제공하는 사용자 기능을 위해 필요합니다. 예를 들어, 새 사용자 기능은 흔히 컨테이너라고 하는 새 번들 익스텐더를 구현하거나, 더 간단히 일정한 OSGi 애플리케이션에서 공개된 서비스를 추적하고 호출하여 이러한 확장기능을 제공할 수 있습니다.
이러한 기능은 실행 중인 특정한 OSGi 애플리케이션의 BundleContext를 사용하여 새 BundleTracker 및 ServiceTracker 인스턴스를 작성해야 합니다. 이 BundleContext는 OSGi 애플리케이션과 연관된 org.osgi.service.subsystem.Subsystem에서 얻을 수 있습니다. 다음 프로시저는 SubSystem 서비스를 얻는 방법에 대해 설명합니다.
프로시저
사용자 기능에서 ServiceTracker를 작성하여 OSGi 애플리케이션을 찾으려면 다음 단계를 완료하십시오.
- 찾을 Subsystem을 대상으로 하는 org.osgi.framework.Filter를 구성하십시오.
- 1단계에서 필터를 사용하는 org.osgi.util.tracker.ServiceTracker를 작성하여 찾을 OSGi 애플리케이션과 연관된 org.osgi.service.subsystem.Subsystem 서비스를 얻으십시오. 이 Subsystem 서비스 인스턴스에는 OSGi 애플리케이션에 대한 작업을 수행하는 데 필요한 모든 사항이 포함되어 있습니다.
예
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
String SERVICE_FILTER = "(&(objectClass=org.osgi.service.subsystem.Subsystem)
(subsystem.type=osgi.subsystem.application)(subsystem.symbolicName=my.app))"
org.osgi.framework.Filter filter = ctx.createFilter(SERVICE_FILTER);
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
org.osgi.framework.Constants.OBJECTCLASS;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME_PROPERTY;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_PROPERTY;