4

假设您有一个带有各种视图的 Eclipse 插件,这些视图应该显示来自将数据推送到视图的某些 OSGi 包的数据。我不是让每个视图都与 OSGi 包通信,而是有一个中间 Facade 类,它充当视图的黑板并管理视图与其他 OSGi 包之间的通信——嗯,这就是理论。

问题的出现是因为 ui 包(带有视图和外观)使用声明式服务与另一个包(称为 DataStore)进行通信。由于 Data Store 从另一个源接收异步数据更新,因此它需要将内容推送到 Facade(以及其他捆绑包,如果它们可用)。OSGi 实例化 Facade 以满足对 DataStore 的 DS 配置的基数要求,但视图由 Plugin 的 IApplication 实现实例化。即使 IApplication 和 Facade 是同一个类,我也会得到两个彼此不认识的独立实例。

如何启用这些组件(插件应用程序、视图等和 OSGi 实例化外观)之间的通信?

4

2 回答 2

1

一种解决方案是使用单例,并使用该单例注册 Application 和 Facade 中的一个或两个。

但是,我真的不喜欢在这个问题上抛出一个全局变量的想法。这似乎没有意义——这一定是一个常见问题,所以我假设有一个优雅的解决方案,我只是不知道如何搜索它。

于 2008-11-11T23:33:25.313 回答
1

您还可以使用Spring DM连接您的 OSGi 服务并使用Martin Lippert 胶水插件将视图与 OSGi 服务(或 Spring bean)连接起来,它的好处是您不需要编写任何基于服务 API 或 spring API...

于 2008-11-12T23:41:46.810 回答