次のコンポーネントを含むOSGiモジュラーシステムがあります。
- 特定のサーバーへの特定のプロトコルを介した接続を表す特定のプロトコル インスタンスの実装 (接続サービスごとにインスタンス化)
- いくつかの特定のプロトコル インスタンス マネージャー サービス、オンデマンドでインスタンスを作成および事前構成する (通常、異なるバンドルからの複数のシングルトーン サービス)
- プロトコル マネージャー サービスを集約し、必要に応じてプロトコル インスタンスを提供するよう要求する接続マネージャー (単一シングルトーン サービス)
これらは、次のように OSGi バンドルにパッケージ化されています。
`-ConnectionManager
`-ConnectionManager.class
`-IrcProtocol
`-IrcProtocolManagerService.class
`-IrcProtocolInstance.class
`-XMPPProtocol
`-XMPPProtocolManagerService.class
`-XMPPProtocolInstance.class
にConnectionManager
は注釈が付けられています
@Provides
@Instantiate
@Component
またSubscriber
、インターフェイスを実装し、ある種の typed を介して配信されたメッセージを送信およびリッスンする機能を有効にしますEvent Admin
。
それぞれ*ProtocolManager
に注釈が付けられています
@Provides
@Instantiate
@Component
また、サービス リスナーProtocolManager
による検出を可能にするインターフェイスを実装します。ConnectionManager
それぞれ*ProtocolInstance
に注釈が付けられています
@Provides
@Component
そしてSubscriber
インターフェースを実装します。また、やProtocolInstance
などの一般的な接続操作を提供するインターフェイスも実装しています。connect()
disconnect()
ここでの問題は、ProtocolInstance
s が、アノテーション トリガーではなく、new
演算子を使用して手動で作成されることです。そのため、アノテーションであるにもかかわらず、iPOJO サービスの公開に参加しません。ProtocolManager
@Instantiate
@Provides
ProtocolListener
質問: このプログラムで作成されたサービスを、生の OSGi サービスの公開に手動で取り込まずに (少なくともある種のファクトリーの外部で) 正しく (できればアノテーションを使用して宣言的に) 公開するにはどうすればよいでしょうか? または、おそらく、システムを再構築して、暗黙の iPOJO ガイドラインとうまく連携させるにはどうすればよいでしょうか?