1

私は現在、「標準 OSGi」から OSGi と Vaadin を使用して Spring DM を使用するモジュラー Web インターフェイスの非常に優れたデモを移植しています。

1 つの OSGi 構成ファイルがリストされています。

<reference name="PersonListener"
        interface="com.siemens.ct.pm.model.IPersonListener"
        bind="addPersonListener"
        unbind="removePersonListener"
        cardinality="0..n"
        policy="dynamic"/>

Spring DM では、リスナーを使用してこれを行う必要があることを認識しているため、次の Bean 構成を使用します。

<osgi:list id="personListeners" interface="be.nnuytten.pm.model.IPersonListener" cardinality="0..N">
        <osgi:listener ref="personManager" bind-method="addPersonListener" unbind-method="removePersonListener" />
</osgi:list>

リファレンス ドキュメントで、addPersonListenerメソッドとremovePersonListenerメソッドには次の署名が必要であることがわかりました。

public void anyMethodName(ServiceReference ref);

すべてが完了しましたが、ここで問題が発生します。この ServiceReference オブジェクトをどのように操作すればよいでしょうか。具体的には、ServiceReference を使用して次のことを達成するにはどうすればよいですか?

public synchronized void addPersonListener(IPersonListener personListener) {
        logger.info("add personListener: " + personListener);
        personListeners.add(personListener);
    }

同じ機能を実装する必要があります

public void addPersonListener(ServiceReference ref){}

あなたの助けはいつも最も感謝しています!

4

1 に答える 1

0

これがまだ解決されていない場合。

私はVirgo(Spring DMに基づいています)で同様のことをしました。ServiceReference を使用する必要はありません。それはすべてメソッドのシグネチャに依存します:

<osgi:list id="xyzzyList" interface="Xyzzy"
    cardinality="0..N">
    <osgi:listener ref="xyzzyRegistry" bind-method="onBind" unbind-method="onUnbind" />
</osgi:list>

Xyzzy の実装における onBind() メソッド

public void onBind(Xyzzy xyzzy, Map<?, ?> properties) {
    register(xyzzy);
}

問題はもちろん、マップで何をするかです。何もしていません、本当に。

于 2011-04-01T10:55:42.980 に答える