配置 WSJPA ObjectCache 以提高性能
WebSphere® Java™ 持久性 API (WSJPA) 至 OpenJPA 的扩展提供了只读对象高速缓存,该对象高速缓存可提高特定用例中的性能。仅当您使用处于 JPA 2.0 规范级别的 WSJPA 时,才支持此配置。
关于此任务
实现 WSJPA ObjectCache 对象可以提高应用程序的性能,该应用程序含有用在静态的只读方法中的一组数据,例如访问基本持久性字段和将单向关系持久存储为只读类型。WSJPA ObjectCache 是用于在 EntityManagerFactory 对象级别进行操作的只读实体的非分发式高速缓存。这些高速缓存实例由 Java 虚拟机 (JVM) 中的所有 EntityManager 对象共享,但这些实例不由任何 EntityManager 对象进行管理。当启用该功能时,将先检查 ObjectCache 对象,然后应用程序才访问 OpenJPA DataCache 对象和数据库,从数据库加载持久对象并将这些持久对象存储在 OpenJPA 对象高速缓存中。此外,ObjectCache 实现可与 OpenJPA DataCache 和 QueryCache 功能配合使用以获得更高性能。
请注意以下条件和限制:
可以为单个 JVM 环境启用对象高速缓存,指定此高速缓存所包括的类型,设置它的最大元素大小以及指定超时值。- 从应用程序角度,包括严格只读的类型
- 将只读类型传递至以下操作可引起 UnsupportedOperationException 错误消息:
- 正在将只读实体传递至 EntityManager.merge(…)。
- 正在将只读实体传递至 EntityManager.persist(…)。
- 正在将只读实体传递至 EntityManager.remove(…)。
- 对 WebSphere JPA 运行时所返回的只读类型调用 setter 方法可引起 UnsupportedOperationException 错误消息。
- 将只读类型传递至以下操作可引起 UnsupportedOperationException 错误消息:
- 包括在 ObjectCache 中的类型不适合于高速缓存到 OpenJPA DataCache 中。请不要混淆可由 OpenJPA 二级高速缓存 (openjpa.DataCache) 进行高速缓存的类型;ObjectCache 不应与 JPA 2.0 规范定义的第二级高速缓存混淆。如果这些类型是混淆类型,那么在创建 EntityManager 对象时将发生异常。
- 只包括基本字段,否则在创建 EntityManager 对象时可能会发生异常。
- “正在将只读实体传递至 EntityManager.contains(…)”始终返回 false,即使刚刚从“查找/查询”操作将其返回也是如此。
