高速缓存计时器服务的数据
如果要针对 EJB 计时器服务优化数据库访问和 SQL 调用,那么可允许应用程序服务器高速缓存该计时器的数据。高速缓存允许应用程序服务器复用计时器数据,从而不必在每次需要该数据时查询数据库。
关于此任务
企业 Bean 的规范要求对 javax.ejb.Timer 接口的每个调用生成一个对数据库的 SQL 调用,以便应用程序可确保 EJB 计时器使用最新可用数据。如果经常调用这些方法,或者您有许多 EJB 计时器可调用其中任何方法,那么应用程序服务器将在很短时间内生成许多 SQL 语句。在某些情况下,您可能会发现严格遵循此要求对性能不利,并且会导致开销增加。
例如,考虑计时器仅在每周一上午 12:00 到期的情况。在该周内,对计时器接口调用方法的所有应用程序将导致创建 SQL 调用,但该调用将始终返回相同数据。此外,如果应用程序对计时器调用 ejbTimeout 方法,那么与该计时器相关联的数据无法更改;对该计时器运行 ejbTimeout 方法时,无法更新存储在数据库中的计时器数据。因此,应用程序在超时时间段进行的所有后续方法调用将导致生成不必要的 SQL 调用并且会对数据库进行不必要的传递。
如果对计时器数据启用高速缓存,那么仅当第一次调用所配置方法时,应用程序服务器才会查询数据库。对于对某个所配置方法的后续调用,应用程序服务器将在计时器对象的有效期内使用高速缓存数据,而不需要生成新 SQL 调用。

- 启用此功能后,配置将不符合 EJB 规范。
- 此功能可能导致计时器使用旧数据。计时器的下一个到期时间段过去后,计时器服务的高速缓存数据将变旧。
例如,假定计时器配置为每小时到期一次。如果创建并保存计时器对象,那么应用程序服务器针对该对象高速缓存的数据的保鲜期只有一个小时。高速缓存数据将与存储在数据库中的数据完全相同。
如果在第一个小时内调用任何计时器方法,那么计时器数据都是最新的。但是,到期时间段过去后,该计时器的高速缓存数据变旧,并且可能不会反映数据库中的实际数据。在此示例中,如果在一个小时和一个半小时后查询所有计时器的 EJB 容器,那么应用程序将返回新计时器对象,该对象包含保鲜期为 30 分钟的高速缓存数据;这是因为第二个小时时,计时器将再次到期,所有高速缓存数据将变旧。
过程
示例
- App1#EJBJar1.jar#EJBTimer1
- App2#EJBJar2.jar#EJBTimer2
- 示例 1
- 此示例对所有计时器和所有应用程序的所有方法应用高速缓存。请使用下列其中一个值:
- 使用缺省值:
*
- 指定整数:
*=127
- 使用缺省值:
- 示例 2
- 此示例对所有应用程序的所有计时器上的 getInfo 方法应用高速缓存。使用以下值:
*=2
- 示例 3
- 此示例对 EJBTimer2 上的 getHandle 和 getNextTimeout 方法应用高速缓存。使用以下值:
App2#EJBJar2.jar#EJBTimer2=5
- 示例 4
- 此示例对以下各项应用高速缓存:
- EJBTimer1 上的 getInfo 方法
- EJBTimer2 上的 getNextTimeout 和 getTimeRemaining 方法
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12