[Logo] Terracotta Discussion Forums (LEGACY READ-ONLY ARCHIVE)
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
[Expert]
What is the best practice of Terracotta with hibernate second level cache  XML
Forum Index -> Terracotta 中文社区
Author Message
eric.sun

jedi

Joined: 10/02/2008 09:18:42
Messages: 123
Offline

环境:tomcat, terracotta 3.0.0 hibernate3.2, ehcache1.3

我们准备从terracotta 3.0.0升级到3.1.1.
原来的tim-get upgrade tc-config.xml无法正确运行
tim-hibernate-3.2.5找不到,手动删掉,并加入
tim-hibernate-cache-3.2
tim-hibernate-entity-3.2

出现
ClassNotFoundException : org.terracotta.modules.hibernatecache.instrumentation.glue.SessionFactoryNameAware.

看了这个帖子http://forums.terracotta.org/forums/posts/list/15/2522.page,感觉确实还是有些晕,文档太多,不知道从哪开始合适。

我想再开始花费更多时间升级到terracotta3.1.1之前,了解一些关于缓存的问题。
对于hibernate二级缓存的解决方案,哪一个是最佳实践。
TC3.1.1+ ehcahce1.7
TC3.1.1+ hibernate-cache
如果不想把terracotta带入到编译环境里是不是必须选择ehcache7,terracotta既然买了ehcache,为什么还要开发另外一套二级缓存的解决方案。 What is terracotta's roadmap



谢谢


lima

consul
[Avatar]
Joined: 06/22/2009 10:12:31
Messages: 361
Offline

3.1.1提供了两个简单版的方案,一是Hiberneate二级缓存,另一个是分布式的EHCache。
分别给那些只关心利用分布式Hibernate二级缓存提高系统性能或者需要分布式EHCache的客户使用。简单版 的特点就是使用方便。拷贝一两个jar文件,修改一两个配置文件,从新启动系统就搞定了。再也不用担心tim, 复杂的tc-config, 类加锁、instrumentation, 等等。意图是提高解决方案的易用性。

但是如果用户在这两个方案之上,还需要其它的方案或者功能,比如session共享、数据共享、Quartz, Master/Worker等等,简单配置就不行了。必须使用传统的DSO,也就是我们网站上说的customized方式。

为了解答您的问题,需要先问问您使用Terracotta的哪些功能。是简单方案就够了,还是需要其它的功能。简单方案中,您提到了Hibernate和EHCache。那您是用EHCache纯粹用来做Hibernate的缓存呢,还是另有它用?

我先假设您是要实现Hibernate的分布式二级缓存。如果还有其他需要,咱们再一一解答。

好多人都问为什么又有Hibernate缓存,又有EHCache。这个有点历史原因。首先EHCache以前我们是支持的,但是由于两个产品没有合并,结合的不够紧密。只能通过TIM-EHCAche实现支持。对于Hibernate缓存,我们没直接使用EHCache有这方面的关系,还有一个重要原因就是我们发现Hibernaete二级缓存的机制中有一些问题,对于大并发的情况,代码效率不高。比如有一些全局锁的现象。我们的Hibernate方案实际上不仅是提供了一个标准的Hibernate二级缓存,另外还通过代码注入解决了一些Hibernate里面的问题。这样它的效率要比直接使用EHCache要高的多。

我们的确有计划在不久的将来合并两个产品。让他们都建立在EHCache基础之上。不过什么时候推出来不好说。可能还要等几个月吧。

现在清楚了简单模式和客户化的模式,也清楚了Hibernate方案和EHCache的区别。如果你只希望使用Hibernate方案,用简单配制就够了。
基本上有如下几个步骤:
1、下载安装
2、把 -javaagent:/path/to/terracotta-hibernate-agent-<version>.jar 放在Tomcat启动脚本中。
比如:set JAVA_OPTS=-javaagent:\path\to\terracotta-hibernate-agent-<version>.jar;<other_java_options>
3、确认下载Hibernate相关的jar,应该是在安装目录的hibernate目录下。如果没有,可以用如下命令下载:
${TERRACOTTA_HOME}\bin\tim-get.bat update terracotta-hibernate-cache
把terracotta-hibernate-cache<version>.jar拷贝到WEB-INF/lib目录下.
4、配置Hibernate.cfg.xml,增加如下配置:
hibernate.cache.use_second_level_cache=true
hibernate.cache.provider_class=org.terracotta.hibernate.TerracottaHibernateCacheProvider
通过Spring的配置略有不同。但是类似。
5、通过annotation或者配置文件为要放在cache中的类增加标记:
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
6、从新启动Tomcat。启动dev-console就可以看到Hibernate监控页面了。
注意:如果您要使用query_cache,还需要对它作相应的配置。Hibernate的文档中都有详细说明。在此就不罗嗦了。


有关文档在:
http://terracotta.org/web/display/orgsite/Get+Started+with+Terracotta+for+Hibernate+in+Your+Application#GetStartedwithTerracottaforHibernateinYourApplication-HibernateApplicationExpressInstallation
eric.sun

jedi

Joined: 10/02/2008 09:18:42
Messages: 123
Offline

谢谢马力回复!
我们使用Hibernate3.2.5+Ehcache1.3+Terracotta的tomca集群方案有一段时间了。
我现在是在做Terracotta3.0升级前的评估,刚才看了Alex在另外一个帖子的回复知道了我们这种情况应该用
tim-hibernate-cache-deprecated-3.2而不是tim-hibernate-cache-3.2,这个在文档里实在是很难搜寻到。

现在还有几个问题:
Terracotta/Ehcache 未来会支持CacheConcurrencyStrategy.TRANSACTIONAL吗

我们的Hibernate方案实际上不仅是提供了一个标准的Hibernate二级缓存,另外还通过代码注入解决了一些Hibernate里面的问题。这样它的效率要比直接使用EHCache要高的多。  

关于这一部分,有没有相关文档,想了解一下解决的是什么问题。
terracotta-hibernate-agent 这个东东,不能是在WEB-INF/lib下或者其他class path下么

lima

consul
[Avatar]
Joined: 06/22/2009 10:12:31
Messages: 361
Offline

如果原来的EHCache1.3只是用来做Hibernate缓存的,现在可以不用了。
因为你需要使用Tomcat Session集群,所以简单模式不适用。需要使用customized模式。因为以前的模式都是customized模式,这样以前的配置基本不需要动。
你有没有试验一下 TC 3.1.1, tim-hibernate-cache-3.2 ?

对于TRANSACTIONAL的支持我现在不清楚。

至于标准Hibernate二级缓存具体在什么地方作了改进,我们没有对外发布的文档。但是改进的问题前面已经说过了。

最后是terracotta-hibernate-agent,它是启动JAVA虚拟机时需要的,不应该在classpath下面。
 
Forum Index -> Terracotta 中文社区
Go to:   
Powered by JForum 2.1.7 © JForum Team