为持久性计时器配置 Enterprise JavaBeans 计时器服务

对于持久性 EJB 计时器,可配置 EJB 计时器服务以控制用于存储这些计时器的数据源、计时器的重试时间间隔以及针对超时回调方法调用失败的重试次数。

关于此任务

如果启用了 ejbPersistentTimer 功能部件,那么必须配置数据源以保存计时器,否则使用持久性计时器的任何尝试将失败。如果已配置 DefaultDataSource 并且系统未配置任何其他特定数据源以供 EJB 计时器服务使用,那么 EJB 计时器服务将使用 DefaultDataSource。

而且,EJB 计时器服务会以每 5 分钟一次的频率对持久性计时器重试超时回调方法的失败调用,直到超时回调方法成功完成。

使用以下选项来配置持久性计时器。

EJB 持久性计时器安排的执行程序

指定对控制持久性计时器行为的持久性执行程序的引用。系统提供了缺省实例 defaultEJBPersistentTimerExecutor,它将 DefaultDataSource 用作持久性存储。EJB 持久性计时器安排的执行程序引用可能更改为定制配置,或者缺省实例可能被覆盖以更改特定值。以下选项对持久性执行程序可用:

重试限制

指定可重试失败超时回调方法的最大次数。如果超时回调方法在重试时成功,那么服务器将停止尝试运行该方法。如果重试失败,那么服务器将继续尝试,直到超时回调方法成功或达到重试限制。在达到重试限制后,服务器不会尝试运行超时回调方法,即使先前尝试未成功也是如此。缺省值 -1 表示重试次数无限制。值 0 指示不重试,它不符合 EJB 规范。值 1 或更高的值指示允许进行特定次数的重试。

对于不需要非持久性计时器在每个安排时间完成的应用程序,更改针对非持久性计时器重试超时回调方法的次数的配置很有用。例如,如果应用程序创建的非持久性计时器安排为每 5 分钟运行一次,那么将重试次数配置为 0 会导致该计时器每 5 分钟运行一次,而不理会它的运行是否成功。

重试时间间隔

指定失败超时回调方法的重试时间间隔。第一次重试始终立即进行,无论对此值配置的时间间隔如何都是如此。所有其他重试等待针对此值指定的时间间隔。值 0 表示立即进行所有重试。值 1 或更高的值指示重试必须等待该特定秒数。缺省值为 300 秒。

对于超时回调方法在安排时间前完成很重要的应用程序,对非持久性计时器配置不同重试时间间隔很重要。此方法也适用于可接受将计时器完成延迟至稍晚时间(例如,稍晚重试时间间隔)以启用超时回调方法的应用程序,以使应用程序有更好的机会成功运行。

持久性任务存储

指定要使用的数据源。系统提供了缺省实例 defaultDatabaseStore,它将 DefaultDataSource 用作持久性存储。

过程

  1. 配置应用程序服务器以在 server.xml 文件中包含支持持久性计时器的 EJB 功能部件。
     <featureManager>
             <feature>ejbPersistentTimer-3.2</feature>
        </featureManager>
  2. server.xml 文件中配置 EJB 计时器服务,以对持久性计时器使用特定最大重试次数值和重试时间间隔值。 例如,使用以下配置指定持久性计时器最多重试 3 次,重试间隔时间为 10 秒:
    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryInterval="10s"
              retryLimit="3"/>

    对于此配置,最多可对计时器调用 4 次超时回调方法。第一次调用在安排时间进行。如果第一次调用失败,那么第一次重试在失败后立即进行。如果超时回调方法仍然失败,那么第二次和第三次重试分别在 10 秒后和 20 秒后进行。

    在以下示例中,失败超时回调方法仅重试一次。回调时间间隔不重要,因为第一次重试始终立即启动。

    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="1"/>
  3. server.xml 文件中配置 EJB 计时器服务,以对持久性计时器使用特定数据源。 例如,使用以下配置指定必须存储持久性计时器(通过使用 jdbc/timerDataSource)。
    <dataSource id="timerDataSource" jndiName="jdbc/timerDataSource">
    </dataSource>
    <databaseStore id="EJBTimerDatabaseStore" tablePrefix="EJBTimer_"dataSourceRef="timerDataSource"/>
    <persistentExecutor id="defaultEJBPersistentTimerExecutor"
              taskStoreRef="EJBTimerDatabaseStore"/>

用于指示主题类型的图标 任务主题

文件名:twlp_config_ejbtimer_persistent.html