2012-07-29 3 views
3

내 API 번들에 인터페이스 Book이 있고 구현 번들에 BookImpl이 일부 있다고 가정 해 보겠습니다. 일반적으로 싱글 톤의 경우 서비스 레지스트리를 사용하여 구현합니다. 그러나 Book의 경우 구현을 할 때마다 새 인스턴스를 만들고 싶습니다.OSGi - 인터페이스 구현하기

OSGi에서 이것을 수행하는 일반적인 패턴은 무엇입니까?

BookCreatorcreateBook 서비스 레지스트리에서 가져 와서 내 책 인스턴스를 만드는 데 사용할 수있는 서비스가 있습니까?

답변

3

2 년 전에이 문제에 대해 오랫동안 열심히 생각한 끝에 제안 된 솔루션, 즉 공장으로 작동하는 서비스가 최상의 솔루션이라는 것을 알게되었습니다. 그 이유는 관련 유형 안전입니다. 선언적 서비스에는 컴포넌트 팩토리를 사용할 수있는 가능성이 있습니다. 컴포넌트 팩토리를 사용하면 유형 안전 팩토리만큼 사용하기 쉽지 않습니다. 또한 개념을 프레임 워크에 넣는 것을 고려했지만 간단한 공장 서비스가 쉽지 않았습니다.

그래서 네 생각은 내가 아는 최상의 해결책이다.

4

좋습니다. 그렇습니다. 또한 선언적 서비스 나 청사진과 같은 서비스 삽입 프레임 워크 중 하나를 고려할 수도 있습니다. 청사진을 사용하면 프로토 타입 범위를 지정할 수 있으므로 'Book'의 각 소비자가 고유 한 인스턴스를 얻습니다. 유스 케이스에 도움이 될만한 고유 한 수도 있고 그렇지 않을 수도 있습니다. (DS와 비슷한 점이 있습니다.)하지만 동일한 소비자 인스턴스라도 여러 개의 'Book'을 가져와야하고 팩토리를 사용해야하는 경우에도 이러한 프레임 워크 중 하나를 사용하면 서비스 액세스가 더욱 강력 해집니다.

+0

DS에서 이야기하는 기능은 ServiceFactory이며, 이는 'servicefactory = true'로 설정 될 수 있다고 생각합니다. 이는 포스터가 요구 한 것이 아니며 단지 각 소비자에게 번들 * 서비스의 새로운 인스턴스를 제공하기 때문에 소비자가 인스턴스의 수를 명시 적으로 프로그래밍 방식으로 제어 할 수는 없습니다. 즉, 소비자가 호출 할 수있는'create' 메소드를 제공한다. –