`

Coherence企业级缓存(五)与Hibernate集成(2)

阅读更多

(From http://raymondhekk.iteye.com/blog/253262)

 
3. Cache客户端配置:Hibernate配置 
3.1) hibernate.cfg.xml 
Xml代码  
  1. <property name="hibernate.cache.provider_class">  
  2. com.tangosol.coherence.hibernate.CoherenceCacheProvider</property>      
  3. <property name="hibernate.cache.use_minimal_puts">true</property>  
  4. <property name="hibernate.cache.use_query_cache">true</property>  


3.2) 启用查询缓存的代码 
要确保代码中使用查询,即在创建 query 后,打开开关,并设置cacheRegion,本例中使用统一的 cacheRegion “HIBERNATE_QUERY_CACHE” 

Java代码  
  1. query.setCacheable(true);  
  2. query.setCacheRegion(HIBERNATE_QUERY_CACHE);  


3.3) 启用实体L2缓存 
在 hbm.xml 中配置  节点,为VO类启用实体缓存。 

Xml代码  
  1.    
  2. <class name="com.xxx.system.perm.persistent.PermVO" table="SYS_PERM">   
  3. <cache usage="nonstrict-read-write"/>  


     3.4) 客户端缓存配置 
客户端要使用与服务端同样的缓存配置 hibernate-cache-config.xml, 否则可能无法进行存储。 本例将其复制过来,放到classpath 下的 config目录中,因此,客户端启动命令(如果是tomcat,weblogic,websphere,修改相应cmd或bat文件)中也要加java参数: 
引用
-Dtangosol.coherence.cacheconfig=config/hibernate-cache-config.xml


4. 启动客户端Hibernate应用程序 

执行数据查询操作,观察日志,以确定数据存储到了M2的三个节点中。 
4.1) Coherence客户端启动日志 

引用
2008-10-14 17:56:13.609 Oracle Coherence 3.3.1/389  (thread=main, member=n/a): Loaded ... 
2008-10-14 17:56:13.625 Oracle Coherence 3.3.1/389  (thread=main, member=n/a): Loaded ... 
2008-10-14 17:56:13.625 Oracle Coherence 3.3.1/389  (thread=main, member=n/a): Optional ... 

Oracle Coherence Version 3.3.1/389 
Grid Edition: Development mode 
Copyright (c) 2000-2007 Oracle. All rights reserved. 
2008-10-14 17:56:15.296 Oracle Coherence GE 3.3.1/389  (thread=Cluster, member=n/a): Service Cluster ... 
2008-10-14 17:56:15.515 Oracle Coherence GE 3.3.1/389  (thread=Cluster, member=n/a): This Member(Id=5,... 
2008-10-14 17:56:15.609 Oracle Coherence GE 3.3.1/389  (thread=Cluster, member=n/a): Member(Id=2, Ti... 
2008-10-14 17:56:15.609 Oracle Coherence GE 3.3.1/389  (thread=Cluster, member=n/a): Member(Id=3, .... 
2008-10-14 17:56:15.703 Oracle Coherence GE 3.3.1/389  (thread=main, member=5):


4.2) 观察Hibernate SQL输出 
记得在log4j.xml 中打开相应的日志开关: 
Xml代码  
  1. <category name="org.hibernate.SQL">  
  2.         <priority value="DEBUG" />          
  3.         <appender-ref ref="CONSOLE" /> <!-- ASYNC_Hibernate_SQL -->  
  4.     </category>                     

观察日志输出 
引用

Execute No. 1 ******************** 
2008-10-14 18:00:44,687 [DEBUG](AbstractBatcher.java,346) - select  this.PERMCODE as  PERM1_15_0_, .... 
(No.1)result size:1 

Execute No. 2 ******************** 
(No.2)result size:1 

Execute No. 3 ******************** 
(No.3)result size:1 

Execute No. 4 ******************** 
(No.4)result size:1 

Execute No. 5 ******************** 
(No.5)result size:1


第一次执行了sql, 
后面sql都未执行,并且查询结果数为1,和第一次执行sql的结果相同。表明之后从Coherence中获取了数据, 缓存生效。 

4.3) 查看M2 上的cache数据: 

在M2上的节点控制台切换到 HIBERNATE_QUERY_CACHE cache下面,执行: 
引用

cache HIBERNATE_QUERY_CACHE 



并执行Coherence命令 
引用
list


命令查看所有已在Cache中存储的数据。 下面的日志每个 sql:开头的就是一个对Query的缓存项。 
引用

Map (HIBERNATE_QUERY_CACHE): list 
sql: select managelogv0_.LOGID as LOGID5_, managelogv0_.OPRTIME as 
TE5_, managelogv0_.OPRACTION as OPRACTION5_, managelogv0_.OPRTYPE a 
OG managelogv0_; parameters: ; named parameters: {}; first row: 0; 
, 285, 286, 287, 288, 321] 
key1 = value1 
sql: select  this.PERMCODE as  PERM1_15_0_,  this.MODULECODE as  MO 
RM5_15_0_,  this.PORTNO as  PORT6_15_0_ from (select  t.perm_code a 
       t.module_code as moduleCode, 
       t.perm_name as permName, 
       t.perm_desc as permDesc, 
       t.port_no as portNo, 
       t.perm_type_code as permTypeCode 
                from sys_perm t join sys_role_perm o 
    on t.perm_code = o.perm_code 
    where o.role_code = ? ) this  ; parameters: ; named parameters: 
sql: select count(*) as col_0_0_ from SYS_MANAGELOG managelogv0_; p&hellip;. 


OK, 大功告成,成功将Coherence与Hibernate集成,Hibernate通过Coherence进行实体数据,查询数据的缓存。 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics