how to disable cache in eclipselink

泄露秘密 提交于 2019-12-04 05:00:39

问题


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>

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??


回答1:


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();

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);
}



回答2:


You have disabled the object cache, but I think you still have query cache in play. You should be able to disable query cache too with

<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.refresh" value="true"/>

Same thing can be set with query hints, too. You could also try using query hints if persistence.xml configuration doesn't seem to be working.

Also note that essentially, even without the caching, you'd be comparing the same object, so unless it is detached it should be the same.

Related questions:

  • Disable eclipselink caching and query caching - not working?
  • Disable caching in JPA (eclipselink)


来源:https://stackoverflow.com/questions/12926319/how-to-disable-cache-in-eclipselink

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!