1

我正在集成 OSGi Equinox、GWT 作为捆绑包和 Spring 动态模块。首先,我检查没有服务的 GWT 捆绑包并运行它。现在我想用 Spring Dynamic Modules 调用一个外部服务。这些是我声明和使用服务的 XML 文件:

<bean name="ServicioZB" id="zbservice" class="service.ZBService"/>
<osgi:service ref="zbservice" interface="service.IZBService"/>

和:

<osgi:reference id="service">
    <osgi:interfaces>
        <value>service.IZBService</value>
    </osgi:interfaces>
</osgi:reference>

在 GreetingServiceImpl 我有属性 zb 和 setter/getter:

private IZBService zb;
public IZBService getZb() {
    return zb;
}

public void setZb(IZBService zb) {
    this.zb = zb;
}
public boolean greetServer(String input, String input2) throws Exception {
    return this.zb.checkUser();
}

如果在 Equinox 类型“服务”中,我可以查看所有服务和消费者。它显示以下内容:

{service.IZBService}={org.springframework.osgi.bean.name=zbservice, Bundle-SymbolicName=zbservice, Bundle-Version=3.0.0, service.id=56}
 Registered by bundle: zbservice_3.0.0 [56]
 Bundles using service:
 ZBGWTApp_1.0.0 [57]

然后,显示服务,我的应用程序 ZBGWTApp 是消费者。一切似乎都很好。但是,如果我调试应用程序,当我在 zb.checkUser() 行中断线程时,zb 的值为 NULL。也就是说,服务引用没有注入,为什么?

4

2 回答 2

1

我有同样的错误,我已经通过删除构造函数调用来解决它,它应该由 Spring 自动完成

public void start(BundleContext bundleContext) throws Exception {
    Activator.context = bundleContext;
    // NOTE vobmaniuk: do not call HelloService(), it must be created by spring. 
    // context.registerService(IHelloService.class.getName(), new
    // HelloService(), null);
}
于 2012-03-11T14:24:14.820 回答
0

好吧,我解决了这个问题。只有我将属性设置为静态并运行!!!

于 2011-06-07T11:41:31.770 回答