blob: 768db375feb45708f769483f31a1ea973298452a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>About the Object-Relational Solution | EclipseLink 3.0.x Understanding EclipseLink</title>
<meta name="generator" content="Oracle DARB XHTML Converter (Mode = document) - Version 1.0.22 Build 1" />
<meta name="date" content="2014-06-10T10:39:52Z" />
<meta name="robots" content="noarchive" />
<meta name="doctitle" content="About the Object-Relational Solution" />
<meta name="relnum" content="3.0" />
<link rel="stylesheet" type="text/css" href="../../dcommon/style.css" media="screen" />
<link rel="copyright" href="../../dcommon/html/cpyr.htm" title="Copyright" type="text/html" />
<link rel="start" href="../../index.htm" title="Home" type="text/html" />
<link rel="contents" href="toc.htm" title="Contents" type="text/html" />
<link rel="prev" href="blocks001.htm" title="Previous" type="text/html" />
<link rel="next" href="blocks003.htm" title="Next" type="text/html" />
<!-- START: Disqus --><script type="text/javascript"> var disqus_developer = 0; </script><!-- END: Disqus --><!-- START: Sharethis --><script type="text/javascript">var switchTo5x=true;</script><script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script><script type="text/javascript" src="http://s.sharethis.com/loader.js"></script> <!-- END: Sharethis --></head>
<body bgcolor="#FFFFFF"><iframe id="docheader" frameborder="0" framemargin="0" scrolling="no" src="../../dcommon/header.html"></iframe><script src="http://www.google.com/jsapi" type="text/javascript"></script><script type="text/javascript"> google.load('search', '1', {language : 'en'}); google.setOnLoadCallback(function() { var customSearchOptions = {}; var googleAnalyticsOptions = {}; googleAnalyticsOptions['queryParameter'] = 'q'; googleAnalyticsOptions['categoryParameter'] = ''; customSearchOptions['googleAnalyticsOptions'] = googleAnalyticsOptions; var customSearchControl = new google.search.CustomSearchControl( '016171230611334810008:mdbgdwjv8zu', customSearchOptions); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); var options = new google.search.DrawOptions(); options.setSearchFormRoot('cse-search-form'); customSearchControl.draw('cse', options); }, true);</script><link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" /><div id="cse" style="width:100%;"></div>
<div class="header"><a id="top" name="top"></a>
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="left" valign="top"><div class="booktitle">Understanding EclipseLink,
<b>3.0</b><br /></font></td>
<td valign="bottom" align="right" width="144">
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>&nbsp;</td>
<td align="center" valign="top"><a href="toc.htm"><img src="../../dcommon/images/contents.png" alt="Go To Table Of Contents" border="0" height="16" width="16" /><br />
</td><td>&nbsp;</td><td align="center"><a href="../../" target="_top" class="external text" title="Search" rel="nofollow"><img src="../../dcommon/images/search.png" alt="Search" style="border:0;" /><br /><span class="mini"></span></a></td><td>&nbsp;</td><td align="center"><a href="../eclipselink_otlcg.pdf" title="PDF" target="_blank"><img src="../../dcommon/images/pdf_icon.png" style="padding-right:5px;border:0" alt="PDF"></a></td>
</tr>
</table>
</td>
</tr>
</table>
<hr />
<table class="navigation simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100" align="center">
<tr>
<td align="center"><a href="blocks001.htm"><img src="../../dcommon/images/larrow.png" alt="Previous" border="0" height="16" width="16" /></a></td>
<td align="center"><a href="blocks003.htm"><img src="../../dcommon/images/rarrow.png" alt="Next" border="0" height="16" width="16" /></a></td>
<td>&nbsp;</td>
</tr>
</table>
</div>
<!-- class="header" -->
<div class="ind"><!-- End Header --><a id="CHDDJCHD" name="CHDDJCHD"></a><a id="OTLCG135" name="OTLCG135"></a>
<div class="sect1"><!-- infolevel="all" infotype="General" -->
<h1 class="sect1"><font face="arial, helvetica, sans-serif" color="#330099">About the Object-Relational Solution</font></h1>
<p>EclipseLink provides a complete, JPA-compliant JPA implementation. It provides complete compliance for all of the mandatory features and many of the optional features. It also supports EclipseLink features not described in the JPA specification, such as object-level cache, distributed cache coordination, extensive performance tuning options, enhanced Oracle Database support, advanced mappings, optimistic and pessimistic locking options, extended annotations, and query hints.</p>
<p>For more information, see <em>Jakarta Persistence API (JPA) Extensions Reference for EclipseLink</em>.</p>
<p>The following sections describe many of these features.</p>
<ul>
<li>
<p><a href="#CHDHIEDE">Understanding Object-Relational Entity Architecture</a></p>
</li>
<li>
<p><a href="#CHDIADII">Adding Metadata Using Annotations</a></p>
</li>
<li>
<p><a href="#CHDIEIFJ">About Configuration Basics</a></p>
</li>
<li>
<p><a href="#CHDFFBHD">About Data Sources</a></p>
</li>
<li>
<p><a href="#CHDGGEID">About EclipseLink Caches</a></p>
</li>
<li>
<p><a href="#CHDFGCJB">About Database Queries</a></p>
</li>
</ul>
<a id="CHDHIEDE" name="CHDHIEDE"></a><a id="OTLCG136" name="OTLCG136"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">Understanding Object-Relational Entity Architecture</font></h2>
<p>The entity architecture is composed of entities, persistence units, persistence contexts, entity manager factories, and entity managers. <a href="#CHDHABEI">Figure 2-2</a> illustrates the relationships between these elements:</p>
<ul>
<li>
<p>Persistence creates one or more <code>EntityManagerFactory</code> objects.</p>
</li>
<li>
<p>Each <code>EntityManagerFactory</code> is configured by one persistence unit.</p>
</li>
<li>
<p><code>EntityManagerFactory</code> creates one or more <code>EntityManager</code> objects.</p>
</li>
<li>
<p>One or more <code>EntityManagers</code> manage one <code>PersistenceContext</code>.</p>
</li>
</ul>
<div class="figure"><a id="CHDHABEI" name="CHDHABEI"></a><a id="OTLCG137" name="OTLCG137"></a>
<p><strong><em><font face="arial, helvetica, sans-serif">Figure 2-2 Relationships Between Entity Architecture Elements</font></em></strong></p>
<img src="img/otlcg_jd_001.gif" alt="Relationships between entity architectue elements" title="Relationships between entity architectue elements" longdesc="img_text/otlcg_jd_001.htm" /><br />
<a id="sthref13" name="sthref13" href="img_text/otlcg_jd_001.htm">Description of "Figure 2-2 Relationships Between Entity Architecture Elements"</a><br />
<br /></div>
<!-- class="figure" -->
<a id="OTLCG138" name="OTLCG138"></a>
<div class="sect3"><a id="sthref14" name="sthref14"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Entities</font></h3>
<p>An entity is any application-defined object with the following characteristics:</p>
<ul>
<li>
<p>It can be made persistent.</p>
</li>
<li>
<p>It has a persistent identity (a key that uniquely identifies an entity instance and distinguishes it from other instances of the same entity type. An entity has a persistent identity when there is a representation of it in a data store).</p>
</li>
<li>
<p>It is transactional in a sense that a <em>persistence</em> <em>view</em> of an entity is transactional (an entity is created, updated, and deleted within a transaction, and a transaction is required for the changes to be committed in the database). However, in-memory entities can be changed without the changes being persisted.</p>
</li>
<li>
<p>It is <em>not</em> a primitive, a primitive wrapper, or built-in object. An entity is a fine-grained object that has a set of aggregated states that is typically stored in a single place (such as a row in a table) and have relationships to other entities.</p>
</li>
</ul>
<p>The entity also contains entity metadata that describes the entity. Entity metadata is not persisted to the database. It is used by the persistence layer to manage the entity from when it is loaded until it is invoked at runtime. Metadata can be expressed as annotations on the Java programming elements or in XML files (descriptors). For more information, see <a href="entities.htm#CIHGAJCF">Chapter 4, "Understanding Entities."</a></p>
<p>Beginning with the current release, you can define and use extensible entities where mappings can be added spontaneously. In this case, the entity stores extended attributes within a map instead of static attributes. The entity then defines how values from this map are mapped to the database using an <code>eclipselink-orm.xml</code> mapping file. In addition to being able to dynamically define mappings, EclipseLink also enables these extended mappings to be stored and managed externally. This external storage enables your extended mappings to be defined while the application is running. For more information on making entities extensible, see "Providing Software as a Service" in <em>Solutions Guide for EclipseLink</em>.</p>
</div>
<!-- class="sect3" -->
<a id="OTLCG139" name="OTLCG139"></a>
<div class="sect3"><a id="sthref15" name="sthref15"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Persistence and Persistence Units</font></h3>
<p>Persistence is a characteristic of an entity. This means that the entity can be represented in a data store, and it can be accessed at a later time.</p>
<p>A persistence unit identifies a persistable unit and defines the properties associated with it. It also defines the objects that must be persisted. The objects can be entity classes, embeddable classes, or mapped superclasses. The persistence unit provides the configuration for the entity manager factory. Entity managers created by the entity manager factory inherit the properties defined in the persistence unit.</p>
</div>
<!-- class="sect3" -->
<a id="OTLCG140" name="OTLCG140"></a>
<div class="sect3"><a id="sthref16" name="sthref16"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Entity Managers</font></h3>
<p>An entity manager enables API calls to perform operations on an entity. Until an entity manager is used to create, read, or write an entity, the entity is a nonpersistent Java object. When an entity manager obtains a reference to an entity, that entity becomes managed by the entity manager. The set of managed entity instances within an entity manager at any given time is called its persistence context; only one Java instance with the same persistent identity can exist in a persistence context at any time.</p>
<p>You can configure an entity manager to read or write to a particular database, to persist or manage certain types of objects, and to be implemented by a specific persistence provider. The persistence provider supplies the implementation for JPA, including the <code>EntityManager</code> interface implementation, the Query implementation, and the SQL generation.Entity managers are provided by an <code>EntityManagerFactory</code>. The configuration for an entity manager is bound to the <code>EntityManagerFactory</code>, but it is defined separately as a persistence unit. You name persistence units to enable differentiation between <code>EntityManagerFactory</code> objects. This way, your application obtains control over which configuration to use for operations on a specific entity. The configuration that describes the persistence unit is defined in a <code>persistence.xml</code> file. You name persistence units to be able to request a specific configuration to be bound to an <code>EntityManagerFactory</code>.</p>
</div>
<!-- class="sect3" --></div>
<!-- class="sect2" -->
<a id="CHDIADII" name="CHDIADII"></a><a id="OTLCG141" name="OTLCG141"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">Adding Metadata Using Annotations</font></h2>
<p>An annotation is a simple, expressive means of decorating Java source code with metadata that is compiled into the corresponding Java class files for interpretation at run time by a JPA persistence provider to manage persistent behavior.</p>
<p>A metadata annotation represents a Java language feature that lets you attach structured and typed metadata to the source code. Annotations alone are sufficient for the metadata specification&mdash;you do not need to use XML. Standard JPA annotations are in the <code>jakarta.persistence</code> package.</p>
<p>For more information, see Chapter 10 "Metadata Annotations" in the JPA Specification <code><a href="http://jcp.org/en/jsr/detail?id=338">http://jcp.org/en/jsr/detail?id=338</a></code></p>
<p>EclipseLink provides a set of proprietary annotations as an easy way to add metadata to the Java source code. The metadata is compiled into the corresponding Java class files for interpretation at run time by a JPA persistence provider to manage persistent behavior. You can apply annotations at the class, method, and field levels.</p>
<p>EclipseLink annotations expose some features that are currently not available through the use of JPA metadata:</p>
<ul>
<li>
<p>Basic properties&mdash;By default, the EclipseLink persistence provider automatically configures a basic mapping for simple types. Use these annotations to fine-tune the immediate state of an entity in its fields or properties.</p>
</li>
<li>
<p>Relationships&mdash;EclipseLink has defaults for some relationships, such as One-To-One and One-To-Many. Other relationships must be mapped explicitly. Use the annotations to specify the type and characteristics of entity relationships and to fine-tune how your database implements these relationships.</p>
</li>
<li>
<p>Embedded objects&mdash;An embedded object does not have its own persistent identity; it is dependent upon an entity for its identity. By default, the persistence provider assumes that every entity is mapped to its own table. Use annotations to override this behavior for entities that are owned by other entities.</p>
</li>
</ul>
<a id="OTLCG94267" name="OTLCG94267"></a>
<div class="sect3"><a id="sthref17" name="sthref17"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Advantages and Disadvantages of Using Annotations</font></h3>
<p>Using annotations provides several advantages:</p>
<ul>
<li>
<p>They are relatively simple to use and understand.</p>
</li>
<li>
<p>They provide in-line metadata within with the code that it describes; you do not need to replicate the source code context of where the metadata applies.</p>
</li>
</ul>
<p>The primary disadvantage of annotations is that the metatdata becomes unnecessarily coupled to the code; changes to metadata require changing and recompiling the source code.</p>
</div>
<!-- class="sect3" --></div>
<!-- class="sect2" -->
<a id="CHDIEIFJ" name="CHDIEIFJ"></a><a id="OTLCG142" name="OTLCG142"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">About Configuration Basics</font></h2>
<p>The following sections describe some of the key configuration files in an Object Relational Mapping project.</p>
<a id="OTLCG143" name="OTLCG143"></a>
<div class="sect3"><a id="sthref18" name="sthref18"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Default Annotation Values</font></h3>
<p>Each annotation has a default value (consult the JPA specification for defaults). A persistence engine defines defaults that apply to the majority of applications. You only need to supply values when you want to override the default value. Therefore, having to supply a configuration value is not a requirement, but the exception to the rule. This is known as configuration by exception.</p>
<div align="center">
<div class="inftblnote"><br />
<table class="Note oac_no_warn" summary="" border="1" width="80%" frame="hsides" rules="groups" cellpadding="3" cellspacing="0">
<tbody>
<tr>
<td align="left">
<p class="note"><img src="../../dcommon/images/note_icon.png" width="16" height="16" alt="Note" style="vertical-align:middle;padding-right:5px;" />Note:</p>
<p>You should be familiar with the defaults to be able to change the behavior when necessary.</p>
</td>
</tr>
</tbody>
</table>
<br /></div>
<!-- class="inftblnote" --></div>
<p>The default values are described in <em>Jakarta Persistence API (JPA) Extensions Reference for EclipseLink</em>. See also Chapter 10, "Metadata Annotations" in the JPA specification.</p>
<p><code><a href="http://jcp.org/en/jsr/detail?id=338">http://jcp.org/en/jsr/detail?id=338</a></code></p>
<p>The configuration is done by exception: if a value is <em>not</em> specified in one of the configuration files, then a default value is used.</p>
</div>
<!-- class="sect3" -->
<a id="OTLCG144" name="OTLCG144"></a>
<div class="sect3"><a id="sthref19" name="sthref19"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Configuring Persistence Units Using persistence.xml</font></h3>
<p>A persistence unit defines the details that are required when you acquire an entity manager. You specify a persistence unit by name when you acquire an entity manager factory. Use the JPA persistence file, <code>persistence.xml</code>, to configure a persistence unit. You can specify any vendor-specific extensions in the file by using a <code>&lt;properties&gt;</code> element.</p>
<p>This file appears in the <code>META-INF</code>/ directory of your persistence unit JAR file or in the classpath.</p>
<p>For more information, see <a href="app_dev001.htm#BABHCJDG">About the Persistence Unit.</a> See also "Persistence Property Extensions Reference" in <em>Jakarta Persistence API (JPA) Extensions Reference for EclipseLink</em>.</p>
</div>
<!-- class="sect3" -->
<a id="CHDFGGBB" name="CHDFGGBB"></a><a id="OTLCG130" name="OTLCG130"></a>
<div class="sect3">
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Object-Relational Data Type Mappings</font></h3>
<p>Object-relational data type mappings transform certain object data member types to structured data source representations optimized for storage in specialized object-relational databases such as Oracle Database. Object-relational data type mappings let you map an object model into an object-relational model. You can use only object-relational data type mappings with specialized object-relational databases optimized to support object-relational data type data source representations.</p>
<p>For more information, see <em>Jakarta Persistence API (JPA) Extensions Reference for EclipseLink</em>.</p>
</div>
<!-- class="sect3" --></div>
<!-- class="sect2" -->
<a id="CHDFFBHD" name="CHDFFBHD"></a><a id="OTLCG146" name="OTLCG146"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">About Data Sources</font></h2>
<p>An important part of the definition of the persistence unit is the location where the provider can find data to read and write. This is called the <strong>data</strong> <strong>source</strong>. The data source is typically a database. The database location is specified in the form of a JDBC data source in the JNDI namespace of the server.</p>
<p>Typically, applications that use EclipseLink are run in the context of a JTA transaction. Specify the name of the data source in the <code>jta-data-source</code> element in the <code>persistence.xml</code> file. If the application is not run in the context of a transaction, then it is considered to be <em>resource-local</em>. In this case, specify the name of the data source in the <code>non-jta-data-source</code> element.</p>
<p>You can also specify a non-relational database data source, such as an XML schema.</p>
<p>For more information, see <a href="data_access.htm#CHDJBDEA">Chapter 7, "Understanding Data Access."</a></p>
<p>Applications can be run in standalone, or <em>Java SE</em>, mode. In this mode, the application runs outside the server, with a non-JTA compliant data source, and in a non-Oracle stack. In this case, you must provide driver-specific information, such as the JDBC driver class, the URL that the client uses to connect to the database, and the user name and password to access the database. For more information and an example of running an application in standalone mode, see "Testing EclipseLink JPA Outside a Container" in <em>Solutions Guide for EclipseLink</em>.</p>
</div>
<!-- class="sect2" -->
<a id="CHDGGEID" name="CHDGGEID"></a><a id="OTLCG147" name="OTLCG147"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">About EclipseLink Caches</font></h2>
<p>By default, EclipseLink uses a shared object cache that caches a subset of all objects read and persisted for the persistence unit. The shared cache differs from the local <code>EntityManager</code> cache. The shared cache exists for the duration of the persistence unit (<code>EntityManagerFactory</code> or server) and is shared by all <code>EntityManagers</code> and users of the persistence unit. The local <code>EntityManager</code> cache is not shared and only exists for the duration of the <code>EntityManager</code> or transaction.</p>
<p>The benefit of the shared cache is that after an object is read, the database does not need to be accessed if the object is read again. Also, if the object is read by using a query, it does not need to be rebuilt, and its relationships do not need to be fetched again.</p>
<p>The limitation of the shared cache is that if the database is changed directly through JDBC, or by another application or server, the objects in the shared cache will be stale.</p>
<p>EclipseLink offers several mechanism to deal with stale data including:</p>
<ul>
<li>
<p>Refreshing</p>
</li>
<li>
<p>Invalidation</p>
</li>
<li>
<p>Optimistic locking</p>
</li>
<li>
<p>Cache coordination</p>
</li>
<li>
<p>Database Change Notification (DCN)</p>
</li>
</ul>
<p>The shared cache can also be disabled, or it can be selectively enabled and disabled by using the <code>@Cache</code> or <code>@Cacheable</code> annotations.EclipseLink also offers several different caching strategies, to configure how many objects are cached and how much memory is used.</p>
<p>If the application detects that the cache is out of date, it can clear, refresh, or invalidate it programmatically. Clearing the cache can cause object identity issues if any of the cached objects are in use, so invalidating is safer. If you know that none of the cached objects are in use, then you can clear the cache.</p>
<p>For more information, see <a href="cache.htm#CDEFHHEH">Chapter 8, "Understanding Caching."</a></p>
<a id="OTLCG148" name="OTLCG148"></a>
<div class="sect3"><a id="sthref20" name="sthref20"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Defining Cache Behavior</font></h3>
<p>EclipseLink provides an <code>@Cache</code> annotation which lets you define cache properties. The properties include cache type, size, and refresh rules, among others. See <em>Jakarta Persistence API (JPA) Extensions Reference for EclipseLink</em>.</p>
</div>
<!-- class="sect3" -->
<a id="OTLCG149" name="OTLCG149"></a>
<div class="sect3"><a id="sthref21" name="sthref21"></a>
<h3 class="sect3"><font face="arial, helvetica, sans-serif" color="#330099">Caching in Clustered Environments</font></h3>
<p>Caching in a clustered environment can have problems because changes made on one server are not reflected on objects cached in other servers. This is not a problem for read-only objects, but it is for objects that are frequently updated.</p>
<p>EclipseLink offers several solutions to this problem.</p>
<ul>
<li>
<p>The cache can be disabled for the classes that frequently change.</p>
</li>
<li>
<p>Cache coordination can be used to broadcast changes between the servers in the cluster to update or invalidate changed objects.</p>
</li>
<li>
<p>Cache invalidation based on time-to-live or time-of-day.</p>
</li>
<li>
<p>Optimistic locking prevents updates to stale objects and triggers the objects to be invalidated in the cache.</p>
</li>
</ul>
<p>For more information, see <a href="cache010.htm#CDEGDGAA">Clustering and Cache Coordination</a>.</p>
</div>
<!-- class="sect3" --></div>
<!-- class="sect2" -->
<a id="CHDFGCJB" name="CHDFGCJB"></a><a id="OTLCG150" name="OTLCG150"></a>
<div class="sect2">
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">About Database Queries</font></h2>
<p>The object-relational component of EclipseLink supports a variety of queries.</p>
<ul>
<li>
<p>JPQL queries</p>
</li>
<li>
<p>SQL queries</p>
</li>
<li>
<p>Criteria API queries</p>
</li>
<li>
<p>Native SQL queries</p>
</li>
<li>
<p>EclipseLink JPA query hints</p>
</li>
<li>
<p>Query casting</p>
</li>
<li>
<p>Oracle Extensions for queries</p>
</li>
<li>
<p>Advanced EclipseLink native queries</p>
</li>
</ul>
<p>For information on these queries, see <a href="queries.htm#CHDGGCJB">Chapter 9, "Understanding Queries."</a></p>
</div>
<!-- class="sect2" --></div>
<!-- class="sect1" --></div>
<!-- class="ind" -->
<!-- Start Footer -->
<div class="footer">
<hr />
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<col width="33%" />
<col width="*" />
<col width="33%" />
<tr>
<td valign="bottom">
<table class="navigation simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100" align="center">
<col width="*" />
<col width="48%" />
<col width="48%" />
<tr>
<td>&nbsp;</td>
<td align="center"><a href="blocks001.htm"><img src="../../dcommon/images/larrow.png" alt="Previous" border="0" height="16" width="16" /></a></td>
<td align="center"><a href="blocks003.htm"><img src="../../dcommon/images/rarrow.png" alt="Next" border="0" height="16" width="16" /></a></td>
</tr>
</table>
</td>
<td align="center" width="34%"><a href="http://www.eclipse.org/eclipselink/" title="EclipseLink home"><img src="../../dcommon/images/ellogo.png" alt="EclipseLink" width="150" border="0" /></a><br />
<td valign="bottom" align="right">
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="225">
<tr>
<td>&nbsp;</td>
<td align="center" valign="top"><a href="toc.htm"><img src="../../dcommon/images/contents.png" alt="Go To Table Of Contents" border="0" height="16" width="16" /><br />
</td><td>&nbsp;</td><td align="center"><a href="../../" target="_top" class="external text" title="Search" rel="nofollow"><img src="../../dcommon/images/search.png" alt="Search" style="border:0;" /><br /><span class="mini"></span></a></td><td>&nbsp;</td><td align="center"><a href="../eclipselink_otlcg.pdf" title="PDF" target="_blank"><img src="../../dcommon/images/pdf_icon.png" style="padding-right:5px;border:0" alt="PDF"></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<!-- class="footer" -->
<div id="copyright">Copyright &copy; 2012 by The Eclipse Foundation under the <a href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License (EPL)</a><br /> <script type="text/javascript">var LastUpdated = document.lastModified;document.writeln ("Updated: " + LastUpdated);</script> </div><!-- START: Analytics --><script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-1608008-2']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script><!-- END: Analytics --><!-- START: Sharethis --><script>var options={ "publisher": "e2fe9e07-fab6-4f84-83ea-0991b429842c", "position": "right", "ad": { "visible": false, "openDelay": 5, "closeDelay": 0}};var st_hover_widget = new sharethis.widgets.hoverbuttons(options);</script><!-- END: Sharethis --></body>
</html>