【发布时间】:2012-10-01 22:41:27
【问题描述】:
现在我尝试将我的 OSGi 应用程序的服务实现为 ds。
不幸的是,我不知道如何访问使用该服务。
我的服务如下所示:
public interface IService {
public void foo(<T> bar);
}
public class ServiceImpl 实现 IService {
公共无效foo(酒吧){
...
}
}
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="iservice">
<implementation class="ServiceImpl"/>
<service>
<provide interface="IService"/>
</service>
</scr:component>
就我现在而言。
但是我怎样才能访问该服务呢?
-
但是 eclipse 找不到
的导入ComponentContexth**p://www.osgi.org/javadoc/r4v42/org/osgi/service/component/ComponentContext.html -
我也找到了这个解决方案:h**p://www.eclipsezone.com/eclipse/forums/t97690.rhtml
但我有点失望,我不得不包装每一个方法,而且我不得不使用 Eclipse 特定的 apis
这个解决方案也有同样的问题:https://stackoverflow.com/a/11034485/1737519 尽管该示例使用的是 apache felix api 而不是 Eclipse api。
我想做的就是像这样访问/引用服务:
Iservice s = ???;
s.foo(<T> bar);
提前感谢您的帮助!
附:抱歉屏蔽链接,但我不能包含超过 2 个!
【问题讨论】:
-
第二个解决方案与 Eclipse 相关的是什么?特别是 Stackoverflow 链接中的答案准确地显示了如何做到这一点,它不需要任何 Eclipse API。它也不需要“包装每一个方法”,你能解释一下你的意思吗?
-
哦,对不起,你是对的,stackoverflow 的第二个解决方案不使用 eclipse api。但它使用了 apache felix api org.apache.felix.shell.Command 并且 run 方法实际上被包装在 execute 方法中
-
它使用 org.apache.felix.shell.Command ,是服务将提供 osgi 控制台命令,在 org.apache.felix.shell.impl.Activator.ShellServiceImpl 将获取所有实现的服务org.apache.felix.shell.Command 接口。
-
呃,你打错了吗? ServiceImpl 必须实现 IService 才能工作。
-
@user1737519 链接示例only 使用Felix 命令来构建示例。它可能是任何东西;通过执行命令,Christian 展示了一种使用该服务的简单方法。就这样。 execute 方法“包装”了 print 方法,因为它显示了如何调用 print 方法,这正是您所要求的!因此,不要将答案的框架(实际上可能是任何东西)误认为是必要的依赖关系。他们不是。
标签: java eclipse service osgi declarative