Hibernate 2nd-level cache: JBoss Caching 配置与注意事项

依赖包:

jboss-cache-1.4.1.jar

jboss-client-4.0.2.jar

jboss-common-client.jar

jboss-jmx.ja

jboss-system-4.0.2.jar

jgroups-2.4.1.jar

concurrence

 

check those under the attached file ensential-jars.zip

 

配置

references:

The manager look up classes setting:

http://hi.baidu.com/javajavajava/blog/item/beb31a3f251f52ea54e723ae.html

# to use the second-level cache with JTA, Hibernate must be able to obtain the JTA transactionManager

#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup

 

The frequentely asked questions,

http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/cache/Cache_Frequently_Asked_Questions/tree_cache.html

 

There are many basic and critical questions asked here

 

1. 配置 Classes/Collections

   为了方便管理classes/collections二级缓存的配置, 最好的办法就是将配置统一放在一个地方. 我们可以将所有的Caching objects/collections 统一放在SessionFactory的配置位置

   以Spring+Hibernate 配置为例.

<bean id="sessionFactory" 
           class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
.....

<!-- Centralize those configuration in one place for well management and tuning -->
<!-- To enable the classes -->
<property name="entityCacheStrategies">
  <props>
    <prop key="Test.Country">read-only</prop>
    <!-- JBoss caching only support the concurrence level with read-only and transactional(REPEATABLE-READ). Using OPTIMISTIC Node Locking Strategy to enhance the performance -->
    <prop key="Test.Memeber">transactional</prop>
 </props>
</property>
 		
<property name="collectionCacheStrategies">
  <props>
    <prop key="Test.Member.addresses">transactional</prop>
    </props>
 </property>

......

</bean>

 

2. 启用 2nd-level cache

    以  Spring+Hibernate 为列,  在hibernateProperties的配置信息里面添加如下信息

    a. 如果是悲观锁的方式,定义provider_class 为 org.hibernate.cache.TreeCacheProvider

<bean id="hibernateProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="properties">
     ......
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.TreeCacheProvider</prop>
    <prop key="hibernate.cache.use_second_level_cache">true</prop>				
    <prop key="hibernate.cache.use_query_cache">true</prop>
    .....
   </property>
</bean>

   b. 如果是乐观锁的方式,定义provider_class 为 org.hibernate.cache.OptimisticTreeCacheProvider,同事需要显示设定 hibernate.transaction.manager_lookup_class, 我本地的编译环境是基于WebSphere的,所以设定为 WebSphereTransactionManagerLookup

<bean id="hibernateProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="properties">
     ......
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.OptimisticTreeCacheProvider</prop>
    <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereTransactionManagerLookup</prop>
    <prop key="hibernate.cache.use_second_level_cache">true</prop>				
    <prop key="hibernate.cache.use_query_cache">true</prop>
    .....
   </property>
</bean>

   如何设定乐观锁和悲观锁,将在后面介绍.

 

4. JBoss Caching 的数据同步方式 

   LOCAL - local, non-clustered cache. Local caches don't join a cluster and don't communicate with other caches in a cluster. Therefore their contents don't need to be Serializable; however, we recommend making them Serializable, allowing you the flexibility to change the cache mode at any time.
   REPL_SYNC - synchronous replication. Replicated caches replicate all changes to the other caches in the cluster. Synchronous replication means that changes are replicated and the caller blocks until replication acknowledgements are received.
   REPL_ASYNC - asynchronous replication. Similar to REPL_SYNC above, replicated caches replicate all changes to the other caches in the cluster. Being asynchronous, the caller does not block until replication acknowledgements are received.
   INVALIDATION_SYNC - if a cache is configured for invalidation rather than replication, every time data is changed in a cache other caches
        in the cluster receive a message informing them that their data is now stale and should be evicted from memory.
        Then the cache will reload the data from datasource, This reduces replication overhead while still being able to
        invalidate stale data on remote caches.
   INVALIDATION_ASYNC - as above, except this invalidation mode causes invalidation messages to be broadcast asynchronously.

 

3. 乐观锁 和 悲观锁有何区别

   

   乐观锁

   如果设定为乐观锁的模式,  所配置的Concurrence Transactional 将会失效,  并且将忽略已设定的REPEATABLE_READ隔离级别。

   乐观锁只会作用在单个JVM里面,他通过特定的Timestamp来为Entity设定一个版本来管理读取的数据.

   有人会问,如果Clusters间没有设定隔离级别,是否在多个clusters间会有脏读的风险?

   我的回答是如果设定同步方式为 REAL_ASYN 或者INVALIDATION_ASYN的时候会,但是几率实在太小,可以忽略不计 - 只有在两个Clusters 同时访问同一个Caching Entity的时候,这个时候,因为Repeatable-read隔离级别在clusters间失效,所以这两个Clusters可以同时访问,此时一个Cluster做了Update,但事务还没来得及提交(在事务未提交之前-Async的模式, JBoss Caching不会同步脏数据),另外一个Cluster 已经读取,这种情况下,脏读发生。 所以,在采用乐观锁的时候,如果要完全避免脏读,只能用REAL_SYNC方式来同步脏数据,避免脏读,如果有任何一个数据发生更改,当前cluster的进程等待,并且立即同步clusters间的脏数据,这样的话,就完全可以避免脏读。 但是这样做的弊端是,在多个Clusters的情况下,性能较低。

   JBoss推荐使用INVALIDATION_SYNC的方式来处理脏数据,当然在使用乐观锁的时候有很小的几率下会产生脏读,而且二级缓存不应该存放关键的业务数据,所以即便是乐观锁,也应该使用INVALIDATION_SYNC的方式,性能优先.

  

   配置的样例参考附件 treecach-optimistic.xml.zip

  

   悲观锁

   悲观锁可以支持所有的事务模式, READ-ONLY, READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ. 但是在 Clusters 间 Concurrence 的事务模式只能支持 READ-ONLY and REPEATABLE-READ,在单个JVM里面,READ-UNCOMMITTED 和 READ-COMMITTED生效. 如果你的JBOSS Caching部署在单个JVM上,设置同步方式为LOCAL,这样可以启用事务隔离级别为READ-UNCOMMITTED, READ-COMMITTED。在 Clusters的情况下设定为 REPEATABLE-READ隔离级别.  悲观锁通常会有 performance的问题,因为高并发下Caching的数据会发生频繁的锁定,Caching 数据间的死锁问题也会莫名其妙的,频繁的发生. 所以这也是 JBoss Caching 为什么推荐使用 乐观锁的原因.

  

   配置的样例参考附件 treecach-pessmistic.xml.zip

 

  Jboss-cache-1.4.1.jar 启动的时候,默认读取 treecache-optimistic.xml

 

4. JBoss 是如何 同步数据的

   JBoss是通过设置JGroups,将Cluster定义为JGroups里面的成员,JGroups 会根据定义的ClusterName 给具有同组名的Group成员发送广播来同步数据. 配置片段

...........
<!-- Name of cluster. Needs to be the same for all members(ATS and WAS server we have so far), in order to find each other by JGroup by the same cluster name-->
<attribute name="ClusterName">SampleCluster</attribute>
...........
<!-- Do not change the following attributes if not necessary, those are the default attributes to configure the JGroups. -->
<attribute name="ClusterConfig">
    <config>
	<UDP loopback="false" /><!-- If windows server, set it as true-->
	<PING timeout="2000" num_initial_members="3" up_thread="false" down_thread="false" />
	<FD_SOCK />
	<pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800" max_xmit_size="8192" up_thread="false" down_thread="false" />
	<UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10" down_thread="false" />
	<pbcast.STABLE desired_avg_gossip="20000" up_thread="false" down_thread="false" />
	<FRAG frag_size="8192" down_thread="false" up_thread="false" />
	<pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="true" print_local_addr="true" />
	<pbcast.STATE_TRANSFER up_thread="true" down_thread="true" />
      </config>
</attribute>
......

 

 

测试JBoss Caching配置

http://lists.jboss.org/pipermail/jboss-user/2007-May/060666.html

       in progress...

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位 本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。 阅读详情

相关推荐

保姆级教程:用SSC Tool 5.13为先楫HPM6E00EVK生成8轴EtherCAT从站代码(含XML配置详解)

本文详细介绍了如何使用SSC Tool 5.13为先楫HPM6E00EVK开发板配置8轴EtherCAT从站,包括XML文件深度配置、代码生成与工程整合、烧录与调试技巧。教程涵盖从环境准备到性能优化的全流程,帮助开发者快速实现符合CIA402标准的8轴控制。

weixin_30352645的博客 255

在EJB 中 配置Hibernate支持JTA

Finally,  搞清楚了些Hibernate 的对JTA 的支持。    有几个非常重要的property 需要配置 &lt;prop key="hibernate.current_session_context_class"&gt; jta &lt;/prop&gt;   &lt;prop   key="hibernate.transaction.manager_lookup...

半山俗人 396

用Arduino+ESP32复现TDOA定位:低成本实现厘米级精度的完整教程

本文提供了一套利用Arduino和ESP32平台,结合NRF24L01+模块与GPS/PPS时间同步方案,低成本复现高精度TDOA(到达时间差)定位系统的完整教程。教程详细阐述了从硬件选型、天线阵列设计、时间同步实现到核心算法与多径抑制的实战步骤,旨在帮助开发者和硬件爱好者以可控成本实现厘米级精度的定位演示系统。

weixin_29084111的博客 162

Hibernate之二级缓存

Hibernate之二级缓存什么是Hibernate的缓存 什么是Hibernate的缓存 Hibernate提供了一级缓存和二级缓存,合理的利用缓存可以有助于提高系统的性能,为了避免不合理的利用缓存导致内存过度消耗降低系统性能,可以通过合理配置缓存的参数来避免这个问题。 缓存的目的是为了通过减少应用程序对物理数据访问的次数来提高程序运行的效率,原理则是把当前或接下来一段时间有可能会用到的数据保存...

what_to的博客 257

5分钟搞定阿里云千问大模型API申请:手把手教你获取API Key

本文提供了一份高效的阿里云通义千问大模型API Key获取实战指南。通过清晰的步骤,帮助开发者在五分钟内完成从账号准备、精准导航控制台到创建并验证API Key的全过程,并强调了密钥安全管理和基础调用测试的重要性,助力快速集成AI能力。

ol789012345的博客 1345

告别MATLAB!用Python的PYPOWER搞定电力系统潮流计算(附Case30完整代码)

本文介绍了如何从MATLAB迁移到Python,使用PYPOWER工具包进行电力系统潮流计算。通过详细的环境准备、数据接口兼容性实践、潮流计算实现及最优潮流计算进阶,帮助工程师和学生无缝过渡到Python生态。文章还展示了结果处理与可视化技巧,并附有Case30完整代码示例。

weixin_30411819的博客 298

Hibernate 二级缓存

Hibernate 二级缓存 该文章参考了Hibernate @Cache注解 需要在实体类上加三个注解, 分别是 @Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "entityCache") @JsonIgnoreProperties(value={"hibernateLazyInitiali...

u013975785的博客 287

FAST-LIO 实战:从 LI-Init 标定到 YAML 配置全解析

本文详细解析了FAST-LIO算法中LI-Init标定的关键步骤与YAML配置优化技巧。从激光雷达与IMU的时空标定原理到实战参数调优,提供了一套完整的解决方案,帮助开发者解决点云畸变、建图漂移等常见问题,提升SLAM系统在动态环境中的稳定性和精度。

weixin_42651281的博客 326

才高行厚的hibernate(5)---hibernate的事务管理

事务的概念 事物的个基本特性 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持

Senssic 1732

【EB-02】TC397 Tresos 最小工程配置

主要设置McalLibPublishedInformation 参数,会根据ResourceM配置的芯片自动加载。可以看到再工程目录中生成了output文件夹,里面由这些模块生成的头文件,编译脚本和epc文件。如果选择生成swcd,可以生成xxx_Bswmd.arxml给别的工具使用。如果没有Error和Problems就可以点击生成代码。点击工程校验看看工程是否由错误。

libuping2023的博客 324

cilium native-routing模式流程分析

本文分析cilium native routing模式下的报文路径和涉及到的ebpf源码分析。实验环境在vxlan模式下修改参数后而来。native routing和vxlan模式的区别主要是跨节点通信时,vxlan模式需要封装,native routing模式需要根据目的ip查找路由表转发到其他节点。

fengcai_ke的博客 988

Hibernate 2nd-level cache: 基础概念

 Introduction The goal for this document is to mainly describe the Hibernate 2nd-level caching strategy, learning how to use it and how can we got the performance benefit from the caching strategy. ...

DGenerationX的专栏 634

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2928

Hibernate(一)——入门

在之前经常用到操作数据库的框架是Mybatis或者Mybatis-plus。Hibernate在項目中用过,但没有深入的了解过,所以这次趁着假期把这个框架了解一下。

jc_hook的博客 1267

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

hibernate事务mysql_Hibernate事务属性

事务也是Hibernate持久层访问的重要方面,Hibernate不仅提供了局部事务支持,也允许使用容器管理的全局事务。Hibernate关于事务管事务也是Hibernate持久层访问的重要方面,Hibernate不仅提供了局部事务支持,也允许使用容器管理的全局事务。Hibernate关于事务管理的属性有如下几个。hibernate.transaction.factory_class:指定Hibe...

weixin_39747075的博客 154

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Hibernate配置及自定义注册映射文件

一.hibernate配置属性详解 hibbernate可以在各式各样不同环境下工作而设计的, 因此存在着大量的配置参数。以简便操 作,多数配置参数都有默认的配置值,也是我们日常使用hibernate的必须品。 Hibernate JDBC属性 -------------------------------------------------------------------------------- | 属性名

bluecard2008的博客 1959

hibernate.properties配置

hibernate.properties配置

javaGHui的博客 588

Hibernate配置文件与映射文件详解

转自:https://blog.youkuaiyun.com/wangchuanqi1234/article/details/51131285 https://blog.youkuaiyun.com/ly_rose/article/details/52328287 一、hibernate.cfg.xml &lt;?xml version="1.0" encoding="GBK"?&gt; &lt;!-- 指定Hi...

weixin_38856140的博客 419

hibernate之二级缓存

一、hibernate缓存分为两种 1.一级缓存:session 2.二级缓存:SessionFactory(可拔插式) 二、什么样的数据需要缓存 1.很少被修改或根本不改的数据 如:数据字典 2.业务场景比如:耗时较高的统计分析sql、电话账单查询sql等 三、关系型数据库和非关系型数据库 关系型数据库:数据与数据之间存在关系(联系)的数据库 mysql/Oracle、sqlserver 非关系型数据库:数据与数据之间是不存在关系的,如:key-value 有以下三种:...

weixin_52639224的博客 444

Hibernate配置文件属性---事务属性

hibernate.transaction.factory_class:指定Hibernate所用的事务工厂的类型,该属性必须是TransactionFactory的直接或间接子类。 jta.UserTransaction:该属性值是一个JNDI名,Hibernate将使用JTATransactionFactory从应用服务器获取JTA UserTransaction。 hibernate.t

boloyz的专栏 836

hibernate的二级缓存

这里讨论二级缓存 @Cacheable是用在实体类上的,且是在JPA中体现的。如果只是用spring+hibernate的情况,要用诸如@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)在实体类上 当实体类上有@Cache时,就说明这个类是使用二级缓存的,不需要在hibernate中开启 hibernate.cache.use_second

牵佳一诺的博客 419

Hibernate:二级缓存

缓存(Cache):计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存。 Hibernate中提供了两个级别的缓存: 第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存。这一级别的缓存由 hibernate 管理的。 第二级别的缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存。 .

燕双嘤 2700

使用JBossCache作为Hibernate的二级缓存

 使用JBossCache作为Hibernate的二级缓存,因为JBossCache支持Transactional的缓存策略(Strategy),而且支持Cluster,Cluster还支持Invalidation的方式,比Replication方式更好,对两种方式同时支持同步和异步,还有其他很多特性,比OSCache好得多。由于我们是把Hibernate作为服务配置的,所以CacheProvid

待定的专栏 1265

hibernate 二级缓存

转载自 http://hi.baidu.com/xusuofei/blog/item/609468d0bc374e8ba0ec9c88.html Hibernate的Session在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或JVM级别(SessionFactory级别)的缓存。 你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序...

silentJesse 471

Hibernate3的配置参数汇总

SQL方言1、Hibernate JDBC属性 <table summary=" Hibernate JDBC属性 " border="1"> 属性名 用途 hibernat

732

Hibernate 参数设置一览表

Hibernate 参数设置一览表 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect hibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把org.hi

runming56的专栏 643

JSTL - <form:select> 的用法

转载自: http://www.web-tag.net/3c98ca7b0cac8312.htm 下拉框组件标签       下拉框标签的典型形式为:    &lt;form: select path="city" items="${cityList}"/&gt;,它包括两方面的数据:     1)对应表单对象属性值(city);    2)用于构造整个下拉框选项的数据(cityList)...

DGenerationX的专栏 502
上一篇: Hibernate 2nd-level cache: 基础概念
下一篇: JAXB Marchel and UnMarchel Quick Start
伤神v
博客等级 码龄19年 17粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值