java - OSGi 中的回调和传递对象引用

标签 java osgi osgi-bundle declarative-services

Bundle-A 使用 Eclipse 环境中的声明性服务绑定(bind)来自 Bundle-B 的包。

然后 Bundle-A 通过传递“数据”和“类对象的引用”向 Bundle-B 发送一条消息,该消息应该得到对此消息的响应作为参数。例如。发送(数据,EgClass_1.this);

Bundle-B 应该处理消息并将响应发送回 Bundle-A 中等待响应的类。

不幸的是,这在 OSGi 中是不可能的,因为它会创建一个循环。两个包不能互相导入。

我想传递对类对象的引用,以便 Bundle-B 可以调用它的方法来获取信息,而不是传递太多参数,但最重要的是,这样 Bundle-B 可以跟踪它应该调用哪个类实例回调开启。我将有该类及其子类的多个实例。

作为解决方法,我将 Bundle_A 分为两个部分:接口(interface)和实现类。这样Bundle_A可以绑定(bind)Bundle_B,并且Bundle_B也可以导入Bundle_A接口(interface)的接口(interface)定义,以便它可以使用作为参数传递的对象引用。

但是上述方法感觉不干净并且不符合 OSGi 原则。对于这种双向通信是否有更好的方法,或者我做得对吗?提前致谢!

最佳答案

如果我理解正确的话,你想使用发送调用发送数据,并在 B 完成时回调。 Bundle A 需要知道服务接口(interface)才能进行发送调用。所以你总是会有依赖A->B。因此,为了避免循环,我还会在 B 中定义回调接口(interface)。然后,A 中的某个类可以实现回调接口(interface),然后将对象实例作为第二个参数发送。那么B只需要知道回调接口(interface)即可。

关于java - OSGi 中的回调和传递对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31003669/

相关文章:

java - file_paths.xml 无法从字符串资源读取

java - OSGi ServiceTracker 中的漂亮 URL

java - 使用 ByteArray 安装 OSGi Bundle

java - 多个 OSGi 服务

java - 非唯一列上的 HIbernate onetoMany 映射

java - 无法在recyclerview中使用exoplayer播放视频

java - MyBatis - ResultHandler 未被调用

java - 在 OSGi 包中使用 https 保护 Web 服务

java - 动态加载osgi包中的类

java - 从代码中解析 OSGi 包