依存性注入を利用してバンドルを分離することを強くお勧めします( OSGi Service Platform Enterprise仕様のブループリントコンテナー仕様をOSGi Blueprint
参照してください。ただし、V5リリース用であることに注意してください)。
この仕様では、個別のxmlファイルを使用してバンドルの依存関係を宣言します- (デフォルトですが、ヘッダーOSGI-INF/blueprint/*.xml
で変更できます)。Bundle-Blueprint
したがって、あなたの場合Comm Service
、サービスがバンドルの依存関係であるバンドルを開発しますCommunication
。また、サービスを登録してバンドルの依存関係になることができるように、同じサービスインターフェイスPoll
のバンドルも存在する可能性があります。Postcard
Communication
このような構成では、バンドル/サービスCommunication
を渡すのはバンドルではありませんが、初期化中にとバンドルはサービスの依存関係を取得します。Comm Service
Poll
Postcard
Comm Service
Poll
バンドルの架空のブループリント構成は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="PollSenderBean" class="pl.japila.osgi.poll.PollSender">
<argument ref="commService" />
</bean>
<service id="PollSenderBeanService" ref="PollSenderBean"
interface="pl.japila.osgi.Sender">
<service-properties>
<entry key="type" value="poll" />
</service-properties>
</service>
<reference id="commService" interface="pl.japila.osgi.comm.CommService" />
</blueprint>
Postcard
バンドルも同様です。このようなクエリが必要な場合に特定のサービスを利用できるようにentry
、の値に注意してください。poll
バンドルのブループリント構成はCommunication
次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<reference-list activation="lazy" member-type="service-object"
id="Sender" interface="pl.japila.osgi.Sender" />
</blueprint>
ソリューションを研究および学習するには、仕様およびおそらくApacheAriesブループリントモジュールを参照してください。