做OSGi时关于Declarative Service的一点小问题

 

我的接口和实现放在一个bundle里

接口代码:

public interface MyService {

public String getHello();

}

 

实现代码:

import org.osgi.service.component.ComponentContext;

import osgi.service.MyService;

 

public class MyServiceImpl implements MyService {

protected void activate(ComponentContext context) {

System.out

.println("MyService Component Active,within the bundle lifecircle.");

}

 

public void deactivate(ComponentContext context) throws Exception {

System.out

.println("MyService Component Deactive,within the bundle lifecircle.");

}

 

@Override

public String getHello() {

// TODO Auto-generated method stub

return "No Spring OSGI";

}

 

}

 

调用实现是另一个bundle

import org.eclipse.osgi.framework.console.CommandProvider;

import osgi.service.MyService;

 

public class TestOsgi implements CommandProvider{

MyService ms;

public synchronized void setRunnable(MyService r) {

ms = r;

System.out.println(ms.getHello());

System.out.println("This is TestOsgi Declarative Service.");

}

public synchronized void unsetRunnable(MyService r) {

ms = null;

}

@Override

public String getHelp() {

// TODO Auto-generated method stub

return null;

}

}

问题就在调用实现的地方,我必须要实现一个接口(例如CommandProvider),并且在xml文件中体现为service的provider interface。这时候运行就可以看到输出,如果我没有实现接口,运行后可以通过命令ss看到都已经active,但并没有输出,也就是说TestOsgi并没有执行setRunnable方法而且MyServiceImpl也没有执行activate方法。

 

终于知道了,作为service就必须要实现接口,所以TestOsgi并不是作为service用的,所以可以在bundle的xml中删除service一段,只是作为普通component使用即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值