Changes in OpenJPA 0.9.7

Additional information on a specific change can be found in the OpenJPA 
project's issue tracker at http://issues.apache.org/jira/browse/OPENJPA

** Bugs
    * [OPENJPA-16] - NPE in createQuery for EJB QL with nested correlated subqueries
    * [OPENJPA-21] - Time is missing from list of mutable classes.
    * [OPENJPA-22] - locate & substring queries fail both db2 & derby, cannot use parameter markers in expression ?-?
    * [OPENJPA-23] - -418 sqlexception using DB2 and EJB QL with SQRT or MOD
    * [OPENJPA-24] - Allow OpenJPA to be extensible
    * [OPENJPA-25] - Incorrect SQL generated for queries involving more than one AbstractSchemaNames, generated SQL FROM clause is missing 'Table alias'
    * [OPENJPA-35] - In-memory Delete operation fails with active DataCache
    * [OPENJPA-41] - transforming classes doesn't work
    * [OPENJPA-48] -  parsing error - cast of subselect does not work
    * [OPENJPA-50] - bad sql pushdown, cast changes datatype
    * [OPENJPA-53] -  bad sql pushdown for nested subselects, missing nested subselect
    * [OPENJPA-54] - bad sql pushdown, should use all syntax
    * [OPENJPA-56] - in derby concat with input parameter needs a cast, otherwise becomes long varchar and some operations do not work
    * [OPENJPA-60] - Specifying the wrong persistence implementation in persistence.xml leads to misleading error message
    * [OPENJPA-62] - Ejbql join queries show invalid null Entities when run in a new persistence context where no entity instances exist.
    * [OPENJPA-71] - Caching primitive array types consumes excessive memory
    * [OPENJPA-77] - Problems in default setting in DB2Dictionary , also missing support for DB2 z/OS platforms
    * [OPENJPA-80] - Bad Escaping for LIKE in MySQL
    * [OPENJPA-98] - Java deadlock when insert in t1 and find in t2 when using IBM JVM 1.5.0
    * [OPENJPA-100] - <jar-file> entries failing to be processed for persistence unit rooted in an EAR
    * [OPENJPA-102] - JTA transaction rollback, nonexistant instances, transactional persistence context => failures during afterCompletion() and close()
    * [OPENJPA-103] - Default Listeners not being processed correctly
    * [OPENJPA-104] - OpenJPA does not detach instances on rollback()
    * [OPENJPA-107] - @SqlResultSetMappings fails in mapping tool with java.lang.ArrayStoreException
    * [OPENJPA-108] - @AttributeOverrides fails in mapping tool with java.lang.ArrayStoreException
    * [OPENJPA-109] - every NativeQuery using SqlResultSetMapping fails at runtime with There is no query result mapping for "null" with name "xxx" when the entity is persisted in a different method than the method doing the query.  
    * [OPENJPA-110] - Every NamedNativeQuery using ResultSetMapping fails at runtime with class cast exception when try to iterate over list<Some Entity>
    * [OPENJPA-111] - native queries fail when use named parameters
    * [OPENJPA-115] - Bottleneck(s) with using OpenJPA in a Container-managed environment
    * [OPENJPA-116] - EntityManager.getDelegate should throw an IllegalStateException 
    * [OPENJPA-118] - AutoDetach property has no effect
    * [OPENJPA-119] - EntityManager.clear() should not implicitly invoke the flush operation
    * [OPENJPA-121] - Table name defaults to the class name instead of the entity name
    * [OPENJPA-122] - EntityManager does not throw exceptions after close() in required cases
    * [OPENJPA-132] - java.lang.NoSuchMethodError for entity with ID of type java.sql.Date
    * [OPENJPA-133] - Can't find non-public callback methods with superclass or interface parameters
    * [OPENJPA-134] - Extra unneeded SQL joins for OneToMany relationship with fetch type EAGER
    * [OPENJPA-139] - PersistenceException merging an entity with a Calendar field. 
    * [OPENJPA-140] - Wrong package name in test classes
    * [OPENJPA-142] - Entity name is ignored when specified in the orm.xml file
    * [OPENJPA-144] - JDBCConfigurationImpl does not support JNDI lookup for non-jta-data-source.  
    * [OPENJPA-146] - Entity enhancement fails while using EmbeddedId on a MappedSuperclass
    * [OPENJPA-150] - @Column in @AttributeOverride not honoring table attribute that maps to a secondary table in mappedsuperclass entity
    * [OPENJPA-154] - OptimisticLockException working with  Savepoints
    * [OPENJPA-155] -  java.lang.ArrayIndexOutOfBoundsException during commit
    * [OPENJPA-157] - NullPointerException when running query with null parameter
    * [OPENJPA-162] - @OrderBy on @OneToMany does not allow ordering by @Id value
    * [OPENJPA-174] - error when find()'ing an abstract class
    * [OPENJPA-175] - Eager selects by PagingResultObjectProvider may not use the FetchBatchSize
    * [OPENJPA-179] - Schemas defined in orm.xml are only applied when a name is also specified. 
    * [OPENJPA-181] - ClassCastException when executing bulk delete on an entity that owns a OneToOne with a Cascade.DELETE when DataCache is on
    * [OPENJPA-185] - optional attribute is not overriden by xml descriptor
    * [OPENJPA-186] - Build failure of OpenJPA sources from trunk
    * [OPENJPA-202] - after invoking LRS processing in a client by calling an @LRS annotated relationship, the next em.clear()/em.close() gets org.apache.openjpa.persistence.InvalidStateException: You cannot transfer large result set fields from one object or field to another
    * [OPENJPA-208] - NoResultException and NonUniqueResultException are not thrown when expected
    * [OPENJPA-214] - Need to support floating point primary keys

** Improvements
    * [OPENJPA-10] - persistence unit name should be default diagnostic context for standard OpenJPA log impl
    * [OPENJPA-37] - Support ant typedefs for OpenJPA tasks
    * [OPENJPA-55] - Allow executeUpdate() invocations on native queries
    * [OPENJPA-57] - persistence_1_0.xsd is missing
    * [OPENJPA-63] - Better pessimistic lock support for DB2 v8.2+
    * [OPENJPA-151] - Added field in enhanced vesrion of a class is not serialized. Hence the change in detached+serialized instances is not registered under certain conditions.  
    * [OPENJPA-153] - WebSphere and non-jta-data-source and default ManagedRuntime
    * [OPENJPA-158] - OpenJPA logs overly-verbose at INFO level
    * [OPENJPA-161] - Overuse of synchronization in AbstractBrokerFactory
    * [OPENJPA-166] - Track the reason why a setRollbackOnly invocation was made
    * [OPENJPA-176] - Exception prefixes should be human-readable
    * [OPENJPA-196] - Ease the restrictions on forcing a matche between the number of declared and assigned positional parameters

** New Features
    * [OPENJPA-92] - Support for H2 Database Engine
    * [OPENJPA-93] - Sequence generation in a JTA environment should not require non-JTA datasource
    * [OPENJPA-94] - Allow MappingTool and persistence.xml to support drop-create for database schema
    * [OPENJPA-182] - db2 update lock syntax WITH <isolation> USE AND KEEP UPDATE LOCKS

** Tasks
    * [OPENJPA-36] - Add cwiki url to incubator status page

** Tests
    * [OPENJPA-40] - Testing OpenJPA and Spring integration fails
