搜索没有给我提示,我该如何应对以下情况:
我希望有相同接口的 2 个 OSGI 实现:一个是常规的,另一个应该在给定的时间段内工作(活跃/在场/无论如何)(圣诞节周 fe :))
主要目标是在不指定任何标志/属性/不手动切换排名的情况下调用相同的接口。应用程序应该在这个特殊时期以某种方式切换实现,在之前和之后做另一项/常规工作:)
我是新手,也许我在某处不完全理解 OSGI 概念,抱歉给我提示或链接,抱歉我的英语。
将 Felix/Equinox 与 Apache Aries 一起使用。
服务的发布者可以随时使用普通 API 注册和取消注册该服务。如果它选择,那么它可以根据一些常规时间表这样做。
如果有另一个持续可用的服务实例,那么服务的使用者有时会看到两个服务实例,有时会看到一个。当只有一个实例可用时,只获取该实例是微不足道的。当有两个实例时,您需要一种方法来确保获得“首选”实例。SERVICE_RANKING 属性是一种方法。getService法线的方法ServiceTracker将始终返回排名较高的服务,因此这似乎可以满足您的要求。
我还没有看到在框架级别支持基于日期/时间的服务可用性的 OSGI 容器。
如果我是你,我会简单地将代理服务放在两个接口实现的前面,然后将基于日期逻辑的服务调用放在那里。
我同意 Neil 的观点,即服务只有在可以实际调用时才应该发布自己。我对这个问题的解决方案是让所有服务生产者都依赖于“时间约束依赖”。虽然这种依赖在标准依赖框架(如声明式服务、蓝图、iPOJO)中不可用,但它可以通过 Apache Felix 依赖管理器轻松实现,它允许您创建自己的依赖类型。请注意,编写一次这样的新依赖项是一些工作,但如果这是您应用程序的核心部分,我认为这是值得的。服务消费者不需要任何特殊逻辑,他们只需调用那里的服务。
好吧,我终于做了什么......
很多工作,我应该说:)但工作几乎完美:)
谢谢大家给我提示,真的很有帮助!!!
我不相信您所要求的有任何框架支持。
如果你打算避免使用服务过滤器,你可以试试这个。
实现一个 PolicyService。该服务负责决定应在给定时间点注册您的服务的哪个实例。当策略服务切换实现时,它只是像往常一样使用注册/取消注册 API。您的策略服务实现可以读取一个配置文件,该文件指定日期范围到服务实现映射。这将允许您通过修改配置文件并使用新服务安装新捆绑包来添加新行为。