[[releasenotes_2_0]]
= DataNucleus AccessPlatform 2.0 Release Notes
:_basedir: ../../
:_imagesdir: images/

The 2.0 release of AccessPlatform is available under the link:../license.html[Apache 2 license] from our link:../../download.html[download page] 


_Version 2.0_ includes the following over 1.1


* Addition of plugin for persistence to HBase (HADOOP) datastores
* Support for persistence to Amazon S3 datastores
* Support for persistence to Oracle Timesten datastores
* Addition of plugin for persistence of JodaTime types
* Change default for non-transactional read/write to true for JDO
* Support atomic non-transactional write persist/delete operations
* Level 2 Cache is now enabled by default (soft)
* Cache : Support for pinning/unpinning of query results with Memcache/javax.cache
* Split query cache into 3 components : generic compilation, datastore compilation
    and query results. Added API for managing caching of query results (using JDO or JPA).
* Enhancer : add ability to generate PK classes (including composite)
* JDO : Support for JDO 2.3 Query cancel, and datastore read/write timeout
* JPA : Support for extended persistence context
* JPA2 : Support for metamodel API
* JPA2 : Support for bean validation API
* JPA2 : Support for various JPQL keywords
* JPA2 : Support for 1-N FK bidirectional relations
* JPA2 : Support for 1-N collection/map of non-persistable objects.
* JPA2 : Support for TypedQuery
* RDBMS : Support for update/delete-by-query for JPQL
* RDBMS : Rewritten JPQL implementation building on generic query compiler. 
    This is now the default JPQL implementation for RDBMS, and can be used with the query caching mechanism.
* RDBMS : Rewritten JDOQL implementation building on generic query compiler.
    This is not currently the default JDOQL implementation but is available to be used, and can be used with the query caching mechanism.
* LDAP : Support for persistence of recursive object graph to hierarchical structure
* Add support for PMF/EMF singleton pattern, via persistence property
* Spatial : Many fixes to handling of JTS types.
* Many bug fixes, and minor feature additions.


- - -

*No further releases*

- - -



== DataNucleus AccessPlatform 2.0.5

__Jul 1st 2010__ : _Version 2.0.5_ includes the following changes


* Fix to persistence of BLOBs/CLOBs on Oracle for some corner-case relationships

- - -

== DataNucleus AccessPlatform 2.0.4

__Apr 22nd 2010__ : _Version 2.0.4_ includes the following changes


* Fix to support non-standard SQL statements (stored procs, statements not starting with SELECT/INSERT/UPDATE/MERGE/DELETE)
* Fix to the query in-memory evaluator to support aggregate names in upper or lower case
* Fix to a couple of situations where a versioned object can be returned to the user without the version set
* Fix to reset the version of an object on rollback()
* Fix to SCOListIterator
* RDBMS : Fix to generation of indexes for reference fields when having a FK per implementation
    so that the index is created for the implementations FK only
* JDOQL2 : Fix to use of input parameters with multiple columns
* Enhancer : when using Java6 and having the enhancer in the CLASSPATH default to not enabling
    the annotation processor to enhance the class(es) being compiled

- - -

== DataNucleus AccessPlatform 2.0.3

__Apr 1st 2010__ : _Version 2.0.3_ includes the following changes


* Fix to a typo in the use of ConnectionFactory when defining the datastore as a DataSource
* Cleanup to process of creation of L1/L2/Query caches
* Fix to use of Extent to close all iterators correctly
* Fix to generic compilation of cast expressions
* Added checks on invalid use of keywords during generic compialtion
* Fix to generic compilation of {array}.length
* Fix to getParent() of class/package metadata of JDO Metadata API
* Fix to use of set() on ListIterator obtained from list wrapper
* Fix to persistence of object with reference to the same object
* RDBMS : having expression that are not boolean should throw XXXUserException in JDOQL2
* RDBMS : fix to use of parameters for range and passed in as unnamed to API
* RDBMS : fix to caching of JDOQL2 queries when using String.matches with input parameter
* RDBMS : fix to not create indexes for serialised field (problem on MySQL)

- - -

== DataNucleus AccessPlatform 2.0.2

__Mar 6th 2010__ : _Version 2.0.2_ includes the following changes


* Fix to the auto-generation of PK classes by the enhancer for some field types.
* Fixes to generic compilation of collection.contains when using variables
* Support for in-memory query evaluation of Enum.toString() and Enum.ordinal()
* Fixes to in-memory query evaluation of boolean predicates, and loading of fields
* Fix to use of result class with constructor with arguments when one argument is null
* Support for use of encrypted passwords in persistence properties
* RDBMS : Fix to handling of FKs when specified on fields
* Support for persisting java.awt.Color/Point/Rectangle and java.util.BitSet field types as String
* RDBMS : JDOQL2 - Fixes to use of Extent for no concrete classes, subclass-table inheritance,
    and persistence interface cases
* RDBMS : JDOQL2 - Support for use of variables
* RDBMS : JDOQL2 - Support for Collection.contains on embedded fields
* RDBMS : JDOQL2 - Support for binding parameter type via Collection.contains, Map.containsXXX methods
* RDBMS : JDOQL2 - Detect result clauses that are multi-valued and throw exception
* RDBMS : JDOQL2 - Fixes to allow many complex queries that failed with "JDOQL" to work
    with this new implementation.
* RDBMS : JDOQL2 - Fix to String.matches escape clause
* JPA : Support for CONCAT methods with Criteria Query
* JPA : Support for COALESCE methods with Criteria Query
* JPA : Support for function() method with Criteria Query
* JPA : Support for joins specified using string name with Criteria Query
* JPA : Support for negated predicates with Criteria Query
* JPA : Support for subqueries with Criteria Query
* Excel : Support persistence of Enum fields
* Excel : Support for persistence of relation fields (as per ODF plugin)
* Excel : Fixes to persistence of Date/Calendar types
* Excel : Fixes to handling of SCO fields so they are wrapped correctly
* Excel : Upgrade Apache POI requirement to 3.6+
* ODF : Fixes to handling of SCO fields so they are wrapped correctly
* ODF : Fixes to persistence of Date/Calendar types
* ODF : Support persistence of Enum fields
* XML : Fix to persistence of Enum fields

- - -

== DataNucleus AccessPlatform 2.0.1

__Feb 6th 2010__ : _Version 2.0.1_ includes the following changes


* Support for JPA2 Criteria query API (doesn't yet support subqueries, and some less useful
   query builder methods)
* Change all primitive wrapper constructor usage to use class valueOf() for efficiency
* Fix to annotation processing to ignore all unsupported class annotations, and to correctly
    handle methods called get(), is()
* Complete generic compile of JPQL TRIM and LIKE keywords, and support COALESCE, NULLIF keywords
* Add support for in-memory query evaluation of COALESCE/NULLIF keywords
* Update in-memory query evaluator to load fields where needed
* Minor fixes to JDO getObjectById to pass new tests in JDO2.3 TCK
* Minor changes to JDO timeout setter methods to pass new tests in JDO2.3 TCK
* Fix to L2 cache retrieval of relation field to use the value
* Fix to use of @Persistent and @Extension on a field, so that the settings are respected
* Clean up of generic query compilation expressions to not use SymbolTable before bind()
* XML : Fix to handling of empty XML file when searching for an object
* RDBMS : respect "indexed" value of false when creating indexes
* RDBMS : fix to SQL embed extension so we have SQL_boolean, SQL_numeric static functions
* RDBMS : support for JPQL COALESCE, NULLIF functions
* RDBMS : fix to JPQL to not add dup joins when defined in FROM clause and also from result
* RDBMS : JPQL - support for ESCAPE on LIKE, and support for all TRIM options
* Add support for persisting some java types as Long where no native handling
* HBase : better handling of update to not delete records
* DB4O : upgrade to 7.12 and above

- - -

== DataNucleus AccessPlatform 2.0.0.RELEASE

__Jan 9th 2010__ : _Version 2.0 RELEASE_ includes the following changes


* Align to recent changes in JDO2.3 timeout API
* Fix to Spatial handling of JTS types
* Support for many spatial methods with the rewritten RDBMS JDOQL/JPQL query mechanism

- - -

== DataNucleus AccessPlatform 2.0.0.M4

__Dec 7th 2009__ : _Version 2.0 Milestone 4_ includes the following changes


* Require use of a JPA2 jar when used for JPA persistence
* Change handling of JDO @PrimaryKey to not require @Persistent for non-default persistent fields
* Change generic compilation of subqueries, particularly for JPQL, to allow for multi-level
    primary expression
* Change generic compilation of JPQL "LOCATE" to handle multi-level primary expressions
* Fix to JDO PersistenceManagerProxy for named queries (typo)
* Provide framework for bulk object retrieval (available to datastore-specific plugins)
* Fix handling of query parameters to allow for use of parameters in subqueries
* Respect "RetainValues" setting for objects that are deleted (so field values can be retained
    after the transaction commits, and the object is deleted).
* Add support for PMF/EMF singleton pattern, via persistence property
* Add support for case-insensitive persistence properties (previously all were case sensitive)
* JPA2 : Support for "Metamodel" API
* JPA2 : Support for TypedQuery
* JPA2 : Support for Bean Validation
* JPA : Fix to runtime enhancer
* Enhancer : add ability to turn on/off capabilities
* Enhancer : add ability to generate PK classes (including composite)
* Enhancer : add ability to turn off generation of default constructor
* Enhancer : add short form of "persistenceUnit" argument
* RDBMS : Change to use "JPQL2" implementation by default since it passes the JPA1 TCK
* RDBMS : Fix to JDOQL2/JPQL2 for case where multiple classes share a table and use a discriminator
* RDBMS : Support for embedded fields in JDOQL2/JPQL2
* RDBMS : Query range not working for Oracle now fixed
* RDBMS : Fix to FROM join in JPQL2 for second and subsequent joins
* RDBMS : Add support to JPQL2 for subquery FROM clauses with multiple joins
* RDBMS : Fix support in JPQL2 for "COUNT (DISTINCT ...)"
* RDBMS : Support for JPA2 "TYPE" in JPQL2 implementation
* RDBMS : Support for "StringExpression == EnumLiteral" in JDOQL2/JPQL2
* RDBMS : Change to "persistenceUnit" option of SchemaTool to allow short form
* RDBMS : Fix for read of null BLOB with Oracle
* Spatial : fix to M2 dependencies to make some optional
* HBase : add security handling to cater for issues in HBase itself
* Maven2 plugin : Support for enhancement generating PKs, and turn on/off default constructor

- - -

== DataNucleus AccessPlatform 2.0.0.M3

__Oct 24th 2009__ : _Version 2.0 Milestone 3_ includes the following changes


* Allow override of basic settings of DFG, default persistent for java types
* Fix to L2 cache handling to evict deleted object
* Level 2 Cache is now enabled by default (soft)
* Level 1 Cache default is now changed to soft
* Support for max size on weak/soft Level 2 caches
* Generic compile updated for JPQL "EMPTY"/"LIKE"/"SIZE" to allow for multi-level primaries
* Generic compile updated for JPQL "FROM" to chain nodes correctly
* Generic compile updated for JPQL Object/Sum/Avg/Min/Max/Count to allow for case-insensitive
* Generic compile updated for JPQL to allow for case-insensitive aliases
* Generic compile updated for JPQL to fix escape sequence
* Generic compile of JPQL subqueries to correctly allow for ALL/ANY/SOME/EXISTS forms
* Generic compile support for AS aliases in result clause
* Generic compile support for "new XXX().method" constructs
* Generic compile support for JPQL "IN" taking multi-value parameters (JPA2)
* Generic compile fix for JPQL "MOD"
* Generic compile fix for JPQL "NOT" being applied incorrectly
* Generic compile support for JPQL "TYPE" syntax (JPA2)
* Generic compile fix for specification of result class in single-string form not being respected
* Ignore all unsupported annotations
* Rewrite of query in-memory method invocations handler to match the RDBMS style type-method
* Fix to handling of non-transactional objects at pm close to move through lifecycle correctly
* Support for JDO Query.cancel(Thread)
* JPA : fix to mark transaction for rollback only on error
* JPA : Support @Column length correctly
* RDBMS : JDOQL2 support for String concatenation, and support for parameter defined
    as supertype but passed in as subtype
* RDBMS : JDOQL2/JPQL2 support for Oracle NLS sorting
* RDBMS : JDOQL2/JPQL2 support for result of type DyadicExpression
* RDBMS : JDOQL2/JPQL2 support for result expression aliases
* RDBMS : JDOQL2/JPQL2 fix handling of result new object to handle objects with composite PKs
* RDBMS : JDOQL2/JPQL2 fix to handling of boolean expressions in ==/!=
* RDBMS : JDOQL2/JPQL2 fix to handling of mappings using non-default datastore mapping (e.g Date persisted as VARCHAR)
* RDBMS : JPQL2 fix to handling of ANY/ALL/SOME/EXISTS
* RDBMS : JPQL2 fix to bulk update to allow DyadicExpression/PrimaryExpression in SET clause
* RDBMS : Fix to Schematool to remove possible dups with bidirectional relations
* RDBMS : Support for user-defined primary key constraints on join tables
* RDBMS : Fix to support persisting Boolean as SMALLINT/TINYINT
* JSON : support for Amazon S3 datastores
* HBase : upgrade to HBase 0.20
* HBase : performance improvements, including connection pooling and create schema only once
* HBase : support for column families
* Excel : Use lazy loading when retrieving candidate instances
* ODF : Fix to delete of an object
* ODF : Use lazy loading when retrieving candidate instances
* ODF : Support for persistence of null fields and retrieval as null
* ODF : Support for persistence/retrieval of Date fields
* XML : Use lazy loading when retrieving candidate instances

- - -

== DataNucleus AccessPlatform 2.0.0.M2

__Sept 11th 2009__ : _Version 2.0 Milestone 2_ includes the following changes


* Addition of control over the Locale used for logging messages
* Add support for "embedded='true'" to mean embed the field - so the user doesn't have to
    specify the 'embedded' element also
* Bug fix to handling of embedded collections
* Fix to generic query compilation for words starting "new"
* Fix to JDOQL compilation of subquery FROM clause
* Fix to the attach of nested embedded objects
* Improvements to the query results cache to allow pinning/unpinning and to not validate
* Fix to JTA handling introduced in M1 release
* Add support for "detachAllOnRollback"
* Removal of unnecessary flush on 1-1 relation
* Bug fix to usage when invoked path has "+" symbol
* Addition of plugin for persistence of primary JodaTime types, and simple querying for RDBMS
* Cache : Support for pinning/unpinning of query results with Memcache/javax.cache
* Enhancer : Bug fix to return code from enhancer when run from command line
* JPA : Support for JPA "extended persistence context"
* JPA : Fix to use of @EmbeddedId in extended persistence context
* JPA : Support for optional attribute of @ManyToOne
* LDAP : Support for persistence of recursive object graph to hierarchical structure
* RDBMS : Addition of support for persistence to Oracle TimesTen datastore (Anton Troshin)
* RDBMS : JDOQL2 support for "SELECT this" queries, and DISTINCT
* RDBMS : JDOQL2 support for temporal queries
* RDBMS : JDOQL2 support for subqueries
* RDBMS : JPQL2 support for subqueries
* RDBMS : JPQL2 support for bulk update/delete by query
* RDBMS : SQL API fixes to cater for composite PKs and ordering of expressions
* RDBMS : Improvements to choice of whether to use UNION or discriminator for inheritance detection
* RDBMS : Some fixes to handling of temporal types to add more flexibility

- - -

== DataNucleus AccessPlatform 2.0.0.M1

__Jul 30th 2009__ : _Version 2.0 Milestone 1_ includes the following changes


* Addition of plugin for persistence to HBase (HADOOP) datastores
* Allow query execution in separate thread to allow for cancel/timeout hooks
* Change default for non-transactional read/write to true for JDO
* Support atomic non-transactional write persist/delete operations
* Support for in-memory evaluation of queries with variables
* Support for in-memory evaluation of queries with List.get(), and ranges using parameters
* Drop support for various extensions that were standardised during version 1.1 timeframe
* Split query cache into 3 components : generic compilation, datastore compilation
    and query results. Added API for managing caching of query results (using JDO or JPA).
* Internal changes to implementation of StoreManager making it even easier to provide
    support for new datastores
* Bug fix for annotation of unmapped columns in JDO
* Refactor all legacy query classes into own package for removal during 2.0 timeline
* Bug fix to JDO Metadata "index" when unique flag not defined
* RDBMS : Fix to COMPLETE_TABLE inheritance when used with JDOQL2
* RDBMS : Change default auto-start mechanism to "None"
* RDBMS : JDOQL2 support for input params with multiple columns
* RDBMS : JDOQL2 support for List.get()
* RDBMS : JDOQL2 support for range defined with input parameters
* RDBMS : JDOQL2/JPQL2 support for views
* RDBMS : Revised handling of nullability on joins
* RDBMS : Support for table creation with columns having default of NULL
* RDBMS : Support for specifying the order of columns in DDL
* Much internal refactoring has also been performed to remove unneeded components
    or to simplify the API's for things needed in the 2.0 timeline. Any use of internal
    API's by applications will likely need changes.

