ara*_*ran 1 java service osgi bundle blueprint-osgi
我有这些捆绑:
Comm Service发送/接收消息的通信包.该Communication束饱和,我的方法是实现其他包的具体行动-的投票束将负责发送调查,该明信片包发送明信片等(只是一些例子).
当bundle需要委派发送民意调查/明信片/消息的工作时,是否将Comm Service服务作为Pollbundle 的输入参数Communication传递?
下面的代码段是否正确?
通讯捆绑代码:
PollBundle p = new PollBundleImpl();
p.sendPoll(String pollQuestion, CommService cs);
Run Code Online (Sandbox Code Playgroud)
或者是让Poll/ Postcardbundles自己检索Comm Service服务的更好方法?
您不能在bundle之间传递服务对象; 如果你这样做,那么OSGi框架就无法控制哪些捆绑包具有服务的可见性,因此当该服务需要消失时它无法通知整套捆绑包.
因此,Poll包必须为自己找到CommService.有很多方法可以做到这一点.我强烈建议使用OSGi规范中的Declarative Services.与bnd注释结合使用,您将能够编写Poll包的代码,如下所示:
@Component
public class Polling {
private CommService commService;
@Reference
public void setCommService(CommService cs) {
this.commService = cs;
}
public void someMethodThatUsesCommService() {
sendPoll(cs);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我推荐这种方法优于Jacek Laskowski在其答案中描述的蓝图解决方案,因为它不需要编写详细和非类型安全的XML文件,并且它具有与OSGi服务生命周期相匹配的更好的生命周期特征.然而无论是声明式服务和蓝图的办法肯定比摆弄低级别的OSGi API的安全(例如ServiceTracker,ServiceListener).
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |