【发布时间】:2015-12-06 12:25:41
【问题描述】:
我有一个简单的 java 项目,叫做 server。此外,我有一个 osgi api 项目,它定义了一个 BlockProvider 接口。接下来我有一个 osgi 声明式服务项目,其中包含一个实现 BlockProvider 的服务。
在我的 java 项目“服务器”中,我有一个嵌入式 osgi 框架(在我的例子中是 felix)。
我创建了一个 bundleactivator,它安装了 gogo osgi 包、scr 包、我的 api 项目包和服务项目包。
没有问题,我可以检查我的服务包。
在我的服务器项目中,我想查看哪些服务实现了 BlockProvider 接口。所以我用“BlockProvider.class.getName()”作为第二个参数(过滤器)实现了一个 ServiceTracker。
工作也没有问题,getServices() 返回我的服务项目。
但问题来了:我无法调用 BlockProvider 接口上的任何函数,因为“服务器”项目中的 BlockProvider 使用与服务不同的类加载器 (sun.misc.Launcher$AppClassLoader@4e0e2f2a)项目(o:黄块 [6])。
我怀疑我在这里忽略了一些基本的东西:但是如何调用实现我的 BlockProvider 接口的 BlockProvider 服务的函数?
【问题讨论】:
-
出于好奇,您嵌入 OSGi 的用例是什么?
标签: java osgi apache-felix