我目前正在使用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){}
总是非常感谢你的帮助!
答案 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);
}
问题当然是,你如何处理地图。我没有做任何事,真的。