JPA 2.0 二级高速缓存的动态高速缓存提供程序
学习如何将 WebSphere® Application Server 动态高速缓存服务用作 Java Persistence API (JPA) 二级 (L2) 高速缓存提供程序。JPA 2.0 具有已标准化的二级高速缓存接口。WebSphere Application Server 支持 JPA 标准。动态高速缓存服务作为 JPA 的二级高速缓存提供程序插入。二级高速缓存可提高 JPA 应用程序的性能,您可以为 WebSphere Application Server 环境中的 JPA 应用程序配置和监视动态高速缓存服务。
JPA 2.0 的动态高速缓存 JPA 二级 (L2) 高速缓存提供程序在各种持久上下文、事务和用户之间共享实体状态。启用高速缓存后,将从二级高速缓存装入未在持久上下文中找到的实体。L2 高速缓存可避免对当前装入的实体进行数据库访问。有关 L2 高速缓存的更多详细信息,请查看 JPA 2.0 规范。
JPA 利用多个可配置的二级高速缓存使性能达到最大。JPA 数据高速缓存是一个在 EntityManagerFactory 级别操作的持久对象数据高速缓存。启用该数据高速缓存后,将在访问数据存储器之前检查该数据高速缓存。在落实对象及从数据存储器装入持久对象时,数据存储在高速缓存中。除数据高速缓存外,JPA 还为查询高速缓存定义服务提供程序接口。
查询高速缓存存储由查询执行返回的对象标识。当您运行查询时,JPA 将对基于启动时所使用的查询属性和参数的键进行组装,并查找已高速缓存的查询结果。如果找到已高速缓存的结果,那么将查找该结果中的对象标识,并返回最终的支持持久化的对象。否则,将针对数据库启动查询,并将由该查询装入的对象标识放入高速缓存中。在完全遍历查询启动时所返回的对象标识列表后,才会高速缓存该列表。
- 通过 WebSphere Application Server 数据复制服务 (DRS) 和高可用性 (HA) 服务进行集群分布式高速缓存同步和复制。
- 对高速缓存进行复杂和先进的 DataCache 和 QueryCache 监视、调整及管理。二级高速缓存将继承可用的动态高速缓存工具的整个生态系统。
- 本机服务方区域 z/OS® 支持。
- 其性能与缺省高速缓存提供程序相当(如果不更好)。
JPA 标准提供了别名机制,这样就能够轻松地配置 JPA 插件。通常为 JPA 2.0 的动态高速缓存二级高速缓存提供程序配置 dynacache 别名。您可以使用 dynacache 别名来设置 JPA 的 DataCache 和 QueryCache 属性。如果 QueryCache 属性设置为使用 dynacache,那么 DataCache 属性也将使用 dynacache 别名。您可以将 QueryCache 和 DataCache 属性配置为使用不同类型的高速缓存提供程序。可以将 QueryCache 属性设置为缺省值,而将 DataCache 设置为使用动态高速缓存,反之亦然。最好对 DataCache、QueryCache 和 DataCacheManager 使用 WebSphere Application Server 动态高速缓存服务。如果 DataCache 设置为 dynacache,那么 RemoteCommitProvider 不会执行任何操作,因为 DRS 和 HAM 用于执行高速缓存同步。您不能独立于 DataCache 启用 QueryCache 属性。QueryCache 属性受益于实体数据所高速缓存在的 DataCache 属性的可用性。
配置 JPA 动态二级高速缓存提供程序(基本方法)
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/>
<property name="openjpa.DataCacheManager" value="dynacache"/>
动态高速缓存名称 | 属性名 | 别名 |
---|---|---|
DataCache 高速缓存提供程序 | com.ibm.ws.cache.openjpa. DynacacheDataCache | dynacache |
QueryCache 高速缓存提供程序 | com.ibm.ws.cache.openjpa. DynacacheQueryCache | dynacache |
RemoteCommitProvider | com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider | none |
DataCacheManager | com.ibm.ws.cache.openjpa. DynacacheDataCacheManager | dynacache |
配置 JPA 动态二级高速缓存提供程序(高级方法)
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache",
CacheSize=1000,
EnableDiskOffload=true,
DiskCacheSizeInGB=4,
DiskOffloadLocation=c:\temp,
EnableCacheReplication=true)"/>
动态高速缓存定制属性 | 缺省值 |
---|---|
CacheName | default |
CacheSize | 2000 |
EnableDiskOffload | False |
EnableCacheReplication | False |
DiskCacheSizeInGB | 不适用 |
DiskOffloadLocation | 不适用 |
ReplicationType | 1、2 或 4。1 表示 NOT_SHARED,2 表示 PUSH,4 表示 PUSH_PULL |
wsadmin>set mbean [$AdminControl queryNames type=DynaCache,*]
wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
66
71
10
A5614-67
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
您还可以使用 Extended Cache
Monitor 来查看由 JPA 运行时放入高速缓存中的高速缓存标识和键值的内容。在集群环境中使用动态高速缓存二级高速缓存提供程序
客户可以在 WebSphere Application Server 以寻常方式定义一个高速缓存实例,然后引用 JPA DataCache 属性值的 CacheName 属性中的名称。您可以使用 cacheinstances.properties 文件、DistributedMapFactory 或管理控制台定义对象高速缓存实例。
所有属性都是可选的,如果您未指定属性,那么将采用缺省属性。如果高速缓存实例不存在,那么动态高速缓存服务将创建高速缓存实例。您可以使用类似方式完成 QueryCache Dynacache 实例的高级配置。
JPA 数据高速缓存既在单 JVM 环境中操作,也在多 JVM 环境中操作。多 JVM 高速缓存是通过在集群 WebSphere Application Server Network Deployment 环境中使用数据复制服务 (DRS) 实现的。
对于使用数据复制服务在 WebSphere Application Server Network Deployment 环境中的服务器之间复制的动态高速缓存 DataCache 和 QueryCache 实例中的实体及查询,请配置一个复制域并将该复制域与高速缓存实例相关联。持久性单元还必须将 openjpa.RemoteCommitProvider openJPA 属性设置为 none。
- 在管理控制台中创建一个复制域,然后在必须共享分布式高速缓存的所有应用程序服务器上的动态高速缓存服务面板上将此复制域与 baseCache 高速缓存实例相关联。动态高速缓存服务将使用此复制域在复制域中的服务器之间复制数据。
- 通过在定义高速缓存实例的配置时将 enableCacheReplication 属性设置为 true 来配置高速缓存实例。如果您未指定 replicationType 属性,那么缺省情况下会将高速缓存实例配置为 NOT_SHARED 共享方式(在此共享方式下,仅传播失效项)。您可以将高速缓存实例配置为 NOT_SHARED、PUSH 和 PUSH_PULL 共享类型。请参阅高速缓存复制主题以了解有关此主题的更多信息。
- 在复制域中的所有应用程序服务器上,将 JVM 定制属性 com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup 设置为 true。此定制属性可帮助服务器上的 JPA 高速缓存实例更早更快地进行引导。
- 通过定义一个共享库并将它与服务器类装入器相关联来创建此共享库,以使实体类在应用程序服务器的类路径中可用。此步骤是动态高速缓存服务和 DRS 反序列化复制的实体对象时的必需步骤。有关共享库的更多信息,请参阅“共享库集合”、“管理共享库”和“将共享库与服务器相关联”主题。
- 将 openjpa.RemoteCommitProvider 设置为 none。
- org.apache.openjpa.event.SingleJVMRemoteCommitProvider(配置有“sjvm”别名)
- org.apache.openjpa.event.TCPRemoteCommitProvider
- org.apache.openjpa.event.JMSRemoteCommitProvider
JPA 二级高速缓存故障诊断
# Significant dynamic cache OpenJPA messages in the SystemOut.log file
DYNA1081I: OpenJPA L2 DataCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".
# Applicable only if QueryCache is enabled
DYNA1080I: OpenJPA L2 QueryCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".