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

Callback and passing object reference in OSGi

Bundle-A 在 Eclipse 环境中使用声明式服务从 Bundle-B 绑定一个包。

然后 Bundle-A 通过传递 'data' 和 'a reference of a class object' 向 Bundle-B 发送一条消息,Bundle-B 应该将对此消息的响应作为参数。例如。发送(数据,EgClass_1.this);

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

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

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

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

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

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