Difference between revisions of "EclipseLink/UserGuide/JPA/Basic JPA Development/Caching/Expiration"

From Eclipsepedia

Jump to: navigation, search
Line 9: Line 9:
 
|
 
|
 
}}
 
}}
=Cache Expiration=
+
=Cache Expiration and Invalidation=
By default, objects remain in the session cache until they are explicitly deleted or garbage collected when using a weak identity map.
+
By default, objects remain in the shared cache until they are explicitly deleted or garbage collected.
  
Alternatively, you can configure any object with a <tt>CacheInvalidationPolicy</tt> that lets you specify, either automatically or manually, under what circumstances a cached object is invalid: when any query attempts to read an invalid object, EclipseLink will go to the data source for the most up-to-date version of that object, and update the cache with this information.
+
You can configure any object with a <tt>expiry</tt> that lets you specify, either the number of milliseconds after which an object should expire from the cache, or a time of day that all objects should expire from the cache. Expiry is set on the <tt>@Cache</tt> annotation or <tt><cache></tt> XML element, and can be configured in two ways:
  
You can use any of the following <tt>CacheInvalidationPolicy</tt> instances:
+
* <tt>expiry</tt> - The number of milliseconds to expiry an object in the cache after it has been read.
 +
* <tt>expiryTimeOfDay</tt> - The <tt>@TimeOfDay</tt> represent the 24h time of day to expiry all objects in the cache.
  
* <tt>DailyCacheInvalidationPolicy</tt><nowiki>: the object is automatically flagged as invalid at a specified time of day.</nowiki>
+
When an object expires, it is only invalidated in the cache. It is not removed from the cache, but when next accessed it will be refreshed from the database as part of the query that was used to access it.
* <tt>NoExpiryCacheInvalidationPolicy</tt><nowiki>: the object can only be flagged as invalid by explicitly calling </nowiki><tt>org.eclipse.persistence.sessions.IdentityMapAccessor</tt> method <tt>invalidateObject</tt>.
+
* <tt>TimeToLiveCacheInvalidationPolicy</tt><nowiki>: the object is automatically flagged as invalid after a specified time period has elapsed since the object was read.</nowiki>
+
  
You can configure a cache invalidation policy in the following ways:
+
It is also possible to define your own expiry or invalidation policy by defining your own <tt>CacheInvalidationPolicy</tt> and setting it in your entity's descriptor using a <tt>DescriptorCustomizer</tt>.
  
* At the project level that applies to all objects  
+
The application can also explicitly invalidate objects in the cache using the JPA <tt>Cache</tt> API, or the EclipseLink <tt>JpaCache</tt> API (see [[#Cache API|Cache API]]).
* At the descriptor level to override the project level configuration on a per-object basis
+
* At the query level that applies to the results returned by the query
+
  
If you configure a query to cache results in its own internal cache, the cache invalidation policy you configure at the query level applies to the query's internal cache in the same way it would apply to the session cache.
+
Expiry can also be used in the query results cache (see [[#Query Results Cache|Query Results Cache]]).
  
If you are using a coordinated cache (see [[#Cache Coordination|Cache Coordination]]), you can customize how EclipseLink communicates the fact that an object has been declared invalid.
+
Invalidation can also be used in a cluster through cache coordination (see [[#Cache Coordination|Cache Coordination]]), or from database events using database event notification (see [[#Database Events Notification|Database Events Notification]]).
  
  
Line 35: Line 32:
 
|next=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Coordination|Cache Coordination]]
 
|next=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Coordination|Cache Coordination]]
 
|up=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching|Caching]]
 
|up=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching|Caching]]
|version=2.2.0 DRAFT}}
+
|version=2.4 DRAFT}}

Revision as of 15:08, 10 May 2012

EclipseLink JPA

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

Cache Expiration and Invalidation

By default, objects remain in the shared cache until they are explicitly deleted or garbage collected.

You can configure any object with a expiry that lets you specify, either the number of milliseconds after which an object should expire from the cache, or a time of day that all objects should expire from the cache. Expiry is set on the @Cache annotation or <cache> XML element, and can be configured in two ways:

  • expiry - The number of milliseconds to expiry an object in the cache after it has been read.
  • expiryTimeOfDay - The @TimeOfDay represent the 24h time of day to expiry all objects in the cache.

When an object expires, it is only invalidated in the cache. It is not removed from the cache, but when next accessed it will be refreshed from the database as part of the query that was used to access it.

It is also possible to define your own expiry or invalidation policy by defining your own CacheInvalidationPolicy and setting it in your entity's descriptor using a DescriptorCustomizer.

The application can also explicitly invalidate objects in the cache using the JPA Cache API, or the EclipseLink JpaCache API (see Cache API).

Expiry can also be used in the query results cache (see Query Results Cache).

Invalidation can also be used in a cluster through cache coordination (see Cache Coordination), or from database events using database event notification (see Database Events Notification).


Eclipselink-logo.gif
Version: 2.4 DRAFT
Other versions...