Apache Cayenne Website > 2007 > 07 > 28 > July 28 2007 - Cayenne 3.0M1 Released
Apache Cayenne team is glad to announce the first milestone release of Cayenne 3.0.
The milestone status means that the release is under active development, and some of the new features do not yet have all expected bells and whistles, still the existing core is stable and has been deployed in production by a number of users already. If you look at the list of new features, it has quite a few things. I'll just mention of a few of them here:
The most visible addition to Cayenne is a JSR-220 Java Persistence API Provider (aka JPA). I.e. along with familiar Cayenne Persistence API, Cayenne stack now also supports JPA. Current state of the provider can be characterized as "preview" - it is fairly usable but is far from complete.
Existing Cayenne Persistence API evolves towards making 'org.apache.cayenne.ObjectContext' interface the main way to access persistence features (vs. using its more familiar concrete implementation - DataContext). The users are encouraged to store context references as ObjectContext whenever possible for maximum flexibility (and portability to the future releases).
Another important feature is pluggable query cache that allows fine-tuning of cache size and expiration behavior. From author's experience, this is a life-saver on high-traffic sites, where configurable cache is the key to the good performance.
JPA work mentioned above resulted in a number of significant improvements in the existing API. We've added lifecycle callbacks, a powerful new type of object queries - EJBQL Queries, experimental support for POJO persistence. Other nice things like vertical inheritance, embeddables, etc. are coming in the following milestones.
Finally, there is a number of performance improvements, such as faster paginated queries, an leak-free DataContext.
Here a full list of issue from the release notes (note that bug fixes are tracked since release 2.0, and some of them may already be available in 2.0.3)
New Features / Improvements
Removed all API deprecated as of 1.2 and 2.0. CAY-460 javax.persistence.spi.ClassTransformer to turn POJO into DataObject CAY-540 extended type and subclasses CAY-576 Support for cached lists invalidation CAY-586 Implement commit validation hooks in CayenneContext CAY-598 JPA patches CAY-600 Add support for ordering property list serialization in a consistent way CAY-613 Pluggable Query Cache CAY-623 Removing broken FireBird adapter CAY-625 Implement correct "scale" and "precision" for DbAttribute CAY-632 RefreshQuery - a common mechanism for object and object list invalidation CAY-636 Switch Cayenne HEAD to hessian 3.0.20 CAY-642 Add support for encrypted JDBC passwords CAY-645 Support for persisting java.util.Calendar CAY-647 Support for persisting java.math.BigInteger CAY-648 Support for persisting java.io.Serializable CAY-650 Support for char[], java.lang.Character, java.lang.Character[], java.lang.Byte[] as "simple" persistence types CAY-651 Add convenience method to create missing DB_PATH expressions where there is a corresponding OBJ_PATH expression CAY-657 Removing/Deprecating ExtendedType.validateProperty() CAY-660 JPA-like callbacks support in the main Cayenne stack CAY-666 Support for entity lifecycle callbacks in ClientServerChannel CAY-667 Support default entity lifecycle callbacks CAY-668 Link Cayenne callback API with JPA provider CAY-669 Support superclass entity callbacks CAY-672 Change the logic to get the Java class from ResultSetMetadata CAY-673 Removed DVModeler from the release. For backwards compatibility DVModeler from 2.0.x release can be used. CAY-674 ROP client side validation CAY-679 Add a new method to ObjectContext: registerNewObject(Object) CAY-680 Deprecate DataObject.[get|set]DataContext in favor of [get|set]ObjectContext CAY-681 Deprecate DataObject.fetchFinished() in favor of the callbacks CAY-683 Deprecate DataContext.createAndRegisterNewObject() CAY-685 OSQueryCache concurrency improvements CAY-686 Weed out DataObject references from the access stack classes, replacing them with Persistent and ClassDescriptor CAY-687 New method: QueryMetadata.getClassDescriptor() CAY-688 Change signatures of ObjectContext.deleteObject/registerNewObject/localObject to take Object instead of Persistent as an argument CAY-689 DataObjectUtils must return "Object" instead of "DataObject" from all pk lookup methods CAY-692 Extra argument needed in ObjectContext.prepareForAccess - whether the property is a fault or not. CAY-693 DataContext should not return HOLLOW objects in response to ObjectIdQuery() CAY-694 Support for serialization of enhanced serializable POJO's that do not declare 'serialVersionUID' CAY-696 true/false in expression CAY-700 where in () with empty collection CAY-701 "property" package refactoring CAY-702 Improve DBCPDataSourceFactory to use it for a JettyPlus DataSource CAY-703 Cache EntityResolver in the ClientChannel CAY-713 Improved Meaningful PK support CAY-717 Modeler doesn't manage FK constraints with MYSQL CAY-722 Investigate reducing the shared cache lock scope on commit CAY-737 Deprecate DataContextTransactionEventListener, DataObjectTransactionEventListener, DataContextEvent CAY-740 MapLoader algorithm improvement CAY-741 Indexing entities with inheritance across datamaps CAY-750 Stored procedures without parameters fail on Postgres 8 CAY-763 XML Deserialization fails on relationships when using a mapping file CAY-773 MySQL stored procedure support CAY-781 Bug in CayenneDataObject.readNestedProperty CAY-800 SQLTemplate improvement - API to control the capitalization of the data row labels CAY-803 EJBQL Parameters support CAY-805 SQLTemplate improvement: new #bindObjectEqual #bindObjectNotEqual directives CAY-810 IncrementalFaultList performance improvements CAY-812 Add ability to drag cayenne.xml to the Modeler from the filesystem
Bug Fixes
CAY-565 LRUMap NPE CAY-583 Enable batching on Derby CAY-597 XML Encoder with Mapping outputs incorrect XML CAY-601 Problem resolving relationships in nested DataContext CAY-603 QueryChain.isFetchingDataRows() incorrectly returns "false" - must be "true" all the time CAY-607 Long query name or qualifier expand query text field off screen CAY-618 Support optional remote events in the ClientChannel CAY-639 JDBC datatype of MySQL INT UNSIGNED is mapped as java.lang.Integer should be java.lang.Long CAY-617 ROP: shared session functionality over XMPP is broken CAY-614 ToManyList contains references to transient objects CAY-609 Modeler prevents intermediate prefetch creation CAY-608 Prefetch validation incorrectly reports error on multi-step prefetches CAY-641 Stack trace instead of error message when relationship and attribute have the same name CAY-646 Class generator - incorrect java types for classes like java.lang.whatever.XYZ CAY-649 ExtenedTypeMap.getRegisteredType(Class) incorrectly handles array types CAY-652 Exception with Tomcat's session restore capability CAY-653 overriding setPersistentState() in unreliable in three tier environment with CayenneContext CAY-663 localObject and new objects CAY-664 Simplify EntityResolver serialization CAY-671 custom exception class for ROP missing session CAY-675 compound primary key change CAY-690 Exception in the Modeler when changing schema on derived entities CAY-707 SelectQuery automatic cache key build mechanism produces wrong results when DO's are used in qualifier CAY-710 XMLDecoder decodes Dates wrong CAY-711 SQLTemplate data row query of PostgreSQL Blob CAY-712 Allow modifying objects in validate* methods CAY-718 ROP: handle non-serializable server side exceptions CAY-721 DataContext shouldn't attempt to fix objects on FaultFailureExceptions CAY-723 Enable batching on MS SQL Server CAY-724 Bogus FaultFailureExceptions CAY-726 SQLTemplate parsing bug when macros appear at the end of line CAY-743 Reordering mappings from domain in xml resulting in StackOverflowException CAY-746 Change ConnectionProperties.ADAPTER_KEY value from "cayenne.adapter" to "adapter" CAY-751 AS400 datafields containing # in field names do not get mapped correctly CAY-752 Importing EOModel gives Cast Exception CAY-754 Local jNDI hack breaks when running with Jetty6-Maven CAY-764 Exception when importing an EOModel with single table inheritance CAY-765 Programmatically overriding "use share cache" fails CAY-775 AutoAdapter fails to detect Sybase when running with jTDS driver CAY-776 1.2 -> 2.0/3.0 Migration - modeler preferences still store org.objectstyle adapter names CAY-779 Improve usability of non-pooling DriverDataSource for uses outside Cayenne CAY-783 jgroups config file not removed from cayenne.xml CAY-784 Deleting an object with a read-only flattened relationship fails CAY-786 Race condition in DataContext.localObject() CAY-788 prefetch can set state to modified CAY-792 Date has issues with different locales when using XMLEncoder/XMLDecoder CAY-817 HSQLDB schema generation may not correctly flush the changes CAY-818 Frontbase NUMBERIC type mapping typo CAY-823 Db-generated PK type mismatch CAY-830 DataChannelCallbackInterceptor.onQuery NPE