현재 응용 프로그램에서는 몇 가지 위치에서이 패턴을 실행했습니다. 서로 다른 작업을 수행하는 단일 번들로 두 개의 서비스 인터페이스가 있습니다.OSGi 구성 요소 모델의 내부 및 내부 번들 종속성
interface Service1 { ... }
interface Service2 { ... }
및 싱글 구성 요소 모두를 구현해야하지만, 각각 다른에 대한 참조가 필요 찾으려면 :
public class Service1Impl implements Service1 {
private Service2 service2;
...
}
public class Service2Impl implements Service2 {
private Service1 service1;
...
}
세 개의 OSGi 프레임 구성 요소 모델 (DS, 청사진, 그리고 iPOJO)의 허용을 : 1)
Service1Impl
과
Service2Impl
이 같은 번들에있을 때; 2) 다른 번들에있을 때?
"Service1은 Service2가 활성화 된 후에 만 작동 할 수 있으며 그 반대의 경우도 있으므로 프레임 워크가 서비스를 시작할 수있는 순서가 없습니다." 프레임 워크는 게시하지 않고 두 인스턴스를 만들 수 있습니다 (클라이언트 코드로 호출 할 수없고 참조가 부족하지 않아도 됨). 그런 다음 게시하십시오. 또는 다른 인스턴스에 대한 참조없이 하나의 인스턴스를 게시하고 두 번째 인스턴스가 생성 될 때까지 모든 호출을 차단할 수 있습니다. 예 : 이것은'@ Autowired' Spring 빈과 잘 동작합니다. –
DS 사양을 보면 실제로 다른 서비스는이 상황에서 다시 제공되지 않습니다 (112.3.5 참조). –
iPOJO도이 경우를 처리하기 위해 시간적 종속성이 있습니다. – Clement