Apache OpenJPA 2.2.0
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

Content
-------
   * Overview
   * License
   * Notices
   * Prerequisites
   * Documentation
   * Getting Involved
   * Included Changes
     * Sub-tasks
     * Bugs
     * Improvements
     * New Features
     * Test


Overview
--------
   The Apache OpenJPA community is proud to release a SNAPSHOT distribution of
   OpenJPA 2.2.0. This distribution is based on the final JSR 317 Java 
   Persistence API, Version 2.0 specification and passes the JPA 2.0 TCK,
   while remaining backwards compatible with prior releases based on the
   Java Persistence API (JPA 1.0) part of Java Community Process JSR-220
   (Enterprise JavaBeans 3.0).
   
   Additional information on the OpenJPA project may be found at the project
   web site:
      http://openjpa.apache.org


License
-------
   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.

   The license may also be found in LICENSE.txt included in each assembly.


Notices
-------
   Copyright 2006,2012 The Apache Software Foundation.
   Apache, the Apache feather logo and OpenJPA are trademarks of
   The Apache Software Foundation.

   This product includes software developed at
   The Apache Software Foundation (http://www.apache.org/).

   OpenJPA includes the persistence and orm schemas from the JPA specifications.
   Copyright 2005-2009 Sun Microsystems, Inc. All rights reserved.
   OpenJPA elects to include this software in this distribution under the
   CDDL license.  You can obtain a copy of the License at:
       https://glassfish.dev.java.net/public/CDDL+GPL.html
   The source code is available at:
       http://java.net/projects/glassfish

   The complete list of notices can be found in NOTICE.txt included in each
   assembly.


Prerequisites
-------------
   OpenJPA requires Java SE 6 or higher and a relational 
   database of some sort.


Documentation
-------------
   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
       http://openjpa.apache.org/documentation.html

   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:
       http://openjpa.apache.org/mailing-lists.html


Getting Involved
----------------
   The Apache OpenJPA project is being built by the open source community for
   the open source community - we welcome your input and contributions!

   What we are looking for
        * Source code and fixes contributions
        * Documentation assistance
        * Product and feature suggestions
        * Detailed and constructive feedback
        * Articles and whitepapers

   How do I contribute?
        * To discuss Apache OpenJPA topics check out the mailing lists.
        * Informal discussion also occurs on the #openjpa IRC channel on
          freenode.net.
        * Bugs and other issues can be posted on the issue tracker at
          https://issues.apache.org/jira/browse/OPENJPA


Included Changes in OpenJPA 2.2.0
---------------------------------

Sub-task

    [OPENJPA-1593] - Create an OSGiManagedRuntime
    [OPENJPA-2081] - Provide subset of XML support for OpenJPA annotations

Bug

    [OPENJPA-478] - Contradictory text in manual section 10.2.6. JPQL GROUP BY, HAVING
    [OPENJPA-867] - Unexpected Behaviour of DBDictionary.indexOf() method
    [OPENJPA-1343] - Incorrect example of openjpa.Sequence property
    [OPENJPA-1376] - @SequenceGenerator allocationSize incorrect implementation
    [OPENJPA-1650] - Adding a slice dynamically should be done via persistence unit only
    [OPENJPA-1651] - Unique colums automatically defined as non-nullable (part 2)
    [OPENJPA-1657] - Postgres connection throws NPE with null properties
    [OPENJPA-1686] - Persistence of Dynamic and Generic Type
    [OPENJPA-1725] - Schemaname wrongly included in DBDictionary.checkNameLength after Tablename correctly truncated
    [OPENJPA-1746] - NullPointerException when a null value is set in the properties map passed to Entity.createEntityManagerFactory
    [OPENJPA-1768] - StackOverflowError when finding an Entity with an Eager ManyToMany relationship.
    [OPENJPA-1787] - Bean validation fails merging a new entity
    [OPENJPA-1845] - the prepared query cache doesn't currently work correclty with 'SELECT IN' statements
    [OPENJPA-1856] - Executing bulk updates should evict stale data from the DataCache
    [OPENJPA-1873] - EntityManager#merge sometimes passes wrong entity values to @PostLoad EntityListeners
    [OPENJPA-1876] - Slow JDBC tests
    [OPENJPA-1896] - OpenJPA cannot store POJOs if a corresponding record already exists
    [OPENJPA-1898] - TestQueryMultiThreaded fails with OOME "unable to create new native thread"
    [OPENJPA-1900] - ClassCastException when serializing an entity if DetachedStateField=true
    [OPENJPA-1901] - QueryCacheStoreQuery$CachedObjectId that is not Serializable
    [OPENJPA-1902] - SQLServer reserved words may not be used as identifiers
    [OPENJPA-1903] - Some queries only work the first time they are executed
    [OPENJPA-1904] - OptimisticLockException during refresh(*,PESSIMISTIC_*) with eagar fetch on relationship fields
    [OPENJPA-1905] - jar-file validation should be deferred until after OpenJPA is confirmed to be the application's chosen provider
    [OPENJPA-1906] - Issue info / warning message when connection retain mode is always
    [OPENJPA-1909] - enhance unit tests with the correct persistence.xml
    [OPENJPA-1910] - openjpa uses application ClassLoader for resolving BrokerFactory (revisited)
    [OPENJPA-1911] - InvalidStateException is thrown when merge an entity with derived identiy
    [OPENJPA-1912] - enhancer generates invalid code if fetch-groups is activated
    [OPENJPA-1915] - missing license header
    [OPENJPA-1918] - MetaDataRepository.preload() ignores class loader returned by PersistenceUnitInfo.getClassLoader()
    [OPENJPA-1923] - Allow flexible (non-standard) syntax for collection-valued parameters in IN() expresseion of JPQL query
    [OPENJPA-1928] - Resolving factory method does not allow method overriding
    [OPENJPA-1932] - Documentation corrections
    [OPENJPA-1935] - Informix lock exceptions are not mapped properly by OpenJPA
    [OPENJPA-1938] - Typo of time data type in SQLServerdictionary for MSSQL 2008
    [OPENJPA-1939] - index identifier max length for DB2 v9 is 128.
    [OPENJPA-1940] - ReverseMapping tool does not find primary keys with Oracle
    [OPENJPA-1941] - Criteria query returns wrong result when query cache is enabled
    [OPENJPA-1943] - Query timeout hint not honored consistently when pessimistic lock is issued to database requires multi-statements locking scheme
    [OPENJPA-1944] - Extra select statements executed when version column is null.
    [OPENJPA-1951] - missing key "cant-set-value" in localizer properties org.apache.openjpa.jdbc.meta.strats
    [OPENJPA-1953] - Copying data from inputStream to OuputStream needs appropriate buffer size
    [OPENJPA-1954] - ArrayIndexOutOfBoundsException when querying on a version field that is in a MappedSuperclass
    [OPENJPA-1957] - XML overriding column names for ArrayList attributes causes exception.
    [OPENJPA-1958] - IndexOutOfBoundsException in BatchingPreparedStatementManagerImpl
    [OPENJPA-1959] - RuntimeExceptionTranslator should be transient in DelegatingQuery
    [OPENJPA-1960] - openjpa.InitializeEagerly breaks bean-validation integration
    [OPENJPA-1965] - ClassCastException when using JAXB and MetaModel annotation processor
    [OPENJPA-1968] - SQLServerDictionery not using DATETIME2 for jdbc driver other than MS JDBC driver
    [OPENJPA-1969] - SQLServer / DataDirect SQLCode=HYT00 not handled
    [OPENJPA-1974] - StackOverflowError when performing multiple subquery in collection field with eager fetch
    [OPENJPA-1975] - Only obtain default schema name when needed (DB2)
    [OPENJPA-1981] - Improper cleanup in SchemaGenerator
    [OPENJPA-1983] - Merge of lazily fetched fields, and merge of managed entities deviates from spec
    [OPENJPA-1984] - Incorrect ViolationContraint getRootBean when removing bean with embedded entity validation
    [OPENJPA-1985] - ClassCastException in max(Timestamp) function on PostgreSQL
    [OPENJPA-1986] - Extra queries being generated when cascading a persist
    [OPENJPA-1987] - Postgres / Ingres does not support null table for getImportedKeys
    [OPENJPA-1989] - *ToOne relationships specified as LAZY in xml aren't honored
    [OPENJPA-1992] - java.lang.ArrayIndexOutOfBoundsException if positional parameter are not started from 1
    [OPENJPA-1994] - Index is a reserved word for MySQL
    [OPENJPA-1996] - OpenJPA Samples fail on MacOS X
    [OPENJPA-1998] - NPE getTableNameForMetadata when running SchemaTool reflect against Postgres DB
    [OPENJPA-2000] - Wrong PostgreSQL data type for REAL - "float8", must be "float4"
    [OPENJPA-2005] - PostgresDictionary.isOwnedSequence needs a null check
    [OPENJPA-2006] - Sequence generated ids may fail to get assigned when flushing a graph with bi-directional relationships
    [OPENJPA-2007] - Setting query hint "openjpa.FetchPlan.Isolation" results in misleading warning
    [OPENJPA-2008] - OpenJPA does not work with native queries in a distributed (Slice) environment
    [OPENJPA-2010] - Duplicate meta data warning logged due to parsing the same location twice
    [OPENJPA-2011] - Prevent reparsing annotation metadata for queries
    [OPENJPA-2013] - columnDefinition for TEXT types ends up in wrong sql statement
    [OPENJPA-2025] - Byte[] and Char[] should be treated as SingularAttributes, not lists by the metamodel generator
    [OPENJPA-2027] - Metamodel genereated at runtime expects ListAttribute for all arrays - not just PersistentCollections.
    [OPENJPA-2034] - Update H2 Database sql error codes as per the changes in v1.3.154
    [OPENJPA-2036] - DynamicEnhancer should look for tools.jar in java.home/lib for all JDKs, not just the IBM SDK.
    [OPENJPA-2039] - FKs for EAGER fields that are not in the current fetchplan aren't selected
    [OPENJPA-2044] - Invalid header in MetaModel classes generated by AnnotationProcessor
    [OPENJPA-2045] - NAME is a valid column name for H2 databases.
    [OPENJPA-2051] - Entities in a relationship are not properly cascaded after a EntityManager.flush is executed.
    [OPENJPA-2056] - Postgres V9.1 issue with LIKE clause and Escape Strings
    [OPENJPA-2059] - Missing localizer.properties for org.apache.openjpa.persistence.util.SourceCode
    [OPENJPA-2060] - AnnotationProcess failed to generate metadata for List<String>[] attribute in entity
    [OPENJPA-2065] - JPA 2.0 Spec. Violation? EntityManager#createNamedQuery(String, Class) bombs with non-entity Class parameter
    [OPENJPA-2066] - Edge case in openJPA-1227. openJPA fails to create a join and thus returns wrong data when a collection is selected from superclass and another field is selected from subclass twoor more levels down the hierarchy.
    [OPENJPA-2069] - Natvie sequence problems uncovered after OPENJPA-1376
    [OPENJPA-2070] - Error processing while populating Metamodel classes needs improvement
    [OPENJPA-2071] - NPE during ResultPacker interface processing
    [OPENJPA-2073] - MappingTools requires live connection to DB2 server to retrieve default schema name
    [OPENJPA-2076] - Minor fix-ups to messages
    [OPENJPA-2077] - Pom references to org.codehaus.mojo openjpa-maven-plugin cause problems
    [OPENJPA-2083] - Unmapped fields silently treated as transient
    [OPENJPA-2100] - openjpa-maven-plugin fails to create SQL for entities which contain enums
    [OPENJPA-2101] - PersistenceProductDerivation overwrites the RemoteCommitProvider configuration
    [OPENJPA-2104] - BindParameter is not a valid query parameter as processed in DBDictionary's setUnknown()
    [OPENJPA-2105] - Document changes no longer being uploaded
    [OPENJPA-2107] - ManagedCache conflict due adding an entity 2 times in the same query.
    [OPENJPA-2117] - XML overriding column names for 1xM attributes causes exception.
    [OPENJPA-2119] - Update org.apache.openjpa.persistence.util.SourceCode
    [OPENJPA-2122] - VerifyError with Java 7 when using javaagent or dynamic container enhancement
    [OPENJPA-2124] - Use of XMLValueHandler results in a NullPointerException when classloader does not provide package support

Improvement

    [OPENJPA-302] - PCEnhancer needs target classes on classpath
    [OPENJPA-487] - Generated SUBSTRING SQL is ugly and inefficient
    [OPENJPA-758] - OpenJPA doesn't find ValueHandlers with an applicable class loader
    [OPENJPA-1555] - SQLBuffer code cleanup
    [OPENJPA-1777] - Allow setting of diagonstic context for each slice in a more flexible manner
    [OPENJPA-1778] - Improved error information for unenhanced classes.
    [OPENJPA-1798] - Improve messages in localize.properties
    [OPENJPA-1803] - Unwrap EntityManager to Connection
    [OPENJPA-1847] - Use a single connection when generating schema
    [OPENJPA-1863] - update HSQL dictionary for HSQLDB 2.0
    [OPENJPA-1917] - Cache column alias in SelectImpl
    [OPENJPA-1937] - Document OpenJPAEntityManager.evict methods
    [OPENJPA-1945] - Improve aspects of the OpenBooks sample
    [OPENJPA-1972] - DB2 V9.7 changed the default behavior concerning blocking behavior with isolation levels greater then read uncommitted
    [OPENJPA-1990] - Skip getting extend exception text when running on DB2
    [OPENJPA-1999] - Optional support for non-sequential positional parameters
    [OPENJPA-2014] - Allow proxies to stay in place when Detaching
    [OPENJPA-2020] - Make some members of StateManagerImpl protected to allow for greater extensability
    [OPENJPA-2031] - Unable to import maven projects with m2e version 1.0
    [OPENJPA-2042] - Diagnostics for Application Managed EntityManagerFactory leaks.
    [OPENJPA-2043] - OpenJPAId hashCode() value needs to be consistent after serialization process
    [OPENJPA-2047] - Document the impact of Persistence Aware classes
    [OPENJPA-2068] - Improve performance of java.util.Calendar fields
    [OPENJPA-2075] - Abstract out parameter handling / validation from org.apache.openjpa.persistence.QueryImpl to allow for greater extensibility
    [OPENJPA-2084] - Upgrade Derby dependency to 10.8.x
    [OPENJPA-2085] - Improve enhancement process to support JAVA 7 compliant class file generation
    [OPENJPA-2087] - Remove or limit the use of the ConcreteClassGenerator
    [OPENJPA-2116] - Scrape the barrel for performance juice
    [OPENJPA-2120] - Add new option to eliminate reflection calls from enhancer generated IdClass PC copy operations
    [OPENJPA-2128] - Add a boolean to FieldMetaData to denote whether or not a field has a @EmbeddedId annotation.
    [OPENJPA-2130] - Enable Java 7 testing by allowing test cases to compile targeting to 1.7

New Feature

    [OPENJPA-184] - use DB2 Diagnostic interface to report extended error diagnostics on SQL Exception
    [OPENJPA-1859] - Create a sample to demonstrate usage of JEST
    [OPENJPA-1934] - contribute an openjpa-maven-plugin
    [OPENJPA-2108] - Allow an option to terminate MappingTool-generated SQL with a character other than semicolon

Task

    [OPENJPA-1786] - Upgrade to latest JPA 2.0 TCK
    [OPENJPA-1834] - Upgrade trunk to use Deby 10.6.2.1 for junits
    [OPENJPA-1875] - Add generics to the Graph code
    [OPENJPA-2089] - upgrade bval to latest 0.3-incubating
    [OPENJPA-2091] - update docbook maven plugin

Test

    [OPENJPA-2029] - Add PreparedQuery tests for non-sequential positional parameters support
