1

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

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

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

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

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

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

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

4

1 回答 1

2

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

于 2015-06-23T14:34:05.037 回答