- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 osgi 的新手,正在尝试一起获得概念的功能证明。
设置是我的通用 api 在一个创造性地命名为 common-api.jar 的包中创建,没有包激活器,但它导出它的所有接口(interface)。在这种情况下感兴趣的是 DatabaseService.java。
然后我有一个名为 systemx-database-service 的第二个包。实现数据库服务接口(interface)。这在我测试与数据库的连接并选择一些任意值的实现包的激活器中工作正常。我还注册了我希望其他 bundle 可用的服务,如下所示:
context.registerService(DatabaseService.class.getName(), new SystemDatabaseServiceImpl(context), new Properties());
基本思路是,当您查找数据库服务的服务引用时,您将获得 SystemDatabaseService 实现。
当我执行检查服务时,输出如下:
-> inspect s c 69
System Database Service (69) provides services:
----------------------------------------------
objectClass = za.co.xxx.xxx.common.api.DatabaseService
service.id = 39
这会让我相信如果我在测试包中这样做:
context.getService(context.getServiceReference(DatabaseService.class));
我应该取回 DatabaseService.class 的一个实例,但可惜没有这样的运气。它似乎无法找到该服务。和我在一起,我的故事变得更陌生了。
觉得没有地方可去,但我写下了这个怪物:
for (Bundle bundle : bundles) {
if (bundle.getSymbolicName().equals("za.co.xxx.xxx.database-service")) {
ServiceReference[] registeredServices = bundle.getRegisteredServices();
for (ServiceReference ref : registeredServices) {
DatabaseService service = (DatabaseService) context.getService(ref);
// use service here.
}
}
}
}
现在我实际上可以看到服务引用,但是我得到了这个错误
java.lang.ClassCastException: za.co.xxx.xxx.database.service.impl.SystemDatabaseServiceImpl cannot be cast to za.co.xxx.xx.common.api.DatabaseService
这太疯狂了,因为实现清楚地实现了接口(interface)!
如有任何帮助,我们将不胜感激。请记住,我对 osgi 的思维方式非常陌生,所以我的整个方法可能存在缺陷。
哦。如果有人想要 list ,我可以发布。我正在使用 maven-bnd-plugin 在 felix 上构建和执行。
谢谢
妮可
最佳答案
测试包必须解析为与 SystemDatabaseServiceImpl 相同的 DatabaseService 接口(interface)导入。如果未发生这种情况,则 getServiceReference 记录它会返回 null,即使找到服务也是如此。通过手动定位 bundle 并尝试定位服务和转换,您展示了为什么 getServiceReference 以这种方式运行:如果它返回任意服务,Java 转换将失败。
我建议在 impl 包和测试包中打印 DatabaseService.class.getClassLoader() 以证明它们是否是同一个包。如果不是,则您需要调整 OSGi MANIFEST.MF 元数据以确保它们具有一致的接口(interface)类 View 。
例如,DatabaseService 接口(interface)是否包含在测试和 impl 包中?如果是,您需要将该接口(interface)移动到 impl 包(和 Export-Package)或第三个接口(interface)包和 Export-Package。然后,将其他 bundle 调整为 Import-Package。
关于java - felix 上的 OSGI 类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730009/
我是 OSGi 的新手,开始使用 felix。我目前非常精通捆绑包、服务等的概念。我有一个要求,可以将 Felix 嵌入到 Tomcat 中,我尝试使用谷歌搜索,但无法找到适合我的目的的相关解决方案。
如果我检测到我在开发环境中运行,我想自动调用 Karaf“dev:watch”命令。我考虑过将 dev:watch * 直接添加到 etc/shell.init.script 但我不希望它无条件运行。
我有一个捆绑组件, package ipojo; import ipojo.service.Hello; import org.apache.felix.ipojo.annotations.Compo
我使用 apache felix,我想连接 osgi 框架并控制它 - 特别是停止。换句话说,我有应用程序 A(基于 osgi)和应用程序 B。我希望从 B 连接到正在运行的 A 并停止 osgi。我
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Find the dependent bundles in Eclipse at runtime 如何从更新的 bu
是否可以在 felix 的 war bundle 中使用 spring?我在 glassfish 3.1 上使用 spring 3.0.5 和 felix 我尝试输入component-scan在 f
有没有关于如何配置/安装 Apache Felix File install 的示例?在官网上,已经提到你需要配置属性等。但是他们没有提到你需要把这些配置属性放在哪里,如何设置等等。 我已下载 org
我正在为我的 OSGi 项目使用 Felix Framework,但我遇到了有关第三方依赖项的严重问题。 我正在使用 eclipse 和 maven-bundle-plugin 从源生成我的包,并从
我已经下载了org.apache.felix.main.distribution-4.2.1。它正在工作。 现在我想使用org.apache.felix.fileinstall-3.2.6.jar。我
在基于依赖管理器的组件模型中,我试图将组件的所有样板文件隐藏到基类中。我在 eclipse+bndtools 中连接了所有东西,并且可以成功地将 @Init、@Start、@Stop 推送到我的基类中
我在我的项目中使用 scr 注释。有人能解释一下 @Component 注释中元类型属性的用例吗? import org.apache.felix.scr.annotations.Activate;
我有一些应用程序,使用了 Felix OSGi Framework。 更新后如何查看 bundle ? 即我有很多 bundle ,并且所有 bundle 都已加载。我可以更新包目录中的一些包。我如何
我正在开发 Apache Sling WCMS 应用程序。我需要过滤发送到服务器的所有请求并在响应对象中设置一些 header 。我根据 Felix Http Filter Sample 实现了过滤器
我使用 Felix 作为嵌入式应用程序,如下所述, How to start and use Apache Felix from code? 。我想要做的是通过 OSGi 从我的主机应用程序动态加载
无法将包加载到 felix 中。我下载了Felix 6.0.1,运行使用 > java -jar bin/felix.jar ____________________________ Welcome
我有一个包含许多 bundle 的应用程序。事实证明,我需要使用来自可能的 bundle 的导入,并且我从 Maven 收到警告, bundle 依赖项中的三个是循环。 The projects in
我希望使用 Apache Felix 进行一些开发,我很好奇我应该使用什么 Linux 发行版。据我所知,它在 Ubuntu 上受支持,这是一个好的起点吗?或者它甚至重要吗? 最佳答案 这并不重要,因
我使用 Apache Felix 和 Glassfish 工作了几个月。我可以创建简单的 Web 应用程序。现在我必须创建基于 OSGI 架构的 Java 守护进程。是否有任何带有示例代码的好教程可以
Felix有哪些包我需要开始吗? downloads page 上有无数个. (附注:与 OSGI 的“Oscar”引用框架相比,这个名称是对 Odd Couple + 的引用吗?这是我在阅读其中一个
我无法从代码中找到有关开始和使用Apache Felix的信息。 我想用 Apache Felix 的 Shell 做我能够(或不能 ;))的事情。 例如,我如何启动一个模块? 请帮忙。 最佳答案 因
我是一名优秀的程序员,十分优秀!