<html><head> | |
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |
<title>Appendix 3. Migration Considerations</title><base href="display"><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="manual.html" title="Apache OpenJPA 3.0 User's Guide"><link rel="up" href="appendices.html" title="Part 4. Appendices"><link rel="prev" href="dbsupport_sybase.html" title="24. Sybase Adaptive Server"><link rel="next" href="jpa_2.2.html" title="2. OpenJPA 2.2.0"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix 3. | |
Migration Considerations | |
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dbsupport_sybase.html">Prev</a> </td><th width="60%" align="center">Part 4. Appendices</th><td width="20%" align="right"> <a accesskey="n" href="jpa_2.2.html">Next</a></td></tr></table><hr></div><div class="appendix" id="migration_considerations"><div class="titlepage"><div><div><h2 class="title">Appendix 3. | |
Migration Considerations | |
</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="migration_considerations.html#jpa_2.0">1. | |
OpenJPA 2.0.0 | |
</a></span></dt><dd><dl><dt><span class="section"><a href="migration_considerations.html#jpa_2.0_incompatibilities">1.1. | |
Incompatibilities | |
</a></span></dt><dd><dl><dt><span class="section"><a href="migration_considerations.html#getProperties">1.1.1. | |
getProperties() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#migration_detach_behavior">1.1.2. | |
Detach Behavior | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#private_persistent_properties">1.1.3. | |
Use of private persistent properties | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#setParameter">1.1.4. | |
Query.setParameter() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#serialization">1.1.5. | |
Serialization of Entities | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#QuerySQLCache">1.1.6. | |
openjpa.jdbc.QuerySQLCache | |
</a></span></dt></dl></dd><dt><span class="section"><a href="migration_considerations.html#Disabling AutoOff Collection Tracking">1.2. | |
Disabling AutoOff Collection Tracking | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#internal_differences">1.3. | |
Internal Behavioral Differences | |
</a></span></dt><dd><dl><dt><span class="section"><a href="migration_considerations.html#prePostUpdate">1.3.1. | |
PreUpdate/PostUpdate Life Cycle Callbacks | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#createemf">1.3.2. | |
createEntityManagerFactory Exceptions | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#querycache">1.3.3. | |
openjpa.QueryCache default | |
</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="jpa_2.2.html">2. | |
OpenJPA 2.2.0 | |
</a></span></dt><dd><dl><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_incompatibilities">2.1. Incompatibilities</a></span></dt><dd><dl><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_allocationSize">2.1.1. | |
allocationSize Property of Sequence Generator | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_metamodelArrays">2.1.2. | |
MetaModel Attributes for Arrays | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_SupportsSetClob">2.1.3. | |
supportsSetClob Property. | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_UseNativeSequenceCache">2.1.4. | |
useNativeSequenceCache Property. | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_cascadePersist">2.1.5. | |
Cascade persist behavior | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_LifecycleEventManager">2.1.6. | |
Life Cycle Event Manager Callback Behavior | |
</a></span></dt><dt><span class="section"><a href="jpa_2.2.html#jpa_2.2_sharedCacheMode">2.1.7. | |
shared-cache-mode Property | |
</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="jpa_2.3.html">3. | |
OpenJPA 2.3.0 | |
</a></span></dt><dd><dl><dt><span class="section"><a href="jpa_2.3.html#jpa_2.3_incompatibilities">3.1. Incompatibilities</a></span></dt><dd><dl><dt><span class="section"><a href="jpa_2.3.html#jpa_2.3_MappingTool">3.1.1. | |
MappingTool Behavior for DB2 and Derby | |
</a></span></dt><dt><span class="section"><a href="jpa_2.3.html#jpa_2.3_RequiresSearchStringEscapeForLike">3.1.2. | |
RequiresSearchStringEscapeForLike DBDictionary Property | |
</a></span></dt><dt><span class="section"><a href="jpa_2.3.html#ReturnNullOnEmptyAggregateResult">3.1.3. | |
Return value of aggregate functions in SELECT clause | |
</a></span></dt></dl></dd></dl></dd></dl></div> | |
<div class="section" id="jpa_2.0"><div class="titlepage"><div><div><h2 class="title" style="clear: both">1. | |
OpenJPA 2.0.0 | |
</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="migration_considerations.html#jpa_2.0_incompatibilities">1.1. | |
Incompatibilities | |
</a></span></dt><dd><dl><dt><span class="section"><a href="migration_considerations.html#getProperties">1.1.1. | |
getProperties() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#migration_detach_behavior">1.1.2. | |
Detach Behavior | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#private_persistent_properties">1.1.3. | |
Use of private persistent properties | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#setParameter">1.1.4. | |
Query.setParameter() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#serialization">1.1.5. | |
Serialization of Entities | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#QuerySQLCache">1.1.6. | |
openjpa.jdbc.QuerySQLCache | |
</a></span></dt></dl></dd><dt><span class="section"><a href="migration_considerations.html#Disabling AutoOff Collection Tracking">1.2. | |
Disabling AutoOff Collection Tracking | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#internal_differences">1.3. | |
Internal Behavioral Differences | |
</a></span></dt><dd><dl><dt><span class="section"><a href="migration_considerations.html#prePostUpdate">1.3.1. | |
PreUpdate/PostUpdate Life Cycle Callbacks | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#createemf">1.3.2. | |
createEntityManagerFactory Exceptions | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#querycache">1.3.3. | |
openjpa.QueryCache default | |
</a></span></dt></dl></dd></dl></div> | |
<div class="section" id="jpa_2.0_incompatibilities"><div class="titlepage"><div><div><h3 class="title">1.1. | |
Incompatibilities | |
</h3></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="migration_considerations.html#getProperties">1.1.1. | |
getProperties() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#migration_detach_behavior">1.1.2. | |
Detach Behavior | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#private_persistent_properties">1.1.3. | |
Use of private persistent properties | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#setParameter">1.1.4. | |
Query.setParameter() | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#serialization">1.1.5. | |
Serialization of Entities | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#QuerySQLCache">1.1.6. | |
openjpa.jdbc.QuerySQLCache | |
</a></span></dt></dl></div> | |
<p> | |
The following sections indicate changes that are incompatible | |
between OpenJPA 1.x.x releases and the 2.0 release. Some may | |
require application changes. Others can be remedied through the | |
use of compatibility options. If your application uses a | |
version 1.0 persistence.xml, compatibility options will be set | |
appropriately to maintain backward compatibility. OpenJPA 2.0 | |
applications using a version 2.0 persistence.xml and requiring | |
OpenJPA 1.x.x compatibility may need to configure the | |
appropriate compatibility options to get the desired behavior. | |
</p> | |
<div class="section" id="getProperties"><div class="titlepage"><div><div><h4 class="title">1.1.1. | |
getProperties() | |
</h4></div></div></div> | |
<p> | |
The OpenJPAEntityManagerFactory interface getProperties() | |
method was changed to return a Map instead of a | |
Properties object. This change was made in order to | |
support the getProperties() method defined in the | |
JPA 2.0 specification. | |
</p> | |
</div> | |
<div class="section" id="migration_detach_behavior"><div class="titlepage"><div><div><h4 class="title">1.1.2. | |
Detach Behavior | |
</h4></div></div></div> | |
<p> | |
The detach behavior has changed in several ways: | |
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> | |
<p> | |
In the 1.x.x release, managed entities | |
were flushed to the database as part of the | |
detach operation. This is no longer done in | |
2.0. | |
</p> | |
</li><li class="listitem"> | |
<p> | |
In the 1.x.x release, entities were copied | |
and returned. In 2.0, for those methods | |
that have return values, the original | |
entities are returned. | |
</p> | |
</li><li class="listitem"> | |
<p> | |
In the 1.x.x release, managed entities still | |
exist in the persistent context. In 2.0, | |
they are removed. | |
</p> | |
</li><li class="listitem"> | |
<p> | |
In the 1.x.x release, the detach operation | |
is recursively cascaded to all referenced | |
entities. In 2.0, the detach operation is | |
only cascaded to those entities for which | |
Cascade=detach has been specified. | |
</p> | |
</li></ul></div><p> | |
</p> | |
<p> | |
Applications that use a 1.0 persistence.xml will | |
automatically maintain OpenJPA 1.x.x behavior. It is | |
possible for a version 2.0 application to revert back to | |
the 1.x.x behavior for some of these items by setting the | |
openjpa.Compatibility property as follows: | |
</p><table border="0" summary="Simple list" class="simplelist"><tr><td>CopyOnDetach=true</td></tr><tr><td>FlushBeforeDetach=true</td></tr><tr><td>CascadeWithDetach=true</td></tr></table><p> | |
</p> | |
<p> | |
In addition, a new method has been provided on the | |
<a class="ulink" href="../../apidocs/org/apache/openjpa/persistence/OpenJPAEntityManager.html" target="_top"> | |
<code class="classname">OpenJPAEntityManager</code></a> | |
interface to return a copy of the entity: | |
</p><pre class="programlisting"> | |
public <T> T detachCopy(T pc): | |
</pre><p> | |
</p> | |
</div> | |
<div class="section" id="private_persistent_properties"><div class="titlepage"><div><div><h4 class="title">1.1.3. | |
Use of private persistent properties | |
</h4></div></div></div> | |
<p> | |
In 1.x.x releases of OpenJPA, if property access was used, | |
private properties were considered persistent. This is | |
contrary to the JPA specification, which states that | |
persistent properties must be public or protected. In | |
OpenJPA 2.0 and later, private properties will not be | |
persistent by default. | |
</p> | |
<p> | |
Applications that use a 1.0 persistence.xml will | |
automatically maintain OpenJPA 1.x.x behavior. It is | |
possible for a version 2.0 application to revert back to | |
the 1.x.x behavior by setting the value of the | |
<code class="literal">openjpa.Compatibility</code> | |
property <code class="literal">PrivatePersistentProperties</code> to | |
<code class="literal">true</code>. If compile time enhancement is | |
used, this property must be specified at the time of | |
enhancement and at runtime. | |
</p> | |
</div> | |
<div class="section" id="setParameter"><div class="titlepage"><div><div><h4 class="title">1.1.4. | |
Query.setParameter() | |
</h4></div></div></div> | |
<p> | |
The Query interface setParameter() method behavior has | |
changed to throw an IllegalArgumentException (as required | |
by the JPA specification) if more parameter substitutions | |
are supplied than defined in the createQuery(), | |
createNamedQuery(), or createNativeQuery() invocation. | |
OpenJPA 1.2.x and prior versions silently ignored these | |
extraneous parameter substitutions and allowed the Query | |
to be processed. | |
</p> | |
</div> | |
<div class="section" id="serialization"><div class="titlepage"><div><div><h4 class="title">1.1.5. | |
Serialization of Entities | |
</h4></div></div></div> | |
<p> | |
In 1.x.x releases of OpenJPA, when an entity was serialized | |
after calling EntityManager.find(), detach() or detachAll() | |
then all <a class="xref" href="ref_guide_pc_scos.html#ref_guide_pc_scos_proxy" title="6.4. Proxies">Section 6.4, “ | |
Proxies | |
”</a> | |
references were removed as expected, but when the same | |
entity instance was serialized after calling | |
EntityManager.clear() the proxy classes were not removed. | |
</p> | |
<p> | |
This has two side-effects: | |
when entities are remoted across JVM boundaries (RPC) | |
or deserialized the OpenJPA runtime must be available | |
on the classpath (both client and server containers); | |
when entities are deserialized the OpenJPA runtime must | |
be the exact same revision as used to serialize the | |
entities due to the proxy classes using dynamically | |
generated serialVersionUID values. | |
</p> | |
<p> | |
Starting with OpenJPA 2.0, this behavior has been | |
modified, so that by default all proxies will be removed | |
during serialization. See | |
<a class="xref" href="ref_guide_pc_scos.html#ref_guide_pc_scos_proxy_serial" title="6.4.4. Serialization">Section 6.4.4, “ | |
Serialization | |
”</a> | |
on how the behavior changes based on the | |
<code class="literal">DetachedStateField</code> setting along with | |
<a class="xref" href="ref_guide_remote.html#ref_guide_detach_state" title="1.3.1. Detached State">Section 1.3.1, “ | |
Detached State | |
”</a> | |
for more details on how to override the default | |
<code class="literal">DetachedStateField</code> setting. | |
</p> | |
<p> | |
Applications that use a 1.0 persistence.xml will | |
automatically maintain the old behavior. It is | |
possible for a version 2.0 application to revert back to | |
the prior 1.x.x behavior by setting the following | |
openjpa.Compatibility property as follows: | |
</p><table border="0" summary="Simple list" class="simplelist"><tr><td>IgnoreDetachedStateFieldForProxySerialization=true</td></tr></table><p> | |
</p> | |
</div> | |
<div class="section" id="QuerySQLCache"><div class="titlepage"><div><div><h4 class="title">1.1.6. | |
openjpa.jdbc.QuerySQLCache | |
</h4></div></div></div> | |
<p> | |
In prior 1.x.x releases, the openjpa.jdbc.QuerySQLCache | |
configuration property for Prepared SQL Cache accepted | |
value <code class="literal">all</code> to never drop items from the | |
cache, but this option is no longer supported and will cause | |
a PersistenceException with a root cause of a ParseException | |
to be thrown. See | |
<a class="xref" href="ref_guide_cache_querysql.html" title="3. Prepared SQL Cache">Section 3, “Prepared SQL Cache”</a> | |
for details on the available configuration values. | |
</p> | |
</div> | |
</div> | |
<div class="section" id="Disabling AutoOff Collection Tracking"><div class="titlepage"><div><div><h3 class="title">1.2. | |
Disabling AutoOff Collection Tracking | |
</h3></div></div></div> | |
<p> | |
The default behavior of OpenJPA in tracking collections is that | |
if the number of modifications to the collection exceeds the | |
current number of elements in collection then OpenJPA will | |
disable tracking the collections. OpenJPA 2.0 added a compatibility | |
property to disable turning off the collection tracking. | |
</p> | |
<p> | |
The behavior of Auto disabling of collection tracking can be | |
avoided by setting the value of the | |
<code class="literal">openjpa.Compatibility</code> property | |
<code class="literal">autoOff</code> to <code class="literal">false</code>. | |
The default behavior of auto disabling the collection tracking | |
is not changed. But when the above property is set then the | |
collection tracking will not be disabled automatically. | |
</p> | |
</div> | |
<div class="section" id="internal_differences"><div class="titlepage"><div><div><h3 class="title">1.3. | |
Internal Behavioral Differences | |
</h3></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="migration_considerations.html#prePostUpdate">1.3.1. | |
PreUpdate/PostUpdate Life Cycle Callbacks | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#createemf">1.3.2. | |
createEntityManagerFactory Exceptions | |
</a></span></dt><dt><span class="section"><a href="migration_considerations.html#querycache">1.3.3. | |
openjpa.QueryCache default | |
</a></span></dt></dl></div> | |
<p> | |
The following sections indicate internal changes between | |
OpenJPA 1.x.x releases and the 2.0 release. As these are | |
internal implementation specific behaviors not covered by | |
the JPA specification, no changes should be required for | |
applications that did not use or depend upon OpenJPA specific | |
APIs or behavior. | |
</p> | |
<div class="section" id="prePostUpdate"><div class="titlepage"><div><div><h4 class="title">1.3.1. | |
PreUpdate/PostUpdate Life Cycle Callbacks | |
</h4></div></div></div> | |
<p> | |
If an entity was updated between the persist() | |
and commit() operations in OpenJPA 1.x, then | |
any PreUpdate and PostUpdate life cycle callback | |
methods would be executed. Starting in OpenJPA | |
1.3 and 2.0, these callbacks will not get executed. | |
</p> | |
<p> | |
The JPA 2.0 specification section on "Semantics | |
of the Life Cycle Callback Methods for Entities" | |
has been updated to include a Note that the | |
callback behavior for updating an entity after | |
the persist operation is implementation specific | |
and should not be relied upon. | |
</p> | |
</div> | |
<div class="section" id="createemf"><div class="titlepage"><div><div><h4 class="title">1.3.2. | |
createEntityManagerFactory Exceptions | |
</h4></div></div></div> | |
<p> | |
The JPA 2.0 specification section on | |
"Bootstrapping in Java SE Environments" states | |
that persistence providers must return null | |
if they are not a qualified provider for the | |
given persistence unit. | |
</p> | |
<p> | |
However, OpenJPA may throw a RuntimeException | |
if an error occurs while trying to create a | |
qualified persistence unit, like for invalid | |
openjpa.* specific configuration settings or | |
for schema validation failures. | |
</p> | |
<p> | |
If the Apache Geronimo JPA 2.0 Spec APIs are | |
used, then any exceptions returned by a | |
persistence provider will be wrapped within | |
a PersistenceException. When the JPA 2.0 API | |
reference implementation is used, any | |
RuntimeExceptions will be returned to the | |
calling application without being wrapped. | |
Other JPA 2.0 API and implementation providers | |
or versions may behave differently. | |
</p> | |
</div> | |
<div class="section" id="querycache"><div class="titlepage"><div><div><h4 class="title">1.3.3. | |
openjpa.QueryCache default | |
</h4></div></div></div> | |
<p> | |
In previous releases, the default value for the | |
openjpa.QueryCache property was <code class="literal">true</code> | |
when the openjpa.DataCache was enabled. Depending on | |
application characteristics, this default QueryCache | |
enablement actually could negate much of the potential | |
gains achieved by using the DataCache. Thus, the default | |
value for the openjpa.QueryCache property is now | |
<span class="emphasis"><em><code class="literal">false</code></em></span>. | |
</p> | |
<p> | |
To re-enable the default QueryCache behavior, you need to | |
include the following property in your persistence.xml | |
configuration. | |
</p><pre class="programlisting"> | |
<property name="openjpa.QueryCache" value="true"/> | |
</pre><p> | |
</p> | |
<p> | |
If your configuration had previously enabled the QueryCache | |
explicitly, then you might have to include the | |
<code class="literal">true</code> value into your configuration | |
(if you relied on the previous default). Otherwise, your | |
current QueryCache enablement will continue to work. | |
</p><pre class="programlisting"> | |
<property name="openjpa.QueryCache" value="true(CacheSize=1000, SoftReferenceSize=100)"/> | |
</pre><p> | |
</p> | |
</div> | |
</div> | |
</div> | |
</div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dbsupport_sybase.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendices.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="jpa_2.2.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">24. | |
Sybase Adaptive Server | |
</td><td width="20%" align="center"><a accesskey="h" href="manual.html">Home</a></td><td width="40%" align="right" valign="top"> 2. | |
OpenJPA 2.2.0 | |
</td></tr></table></div></body></html> |