<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE- 2.0
 
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License. 
--> 
<html>
<title>Release Notes for Apache OpenJPA 3.0.0</title>
<body>
<h1>Release Notes for Apache OpenJPA 3.0.0</h1>
<p>
<ul>
  <li><a href="#Overview">Overview</a></li>
  <li><a href="#Prerequisites">Prerequisites</a></li>
  <li><a href="#Documentation">Documentation</a></li>
  <li><a href="#GetInvolved">Getting Involved</a></li>
  <li><a href="#License">License</a></li>
  <li><a href="#Notice">Notice</a></li>
  <li><a href="#ReleaseNotes">Release Notes</a></li>
  <li><a href="#Previous">Release Notes for previous OpenJPA releases</a></li>
</ul>
</p>
<BR>
<hr>
<h2><a name="Overview"></a>Overview</h2>

<P>
   The Apache OpenJPA community is proud to release a distribution of
   OpenJPA 3.0.0. This distribution is based on the final JSR 338 Java
   Persistence API, Version 2.2 specification while not beeing fully TCK tested.
   We remain backwards compatible with prior releases based on the
   Java Persistence API 1.0 and 2.0.
</P>

<p>Additional information on the OpenJPA project may be found at the project 
web site: <a href="http://openjpa.apache.org">http://openjpa.apache.org</a></p>

<h2><a name="Prerequisites"></a>Prerequisites</h2>
<P>OpenJPA requires Java 8 or higher and a relational
database of some sort.
</p>

<h2><a name="Documentation"></a>Documentation</h2>
<p>If you have questions about OpenJPA, a good source of information is the 
online product manual. You can find the manual for the current release as well
as older releases of OpenJPA at 
<a href="http://openjpa.apache.org/documentation.html">
http://openjpa.apache.org/documentation.html</a></p>
<p>If you can't find what you are looking for in the manual or would like more
clarification, please post to the OpenJPA development mailing list.
Information on all of the OpenJPA mailing lists may be found here:
<a href="http://openjpa.apache.org/mailing-lists.html">
http://openjpa.apache.org/mailing-lists.html</a></p>

<h2><a name="GetInvolved"></a>Getting Involved</h2>
<p>The Apache OpenJPA project is being built by the open source community for the open source community - 
we welcome your input and contributions!</p>
<P>What we are looking for:
<ul>
    <li> Source code and fixes contributions </li>
    <li> Documentation assistance </li>
    <li> Product and feature suggestions </li>
    <li> Detailed and constructive feedback </li>
    <li> Articles and whitepapers </li>
</ul></p>
<p>How do I contribute?
<ul>
    <li> To discuss Apache OpenJPA topics check out the mailing lists. </li>
    <li> Informal discussion also occurs on the #openjpa IRC channel on 
         freenode.net. </li>
    <li> Bugs and other issues can be posted on
         <a href="https://issues.apache.org/jira/browse/OPENJPA">
         the issue tracker</a>.
     </li>
</ul>
</p>

<BR>
<hr>
<h2><a name="License"></a>License</h2>
<P>Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.
<BR>You may obtain a copy of the License at:
<a href="http://www.apache.org/licenses/LICENSE-2.0">
http://www.apache.org/licenses/LICENSE-2.0</a>
<BR>Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.</p>
<P>The license may also be found in LICENSE.txt which is included 
in each release of OpenJPA.</P>

<h2><a name="Notice"></a>Notice</h2>
<p>Copyright 2006,2018 The Apache Software Foundation
<BR>This product includes software developed at The Apache Software Foundation (http://www.apache.org/).</p>
<P>Apache OpenJPA includes the persistence and orm schemas from the JPA specifications.
<BR>Copyright 2005-2009 Sun Microsystems, Inc. All rights reserved.
<BR>Apache OpenJPA elects to include this software in this distribution under the CDDL license.
<BR>You can obtain a copy of the License at:
<a href="https://glassfish.dev.java.net/public/CDDL+GPL.html">https://glassfish.dev.java.net/public/CDDL+GPL.html</a>
<BR>The source code is available at:
<a href="http://java.net/projects/glassfish">http://java.net/projects/glassfish</a></p>
<P>The complete list of notices can be found in NOTICE.txt included in each assembly.</p>

<BR>
<hr>
<h2><a name="ReleaseNotes">Release Notes</a></h2>

<hr>
<h3><a name="300">OpenJPA 3.0.0</a></h3>




Release Notes - OpenJPA - Version 3.0.0

<h2>        Sub-task
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2663'>OPENJPA-2663</a>] -         cleanup ConcreteClassGenerator and move to ASM
    </li>
</ul>

<h2>        Bug
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2300'>OPENJPA-2300</a>] -         AnnotationProcessor shows warnings when executed on Java 7 sources
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2646'>OPENJPA-2646</a>] -         Sporadic NullPointerException occurs under heavy load when QuerySQLCache is enabled.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2658'>OPENJPA-2658</a>] -         TestQueryTimeout test is broken
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2672'>OPENJPA-2672</a>] -         ConfigurationImpl.loadGlobals() has java.util.ConcurrentModificationException vulnerability
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2674'>OPENJPA-2674</a>] -         JarFile is not closed
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2675'>OPENJPA-2675</a>] -         Missing check for null parameter in equals()
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2676'>OPENJPA-2676</a>] -         openjpa relies on default locale
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2684'>OPENJPA-2684</a>] -         Persistence entities not recognized in Wildfly 10 if in a JAR
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2689'>OPENJPA-2689</a>] -         Calling setFixedCHAR on newer Oracle JDBC drivers fails with an IllegalAccessException
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2690'>OPENJPA-2690</a>] -         Update OSGi Import-Package to support Oracle CLOB/BLOB
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2691'>OPENJPA-2691</a>] -         OracleDictionary should use non Deprecated method of empty_lob
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2698'>OPENJPA-2698</a>] -         Query cache incorrectly handles parameters for BETWEEN expressions
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2725'>OPENJPA-2725</a>] -         fix ConcurrentModificationException during unrefed dependents cleanup
    </li>
</ul>

<h2>        New Feature
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2592'>OPENJPA-2592</a>] -         JPA 2.1 stored procedure support
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2598'>OPENJPA-2598</a>] -         Support SQL server Offset Fetch syntax for pagination
    </li>
</ul>

<h2>        Improvement
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2660'>OPENJPA-2660</a>] -         Resolve Maven warnings
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2669'>OPENJPA-2669</a>] -         Add apache karaf feature for openjpa and adapt OSGi imports
    </li>
</ul>

<h2>        Task
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2641'>OPENJPA-2641</a>] -         update build pom
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2652'>OPENJPA-2652</a>] -         Prepare SVN for OpenJPA-3.0 development
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2653'>OPENJPA-2653</a>] -         Upgrade documentation page for 3.0.0 work
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2654'>OPENJPA-2654</a>] -         merge over the work done in branches/openjpa_jpa-2.1/ to trunk
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2655'>OPENJPA-2655</a>] -         verify signature of geronimo-jpa-2.1-spec with the RI jars
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2659'>OPENJPA-2659</a>] -         upgrade to apache-parent-18
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2664'>OPENJPA-2664</a>] -         migrate from commons-lang to commons-lang3
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2666'>OPENJPA-2666</a>] -         Fix Java9 compatibility
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2667'>OPENJPA-2667</a>] -         Upgrade BVAL to 1.1
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2677'>OPENJPA-2677</a>] -         upgrade to BVAL-1.1.2
    </li>
</ul>

<h2>        Dependency upgrade
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/OPENJPA-2730'>OPENJPA-2730</a>] -         Update to XBean Asm 6 Shaded 4.8
    </li>
</ul>

<BR>
<hr>
<h2><a name="Previous"></a>Previous Releases</h2>
<p>Release notes for earlier releases of OpenJPA may be found in SVN at the following locations. 
<ul>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.4.3/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.4.3 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.4.2/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.4.2 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.4.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.4.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.4.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.4.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.3.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.3.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.2.2/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.2.2 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.2.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.2.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.2.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.2.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.1.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.1.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.1.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.1.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.1.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.1.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.0-beta3/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.0-Beta 3 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.0-beta2/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.0-Beta 2 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.0-beta/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.0-Beta RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/2.0.0-M3/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 2.0.0-Milestone 3 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.2.2/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.2.2 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.2.2/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.2.2 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.2.1/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.2.1 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.1.0/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.1.0 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.0.4/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.0.4 RELEASE-NOTES.html</a></li>
  <li><a href='http://svn.apache.org/viewvc/openjpa/tags/1.0.3/openjpa-project/RELEASE-NOTES.html?view=co'>OpenJPA 1.0.3 RELEASE-NOTES.html</a></li>
</ul></p>
 
<hr>
<p>Copyright (C) 2006,2015 Apache Software Foundation. Licensed under Apache License 2.0.<br>
Apache, the Apache feather logo and OpenJPA are trademarks of Apache Software Foundation.<br>
</body>
</html>
