【问题标题】:Upgrade to Quartz 1.6 on JBoss 4.2.x在 JBoss 4.2.x 上升级到 Quartz 1.6
【发布时间】:2008-10-06 16:02:16
【问题描述】:

在 JBoss 4.2.x 中升级 Quartz 有推荐的方法吗?

JBoss 捆绑了quartz 1.5.2,但我遇到了我想避免的问题(QUARTZ-399QUARTZ-520)。

我不想仅仅为了解决错误而在 JBoss 中修补quartz.jar,而是提供一个新的quartz.jar(加上相关的配置工件)。 Quartz 1.6 migration notes 仅包含特定于 Quartz 的信息,我在搜索过程中找不到任何其他信息。

将新的quartz.jar 放到EAR 文件中似乎行不通,因为旧版本是在服务器级别加载的(在服务器的lib 目录中)。

我很确定有人已经尝试过了,希望这个人可以分享或提供一些链接。

【问题讨论】:

    标签: java jboss upgrade quartz-scheduler


    【解决方案1】:

    您可以在 WAR 或 EAR 中包含 Quartz 1.6,而您的应用程序将使用它。但是,只有该 WAR 或 EAR 中的应用程序组件会使用新的 JAR,这可能是一个问题或一个优势,这取决于您如何设置部署。

    【讨论】:

    • 感谢您的快速回答。刚试了一下,把quartz-1.6.jar放到ear/lib目录下。当我尝试设置触发器的优先级(1.6 的功能)时,我得到一个 NoSuchMethodError。 Quartz 调度器是使用 Spring 的 SchedulerFactoryBean 实例化的,这可能是它不起作用的一个原因。
    • 您是否还在 META-INF/application.xml 中添加了对 JAR 的引用?没有它,类加载器将忽略它。
    • 不,我没有。所有引用的库都在该文件夹中,并由类加载器自动拾取。关键是quartz.jar 在服务器的类路径中,它在应用程序之前加载。
    • 发现了一个与 log4j 类似的问题,但有一个很好的解决方案:jboss.org/feeds/post/…。问题是更改类加载会导致与通过 Spring/JNDI 的 @EJB 进行依赖注入相关的问题。
    • 其他可能影响此的配置选项是 deploy/ear-deployer.xml 中的“隔离”属性。我将此设置为 true,我认为这使 JBoss 使用 EAR 的库而不是 JBoss 自己的库。试试看。
    【解决方案2】:

    在尝试遵循 skaffman 的 cmets 之后,我找到了一个非常简单的解决方案,它不涉及更改 JBoss 的类加载行为。只需将${jboss.server.dir}/lib 中的quartz.jar 替换为quartz 1.6 就可以了,我还没有遇到任何问题。

    重启显示如下输出:

    [QuartzScheduler] Quartz Scheduler v.1.6.0 创建。 [RAMJobStore] RAMJobStore 已初始化。 [StdSchedulerFactory] ​​Quartz 调度程序“QuartzScheduler”从外部提供的属性实例初始化。 [StdSchedulerFactory] ​​Quartz 调度器版本:1.6.0

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多