[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]
如何做没有Terracotta 服务器的情况下使用 TerracottaHibernateCacheProvider  XML
Forum Index -> Terracotta 中文社区
Author Message
eric.sun

jedi

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

应用场景是,开发环境,单机tomcat,使用TerracottaHibernateCacheProvider 作为类似于ehcache 的hibernate二级缓存。
在一些前台开发人员开发环境中我并不需要切实的缓存方案,只想保持开发,生产,测试环境一直。而不是在开发环境中使用Ehcache,到生产环境中切换到terracotta hibernate cache provider.

Alex 在
http://forums.terracotta.org/forums/posts/list/2722.page#16292 
中提到可以这样使用,但是我没有搜索到相关文档,而且在terracotta 缓存配置文件没有DTD或者schema标准可以查

谢谢
lima

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

我刚才试了一下,如果不把agent加上,会出现如下异常:

org.hibernate.cache.CacheException: The terracotta-hibernate-agent is not present, you likely need to specify it with -javaagent
org.terracotta.modules.hibernatecache.StandaloneContext.verifyAgent(StandaloneContext.java:33)
org.terracotta.modules.hibernatecache.StandaloneContext.isStandalone(StandaloneContext.java:18)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.createDelegate(TerracottaHibernateCacheProvider.java:36)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.start(TerracottaHibernateCacheProvider.java:54)
org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:221)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
petstore.tools.HibernateUtil.<clinit>(Unknown Source)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:169)
org.xmoon.node.BeanNode.getContextBean(Unknown Source)
org.xmoon.node.BeanNode.getBean(Unknown Source)
org.xmoon.node.BsfNode.evalService(Unknown Source)
org.xmoon.GenericStrutsAction.execute(Unknown Source)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
root cause

java.lang.NoClassDefFoundError: org/terracotta/agent/Agent
org.terracotta.modules.hibernatecache.StandaloneContext.verifyAgent(StandaloneContext.java:30)
org.terracotta.modules.hibernatecache.StandaloneContext.isStandalone(StandaloneContext.java:18)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.createDelegate(TerracottaHibernateCacheProvider.java:36)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.start(TerracottaHibernateCacheProvider.java:54)
org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:221)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
petstore.tools.HibernateUtil.<clinit>(Unknown Source)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:169)
org.xmoon.node.BeanNode.getContextBean(Unknown Source)
org.xmoon.node.BeanNode.getBean(Unknown Source)
org.xmoon.node.BsfNode.evalService(Unknown Source)
org.xmoon.GenericStrutsAction.execute(Unknown Source)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
root cause

java.lang.ClassNotFoundException: org.terracotta.agent.Agent
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399)
org.terracotta.modules.hibernatecache.StandaloneContext.verifyAgent(StandaloneContext.java:30)
org.terracotta.modules.hibernatecache.StandaloneContext.isStandalone(StandaloneContext.java:18)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.createDelegate(TerracottaHibernateCacheProvider.java:36)
org.terracotta.hibernate.TerracottaHibernateCacheProvider.start(TerracottaHibernateCacheProvider.java:54)
org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:221)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
petstore.tools.HibernateUtil.<clinit>(Unknown Source)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:169)
 


看来不用agent是不行的。

老马
eric.sun

jedi

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

我在参数里面加了 agent,但是同样不行。一直等待连接本地服务器。
lima

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

只要有了agent,Terracotta的Hibernate缓存一定是去找TC服务器了。
这个文档描述的第六步介绍了如何访问一个不再本地的TC服务器:
http://terracotta.org/documentation/ga/product-documentation-6.html#281987880_pgfId-1003519

Step 6: Edit the Terracotta Configuration

我觉得目前的结论是对于目前的版本来说,只要使用Terracotta的Hibernate缓存,就必须使用TC服务器。

因此用EHCache的Hibernate缓存代替Terracotta实际是最好的一种方法。因为你们本地开发主要还是集中于功能而不是效率。如果有个别人需要作效率测试,可以马上切换回Terracotta的方案。同时搭建一个TC服务器(本地或者再找一台开发服务器都行)。等到集成测试的阶段和以后都可以用Terracotta的缓存方案。

这样是可以满足你们的要求的。否则好像也真没有其他的办法。
eric.sun

jedi

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

谢谢老马!

因此用EHCache的Hibernate缓存代替Terracotta实际是最好的一种方法。因为你们本地开发主要还是集中于功能而不是效率。如果有个别人需要作效率测试,可以马上切换回Terracotta的方案。同时搭建一个TC服务器(本地或者再找一台开发服务器都行)。等到集成测试的阶段和以后都可以用Terracotta的缓存方案。 

这个我也完全认同,只是开发环境和生产环境依赖包不一样,QA不爽。

你们在未来版本中有这样改进的计划么?
lima

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

我们在合并Hibernate二级缓存和EHCache。等合并以后,希望对Java agent的依赖可以去掉,配置起来会容易很多。

这个合并应该已经提到议事日程了。不会太久。
highboy

neo

Joined: 06/28/2009 23:44:22
Messages: 5
Offline

我记得以前的使用DistributedCache做二级缓存时,如果在DSO环境下,那么就会连接远程,如果没有使用DSO,就会做为本地的Cache使用。 而TCcache只能在DSO的环境下使用。在3.1.1版本看来配置又发生了变化。估计TCCache, DistributedCache都被Ehcache替换掉,不知道是不是这样。另外,感觉Terracotta的文档变来变去,比较让人恼火。
 
Forum Index -> Terracotta 中文社区
Go to:   
Powered by JForum 2.1.7 © JForum Team