2013-02-12 1 views
2

와 인스턴스화 OSGi 서비스 @ 비 게시 :나는 다음과 같은 구성 요소가있는 OSGi 프레임 모듈 형 시스템이 iPOJO

  • 일부 특정 프로토콜 인스턴스 구현, 특정 서버에 대한 선택은 특정 프로토콜을 통해 연결을 나타냅니다 (인스턴스화 연결 서비스 당
  • 요청에 따라 인스턴스를 생성하고 사전 구성하는 특정 프로토콜 인스턴스 관리자 서비스
  • 프로토콜 관리자 서비스를 집계하고 프로토콜 인스턴스를 제공하도록 요청하는 연결 관리자 필요할 때 다음과 같이 (단일 singletone 서비스)

그들은 OSGi 번들로 패키징된다

`-ConnectionManager 
     `-ConnectionManager.class 
`-IrcProtocol 
     `-IrcProtocolManagerService.class 
     `-IrcProtocolInstance.class 
`-XMPPProtocol 
     `-XMPPProtocolManagerService.class 
     `-XMPPProtocolInstance.class 
ConnectionManager

@Provides 
@Instantiate 
@Component 

주석하고 enbles Subscriber 인터페이스를 구현한다


메시지를 보내고들을 수있는 기능이 제공되는데 일종의 형식 인 Event Admin.


*ProtocolManager

@Provides 
@Instantiate 
@Component 

주석 그리고 그것은 ConnectionManager 서비스 리스너에 의해 발견의 수 ProtocolManager 인터페이스를 구현한다.


*ProtocolInstance

@Provides 
@Component 

와 annoteted 그리고 Subscriber 인터페이스를 구현한다. 또한 ProtocolInstance 인터페이스를 구현하며 connect()disconnect()과 같은 일반적인 연결 작업을 제공합니다.


문제는 여기에 ProtocolInstance의이되지 @Instantiate 주석 트리거에 의해, ProtocolManager의 내부 new 연산자, 손으로 생성되며, 그 때문에 것입니다 - 그것은 @Provides 주석의에도 불구하고, iPOJO 서비스 출판에 참여하지 않습니다 .


질문 : 어떻게 제대로 (바람직하게는 선언적, 주석) 원시 OSGi 서비스 간행물에 수동으로 다이빙없이이 프로그램 생성 ProtocolListener 서비스를 게시하기을 (적어도 어쩌면, 공장의 일종 외부)? 아니면, 아마, 더 나은 iPOJO 지침에 따라 놀기 위해 내 시스템을 재구성하는 방법이 있을까요?

답변

1

iPOJO는 '새'로 객체를 생성 지원하지 않습니다. 실제로 iPOJO 인스턴스는이 객체 일뿐만 아니라 객체를 래핑하는 컨테이너이기도합니다.

  • 는 비행 (http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-factory-service.html)
  • 에 인스턴스를 작성하는 팩토리 서비스를 사용하여 객체를 등록하는 BundleContext ( http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-faq.html#injecting-the-bundle-context-in-a-pojo) 를 사용

    • :

      그러나, 당신은 두 가지 솔루션을 가지고