service - 操作系统Gi : How can a Service auto discover client bundles deployed at runtime?

标签 service client osgi

我有一个场景,在系统安装期间,一些服务被部署到 OSGi 容器上,这些服务将监听提供数据并在运行时动态安装和卸载的其他 bundle 。

这些数据提供者不公开任何服务,甚至不应该调用服务;我的想法是使预部署的服务能够监听这些数据提供程序包的安装事件,如果模式匹配,则处理数据并将其保存到数据存储中。

例如,我有一个 WidgetService,它将监听 Widget 数据提供程序包的安装或卸载事件,ShppingCartService 将监听来自 ShoppableItem 数据提供程序包的安装/卸载事件,等等。

这有助于我保持处理和持久逻辑的集中化,并且我的数据提供者不需要编写任何代码来处理他们的数据。数据提供程序包所期望的只是服务名称/id、服务版本、先决条件以及它们需要发布的数据。

我读过几篇关于 OSGi 的文章,这些文章解释了服务的动态可插拔性以及客户端能够根据服务的可用性发现或丢弃服务;然而,这些都是在谈论客户需要智能地发现和执行他们感兴趣的服务的场景。

我的目的是让客户端完全不知道任何服务发现,就任何代码而言。客户端传递的只是有关客户端插入的服务、依赖项和数据的信息;数据;客户端应该是完全愚蠢的。

这在 OSGi 中可能吗?我已经准备好考虑这种架构,即使以扩展一些 OSGi 核心框架类为代价!

我在以下位置找到了一些可能与堆栈溢出远程相关的问题: Discovering Bundle MetaData with out installing the bundle

但是,我想要一个 Hook 或一个事件,当安装一个或多个数据提供程序包时,它将调用我各自的服务。这些数据提供程序包可能对系统中安装的任何服务感兴趣。我什至准备编写一个中央 bundle 存储库管理器/监听器之类的东西,它将监听任何 bundle 安装并调用我的服务外观,该服务外观将根据数据提供程序 bundle 提供的元数据决定执行哪个服务。

我刚刚开始使用 OSGi,因此需要一些关于如何前进的指导...

如果你们能帮助我实现这一目标,我将非常感谢你们:)!

我内心深处有一个疑问,这在 OSGi 中可能不容易实现,即使这是真的,我也准备花时间并扩展框架来实现这一目标。我所需要的只是一些指导方针和明确的方向。谁知道,如果 OSGi 确实缺乏此功能,那么它将是 future OSGi 规范的一个非常有用的附加组件。

最佳答案

您可以查看 OSGi Core 规范的第 4.7 节(事件)。当包的生命周期发生变化时,例如,框架会引发BundleEvents当安装或卸载时。您需要做的是实现一个BundleListener,然后它将接收事件,以便您的服务可以对更改使用react。

关于service - 操作系统Gi : How can a Service auto discover client bundles deployed at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967582/

相关文章:

objective-c - OSX/ cocoa : setting up service in menu for right click and services list

c - Select() 使用相同的套接字描述符发送和接收

java - 通过Zookeeper运行的Java程序

memory-leaks - Jersey 客户端连接关闭内存泄漏问题

java - OSGi 声明式服务 (ds) 使用

testing - OSGi 单元测试无需打包 bundle 的步骤

java - Android:如何管理永久后台任务?

windows - 为什么我无法访问从 Windows 上的 Minikube 公开的服务?

android - 服务如何在后台运行 - Android

osgi - 对 OSGi 4.3 版和 Felix 感到困惑