论坛首页 Java企业应用论坛

请教:关于缓存对象的问题

浏览 7628 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-12-15  
1。如何在hibernate中实现jvm-level的对象缓存?
在hibernate文档中,这部分尤其少。而在hbm中设置的<jcs-cache usage="read-write"/>也只能在method和process级别缓存对象,当另一个进程访问的时候还是要不断的重复访问数据库。

2。在单机情况下,potian的推荐是使用jcs,在集群环境下使用swarmcache,但是在hibernate英文论坛上讨论过jcs有比较明显的问题,Gavin推荐不使用jcs。我想在单机情况下使用swarmcache,hibernate 2.05以后的版本也内置了swarmcache的支持,不过我很少见到如何使用的资料,哪位高手指点一下。
   发表时间:2003-12-15  
http://douleimi.vicp.net//space/2003-11-04#关于Hibernate的Cache问题
0 请登录后投票
   发表时间:2003-12-17  
配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
    <class 
    	name="com.jaqsoft.demo.Book" 
    	table="book" proxy="com.jaqsoft.demo.Book">
		<cache usage="read-write"/>
		<id name="bookId" type="java.lang.Long" column="bookid" unsaved-value="0">
			<generator class="identity"/>
		</id> 
		<property
			name="bookName"
			column="bookName"/>
		<many-to-one
			name="bookStore"
			class="com.jaqsoft.demo.BookStore"
			column="bookstoreid"
			not-null="true"/>
		<set
			name="readers"
			table="book_reader"
			lazy="true">
			<cache usage="read-write"/>
			<key column="bookId"/>
			<many-to-many 
				column="readerid"
				outer-join="auto"
				class="com.jaqsoft.demo.Reader"
			/>
		</set>
	</class>
</hibernate-mapping>
<!-- parsed in 0ms -->

验证缓存生效:
在hibernate.cfg.xml设置:
<property name="show_sql">true</property>

写一个读取数据的页面,同时观察控制台,发现当页面第一次load的时候,
有很多类似于Hibernate: select bookstore0_.bookstoreid as bookstor1_, bookstore0_.bookstoreName as bookstor2_ from bookstore bookstore0_之类的出现,说明页面通过数据库取得数据。

多次刷新页面,发现此类打印语句消失,说明页面从缓存中取得数据。

清除缓存
ThreadLocalSession.getSessionFactory();.evict(Book.class);;

执行之后,页面load时,再次出现hibernate 的sql打印语句,说明缓存清空,程序只能读取数据库获取数据。
0 请登录后投票
   发表时间:2003-12-18  
我在.hbm.xml文件中配了&lt;cache usage="read-write"/&gt; ,在hibernate.properties中配了hibernate.show_sql true.

我的程序是这样的:
PersonBean pb =new PersonBean();
Iterator it =pb.getSomePerson("张");
  Person p=(Person) it.next();
System.out.println("person:"+p.getName());  
       
it =pb.getSomePerson("张");
Person p1=(Person) it.next();
System.out.println("person:"+p1.getName());

出来的效果是:

Hibernate: select person0_.id as x0_0_ from Person person0_ where (person0_.name like ? )
Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=?
Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=?
person:张三
Hibernate: select person0_.id as x0_0_ from Person person0_ where (person0_.name like ? )
Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=?
Hibernate: select person0_.id as id, person0_.name as name, person0_.address as address from Person person0_ where person0_.id=?
person:张三

按理说第二个SQL语句是不应该出来了,说明cache没有起到作用.

这个问题要怎么解决?
0 请登录后投票
   发表时间:2003-12-18  
hibernate还提示了这样的错误:
严重: Error parsing XML: XML InputStream(12)
org.xml.sax.SAXParseException: Element type "cache" must be declared.

应该是配置问题,谁能帮我解决一下吗?谢了先!
0 请登录后投票
   发表时间:2003-12-18  
把整个hbm贴出来
0 请登录后投票
   发表时间:2003-12-18  
Failed to init mem cache, using: LRUMemoryCache
java.lang.ClassNotFoundException: org/apache/jcs/engine/memory/lru/LRUMemoryCache


我的jcs.jar明明包进去了(jcs.jar包有这个类org/apache/jcs/engine/memory/lru/LRUMemoryCache ),为什么还会这样.



&lt;/class&gt;
    &lt;class name="h.Person"&gt;
    &lt;jcs-cache usage="read-only"/&gt;   
&lt;id name = "id" unsaved-value = "null"&gt;
&lt;generator class="uuid.hex"/&gt;
&lt;/id&gt;
&lt;property name="name"/&gt;
&lt;property name="address"/&gt;
&lt;/class&gt;
0 请登录后投票
   发表时间:2003-12-18  
&lt;jcs-cache ...&gt;
我不知道是不是版本的差异,hibernate2.1 reference中已经不是这样写的了。
而是这样写:
&lt;cache usage....&gt;

至于使用哪种缓存,是在hibernate.cfg.xml中的。
&lt;property name="cache.provider_class"&gt;net.sf.hibernate.cache.OSCacheProvider&lt;/property&gt;
来体现。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics