`
elicer
  • 浏览: 131178 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Open Jpa的cache 机制及使用

    博客分类:
  • JPA
阅读更多
OpenJpa的cache机制要比其他的ORM框架自带的cache要强大的多,其他的ORM框架如hibernate自带的cache是session 级别的,如果你想实现跨session的cache就必须集成third party的cache(Ehcache,oscache),但openjpa的cache是能够跨session的,对应jpa的标准来说就是跨entityManager是EntityManagerFactory level的,而且openjpa的cache还能够support multi-JVM,也就是能够在分布式的环境中使用。

openJpa的cache分为两种,一种是DataCache用来cache Entity.
使用时需要加入以下配置文件到persistence.xml中的<properties>下
<property name="openjpa.DataCache" value="true(CacheSize=5000, SoftReferenceSize=0)"/>
<property name="openjpa.RemoteCommitProvider" value="sjvm"/>

其中cachesize很清楚就是指所能cache的entity的最大数目,这里需要注意的是SoftReferenceSize这个属性,SofeReference是指openjpa的cache如果达到最大存储数目,或根据一定的算法需要从cache中移出一下数据时,会把它们放到一个softReferenceMap中(注softReferenceMap中的数据也会删除只是这些数据比直接删除会待的时间久一些,以防止在cache删除他们以后你马上就访问他们),这样下次访问到这个移出的数据时就会到softReferenceMap 中去找,这样比直接删除了,重新访问DB查找的效率好一点。这点跟其他的cache实现有点不一样,其它的cache是直接从cache中删除这些数据。如果你不想使用sofeReferenceMap,就把它的值设成0.
此外,你还可以设置cache在某个特定的时间timeout 通过设置EvictionSchedule 这个属性比如(EvictionSchedule='15,45 15 * * 1')表示的意思是让cache在星期天的下午三点15分到45分之间清除cache.

你还可以给某个entity设定timeout的时间通过@DataCache(timeout=1000000)

关于第二个属性openjpa.RemoteCommitProvider主要在分布式环境中使用cache时要配置,来保持在分布式环境中各个jvm中cache数据的同步
@Entity
@DataCache(timeout=1000000)
public class Magazine {
	@Id private String isbn;
	@Id private String title;
	@Column(name="PRICE")
   private BigDecimal price;
   @Column(name="SOLDCOPY")
   private int copySold;
   @Column(name="VERS")
   private int version;
   @Column(name="DELETE_FLG")
   private String deleteFlag;



第二种cache是querycache,openjpa默认在你enable datacache后,自动帮你enable query cache. querycache主要用来cache query返回的结果

<property name="openjpa.QueryCache" value="CacheSize=1000, SoftReferenceSize=100"/>


此外openjpa还提供可供我们extend cache 的API
0
0
分享到:
评论

相关推荐

    openjpa范例及实例工程

    OpenJPA 中使用实体标识缓存机制解决这个问题。默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实体标识时,OpenJPA 将首先...

    OpenJPA 2.2.1 API (CHM格式)

     除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加简单,减少开发者的工作量,包括允许数据远程传输/离线处理、数据库/对象视图统一工具、使用缓存(Cache)提升企业应用...

    Apache OpenJPA 2.1 User's Guide

    OpenJPA is Apache's implementation of Sun's Java Persistence 2.0 API (JSR-317 JPA 2.0) specification for the transparent persistence of Java objects. This document provides an overview of the JPA ...

    openJPA官方手册

    openJPA官方手册,openJPA官方手册openJPA官方手册

    Spring中使用OpenJPA

    Spring中使用OpenJPA源代码 博文链接:https://lxy19791111.iteye.com/blog/184997

    OpenJPA API 文档 chm格式

    OpenJPA API 文档 chm格式

    Open JPA2 employee 简单例子

    Open JPA2 employee 简单例子

    openjpa-manual

    JPA Overview and OpenJPA Reference Guide

    openjpa 写的一个例子

    自己用openjpa些的一个基于web 的例子

    apache-openjpa-2.2.1-source

    OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作,让开发者把注意力集中在编写业务逻辑上。...

    jsf、openJpa学习

    jsf 入门知识 ,jsf标签,jsf与openJpa整合,jsf与Spring整合

    Openjpa手册

    OpenJPA OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。

    apache-openjpa-3.1.0-binary.zip

    JPA规范要求对实体对象...OpenJPA支持两种增强 方法,但强烈建议使用字节码编织增强。以下“ 实体增强” 页面包括有关两种增强类型的更多详细信息,以及有关如何在ANT,Maven和Eclipse环境中设置构建时间增强的示例。

    Spring MVC+OpenJPA框架

    Spring MVC+OpenJPA框架,只是个框架哦

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    Openjpa2.2+Mysql+Maven+Servlet+JSP source code

    Openjpa2.2+Mysql+Maven+Servlet+JSP 博客源码: http://blog.csdn.net/shenhonglei1234/article/details/10394379

    openjpa:Apache OpenJPA

    Apache OpenJPA-自述文件 前言 感谢您下载此版本的Apache OpenJPA。 Apache OpenJPA是Java Persistence API规范的实现。 执照 此存储库的内容已根据Apache License 2.0 许可 更多信息 可以在openjpa-project子目录...

    openjpa实体标识的生成策略

    本文是 使用 Apache OpenJPA 开发 EJB 3.0 应用系列 的第五部分,介绍在 OpenJPA 中如何自动生成实体的唯一标识,包括使用容器自动生成实体标识,借助于数据库的自动编号、序列号、数据库表等技术自动生成实体标识等...

    Spring和openJPA集成

    NULL 博文链接:https://laoli5290.iteye.com/blog/2088341

    openjpa jar

    openjpa相关jar包,开发必备,希望对各位有帮助

Global site tag (gtag.js) - Google Analytics