ダイナミズムおよび Blueprint Container
Blueprint プログラミング・モデルでは、登録リスナー または参照リスナーを使用して、サービスが使用可能になる時に バンドルが制御を行えるようにすることができます。
例えば、バンドルにオプション・サービスがあり、このバンドルは、サービスが使用可能になる時に使用を開始し、サービスが使用不可になる時に使用を停止するとします。 参照リスナーを使用すると、 このオプション・サービスが使用可能または使用不可になるときにバンドルに通知 されるようにすることができます。
- 登録リスナーは、サービスの登録直後、あるいはサービスの登録抹消直前に コールバック・メソッドが呼び出されるようにするオブジェクトです。
- 参照リスナーは、サービスがサービス参照マネージャーによって選択されたとき、 あるいはサービスがサービス参照マネージャーによってもう使用されていないときに、 コールバック・メソッドが呼び出されるようにするオブジェクトです。
登録リスナー
登録リスナーを指定するには、registration-listener エレメント を使用し、さらに registration-method 属性と unregistration-method 属性を使用してコールバック・メソッドを 指定します。 コールバック・メソッドを最上位マネージャーへの参照として提供するオブジェクトを指定することもできれば、registration-listener エレメント内でインライン宣言を使用することもできます。
anyMethod は任意のメソッド名を表します。void anyMethod(ServiceFactory, Map)void anyMethod(? super T, Map)最初の
引数はサービス・オブジェクトのインスタンスです。 タイプ T は、サービス・オブジェクトの
タイプから割り当てられる必要があります。 2 番目の引数は、サービスに関連付けられた
登録プロパティーを示します。登録リスナーがコールバックについて複数の多重定義メソッドを保持している場合は、 一致するシグニチャーを持つメソッドがすべて呼び出されます。
以下の部分的なJava™クラスとBlueprint XMLのサンプルコードは、単純な登録リスナーを示しています。
public class RegistrationListener {
public void register(Account account, Map properties) {
...
}
public void unregister(Account account, Map properties) {
...
}
}
<service id="serviceSix" ref="myAccount" auto-export="all-classes">
<registration-listener
registration-method="register" unregistration-method="unregister">
<bean class="org.apache.aries.RegistrationListener"/>
</registration-listener>
</service>
参照リスナー
参照リスナーを指定するには、reference-listener エレメントを 使用し、さらに bind-method 属性と unbind-method 属性を使用してコールバック・メソッドを 指定します。 コールバック・メソッドを最上位マネージャーへの参照として提供するオブジェクトを指定することもできれば、reference-listener エレメント内でインライン宣言を使用することもできます。
anyMethod は任意のメソッド名を表します。void anyMethod(ServiceReference)この引数は、バインドまたは アンバインドされるサービスの ServiceReference オブジェクトです。
void anyMethod(? super T)この引数は、 バインドまたはアンバインドされるサービス・オブジェクト・プロキシーです。 タイプ T は、 サービス・オブジェクトから割り当てられる必要があります。
void anyMethod(? super T, Map)この最初の引数は、 バインドまたはアンバインドされるサービス・オブジェクト・プロキシーです。 タイプ T は、 サービス・オブジェクトから割り当てられる必要があります。 2 番目の引数は、サービスに関連付けられた サービス・プロパティーを示します。
参照リスト・マネージャーの場合、リスナー・コールバックは、 一致するサービスがサービス・レジストリーに追加されたり、レジストリーから除去されたり するたびに呼び出されます。 ただし、参照マネージャーの場合、このマネージャーがあるサービスに既に バインドされ、より低いランキングのマッチング・サービスがサービス・レジストリーに 追加されたときには、バインド・コールバックは呼び出されません。 同様に、 このマネージャーのバインド先であるサービスがなくなり、直ちに別のマッチング・サービスに 置き換えられても、アンバインド・コールバックは呼び出されません。
参照マネージャーを使用してステートフルなサービスと対話する 場合は、サービスの状態を適切に管理できるように、参照リスナーを使用して プロキシーのバッキング・サービスを追跡することが重要になります。
以下の部分的なJavaクラスとBlueprint XMLのサンプルコードは、単純な登録リスナーを示しています。 ReferenceListener クラスには 2 つのバインド・コールバック・ メソッドと 1 つのアンバインド・コールバック・メソッドがあります。これらのメソッドは、 サービス参照リスト・マネージャーからのサービスのバインドおよびアンバインド時に呼び出されます。
public class ReferenceListener {
public void bind(ServiceReference reference) {
...
}
public void bind(Serializable service) {
...
}
public void unbind(ServiceReference reference) {
...
}
}
<reference-list id="serviceReferenceListTwo"
interface="org.apache.aries.simple.Account" availability="optional">
<reference-listener bind-method="bind" unbind-method="unbind">
<bean class="org.apache.aries.ReferenceListener"/>
</reference-listener>
</reference-list>