2010-07-05 4 views
2

를 통해 게시 :어떻게 내 샘플 클래스를 종속 OSGi 서비스를 구성하고 DS

public class MyModel implements Model 
{ 
    : 
    : 
} 

public class SingleModelProvider implements ModelProvider 
{ 
    public SingleModelProvider(Model providedModel, List actions) 
    { 
      : 
    } 
} 

계획은 ModelProvider의 다른 구현을 제공하기 위해 여러 번들의 SingleModelProvider 클래스를 재사용하는 것입니다. 각 번들에서 수행해야하는 작업은 해당 매개 변수를 사용하여 SingleModelProvider를 생성자에 인스턴스화하는 것입니다. DI 프레임 워크를 사용하는 매우 간단한 시나리오. Activator에 상용구 코드를 작성하지 않고 가능한 경우 DS (Declarative Services)를 사용하여 ModelProvider 서비스를 등록하고 싶습니다.

이것이 가능합니까?

DS의 클래스 선언이 생성자 인수 (또는 해당 문제의 설정자)를 허용하지 않는 것 같아서이를 수행하는 방법에 대한 문서를 찾지 못하는 것 같습니다.

공장을 이용합니까? Activator를 사용하거나 수동으로 서비스를 게시하는 것보다 사례를 더 단순하게 만들 수는 없으므로 가치가 있는지 확신 할 수 없습니다.

답변

1

DS를 사용해야하는 특별한 이유가 있습니까?

OSGI Service Compendium version 4.2, 121에 설명 된대로 OSGI Blueprint 서비스를 사용할 수도 있습니다. DI와 쉬운 서비스 게시/소비의 두 가지 장점을 제공합니다.

DS에서 내가 아는 한 유일한 옵션은 팩토리를 사용하는 것입니다. 바인드/바인드 해제 메소드는 사용자 클래스를 허용하지 않습니다. (OSGI Service Compendium version 4.2, 112.4.5에 설명 된대로)

+0

나는이 질문을 한 후 어제 그걸 보았고 매우 유망 해 보인다. 우리는 스프링 DM을 사용하고 있었지만 플랫폼에서 기본적으로 지원되는 것을 선호하여 사용을 중단했습니다. 이것은 내 모든 필요를 충족시키는 것으로 보인 이후 가장 좋은 대안처럼 보입니다. Eclipse 3.5.x의 최신 버전이이 개정을 지원하는지 알고 있습니까? – Robin

3

DS는 세터를 지원합니다. 다음은 질문의 예제를 기반으로 한 DS XML의 예입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="SampleModelProvider"> 
    <implementation class="test.SampleModelProvider"/> 
    <reference bind="setModel" cardinality="1..1" interface="test.Model" name="Model" policy="static" unbind="unsetModel"/> 
    <reference bind="setList" cardinality="1..1" interface="test.ActionList" name="ActionList" policy="static" unbind="unsetList"/> 
    <service> 
     <provide interface="test.ModelProvider"/> 
    </service> 
</scr:component> 

생성자를 사용하는 것은 OSGi의 동적 인 특성에 반하는 것입니다. 언제든지 서비스 및 번들을 시작하고 중지 할 수 있습니다. OSGi 친숙한 코드는 이것을 이해하고 의존성 설정을 처리하고 해제하는 대칭 메소드를 필요로한다.

한 가지 질문 : 시스템에서 모델 제공 업체는 누구이며 누가 각 제공 업체가 받기를 바라는 조치 목록을 작성합니까? OSGi 서비스로 사용할 수 있습니까? 필자가 제공 한 예제 DS는 OSGi 서비스라고 가정합니다.

관련 문제