1.4. OSGi 서비스
1.4.1. 개요
OSGi 서비스는 이름/값 쌍으로 정의된 서비스 속성이 있는 Java 클래스 또는 서비스 인터페이스입니다. 서비스 속성은 동일한 서비스 인터페이스를 제공하는 서비스 공급자 간에 구별됩니다.
OSGi 서비스는 서비스 인터페이스에 의해 의미 체계적으로 정의되며 서비스 오브젝트로 구현됩니다. 서비스의 기능은 구현하는 인터페이스에 의해 정의됩니다. 따라서 다른 애플리케이션이 동일한 서비스를 구현할 수 있습니다.
서비스 인터페이스를 사용하면 번들이 구현이 아닌 바인딩 인터페이스로 상호 작용할 수 있습니다. 구현 세부 정보를 가능한 한 적은 수만큼 사용하여 서비스 인터페이스를 지정해야 합니다.
1.4.2. OSGi 서비스 레지스트리
OSGi 프레임워크에서 서비스 계층은 게시, 찾기, 서비스 모델을 사용하여 1.5절. “OSGi 번들” 와 포함된 구성 요소 간의 통신을 제공합니다. 서비스 계층에는 다음과 같은 서비스 레지스트리가 포함되어 있습니다.
- 서비스 공급자는 다른 번들에서 사용할 프레임워크에 서비스를 등록합니다.
- 서비스 요청자가 서비스를 찾고 서비스 공급자에 바인딩
서비스는 번들에 의해 소유되며, 내에서 실행됩니다. 번들은 하나 이상의 Java 인터페이스 아래에 프레임워크 서비스 레지스트리에 서비스 구현을 등록합니다. 따라서 프레임워크를 제어하는 다른 번들에서 서비스의 기능을 사용할 수 있으며 다른 번들은 서비스를 조회하고 사용할 수 있습니다. 조회는 Java 인터페이스 및 서비스 속성을 사용하여 수행됩니다.
각 번들은 인터페이스의 정규화된 이름과 해당 속성을 사용하여 서비스 레지스트리에 여러 서비스를 등록할 수 있습니다. 번들에서는 LDAP 구문과 함께 이름 및 속성을 사용하여 서비스의 서비스 레지스트리를 쿼리합니다.
번들은 게시, 검색 및 바인딩을 포함한 런타임 서비스 종속성 관리 활동을 담당합니다. 또한 번들은 번들에 바인딩된 서비스의 동적 가용성 (배타 또는 출발)으로 인한 변경 사항에도 대응할 수 있습니다.
1.4.1. 이벤트 알림
서비스 인터페이스는 번들에 의해 생성된 오브젝트로 구현됩니다. 번들은 다음을 수행할 수 있습니다.
- 서비스 등록
- 서비스 검색
- 등록 상태 변경 시 알림 수신
OSGi 프레임워크는 이벤트 알림 메커니즘을 제공하므로 서비스 요청자가 서비스 레지스트리의 변경이 발생할 때 알림 이벤트를 수신할 수 있습니다. 이러한 변경에는 특정 서비스의 게시 또는 검색 및 서비스가 등록, 수정 또는 등록 취소되는 시기가 포함됩니다.
1.4.2. 서비스 호출 모델
번들에서 서비스를 사용하려는 경우 서비스를 조회하고 Java 오브젝트를 일반 Java 호출로 호출합니다. 따라서 서비스에 대한 호출은 동기적으로 수행되며 동일한 스레드에서 발생합니다. 더 많은 비동기 처리를 위해 콜백을 사용할 수 있습니다. 매개 변수는 Java 개체 참조로 전달됩니다. XML과 마찬가지로 마샬링 또는 중간 표준 형식이 필요하지 않습니다. OSGi는 사용할 수 없는 서비스 문제에 대한 솔루션을 제공합니다.
1.4.3. OSGi 프레임워크 서비스
OSGi 프레임워크는 자체 서비스 외에도 다음과 같은 선택적 서비스를 제공하여 프레임워크의 작업을 관리합니다.
패키지 관리 서비스- 관리 에이전트가 공유 패키지의 상태를 검사하여 Java 패키지 공유를 관리하는 정책을 정의할 수 있습니다. 또한 관리 에이전트가 패키지를 새로 고치고 필요에 따라 번들을 중지 및 다시 시작할 수 있습니다. 이 서비스를 사용하면 번들 내보내기를 제거하거나 업데이트할 때 관리 에이전트가 공유 패키지에 대해 결정을 내릴 수 있습니다.
또한 서비스는 마지막 새로 고침 이후 제거되거나 업데이트된 내보낸 패키지를 새로 고치고 특정 번들을 명시적으로 확인하는 방법도 제공합니다. 이 서비스는 런타임 시 번들 간의 종속성을 추적하여 업그레이드로 인해 어떤 번들이 영향을 받을 수 있는지 확인할 수 있습니다.
- 시작 수준 서비스- 관리 에이전트를 활성화하여 번들 시작 및 중지 순서를 제어합니다. 서비스는 각 번들에 시작 수준을 할당합니다. 관리 에이전트는 번들 시작 수준을 수정하고 적절한 번들을 시작하고 중지하는 프레임워크의 활성 시작 수준을 설정할 수 있습니다. 시작 수준이 작거나 같은 번들만 이 활성 시작 수준을 활성화할 수 있습니다.
- URL 처리기 서비스- 모든 구성 요소가 추가 URL 처리기를 제공할 수 있도록 URL 체계 및 콘텐츠 처리기를 사용하여 Java 런타임을 동적으로 확장합니다.
- 권한 관리 서비스- OSGi 프레임워크 관리 에이전트가 특정 번들의 권한을 관리하고 모든 번들에 대한 기본값을 제공할 수 있습니다. 번들에는 권한 있는 코드를 실행할 권한이 있는지 확인하는 데 사용되는 단일 권한 세트가 있을 수 있습니다. 즉시 정책을 변경하고 새로 설치된 구성 요소에 대한 새 정책을 추가하여 권한을 동적으로 조작할 수 있습니다. 정책 파일은 번들을 제어하는 데 사용됩니다.
- Conditional Permission Admin 서비스- 권한을 확인할 때 특정 조건이 true 또는 false인 경우 적용할 수 있는 권한으로 Permission Admin 서비스를 확장합니다. 이러한 조건에 따라 권한이 적용되는 번들의 선택이 결정됩니다. 권한은 설정된 직후 활성화됩니다.
OSGi 프레임워크 서비스는 OSGi Alliance 웹 사이트의 릴리스 4 다운로드 페이지에서 제공되는 OSGi Service Platform Release 4 사양의 별도의 장에 자세히 설명되어 있습니다.
1.4.4. OSGi Compendium 서비스
OSGi 프레임워크 서비스 외에도 OSGi Alliance는 선택적 표준화된 호환성 서비스를 정의합니다. OSGi compendium 서비스는 로깅 및 기본 설정과 같은 작업에 대한 API를 제공합니다. 이러한 서비스는 OSGi Alliance 웹 사이트의 릴리스 4 다운로드 페이지에서 제공되는 OSGi Service Platform, Service Compendium 에 설명되어 있습니다.
Configuration Admin compendium 서비스는 구성 정보를 유지하고 관련 당사자에게 배포하는 중앙 허브와 같습니다. 구성 관리자 서비스는 배포된 번들에 대한 구성 정보를 지정하고 번들이 활성 상태일 때 해당 데이터를 수신하도록 합니다. 번들의 구성 데이터는 이름-값 쌍 목록입니다. 1.2절. “Apache Karaf 아키텍처”을 참조하십시오.