2014-09-23 3 views
1

서로 다른 서비스 품질을 가진 동일한 인터페이스를 구현하는 두 개의 osgi 서비스가 있습니다. 하나는 기본 순위가 0이고 다른 하나는 순위가 3입니다.더 높은 순위의 OSGI 서비스를 사용할 수있게되면 어떻게 다시 연결합니까?

기본 서비스가 대체 역할을하는 청사진 구성을 찾고 있습니다. 따라서 모든 다른 번들은 최상의 서비스 (최상위 순위)를 사용해야하며 더 나은 서비스가 사라지면 기본값으로 폴백해야합니다.

현재 작동 중입니다.

누락 된 부분은 온라인 상태가되면 더 나은 서비스에 자동으로 다시 연결되는 것입니다. 소비자를 변경하지 않고 서비스 만 구성하여이를 수행 할 수있는 방법이 있습니까 (ServiceTrackers를 구현하는 등)?

답변

0

간단한 청사진 <reference>처럼 직접적으로 가능하지 않다고 생각합니다.

<reference-listener> 요소를 사용할 수 있습니다.

<reference-listener bind-method=”bind” unbind-method=”unbind”> 
    <bean class=“MyListenerClass”/>   
    </reference-listener> 

참조가 변경되어 이에 반응 할 때 다시 호출 할 수 있습니다. 예를 들어 올바른 서비스가 호출되도록 서비스 프록시를 만들 수 있습니다. 그래도 아주 예쁜 코드는 아닙니다. 그래서 BJ처럼 선언적 서비스가이 경우에는 더 깨끗한 해결책을 제시 할 수 있다고 제안했습니다.

+0

그래서 프록시는 순위 = "5"를 가져야합니다 ...하지만 프록시가 죽으면 다시 같은 문제가 발생합니다. (DS를 사용하면 소비자를 변경한다는 의미입니다.) 어떤 방식 으로든 명확한 설명 주셔서 감사합니다 –

+0

아니요. 나는 모든 서비스를 듣고 가장 높은 순위를 선택하는 것을 의미합니다. 정말로 필요하다면 할 수있는 것보다 조금 복잡합니다. –

1

선언적 서비스는이 옵션을 욕심쟁이 정책 옵션과 함께 지원합니다. 나는 그것이 청사진에서 가능하다는 것을 모른다.