Hi Gordon,
yes right #invalidateAll() is the right Method; however, the call of this
method has no effect
I print always the maps out
(aSession.getIdentityMapAccessor().printIdentityMaps())
I have a search site, where it's possible to find some objects.
If I use
aSession.getIdentityMapAccessor().invalidateAll();
the maps seem to be empty, however if I return to the search page and fire a
selection. I see the same outputs with the same objects (hashcodes)
Does invalidateAll() flushs the cache immediately?
I have the same effect with the other invalidate*-Methods (invalidateClass
etc.)
That's the reason, why I use
aSession.getIdentityMapAccessor().initializeAllIdentityMaps();
To Cache-Coordination:
Yes, that will be the better solution. But I have at the moment not the time
in the projects to switch to this feature.
Thanks
Joe
Gordon Yorke-2 wrote:
Initializing the identity maps in a running system can lead to hard to
diagnose errors. IdentityMapAccessor.invalidateAll() and the other
invalidation APIs are the recommended approach. Have you looked at
Cache Coordination (
http://wiki.eclipse.org/Introduction_to_Cache_(ELUG)#Cache_Coordination_2
) to automatically handle the notification for you.
--Gordon
Joe Mc. wrote:
Alright, my solution is:
- I am using a SessionCustomizer
- adding a SessionEventAdapter
- override preExecuteQuery
- call Session.getIdentityMapAccessor().initializeAllIdentityMaps()
Codesnippet:
public void customize(Session session) throws Exception {
SessionEventAdapter evtListener = new SessionEventAdapter() {
@Override
public void preExecuteQuery(SessionEvent event) {
Session aSession = event.getSession();
// check if cache invalidation is necessary....
// if yes:
aSession.getIdentityMapAccessor().initializeAllIdentityMaps();
}
}
}
Open Questions:
- is preExecuteQuery the right place?
- Does any better solution exist?
Thanks
Mc.Joe
Joe Mc. wrote:
Hi everybody,
I trying to provide a functionality to delete the whole cache, to
support
the possibility to refresh the objects in the cache.
How is the best practice to flush the whole cache?
I have the following use case:
- 2 separate Applications on different servers
- Both use JPA Eclipselink
- Application A reads the objects, I am using SoftWeak
- Application B modifies sometimes the data
desired is, that Application B gives Application A a signal (details are
here irrelevant), if he modified the data
Application A will flush his cache, if he gets this event.
Now the question is: Does any API exists to flush the (whole) cache?
Thanks in advance
Mc.Joe
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users