`
elicer
  • 浏览: 133344 次
  • 性别: 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 2.2.1 API (CHM格式)

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

    Apache OpenJPA.zip

    3. **缓存管理**:OpenJPA支持一级缓存(Entity Cache)和二级缓存,提高数据访问效率,减少对数据库的直接访问。 4. **事务管理**:集成JTA(Java Transaction API),支持分布式事务处理,确保数据的一致性和完整...

    JPA连接数据库,非常详细

    &lt;property name="openjpa.QueryCache" value="CacheSize=1000,SoftReferenceSize=100"/&gt; &lt;property name="openjpa.jdbc.DBDictionary" value="oracle"/&gt; &lt;property name="openjpa.ConnectionUserName" value=...

    openjpa2.0英文版API

    通过以上对 OpenJPA 2.0 文档的部分内容的解读,我们了解了 OpenJPA 2.0 的核心特性和使用方法。它不仅遵循 JPA 规范,还提供了丰富的扩展功能,使得开发者能够更加灵活地实现数据访问逻辑。无论是对于初学者还是...

    EhcacheUserGuide

    这部分内容介绍了如何将Ehcache与OpenJPA结合起来使用。 #### 四十、Grails缓存(Grails Caching) Grails是基于Groovy语言的一个Web框架。这部分内容介绍了如何在Grails应用程序中使用Ehcache。 #### 四十一、...

    Hibernate必须包

    8. **EclipseLink或OpenJPA**:如果项目同时使用了JPA和其他非Hibernate的ORM实现,可能需要这些库来进行兼容或切换。 9. **Guava**:在某些版本的Hibernate中,Guava库被用作辅助工具集,提供了一些实用的集合和...

    ehcache官方教程

    1. **集成示例**:提供了 OpenJPA 与 Ehcache 集成的具体示例。 2. **性能优化**:如何通过 Ehcache 提升 OpenJPA 的性能。 #### 三十九、Grails 缓存(Grails Caching) 1. **集成示例**:提供了 Grails 与 ...

    hibernate简单配置

    实体类使用了JPA注解,如`@Entity`表示这是一个实体类,`@Id`和`@GeneratedValue`用于指定主键。 接着,编写一个SessionFactory工厂类,用于创建SessionFactory实例: ```java import org.hibernate.SessionFactory...

    J2EE程序员需掌握的技术

    - JPA(Java Persistence API):Java标准的持久化框架,包括Toplink,OpenJPA和EJB3实体Bean。 3. **应用程序框架**: - Spring:核心包括AOP(面向切面编程)和IOC(依赖注入),广泛应用于各种场景。 - Seam...

    spring-boot-reference.pdf

    Open EntityManager in View 29.4. Using H2’s Web Console 29.4.1. Changing the H2 Console’s Path 29.5. Using jOOQ 29.5.1. Code Generation 29.5.2. Using DSLContext 29.5.3. jOOQ SQL Dialect 29.5.4. ...

Global site tag (gtag.js) - Google Analytics