Jump to: navigation, search

EclipseLink/Examples/JPA/Caching

< EclipseLink‎ | Examples‎ | JPA
Revision as of 10:21, 13 March 2009 by Rick.sapir.oracle.com (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

In progress

How to use EclispeLink Caching

EclipseLink offers the following caching strategies to maintain identity:

Option (Identity Map) Caching Guaranteed Identity Memory Use

Full Identity Map

Yes

Yes

Very High

Weak Identity Map

Yes

Yes

Low

Soft Identity Map

Yes

Yes

High

Soft Cache Weak Identity Map
Hard Cache Weak Identity Map

Yes

Yes

Medium-high

No Identity Map

No

No

None

See the documentation for details on these types.


Using the @Cache Annonation

You may define the @Cache annotation on the following:

  • @Entity
  • @MappedSuperclass;
  • the root of the inheritance hierarchy (if applicable).

If you define the @Cache annotation on an inheritance subclass, the annotation will be ignored. If you define the @Cache annotation on @Embeddable EclipseLink will throw an exception.

Example of @Cache Annoatation

 @Target({TYPE})
 @Retention(RUNTIME)
 public @interface Cache {
   CacheType type() default SOFT_WEAK;
   int size() default 100;
   boolean shared() default true;
   int expiry() default -1;
   TimeOfDay expiryTimeOfDay() default @TimeOfDay(specified=false);
   boolean alwaysRefresh() default false;
   boolean refreshOnlyIfNewer() default false;
   boolean disableHits() default false; 
   CacheCoordinationType coordinationType() default SEND_OBJECT_CHANGES;
 }

Attributes of the @Cache Annotation

Attribute Description Default Required or Optional Override with Persistence Unit Property

type

Set this attribute to the type (org.eclipse.persistence.annotations.CacheType enumerated type) of the cache that you will be using:

  • FULL
  • WEAK
  • SOFT
  • SOFT_WEAK
  • HARD_WEAK
  • CACHE
  • NONE

CacheType.SOFT_WEAK

optional

  • eclipselink.cache.type.<ENTITY>
  • eclipselink.cache.type.default

size

Set this attribute to an int value to define the size of cache to use (number of objects).

100



shared

Indicate whether cached instances should be in the shared cache or in a client isolated cache (see Isolated Client Session Cache).

  • true - use shared cache for cached instances;
  • false - use client isolated cache for cached instances.

true

optional


expiry

The int value to enable the expiration of the cached instance after a fixed period of time (milliseconds). Queries executed against the cache after this will be forced back to the database for a refreshed copy.

-1 (no expiry)

optional


expiryTimeOfDay

Specific time of day (org.eclipse.persistence.annotations.TimeOfDay) when the cached instance will expire. Queries executed against the cache after this will be forced back to the database for a refreshed copy.

@TimeOfDay(specified=false)

optional


alwaysRefresh

Set to a boolean value of true to force all queries that go to the database to always refresh the cache.

false

optional


refreshOnlyIfNewer

Set to a boolean value of true to force all queries that go to the database to refresh the cache only if the data received from the database by a query is newer than the data in the cache (as determined by the optimistic locking field).

Note: This option only applies if one of the other refreshing options, such as alwaysRefresh, is already enabled.

Note: A version field is necessary to apply this feature.

false

optional


disableHits

Set to a boolean value of true to force all queries to bypass the cache for hits, but still resolve against the cache for identity. This forces all queries to hit the database.

false

optional


coordinationType

Set this attribute to the cache coordination mode (org.eclipse.persistence.annotations.CacheCoordinationType enumerated type).

CacheCoordinationType.SEND_OBJECT_CHANGES

optional



Caching in Clustered Environments

Relevant API