我正在整合OSGi Equinox,GWT作为bundle和Spring Dynamic Modules。首先,我检查没有服务的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。也就是说,没有注入服务引用,为什么?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
好吧,我解决了这个问题。只有我将属性设置为静态并运行!!!