Doug has posted 2 posts at DZone. View Full User Profile

Introducing EclipseLink

06.30.2008
| 150584 views |
  • submit to reddit

Caching 

EclipseLink's object caching solution is one of its most unique and powerful features. While most persistence solutions choose to cache data rows and rebuild objects when a cache hit occurs, EclipseLink has gone further and caches entities with all the defined data conversions applied. This approach to caching greatly improves performance and reduces the amount of garbage created when accessing cached objects. The caching is also very flexible, allowing developers complete control over L1 and L2 cache usage, lifecycle, refreshing, cluster coordination and concurrency protection to minimize and handle stale data scenarios. As with all caching solutions the performance and scalability benefits are gained when the solution is tuned with respect to the applications usage of the data and the behavior of the underlying database, which is often shared with other applications in the enterprise.

EclipseLink caching can be configured using annotations or XML. Here is an example of how the @Cache annotation can be used:

@Cache(
    // Cache a number of objects with Hard references
    // and the remainder with Weak references
    type = CacheType.HARD_WEAK, 
    // Number of Hard references to hold
    size = 500, 
    // Store instances in the shared (L2) cache
    shared = true, 
    // When changes are made to an object
    // invalidate (mark dirty) instances in other nodes
    coordinationType =
        CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS)
public class MyEntity 


One of the trade offs when using caching in a persistence solution is dealing with potential for stale data in the cache. While the application specific configuration of the cache can minimize stale data it is strongly recommended that you have a locking strategy using optimistic and/or pessimistic locking. Users of EclipseLink can leverage the standard JPA @Version mechanism for mapping a numeric or timestamp value in their entity to a column. While this is probably the easiest solution to manage from a mapping perspective, it does not always work with pre-existing schemas where additional columns cannot be added or other applications will not honor the optimistic locking semantics when modifying the database. To address these situations, EclipseLink JPA offers additional optimistic locking policies as well as pessimistic locking.

@Entity
@OptimitisticLocking(CHANGED_COLUMNS)
public class MyEntity

As shown here, an EclipseLink @OptimisticLocking policy can be specified on entities where no version column exists in the database and adding one is simply not an option.  The CHANGED_COLUMNS policy in the example ensures that all columns changed in a transaction  still have the same values in the database as when they were read.  If any of the columns that are to be updated have been changed by another application, an optimistic lock exception is thrown.   This is just one of a number of optimistic locking policies that are available to deal with different schemas and concurrent update scenarios.
 
 

Published at DZone with permission of its author, Doug Clarke.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Vijay Nair replied on Tue, 2008/07/01 - 12:10pm

HI, Does this support out-of the box integration with Coherence as the second level cache or even ehCache ?

 

Didnt see any property setting for that anywhere in the examples

 

Tks..VJ 

Doug Clarke replied on Tue, 2008/07/01 - 3:10pm

VJ,

EclipseLink 1.0 has added cache interceptors to enable us to leverage grid caching solutions such as Oracle's Coherence. The actual implementation for Coherence is not available yet but is being worked on and we hope to attract other grid vendors to integrate their solutions as well. The approach taken allows you to leverage the grid as more then just a simple data cache. You should be able to leverage its distributed data porocessing capabilities for query execution and concurrency protection.

For the 1.1 release I hope to have an implementation that iullustrates how an alternate caching solution such as ehCache could be used. If interested in learning more please post a question to the users mailing list or newsgroup and we can get you connected with the developers working on the solution and the technical details necessary to use it.

I also recommend looking at our cache coordination support that is offerred out of the box. It addresses minimizing stale data in the cache in a clustered deployment.

Doug 

 

Sudhakar Ramasamy replied on Thu, 2008/07/03 - 3:12pm

From what I've read so far I haven't been able to figure out if JPA 2.0 will have a Criteria API.

Will EclipseLink 1.0 have a Criteria API or will it be included in a future release of EclipseLink as part of the JPA 2.0 implementation or as an extension?

 sud

Gordon Yorke replied on Fri, 2008/07/04 - 8:41am

As mentioned in the Early Draft a critera API for JPA 2.0 is planned.  Some of the API should be in the next Draft of the specification.  I would rather not comment on the structure of the criteria API right now as the definition is in the very early stages.

--Gordon 

Mike Keith replied on Fri, 2008/07/04 - 8:44am in response to: Sudhakar Ramasamy

Sud,

JPA 2.0 will have a Java-based expression language (sometimes called a "criteria API").  It will not be as powerful as the existing native TopLink expression API, but will offer all of the current functionality in JP QL, plus more as possible and appropriate. Although EclipseLink already includes support for a Java expression/criteria API, it will also include the new JPA 2.0 API once we have fully specified it. The EclipseLink API will continue to be offered, though, so you can use that now and migrate to the JPA version when it is specified and implemented.

-Mike

Donny A. Wijaya replied on Tue, 2008/07/08 - 10:33pm

I wonder if these annotations would be available via XML mappings? Would they (the annotations) become part of JPA standard or just part of EclipseLink? But anyway the EclipseLink looks great, StoredProc and Converter are what I want to see in the next JPA

Doug Clarke replied on Wed, 2008/07/09 - 4:37am in response to: Donny A. Wijaya

Donny,

Yes, all of the advanced features configured using annotations can also be done using XML.

For the example provided in the article I can have an EclipseLink-ORM.XML file containing:

    <converter name="money-converter" class="mypackage.MoneyConverter"/>

Then when I wish to use it on a mapping:

            <basic name="balance">
<convert>money-converter</convert>
</basic>

In EclipseLink 1.0 these XML files can be used in place of the standard JPA ones or as overrides with just the advanced features specified to enable greater portability between vendors.

It is our goal to continue to drive the advanced features we have added based on user requirements back into future versions of the standards. I will leave it to our expert group memebers to comment on the specifics but you can also get more involved by providing feedback directly to the expert group and reviewing all of the drafts that they publish (http://www.jcp.org/en/jsr/detail?id=317).

Doug

Sudhakar Ramasamy replied on Thu, 2008/07/10 - 2:32pm

Thanks for the response about the Criteria API. Can you shed some light on the integration with Teneo - the EMF to JPA persistence framework.

I'm investigating the feasibilty of an EMF - JFace Databinding - Teneo - EclipseLink - Derby stack for a rich client application and anything that makes this seamless/painless would be very helpful.

-sud 

kalle pallo replied on Tue, 2009/10/27 - 2:01pm

Advanced object-relational mappings in EclipseLink JPA offers greater flexibility when dealing with complex or legacy relational schemas. This mapping support has evolved over many years of commercial use dealing with many 'interesting' (i.e., challenging) domain models and relational schemas. hampaiden valkaisu kotona

Manish Chowdhary replied on Thu, 2012/03/22 - 8:12pm

Anyone have any recent links regarding EclipseLink that they can share? GoECart

Jason Bourne replied on Tue, 2012/10/23 - 2:04am

you’re truly well informed and very intelligent. You wrote something that people could understand and made the subject intriguing for everyone. Thanks for the information. And keep postingClickuplink Bookmarking

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.