Time OSGI捆绑包(或服务)-如何在给定的时间段内注册?

Time OSGI捆绑包(或服务)-如何在给定的时间段内注册?,time,osgi,period,Time,Osgi,Period,搜索没有给我任何提示,在以下情况下我该如何表现: 我希望有两个相同接口的OSGI实现:一个是常规的,另一个应该在给定的时间段内工作(活动/存在/无论什么)(例如圣诞节周:) 主要目标是调用相同的接口,而无需指定任何标志/属性/无需手动切换排名。应用程序应该在这段特殊时间内以某种方式切换实现,在以下时间前后执行另一项/常规工作:) 我是一个新手,也许我不完全理解OSGI的概念,对不起给我一个提示或链接,对不起我的英语 在ApacheAries中使用Felix/Equinox。我还没有看到在框架级别

搜索没有给我任何提示,在以下情况下我该如何表现:

我希望有两个相同接口的OSGI实现:一个是常规的,另一个应该在给定的时间段内工作(活动/存在/无论什么)(例如圣诞节周:)

主要目标是调用相同的接口,而无需指定任何标志/属性/无需手动切换排名。应用程序应该在这段特殊时间内以某种方式切换实现,在以下时间前后执行另一项/常规工作:)

我是一个新手,也许我不完全理解OSGI的概念,对不起给我一个提示或链接,对不起我的英语


在ApacheAries中使用Felix/Equinox。

我还没有看到在框架级别支持基于日期/时间的服务可用性的OSGI容器


如果我是你,我只需在两个接口实现之前删除一个代理服务,并将基于日期逻辑的服务调用放在其中

我还没有看到在框架级别支持基于日期/时间的服务可用性的OSGI容器


如果我是你,我只需在两个接口实现之前删除一个代理服务,并将基于日期逻辑的服务调用放在其中

服务的发布者可以随时使用普通API注册和注销该服务。如果它选择这样做,那么它可以根据一些定期的时间表这样做


如果存在另一个连续可用的服务实例,则该服务的使用者有时会看到该服务的两个实例,有时会看到一个实例。当只有一个实例可用时,只获取该实例是很简单的。当有两个实例时,您需要一种方法来确保获得“首选”实例。SERVICE_RANKING属性就是这样做的一种方法。普通
ServiceTracker
getService
方法将始终返回排名较高的服务,因此这似乎满足了您的要求。

服务的发布者可以随时使用普通API注册和注销该服务。如果它选择这样做,那么它可以根据一些定期的时间表这样做


如果存在另一个连续可用的服务实例,则该服务的使用者有时会看到该服务的两个实例,有时会看到一个实例。当只有一个实例可用时,只获取该实例是很简单的。当有两个实例时,您需要一种方法来确保获得“首选”实例。SERVICE_RANKING属性就是这样做的一种方法。普通的
ServiceTracker
方法的
getService
总是返回排名较高的服务,因此这似乎满足了您的要求。

我不相信您所要求的有任何框架支持

如果您打算避免使用服务过滤器,您可以尝试这样做


实现策略服务。此服务负责决定在给定时间点注册您的服务的哪个实例。当策略服务切换实现时,它只是像往常一样使用register/unregister API。您可以在配置文件中读取策略服务实现,该文件指定服务实现映射的日期范围。这将允许您通过修改配置文件并安装带有新服务的新捆绑包来添加新行为。

我不相信您所要求的有任何框架支持

如果您打算避免使用服务过滤器,您可以尝试这样做


实现策略服务。此服务负责决定在给定时间点注册您的服务的哪个实例。当策略服务切换实现时,它只是像往常一样使用register/unregister API。您可以在配置文件中读取策略服务实现,该文件指定服务实现映射的日期范围。这将允许您通过修改配置文件并安装带有新服务的新捆绑包来添加新行为。

我同意Neil的观点,即服务只有在实际可以调用时才应该发布自身。我对这个问题的解决办法是让所有的服务提供者都依赖于“时间约束依赖”。虽然这种依赖关系在标准依赖关系框架(如声明性服务、Blueprint、iPOJO)中不可用,但可以通过ApacheFelix依赖关系管理器轻松实现,它允许您创建自己类型的依赖关系。请注意,编写这样一个新的依赖项是一项工作,但如果这是应用程序的核心部分,我认为这是值得的。服务使用者不需要任何特殊的逻辑,他们只需调用那里的服务。

我同意Neil的观点,即服务只有在能够被调用的情况下才应该发布自己。我对这个问题的解决办法是让所有的服务提供者都依赖于“时间约束依赖”。虽然这种依赖关系在标准依赖关系框架(如声明性服务、Blueprint、iPOJO)中不可用,但可以通过ApacheFelix依赖关系管理器轻松实现,它允许您创建自己类型的依赖关系。请注意,编写这样一个新的依赖项是一项工作,但如果这是应用程序的核心部分,我认为这是值得的。服务使用者不需要任何特殊的逻辑,他们只需调用那里的服务。

好的,我最后做的是

  • 实现了一个通用的dispatcher捆绑包,并且只通过它调用任何服务(因此,当调用是按需调用时,不需要cron)
  • 当dispatcher获得请求时,它在自己的缓存中搜索接口并-
  • 当有>1个服务具有相同的排名且两者相等时(registere