gpt4 book ai didi

osgi - Quartz 调度器和 OSGI

转载 作者:行者123 更新时间:2023-12-01 15:15:01 25 4
gpt4 key购买 nike

我有一个 OSGI 调度程序包,其中包含 Quartz Scheduler Jar。这个 bundle 只向其他 bundle 公开一个应用程序接口(interface),当一个新作业被注册时,它被包装到一个临时作业(实现 StatefulJob)并使用调度程序进行调度。

通过这种方式,我不必公开 Quartz Scheduler jar(它不太符合 osgi)。这种方法的问题在于,由于 StatefulJob 避免并行执行作业并且我只有一个实际作业(临时作业),所以我所有的实际作业一次运行一个。

不幸的是,标记接口(interface)似乎是表示该作业是有​​状态作业的唯一方式。我能找到的唯一解决方案是让守护程序公开 StatefulJobInterface(删除假工作),但这样做,我遇到了很多类路径问题。有更简单的解决方案吗?

最佳答案

使用真正的 Quartz OSGi 包,比如这里提供的包:

http://ebr.springsource.com/repository/app/bundle/detail?name=com.springsource.org.quartz

最新的 Quartz 版本是 1.6.2。如果您需要更新的版本,使用 bnd 构建您自己的包非常容易或 bundlor .

然后,您可以在 OSGi 环境中的任何地方将 StatefulJob 作为服务公开,并让您的调度程序 bundle 向 Quartz 注册和注销这些作业。更好的是,让调度程序包监听任何包装您的触发器和作业信息的服务,例如 Spring CronTriggerBeanSimpleTriggerBean .这样,

1) 您的内部 API/OSGi 服务不是 Quartz 特定的——只有调度包依赖于 Quartz 包,并且

2) 您的应用程序包可以确定作业的计划,而不是计划包试图弄清楚。

更新:ServiceMix 项目提供了更新的 Quartz OSGi 包:http://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.quartz/

关于osgi - Quartz 调度器和 OSGI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com