在Spring DM中使用ServiceReference对象

时间:2011-03-29 18:41:56

标签: java osgi equinox springsource-dm-server

我目前正在使用OSGi和Vaadin从“标准OSGi”移植模块化Web界面的非常好的演示,以使用Spring DM。

列出了一个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){}

总是非常感谢你的帮助!

1 个答案:

答案 0 :(得分: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);
}

问题当然是,你如何处理地图。我没有做任何事,真的。