如何在eclipselink中禁用缓存 [英] how to disable cache in eclipselink

查看:236
本文介绍了如何在eclipselink中禁用缓存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在Eclipse indigo中使用persistence.xml中的以下属性禁用EclipseLink中的L2缓存: -

I have tried disabling L2 cache in EclipseLink with Eclipse indigo by using following properties in persistence.xml:-

<property name="eclipselink.cache.shared.default" value="false"/>

<shared-cache-mode>NONE</shared-cache-mode>

基本上我正在测试一个场景,两个不同会话中创建的同一对象是两次会话数据库还是两次会话指的是在内存缓存中的早期会话中创建的同一对象。它不应该因为在persistence.xml中提到上述属性而禁用了L2缓存

Basically I am testing one scenario whether same object created in two different sessions is hitting database twice or both sessions are referring to same object created in earlier session in memory cache. It should not because L2 cache is disabled by mentioning above properties in persistence.xml

我的代码如下: -

My code is as below:-

 Session session = DataAccessManager.getManager().openSession();
 ReferenceObjectRepository referenceObjectRepository =     ReferenceObjectRepository.getInstance();
 ReferenceObjectKey referenceObjectKey = new ReferenceObjectKey(getStringValue("testCacheByPass.input"));
 //load object first time.
 ReferenceObject referenceObject = referenceObjectRepository.load(ReferenceObject.class, referenceObjectKey);
 logger.log(Level.SEVERE, "Cache ReferenceObject: " + referenceObject);

 //load object in another session
 Session sessionNew = DataAccessManager.getManager().openNewSession();
 Object dbObject = referenceObjectRepository.load(ReferenceObject.class,    referenceObjectKey);
 logger.log(Level.SEVERE, "DB loaded ReferenceObject: " + dbObject);

请帮助我,不管我错过了什么?或者我是否需要以其他方式进行?

Please help me whether I have missed something? or do I need to do it some other way??

推荐答案

在进行调用的每个函数中添加此行。我在查询视图时使用find函数。

Add this line in each function where the call is made. I use in the find function when consulted a view.

((JpaEntityManager)em.getDelegate()).getServerSession().getIdentityMapAccessor().invalidateAll();

此行在run de query之前清除缓存。

This line clear the cache before run de query.

public Entity find(Object id) {
    ((JpaEntityManager)em.getDelegate()).getServerSession().getIdentityMapAccessor().invalidateAll();
    return em.find(Entity.class, id);
}

这篇关于如何在eclipselink中禁用缓存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆