java - 多个OSGi服务实例和DS绑定(bind)

标签 java osgi declarative-services

我认为结合使用 OSGi 服务 + DS 是正确的做法,但是,我真的很想滥用它。要么就是这样,要么就是纯粹太棒了。 (两者仍然是可能的)。

让我们想象一下以下应用程序:它是一个家庭数据库。我有两个界面,House 和 Window。假设我对每个可用的至少有一个实现,配置为...好吧,作为需要配置来实例化的组件,并且为了创建新实例,我只需将此配置提供给正确的 pid。 (它不是工厂组件,也不是服务工厂 - 官方名称是什么?这是 Neil 的优秀 post about it)。

到目前为止一切顺利,这就像一个魅力。

房子就是房子。有自己的地址,每一个都不同,很容易通过街道属性识别。然而,Windows 实例可以在不同的房屋之间共享;它们的配置基本上是宽度和高度。

现在,这些组件还可以在 0..n 基数配置中相互绑定(bind)(即使您不想住在没有 window 的房子里)。因此,每个房子都有一个 window 列表,对于每种 window 类型,我们都知道哪个房子有它(多对多关系)。

我的问题是,假设两栋房子共用三个 window 。我该如何描述这一点呢?我觉得基于属性的过滤表达力不够。我还觉得这可能不是让框架实例化我的对象的正确方法,但它太方便了。

想法?我是在滥用它,还是按预期使用它?

(我还可以使用 DS 完成一半的工作:将 Houses 列表绑定(bind)到它的 Window 实例引用,反之亦然,然后组件实例可以调用 registerWhatever() 函数目标实例 - 但我仍然需要以某种方式描述至少这一半。)

最佳答案

很难弄清楚你在这里问什么,可能是因为 House/Window 抽象不起作用。显然这不是您真正在做的事情...您只是想模糊或简化真实模型吗?我知道这是有充分理由的,但 House/Window 听起来更像是域类,而不是服务或组件。如果您确实为数据库的每行创建一个服务,那么我认为您正在滥用服务的概念。

关于java - 多个OSGi服务实例和DS绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9653967/

相关文章:

osgi - 带有 RSA 和 DS 的 Apache CXF ContainerRequestFilter

java - OSGI 中声明性服务的动态目标

java - 当前代码运行时仅返回值 0

java - 在 Java 中如何使用嵌套类访问 "this"?

javascript - <script> in sightly 下的list元素如何循环?

windows - OSGi 包启动顺序 linux vs windows

java - 泛型类中的泛型静态方法

java - 这个图案的名字是什么? (重复使用蝇量级)

java - 使用从 Kura OSGi 包中的库创建的现有插件项目

java - 使用 DS 注释时 Gradle 不生成 SERVICE_COMPONENT