2010-07-18 6 views
1

현재 응용 프로그램에서는 런타임에 사용자 인터페이스를 통해 osgi 서비스를 만들고 구성하려고합니다. OSGi 메타 타입 스펙을 살펴 보았지만 간단한 유형 속성 만 지원합니다.종속성이있는 OSGi 서비스를 동적으로 만들고 구성하십시오.

내 질문은 : 다른 osgi 서비스와 같은 속성 유형에 대한 지원이없고 왜 이런 식으로 이미 기존 프로젝트에 대해 알고있는 충분한 이유가 있습니까?

UPDATE

더 내 질문에 명확히하려면 :

내가 뭘 원하는 것은 생성하고 소프트웨어의 사용자가 필요에 따라 새 서비스를 구성하는 것입니다. 이것은 새로운 서비스 인터페이스가 시스템에 추가되는 경우에도 작동해야합니다.

내가 보내는 통지

public interface NotificationService { 
    void notify(Notification n); 
} 

및 가령에게 알림을 보내는 구현을위한 서비스 인터페이스가 있다고 가정하자 지저귀다. 메타 타입 사양을 통해 트위터 서비스에 사용자 이름과 암호가 필요한 정보를 인코딩 할 수 있습니다. 이를 통해 새로운 트위터 알림 서비스를 만들기 위해 런타임에 동적으로 UI를 만들 수 있습니다.

이것은 간단한 데이터 유형과 작동하지만 메타 유형 스펙은 다른 서비스에 대한 종속성을 처리하지 않습니다. 예 : Notification에 파일 첨부가 있고 트위터 서비스에 FileUpload 서비스가 있어야 파일을 저장할 수 있습니다.

답변

0

BundleContext # registerService()를 사용하여 항상 새 서비스를 주입 할 수 있지만 그 당시의 서비스는 초기화되어 실행 준비가되어 있어야합니다. OSGi 4.2 사양의 새로운 청사진 서비스 또는 더 오래되었지만 더 널리 보급 된 동적 서비스까지 유용하게 사용할 수 있습니다.

마지막으로, 원하는 작업에 따라 다릅니다. 런타임에 osgi 서비스를 "생성"및 "구성"한다고 말하면 무엇을 의미합니까?

+0

예를 통해 제 질문을 명확히하려고했습니다. 이것이 내가하고 싶은 것을 이해하는 데 도움이되기를 바랍니다. – crazymaik

+0

예제가 있습니다. 메타 타입 서비스는 당신을 도울 수 없으며, 당신이 생각하는 유스 케이스와 잘 맞지 않는다고 생각합니다. 할 수있는 일은 사용 가능한 특정 파일 업로드 서비스에 대한 옵션을 가진 간단한 문자열 값 속성입니다 (물론 서비스 간의이 하드 코드 종속성 - 새 파일 업로드 서비스가있는 번들을 추가하면 어떻게됩니까?). 그런 다음 ServiceTracker를 사용하여 사용자 지정 속성 필터를 사용하여 서비스를 가져옵니다. 내 자신의 메타 데이터 설명 시스템을 사용하는 것이 좋습니다 (특수 효과 사용!). 또는 심지어 이클립스 레지스트리. –

+0

이것이 crazymaik의 원래 질문에 대한 대답인지 궁금합니다. –

0

예를 들어, 기본적으로 서비스 구현을 구성 할 수 있으며 구현에 다른 서비스가 필요하다는 내용이있을 수 있습니다. 기본적으로 정적 XML 파일 대신 (선언적 서비스 및 대부분의 경우처럼) 코드에서 구현의 종속성을 선언 할 수있는 시스템을 찾고 있습니다.

문제점에 대한 해결책은 Apache Felix Dependency Manager를 사용하는 것입니다. 런타임시 종속성을 추가 및 제거 할 수있는 선언적 Java API가 있습니다. 시작을위한 몇 가지 기본 예제는 여기에서 찾을 수 있습니다. http://felix.apache.org/site/apache-felix-dependency-manager-getting-started.html 소스에서 3.0.0-SNAPSHOT을 빌드하는 것이 좋습니다. 이는 현재 가장 최신의 가장 뛰어나고 안정적입니다.

도움이된다면 위에서 설명한 예제의 실제 샘플 코드를 제공 할 수 있습니다. 알려줘.

관련 문제