|  |  |  | License Codehaus OpenEJB OpenJMS OpenORB Tyrex

Old releases
General
Release 1.3
Release 1.3rc1
Release 1.2

Main
Home
About
Features
Download
Dependencies
Reference guide
Publications
JavaDoc
Maven 2 support
Maven 2 archetypes
DTD & Schemas
Recent HTML changes
News Archive
RSS news feed
Project Wiki

Development/Support
Mailing Lists
SVN/JIRA
Contributing
Support
Continuous builds
Prof. services

Related projects
Spring ORM support
Spring XML factories
WS frameworks

XML
XML

XML Code Generator
XML Code Generator

JDO
Introduction
First steps
Using JDO
JDO Config
Types
JDO Mapping
JDO FAQ
JDO Examples
JDO HOW-TOs
Tips & Tricks
Other Features
JDO sample JAR

Tools
Schema generator

Advanced JDO
Caching
OQL
Trans. & Locks
Design
KeyGen
Long Trans.
Nested Attrs.
Pooling Examples
LOBs
Best practice

DDL Generator
Using DDL Generator
Properties
Ant task
Type Mapping

More
The Examples
3rd Party Tools
JDO Tests
XML Tests
Configuration

About
License
User stories
Contributors
Marketplace
Status, Todo
Changelog
Library
Contact
Project Name

## Release notes

Releases

## Releases

For all releases prior to 0.9.7, the release notes can be found here.

For all releases prior to 0.9.6, the release notes can be found here.

# Release 1.0M4

Description: | 4th milestone release for Castor 1.0
released: | March 23, 2006
managed by: | Werner Guttmann

## Requirements

### Introduced Java 1.4 as a dependecy

This is a reminder that we have started to add some features that more or less depend on features made available with Java 1.4 (only), such as the JDBC 3.0 API enhancements. As such, we have made Java 1.4 a key requirement for the upcoming Castor 1.0 release.

## Additions

### Updated/Added to XML Documentation

Two new XML how-tos have been added to the XML HOW-TOs page, one on fetching XML dependencies (DTDs and schemas) from JAR files rather than network locations, and one on using identities and references in XML. The XML Mapping documentation was also updated so that the DTD public ID used in examples matches one in Castor's DTDResolver (this aids in fetching the DTD from the Castor JAR rather than the web address).

### Added cache implementation for high volunm and high performance

The cache types fifo and lru are based on a set of articles in the O'Reilly Network by William Grosso, to implement a simplified and 1.3-compatible implementation of a Hashbelt algorithm.

Hashbelts are simple, in principle. Instead of walking all objects and finding out when they're supposed to expire, use a "conveyor belt" approach. At any particular point in time, objects going into the cache go into the front of the conveyor belt. After a certain amount of time or when the size limit of a container has been reached, move the conveyor belt - put a new, empty container at the front of the conveyor belt to catch new objects, and the one that drops off of the end of the conveyor belt is, by definition, ready for garbage collection.

As seen in his system, you can use a set of pluggable strategies to implement the actual hashbelt bits. A container strategy allows you to change out the implementation of the container itself - from simple hashtable-based implementations, up through more complex uses of soft referenced or hashset-based implementations, depending on what you need and what you want it to be used for. A pluggable "expire behavior" handler allows you to determine what action is taken on something which drops off of the bottom of the conveyor belt.

As of release 1.0 Castor knows of 11 cache types. To use this cache types, their factories need to be configured in castor.properties file. If you use a custom castor.properties file you need to add the new cache factories to be able to use the new cache types.

    #
    # Cache implementations
    #
    org.castor.cache.Factories=\
      org.castor.cache.simple.NoCacheFactory,\
      org.castor.cache.simple.TimeLimitedFactory,\
      org.castor.cache.simple.CountLimitedFactory,\
      org.castor.cache.simple.UnlimitedFactory,\
      org.castor.cache.distributed.FKCacheFactory,\
      org.castor.cache.distributed.JcsCacheFactory,\
      org.castor.cache.distributed.JCacheFactory,\
      org.castor.cache.distributed.CoherenceCacheFactory,\
      org.castor.cache.distributed.OsCacheFactory,\
      org.castor.cache.hashbelt.FIFOHashbeltFactory,\
      org.castor.cache.hashbelt.LRUHashbeltFactory

The DTD declaration to configure caching in Castor mapping is as follows:

    <!ELEMENT cache-type  ( param* )>
    <!ATTLIST cache-type
        type           ( none | count-limited | time-limited | unlimited |
                         coherence | fkcache | jcache | jcs | oscache |
                         fifo | lru ) "count-limited"
        debug          (true|false) "false"
        capacity       NMTOKEN  #IMPLIED>

    <!ELEMENT param EMPTY>
    <!ATTLIST param
              name   NMTOKEN  #REQUIRED
              value  NMTOKEN  #REQUIRED>

In difference to all other cache types the fifo and lru cache types offer various configuration options. Both of them have 6 parameters to configure their behaviour.

parameter | description

containers

The number of containers in the conveyor belt. For example: If a box will drop off of the conveyor belt every 30 seconds, and you want a cache that lasts for 5 minutes, you want 5 / 30 = 6 containers on the belt. Every 30 seconds, another, clean container goes on the front of the conveyor belt, and everything in the last belt gets discarded. If not specified 10 containers are used by default.
For systems with fine granularity, you are free to use a large number of containers; but the system is most efficient when the user decides on a "sweet spot" determining both the number of containers to be managed on the whole and the optimal number of buckets in those containers for managing. This is ultimately a performance/accuracy tradeoff with the actual discard-from-cache time being further from the mark as the rotation time goes up. Also the number of objects discarded at once when capacity limit is reached depends upon the number of containers.

capacity

Maximum capacity of the whole cache. If there are, for example, ten containers on the belt and the capacity has been set to 1000, each container will hold a maximum of 1000/10 objects. Therefore if the capacity limit is reached and the last container gets droped from the belt there are up to 100 objects discarted at once. By default the capacity is set to 0 which causes capacity limit to be ignored so the cache can hold an undefined number of objects.

ttl

The maximum time an object lifes in cache. If the are, for example, ten containers and ttl is set to 300 seconds (5 minutes), a new container will be put in front of the belt every 300/10 = 30 seconds while another is dropped at the end at the same time. Due to the granularity of 30 seconds, everything just until 5 minutes 30 seconds will also end up in this box. The default value for ttl is 60 seconds. If ttl is set to 0 which means that objects life in cache for unlimited time and may only discarded by a capacity limit.

monitor | The monitor intervall in minutes when hashbelt cache rports the current number of containers used and objects cached. If set to 0 (default) monitoring is disabled.

container-class

The implementation of org.castor.cache.hashbelt.container.Container interface to be used for all containers of the cache. Castor provides the following 3 implementations of the Container interface.

- | org.castor.cache.hashbelt.container.FastIteratingContainer
- | org.castor.cache.hashbelt.container.MapContainer
- | org.castor.cache.hashbelt.container.WeakReferenceContainer

If not specified the MapContainer will be used as default.

reaper-class

Specific reapers yield different behaviors. The GC reaper, the default, just dumps the contents to the garbage collector. However, custom implementations may want to actually do something when a bucket drops off the end; see the javadocs on other available reapers to find a reaper strategy that meets your behavior requirements. Apart of the default org.castor.cache.hashbelt.reaper.NullReaper we provide 3 abstract implementations of org.castor.cahe.hashbelt.reaper.Reaper interface:

- | org.castor.cache.hashbelt.reaper.NotifyingReaper
- | org.castor.cache.hashbelt.reaper.RefreshingReaper
- | org.castor.cache.hashbelt.reaper.ReinsertingReaper

to be extended by your custom implementation.

A fifo cache with default values explained above is specified by:

    <cache-type type="fifo"/>

A lru cache with capacity=300 and ttl=300 is defined by:

    <cache-type type="lru" capacity="300"/>

or better by:

    <cache-type type="lru"/>
        <param name="capacity" value="300"/>
        <param name="ttl" value="300"/>
    </cache-type>

An example of a customized configuration of a fifo cache is:

    <cache-type type="fifo"/>
        <param name="container" value="10"/>
        <param name="capacity" value="1000"/>
        <param name="ttl" value="600"/>
        <param name="monitor" value="5"/>
        <param name="container-class" value="org.castor.cache.hashbelt.container.WeakReferenceContainer"/>
        <param name="reaper-class" value="org.castor.cache.hashbelt.reaper.NullReaper"/>
    </cache-type>

## Code cleanup

We removed following classes and methods that had been deprecated for a while now.

removed | replacement
Throwable CastorException.getException() | Throwable CastorException.getClause()
Object Database.load(Class, Object, short) | Object Database.load(Class, Object, AccessMode)
void JDOManager.setConfiguration(InputSource) | no replacement
QueryResults Query.execute(short) | QueryResults Query.execute(AccessMode)
QueryResults Query.execute(short, boolean) | QueryResults Query.execute(AccessMode, boolean)
org.exolab.castor.jdo.Utils | org.castor.jdo.util.JDOUtils
org.exolab.castor.util.JdoConfFactory | org.castor.jdo.util.JDOConfFactory

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1368 | 20060322 | Ralf Joachim | Ralf Joachim | Extract creation and execution of SQL satements from SQLEngine. Reporter: Ralf Joachim | Enh. |  | JDO
1369 | 20060323 | Stoil Valchkov | Ralf Joachim | Fixed NPE in case of extension of union. Reporter: Stoil Valchkov | Bug |  | XML
824 | 20060322 | Benoit Maisonny | Werner Guttmann | Improved exception handling in UnmarshallHandler Reporter: Benoit Maisonny | Bug |  | XML
1281 | 20060321 | Ralf Joachim | Ralf Joachim | Introduced new org.castor.util.Configuration. Reporter: Ralf Joachim | Enh. |  | All
1356 | 20060316 | Bruce Snyder | Ralf Joachim | Fixed false alarm log message at DatabaseImpl.finalize. Reporter: Bruce Snyder | Bug |  | JDO
1363 | 20060316 | Ralf Joachim | Ralf Joachim | Removed deprecated classes and methods. Reporter: Ralf Joachim | Enh. |  | All
1364 | 20060316 | Ralf Joachim | Ralf Joachim | Fixed wrong generation of 'setFixed(String)'-method for XSNormalizeStrings. Reporter: Thomas Lehmann | Bug |  | XML
1360 | 20060314 |  | Werner Guttmann | Fixed problem with missing class file in XML jar. Reporter: Uwe Langbecker | Bug |  | XML
867 | 20060315 | Gregory Block | Ralf Joachim | Added cache implementation for large cache sizes. Reporter: Gregory Block | Enh. |  | JDO
1345 | 20060315 | Werner Guttmann | Werner Guttmann | Refactored redundant code in *DatabaseImpl classes Reporter: Werner Guttmann | Enh. |  | JDO
1089 | 20060308 | Tim Telcik | Werner Guttmann | Revised SQL statement used by IdentityKeyGenerator for IBM DB2. Reporter: Tim Telcik | Bug |  | JDO
1345 | 20060310 | Werner Guttmann | Werner Guttmann | Refactored DatabaseImpl into Local/GlobaldatabaseImpl. Reporter: Werner Guttmann | Bug |  | JDO
1354 | 20060314 | Stephen Bash | Werner Guttmann | Add HOW-TO on using identities and references in XML Reporter: Stephen Bash | Enh. |  | XML
1353 | 20060311 | Stephen Bash | Werner Guttmann | Fixed incorrect DOCTYPE references in various XML Mapping docs. Reporter: Stephen Bash | Enh. |  | XML
1352 | 20060311 | Stephen Bash | Werner Guttmann | Add HOW-TO on how to fetch DTDs from JAR file Reporter: Stephen Bash | Enh. |  | JDO
1350 | 20060311 | Ralf Joachim | Ralf Joachim | Added UTF test of IdentityMap.entrySet. Reporter: Ralf Joachim | Enh. |  | JDO
1347 | 20060310 | Adam Kramer | Ralf Joachim | Fixed issue with XMLDescriptor generating wrong method name 'getElementDefinition' instead of 'isElementDefinition'. Reporter: Adam Kramer | Bug |  | JDO

# Release 1.0M3

Description: | 3rd milestone release for Castor 1.0
released: | March 07, 2006
managed by: | Werner Guttmann

## Requirements

### Introduced Java 1.4 as a dependecy

As we have started to add some features that more or less depend on features made available with Java 1.4 (only), such as the JDBC 3.0 API enhancements, we have made Java 1.4 a key requiremnt for the upcoming Castor 1.0 release.

This decision is a result of a discussion on the mailing lists a couple of months ago, where nobody was voicing any objections.

## Additions

### Added support for OSCache

By specifing

    <cache-type type="oscache"/>

at class mapping you can now use OSCache with Castor JDO.

### Added 'abstract/concrete' annotation to XMLDescriptor

With this addition, it is now possibel to query whether a particular XML element (represented by an XMLClassDesscriptor internally) is abstract or concrete, that is (in the context of source generation) a result of a <complexType> definition or an <element> declaration. This is particularly relevant for tool providers who need to integrate with Castor XML, and as a result of this addition can now use the new `isElementDefinition()` method to query an artifact's state.

### New XML HOW-TOs added

Added XML HOW-TOs for mapping collections and maps.

### Added new SAX2EventProducer interface

Added new <api>org.exolab.castor.xml.SAX2EventProducer</api> interface to allow passing SAX 2 events to Castor XML, deprecating the existing <api>org.exolab.castor.xml.EventProducer</api> interface at the same time. At the same time, a new unmarshal(SAX2EventProducer) method has been added to <api>org.exolab.castor.xml.Unmarshaller</api>, deprecating the existing unmarshal(EventProducer) method at the same time.

### Added support for postgreSQL to identity key generator

Added support for the postgreSQL column type 'SERIAL' to the identity key generator. With this change, it's now possible to use the identity key generator with postgreSQL on columns with type 'SERIAL'. Castor internally will issue a call to

       SELECT currval('<table_name>_id_seq')

to automatically retrieve the value assigned due to 'SERIAL' column during the insert operation.

### Added fully self-contained Castor JDO sample application

Added new ZIP archive to distribution that contains a fully self-contained Castor JDO sample applicationthat runs against an embedded Apache Derby database.

Simply download the the archive, unpack it, and in the target directory created, execute 'java -jar castor-1.0M2-examples.jar' to have the test executed. This will (magically) create a Derby database (on-the-fly) and use it to execute the Castor JDO code against it.

### Added additional syntax for specifying identity columns

In addition to the current way of specifying the identity column(s) for a given class, it is now possible to declare a field to be part of the identity as shown below:

      <class name="ctf.jdo.tc1x.Parent">
        <description>Entite one</description>
        <map-to table="tc1x_entity1" xml="entity1" />
        <field name="id" type="integer" identity="true">
          <sql name="id" type="integer"/>
        </field>
        <field name="name" type="string">
          <sql name="name" type="char" />
        </field>
      </class>

### Added collection type 'iterator' (java.util.Iterator) to Castor JDO

It is now possible to define a one-to-many relation with a collection type of 'iterator'. This allows the access of custom collection classes that are not supported through the standard collection types through Castor JDO.

       <field name="children" type="some.domain.custom.Class" collection="iterator">
          <sql ... />
       </field>

### Added collection type 'enumerate' (java.util.Enumeration) to Castor JDO

It is now possible to define a one-to-many relation with a collection type of 'enumerate'.

       <field name="children" type="some.domain.custom.Class" collection="enumerate">
          <sql ... />
       </field>

### Added WeblogicXMLSerializerFactory

To use the Xerces implementation delivered with Weblogic 7 and 8 you have to change castor.properties file to contain the following entry:

    # Defines the (default) XML serializer factory to use by Castor,
    # which must implement org.exolab.castor.xml.SerializerFactory;
    # default is org.exolab.castor.xml.XercesXMLSerializerFactory
    org.exolab.castor.xml.serializer.factory=org.exolab.castor.xml.wls8.WeblogicXercesXMLSerializerFactory

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1330 | 20060307 | Ralf Joachim | Werner Guttmann | Fixed problem with prioritizing delete operations. Reporter: Raúl Sanz de Acedo Pérez | Bug |  | JDO
1341 | 20060306 | August Detlefsen | Ralf Joachim | Fixed issue with bad dates being persisted in Oracle 9.2. Reporter: August Detlefsen | Bug |  | JDO
1186 | 20060228 | Ralf Joachim | Ralf Joachim | Added support for OSCache. Reporter: Werner Guttmann | Enh. |  | JDO
1333 | 20060223 | Thomas Tatzel | Werner Guttmann | Fixed inconsistency related to not calling setPreserveWhiteSpace(true) in Unmarshaller.unmarshal(Class, Node) Reporter: Thomas Tatzel | Bug |  | XML
962 | 20060223 | Werner Guttmann | Werner Guttmann | Improved code quality of DataObjectAccessException. Reporter: Werner Guttmann | Bug |  | JDO
1328 | 20060222 | Adam Kramer | Werner Guttmann | Added property to XMLClassDescriptor to distinguish whether XML artefact represented is abstract/concrete Reporter: Adam Kramer | Enh |  | XML
1159 | 20060222 | Martin Kleppmann | Werner Guttmann | Fixed problem with range checking in code generated for collections. Reporter: Martin Kleppmann | Bug |  | XML
1329 | 20060222 | Robby Pelssers | Werner Guttmann | Added XML HOW-TOs for mapping collections and maps. Reporter: Robby Pelssers | Enh |  | XML
1326 | 20060221 | Werner Guttmann | Werner Guttmann | Added new EventProducer2 interface to allow streaming of SAX 2 events into Castor XML Reporter: David Leal | Enh |  | XML
1127 | 20060221 | Tim Telcik | Werner Guttmann | Added support for non-numeric identities to sequence key generator Reporter: Tim Telcik | Enh |  | JDO
1323 | 20060221 | Ralf Joachim | Ralf Joachim | Fixed failure in MappingTool that always caused a NullPointerException. Reporter: Stefan Lober | Bug |  | XML
998 | 20060217 | Werner Guttmann | Werner Guttmann | Added new ZIP file to distribution that contains fully self-containd Castor JDO sample code running against Apache Derby (embedded). Reporter: Werner Guttmann | Enh |  | JDO
1325 | 20060215 | James Adams | Ralf Joachim | Added how to wrap a collection with a wrapper element. Reporter: James Adams | Enh. |  | XML
1324 | 20060215 | Thierry Guerin | Ralf Joachim | Added WeblogicXMLSerializerFactory. Reporter: Thierry Guerin | Enh. |  | XML
1322 | 20060215 | Werner Guttmann | Werner Guttmann | Fixed problem in Windows batch files related to directory names with spaces. Reporter: Stefan Lober | Bug |  | JDO
1293 | 20060214 | Ralf Joachim | Ralf Joachim | Fixed NullPointerException in ClassDescriptorImpl caused by Class.getClassLoader() returning null in some situations. Reporter: Rutger Lubbers | Bug |  | XML
1232 | 20060214 | Werner Guttmann | Werner Guttmann | Added additional snytax for specifying identity columns Reporter: Werner Guttmann | Bug |  | JDO
1314 | 20060211 | Werner Guttmann | Werner Guttmann | Added Castor JDO collection type 'enumerate' (java.util.Enumeration). Reporter: Werner Guttmann | Bug |  | JDO
1321 | 20060211 | Ralf Joachim | Ralf Joachim | Checkstyled recently added classes under org.castor.jdo.driver. Reporter: Ralf Joachim | Enh. |  | JDO
1315 | 20060210 | Werner Guttmann | Werner Guttmann | Added Castor JDO collection type 'iterator' (java.util.Iterator). Reporter: Werner Guttmann | Bug |  | JDO
1316 | 20060210 | Raúl Sanz de Acedo Pérez | Werner Guttmann | Added SQL statement logging support for JDBC CallableStatements Reporter: Raúl Sanz de Acedo Pérez | Bug |  | JDO
1317 | 20060210 | Raúl Sanz de Acedo Pérez | Werner Guttmann | Prevented DatabaseImpl.finalize() from logging when used with global transactions and database pooling enabled. Reporter: Raúl Sanz de Acedo Pérez | Bug |  | JDO
475 | 20060207 | Werner Guttmann | Werner Guttmann | Fixed problem with wrongly generated SQL with self-referential objects that are part of an extend hierarchy. Reporter: Andreas Arrgard | Bug |  | JDO
1128 | 20060203 | Werner Guttmann | Werner Guttmann | Fixed problem related to the use of 'depend' relations and identity key generators. At the same time, support for postgreSQL has been added to the identity key generator. Reporter: Nick Stuart | Bug |  | JDO
1310 | 20060206 | Werner Guttmann | Werner Guttmann | Added identity key generator support for Borland Pointbase to Castor JDO. Reporter: Werner Guttmann | Bug |  | JDO

# Release 1.0M2

Description: | 2nd milestone release for Castor 1.0
released: | Febraury 03, 2006
managed by: | Werner Guttmann

## Additions

### Support for `java.util:list as collection type`

Added support for `java.util.List` as collection type for Castor XML.

### Support for Borland Pointbase

Support for Borland's Pointbase has been added. For initial information about configuration of Castor JDO for the use with Borland's Pointbase, please see `src/tests/jdo/pointbse.xml`.

### Added isLocked (CLass, Object) method to Database interface

This new method allows to check, whether a particular object (as identified by the object identity and the object class) is currently locked with Castor JDO.

### Added documentation about Castor JDO Persistence interface

Added a section about the various methods available on the Persistence interface to the HTML docs.

### Allowed case insensitive lookups of enumerated type values

With 'case-insensitive' commandline option of source generator you are now able to instruct Castor to use case insensitive lookups for enumerated type values.

## Changes

As a result of this refactoring, we had to change the way a XMLSerializer is created (instantiated). Rather than letting Castor know about the XMLSerializer to use, as in

    # Defines the default XML serializer to be used by castor
    # The serializer must implement org.apache.xml.serialize.Serializer
    #
    org.exolab.castor.serializer=org.apache.xml.serialize.XMLSerializer

the user is now required to specify an XMLSerialzer factory as follows:

    # Defines the (default) XML serializer factory to use by Castor,
    # which must implement org.exolab.castor.xml.SerializerFactory;
    # default is org.exolab.castor.xml.XercesXMLSerializerFactory
    org.exolab.castor.xml.serializer.factory=org.exolab.castor.xml.XercesXMLSerializerFactory

As of this release, we only support the XercesXMLSerializerFactory as shown above, but provide users with three new interfaces (namely `Serializer`,`OutputFormat` and `XMLSerializerFactory`) that need to be implemented to support any other's XML parser custom serialization mechanism.

### Refactored cache into new org.castor.cache package

Take care to adjust your custom castor.properties file to reflect the changed packages of CacheFactories.

    #
    # Cache implementations
    #
    org.castor.cache.Factories=\
      org.castor.cache.simple.NoCacheFactory,\
      org.castor.cache.simple.TimeLimitedFactory,\
      org.castor.cache.simple.CountLimitedFactory,\
      org.castor.cache.simple.UnlimitedFactory,\
      org.castor.cache.distributed.FKCacheFactory,\
      org.castor.cache.distributed.JcsCacheFactory,\
      org.castor.cache.distributed.JCacheFactory,\
      org.castor.cache.distributed.CoherenceCacheFactory

Note: By also moving CacheFactoryRegistry to org.castor.cache package the property has been renamed from 1.0M1 a second time.

### Changed syntax of cache definition in mapping

The DTD declaration is as follows:

    <!ELEMENT cache-type  ( param* )>
    <!ATTLIST cache-type
        type           ( none | count-limited | time-limited | unlimited |
                         coherence | fkcache | jcache | jcs ) "count-limited"
        debug          (true|false) "false"
        capacity       NMTOKEN  #IMPLIED>

    <!ELEMENT param EMPTY>
    <!ATTLIST param
              name   NMTOKEN  #REQUIRED
              value  NMTOKEN  #REQUIRED>

The new syntax is still backward compatible to the old one but allows to enable debugging of cache access for a specific class as well as passing individual configuration parameters to each cache instance. Only count-limited and time-limited of the current cache types support parameters. Parameter names are case sensitive and are silently ignored if they are unknown to a cache type.

It need to be noted that there are 3 parameter names that are reserved for internal use. If you specify a parameter with one of the names: type, name or debug their value will silently be overwritten with another one used internally.

A count-limited least-recently-used cache (LRU) for 500 objects can be specified by:

    <cache-type type="count-limited" capacity="500"/>

or

    <cache-type type="count-limited"/>
        <param name="capacity" value="500"/>
    </cache-type>

If both, the capacity attribute and parameter with name="capacity" is specified, the parameter value takes precedence over the attribute value.

A time-limited first-in-first-out cache (FIFO) that expires objects after 15 minutes can be specified by:

    <cache-type type="time-limited" capacity="900"/>

or

    <cache-type type="time-limited"/>
        <param name="ttl" value="900"/>
    </cache-type>

If both, the capacity attribute and parameter with name="ttl" is specified, the parameter value takes precedence over the attribute value.

The debug attribute can be used to enable debugging for objects of a single class only, as described below.

### Added debugging of cache access

If you like to get debug messages for every access to cache independend of the caches type or the class of the object that is accessed you only need to set logging level of org.castor.cache to debug. As this may lead to lots of debug messages, you are not interested in, there are 2 options to reduce the number of the messages.

If you are interested in all accesses to a specific cache type you set the logging level of this implementation to debug.

To get debug messages of accesses to objects of a specific class there are 2 things you need to do. To be able to get debug messages at all you need to set logging level of org.castor.cache.Cache to debug first. Then you only need to set the debug attribute of the class you are interested in to true in the mapping.

Note: By allowing to pass individual configuration properties from mapping to cache we again changed the way debugging is enabled. The property in castor.properties file from relaese 1.0M1 is no longer supported.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1310 | 20060206 | Werner Guttmann | Werner Guttmann | Added identity key generator support for Borland Pointbase to Castor JDO. Reporter: Werner Guttmann | Bug |  | JDO
1305 | 20060201 | Werner Guttmann | Werner Guttmann | Added support for Borland Pointbase to Castor JDO. Reporter: John | Bug |  | JDO
1238 | 20060202 | Ulrich Post | Ralf Joachim | Allowed restricting an complexType with complexContent to complexType with simpleContent. Reporter: Ulrich Post | Enh. |  | XML
903 | 20060131 | Werner Guttmann | Werner Guttmann | Added documentation about Castor JDO Persistence interface. Reporter: Werner Guttmann | Bug |  | JDO
1288 | 20060130 | Will McKinley | Ralf Joachim | Allowed case insensitive lookups for enumerated type values. Reporter: Will McKinley | Enh. |  | XML
1308 | 20060130 | Werner Guttmann | Ralf Joachim | Fixed NullPointerException in MappingTool. Reporter: Mike Wannamaker | Bug |  | XML
785 | 20060129 | Werner Guttmann | Werner Guttmann | Move class loading code for Castor JDO to a single utility class Reporter: Werner Guttmann | Bug |  | JDO
1282 | 20060127 | Stephen Bash | Werner Guttmann | Added HOW-TO document for enabling XML parser validation. Reporter: Stephen Bash | Bug |  | Enh.
1139 | 20060127 | Werner Guttmann | Werner Guttmann | Added Database.isLocked(Class, Object) method. Reporter: Andre Teubner | Bug |  | JDO
1304 | 20060127 | Clovis Wichosky | Ralf Joachim | Fixed some errors in some XML files. Reporter: Clovis Wichosky | Bug |  | All
1268 | 20060124 | Werner Guttmann | Werner Guttmann | Replaced incorrect use of URL.toString() with URL.toExternalForm(). Reporter: Trygve Laugstol | Bug |  | XML
379 | 20060124 | Werner Guttmann | Werner Guttmann | Improved exception handling by chaining original exception. Reporter: Nicolas Marchildon | Bug |  | JDO
1267 | 20060121 | Bill Leng | Ralf Joachim | Fixed bug in SourceGenerator that caused xsd:enumeration values for NMTOKENS and integer being created with wrong type. Reporter: Bill Leng | Bug |  | XML
1303 | 20060121 | Ralf Joachim | Ralf Joachim | Code cleanup at SQLEngine. Reporter: Ralf Joachim | Enh. |  | JDO
1301 | 20060119 | Werner Guttmann | Werner Guttmann | De-deprecated getDatabasePooling() and setDatabasePooling(boolean) methods. Reporter: Raúl Sanz de Acedo Pérez | Bug |  | JDO
1292 | 20060118 | Werner Guttmann | Werner Guttmann | Fixed problem with SQL generated for classes that are part of an extend hierarchy. Reporter: Lorenzo Dematte | Bug |  | JDO
1273 | 20060108 | Werner Guttmann | Werner Guttmann | Removed compile & runtime dependencies for Apache Xerces. Reporter: Werner Guttmann | Bug |  | XML
1300 | 20060114 | Ralf Joachim | Ralf Joachim | Fixed NPE in SourceCodeGenerator. Reporter: Jason Boutwell | Bug |  | XML
1272 | 20060113 | Kevin Taylor | Werner Guttmann | Added support for List interface during marshalling of collections Reporter: Kevin Taylor | Bug |  | XML
1299 | 20060107 | Ralf Joachim | Ralf Joachim | Allowed to specify individual parameters for cache initialization in mapping. Reporter: Ralf Joachim | Enh. |  | JDO
1280 | 20060106 | Ralf Joachim | Ralf Joachim | Made CacheRegistry non static. Reporter: Ralf Joachim | Enh. |  | JDO
1298 | 20060105 | Ralf Joachim | Ralf Joachim | Added ReadWriteLock's and ConcurrentHashMap from Doug Lea. Reporter: Ralf Joachim | Enh. |  | All
551 | 20060104 | Stein M. Hugubakken | Ralf Joachim | Removed exception-dependency in Parser and Lexer including some code improvements. Reporter: Stein M. Hugubakken | Enh. |  | JDO
1289 | 20051231 | Werner Guttmann | Ralf Joachim | Fixed problem with generated ClassChoice instances. Reporter: Werner Guttmann | Bug |  | XML
1218 | 20051228 | Werner Guttmann | Werner Guttmann | Moved all script/batch files to new bin directory. Reporter: Werner Guttmann | Enh. |  | All

# Release 1.0M1

Description: | Milestone release for Castor XML and JDO
released: | December 22, 2005
managed by: | Werner Guttmann

## New features

### Support for collections of type 'SortedSet' (incl. use of Comparator)

Support has been added for the new collection type 'sortedset'. This allows users of Castor (XML and JDO) to use collections of type `java.util.SortedSet` to allow for automatic ordering of the collection upon e.g. insertion of the data.

User can either specify a `java.util.Comparator` instance using the comparator attribute on the field mapping, or make the entities stored within the `SortedSet` implement `java.util.Comparable`.

## Changes

### Moved JDO configuration from org.exolab.castor to org.castor package

With this refactoring JDOConfFactory has also been moved from org.exolab.castor.jdo.util to org.castor.jdo.util package. In addition we allowed to specify a name attribute on the jdo-conf tag that will be used in future to distinguish between different configurations.

### Refactored cache into new org.castor.cache package

Take care to adjust your custom castor.properties file to reflect the changed packages of CacheFactories.

    #
    # Cache implementations
    #
    org.castor.jdo.cacheFactories=\
      org.castor.cache.simple.NoCacheFactory,\
      org.castor.cache.simple.TimeLimitedFactory,\
      org.castor.cache.simple.CountLimitedFactory,\
      org.castor.cache.simple.UnlimitedFactory,\
      org.castor.cache.distributed.FKCacheFactory,\
      org.castor.cache.distributed.JcsCacheFactory,\
      org.castor.cache.distributed.JCacheFactory,\
      org.castor.cache.distributed.CoherenceCacheFactory

### Added debugging of cache access

By setting the property org.castor.jdo.cacheDebug to true you are able to get debug messages for every cache access in the configured log.

    #
    # True if proxy class should be used to debug access to cache
    # (default: false).
    #
    #org.castor.jdo.cacheDebug=false

### Moved transaction manager from org.exolab.castor to org.castor package

Take care to adjust your custom castor.properties file to reflect the changed packages of TransactionManagerFactories.

    #
    # TransactionManagerFactory implementations
    #
    org.castor.transactionmanager.Factories=\
      org.castor.transactionmanager.WebSphereTransactionManagerFactory,\
      org.castor.transactionmanager.WebSphere5TransactionManagerFactory,\
      org.castor.transactionmanager.WebSphere51TransactionManagerFactory,\
      org.castor.transactionmanager.LocalTransactionManagerFactory,\
      org.castor.transactionmanager.JNDIENCTransactionManagerFactory,\
      org.castor.transactionmanager.JOTMTransactionManagerFactory

In addition a new property has been introduced that allows to configure if the transaction manager shell be acquired instantly when he is registered or lazy when it is needed for the first time.

    #
    # Shell the TransactionManager be initialized at registration or lazily when
    # requested for the first time? Defaults to false.
    #
    org.castor.transactionmanager.InitializeAtRegistration=false

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1274 | 20051219 | Ralf Joachim | Ralf Joachim | Made TransactionManagerRegistry non static and moved it to org.castor.transactionmanager package. Reporter: Ralf Joachim | Enh. |  | JDO
719 | 20051213 | Ralf Joachim | Ralf Joachim | Added serialVersionUID to serializable classes. Reporter: Gregory Block | Bug |  | All
1279 | 20051206 | Dave Brosius | Ralf Joachim | Removed some unnecessary object constructions and removed manual array copy. Reporter: Dave Brosius | Enh. |  | All
1278 | 20051206 | Dave Brosius | Ralf Joachim | Allowed java to be on a path with spaces. Reporter: Dave Brosius | Enh. |  | All
1240 | 20051206 | Werner Guttmann | Werner Guttmann | Added support for specifying a java.util.Comparator instance for sortedset collections. Reporter: Werner Guttmann | Enh. |  | JDO
1230 | 20051201 | Ralf Joachim | Ralf Joachim | Refactored cache to implement java.util.Map interface into new org.castor.cache package. Reporter: Ralf Joachim | Enh. |  | JDO
1271 | 20051201 | Werner Guttmann | Werner Guttmann | Fixed problem with special mappings that have a 'foreign' relation as first field mapping. Reporter: Sean | Bug |  | JDO
1171 | 20051126 | Stein M. Hugubakken | Ralf Joachim | Refactored SQLTypes into SQLTypeInfos and SQLTypeConverters. Reporter: Stein M. Hugubakken | Enh. |  | JDO
1265 | 20051125 | Werner Guttmann | Werner Guttmann | Fixed problem with OQL queries and CALL SQL statements Reporter: Sean | Bug. |  | JDO
766 | 20051124 | Stein M. Hugubakken | Ralf Joachim | Refactored TransactionContext into an interface and global/local implementations. Reporter: Stein M. Hugubakken | Enh. |  | JDO
1264 | 20051124 | Ralf Joachim | Ralf Joachim | Resolved problem with keygenerator RETURNING. Reporter: Helene Wiebe | Bug |  | JDO
1233 | 20051021 | Werner Guttmann | Werner Guttmann | Added support for collections of type java.util.SortedSet. Reporter: Werner Guttmann | Enh. |  | All
1266 | 20051119 | Ralf Joachim | Ralf Joachim | Move org.exolab.castor.jdo.conf to org.castor.jdo.conf. Reporter: Ralf Joachim | Enh. |  | JDO

# Release 0.9.9.1

Description: | Maintenance release for Castor XML and JDO
released: | November 15, 2005
managed by: | Werner Guttmann

## New features

### Added support for JOTM as transaction manager

Added support for JOTM as transaction co-ordinator. As a result, the following transaction managers are supported.

Name | Description
jndi | TM looked up in the JNDI ENC
websphere | IBM WebSphere 4 and previous releases
websphere5 | IBM WebSphere 5
websphere51 | IBM WebSphere 5.1
jotm | Java Object Transaction Monitor

### Improved Database.getIdentity(Object)

The new implementation of the Database.getIdentity(Object) does not rely on the object being loaded in the same transaction anymore. It is even not required to have an active transaction. The identity will now be determined by calling the getters of the fields defined as identities in the mapping. If a mapping for the objects class could not be found a ClassNotPersistenceCapableException will be thrown. Null is only returned if the objects identity is null.

Note:Care should be take if you previously used the null return of Database.getIdentity(Object) to determine if the object has been loaded in the current transaction before.

### Added helper method to close database

Added org.castor.jdo.util.JDOUtils.closeDatabase() method to close an open database instance without throwing exceptions. Any active transaction will be silently rolled back.

## Bugs

### Improved 'caching' of Castor DTDs/XML Schemas

Added code to DTDResolver so that any URL/URIs against http://castor.org/... will be resolved against (local) files from within the Castor JAR(s).

### Problem obtaining underlying JDBC connections

Fixed a problem with obtaining the underlying JDBC connection used by Castor internally when there was no valud transaction. The code has been changed so that a PersistenceException will be thrown to indicate the lack of a valid transaction.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1024 | 20051230 | Ross Virostko | Ralf Joachim | Fixed issue where whitespace have been deleted by Unmarshaller. Reporter: Peter Wyngaard | Bug |  | XML
1241 | 20051113 | Ralf Joachim | Ralf Joachim | Improved documentation about locking modes. Reporter: Vish Madan | Enh. |  | JDO
1247 | 20051112 | Vish Madan | Werner Guttmann | Fixed problem with releasing object lock due to a LockNotGrantedException. Reporter: Vish Madan | Bug |  | JDO
1239 | 20051110 | Ralf Joachim | Ralf Joachim | Improved Database.getIdentity(Object) to be able to resolve identity without relying on the object been loaded from the database in the same transaction. Reporter: Henk van Voorthujsen | Enh. |  | JDO
1260 | 20051110 | Ralf Joachim | Ralf Joachim | Added org.castor.jdo.util.JDOUtils.closeDatabase() helper method. Reporter: Ralf Joachim | Enh. |  | JDO
1259 | 20051110 | Ralf Joachim | Ralf Joachim | Refactored org.exolab.castor.jdo.Utils into org.castor.jdo.util.JDOUtils. Reporter: Ralf Joachim | Enh. |  | JDO
1249 | 20051107 | Ralf Joachim | Ralf Joachim | Included new implementations of Base64Encoder/-Decoder with castor-0.9.9-xml.jar. Reporter: Ralf Joachim | Bug |  | XML
1253 | 20051105 | Sean | Werner Guttmann | Fixed problem with with using count() in OQL queries that involve extend relations. Reporter: Sean | Bug |  | JDO
1254 | 20051103 | Sean | Werner Guttmann | Added support for distinct keyword in count() functions. Reporter: Sean | New feature |  | JDO
1256 | 20051103 | Martin Graney | Werner Guttmann | Added non-trivial sample for usage of binding file Reporter: Martin Graney | Addition |  | XML
1223 | 20051020 | Werner Guttmann | Werner Guttmann | Added TransactionManagerFactory for JOTM. Reporter: Werner Guttmann | New feature |  | JDO
1220 | 20051013 | Werner Guttmann | Werner Guttmann | Added config entries for http://castor.org/* to DTDResolver. Reporter: Ralf Joachim | Bug |  | JDO
1219 | 20051012 | Werner Guttmann | Werner Guttmann | Changed many references to http://castor.exolab.org to http://castor.org Reporter: Ralf Joachim | Bug |  | All
1224 | 20051013 | Werner Guttmann | Werner Guttmann | Fixed problem with obtaining JDBC connection when no transaction in progress. Reporter: Brian Schlining | Bug |  | JDO
1231 | 20051013 | Werner Guttmann | Werner Guttmann | Fixed problem with SQL generated for OQL queries where only id fields are present. Reporter: Minh Tran-LeJeremy Whitlock | Bug |  | JDO
1216 | 20051011 | Keith Visco | Keith Visco | Generated java source files won't compile. Reporter: Bill Leng | Bug |  | XML
1153 | 20051010 | Keith Visco | Keith Visco | Unable to generate binding using SourceGen. Reporter: Neil Taylor | Bug |  | XML
1152 | 20051010 | Andrew Fawcett | David Green | PropertyChangeListeners for bound properties should not be serialized. Reporter: David Green | Bug |  | XML

# Release 0.9.9

Description: | Feature release for Castor XML and JDO
released: | September 22, 2005
managed by: | Werner Guttmann

## Download & installation instructions

This is the final 0.9.9 release, a feature release for Castor JDO and XML.

Please note that we are providing the usual suspects (binaries, docs and sources) for this release at the Codehaus.

We are currently planning for a Castor 1.0 release in about 8+ weeks, which we mainly see as a bug fix release and a one-time opportunity to get the HTML documentation into a better shape .. ;-).

Please note that we have - in addition to the features added and bugs fixed as documented with 0.9.9M1 and 0.9.9M2 - started to makes substantial changes to the project documentation as follows:

- | Addition of the first Castor JDO HOW-TO pages
- | Addition of an initial (hence draft) Castor JDO best practice document
- | Addition of a Castor JDO feature page

As mentioned above, these pages are work in progress and shall be expanded for the upcoming 1.0 release.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1215 | 20050919 | Gregory Block | Ralf Joachim | Fixed JDO.getDatabase()NullPointerException. Reporter: Jeremy Whitlock | Bug |  | JDO

# Release 0.9.9M2

Description: | 2nd Milestone release for 0.9.9
released: | Sep 13, 2005
managed by: | Werner Guttmann

## Download & installation instructions

Please note that we are providing the usual suspects (binaries, docs and sources) for this release at the Codehaus. We recommend, though, to download the complete package, as the HTML docs at the main Castor site has not been updated, and to build the documentation yourself.

Preparations for the final release have started. Since the last release candidate, the following problem areas have been addressed.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1210 | 20050907 | Werner Guttmann | Werner Guttmann | Removed references to Poolman from documentation on pooling. | Bug |  | JDO
1195 | 20050908 | Nicholas Stuart | Werner Guttmann | Integrated original test case provided into Castor CTF. | Bug |  | JDO
1207 | 20050907 | Clovis Wichosky | Ralf Joachim | Prefer to use setter with reference type before setter with primitive type if multiple setters are available. Reporter: Clovis Wichosky | Bug |  | JDO
1195 | 20050905 | Werner Guttmann | Werner Guttmann | Fixed problem with class resolution during loading polymorphic objects. | Bug |  | JDO
1071 | 20050901 | Werner Guttmann | Werner Guttmann | Added marketplace section | Enh |  | General

# Release 0.9.9M1

Description: | Milestone release for 0.9.9
released: | Aug 24, 2005
managed by: | Werner Guttmann

## Download & installation instructions

Please note that we are providing the usual suspects (binaries, docs and sources) for this release at the Codehaus. We recommend, though, to download the complete package, as the HTML docs at the main Castor site has not been updated, and to build the documentation yourself.

## Changes

### Support for polymorphism

Support for polymorphism has been completely rewritten, allowing you to load objects that are part of an extend relationship by their base types, with Castor JDO returning the actual (leaf) classes.

With the following class hierarchy ...

- | Server extends Computer
- | Laptop extends Computer
- | Computer extends Product

it will be possible to execute OQL queries as follows:

    SELECT product FROM Product product

and Castor JDO will return the actual `Laptop` and `Server` instances. For a complete set of code examples, please review `src/tests/ctf/jdo/tc9x/TestPolymorphism.java`.

### Updated MANIFEST files

Both castor-0.x.y.jar and castor-0.x.y-xml.jar now carry an updated and up-to-date MANIFEST file.

## New features

### Support for Derby

Support for Apache Derby (starting with release 10.1.1.0) has been added. For initial information about configuration of Castor JDO for the use with Apache Derby, please see `src/tests/jdo/derby.xml`.

Known issues:

- | No support for LIMIT clause
- | No support for identity key generator (temporarily)
- | No support for SELECT .. FOR UPDATE statements.

### Added support for distributed caches

As of this release, four new cache types have been added:

1. Tangosol Coherence (coherence)
2. JCache (jcache)
3. FKCache (fkcache)
4. JCS (jcs)

As some of these cache implementations allow you to use it in a distributed mode, this allows Castor JDO to be used in a clustered (multi-JVM) environment. In such an environment, Castor JDO wil make use of the underlying cache provider to replicate/distribute the cache content between the various JDOManager instances.

### Support for transient attribute for <sql> mappings

Support for the `transient` attribute has been added to the <sql> element has been added. This allows you to define a field mapping as follows:

    <field name="prop1" type="string">
       <sql name="prop_1" transient="true" />
       <bind-xml name="property1" />
    </field>

allowing you to include a field for XML un-/marshalling, but exclude it from persistence.

### Support for typesafe enumerations

Enumerations are a common method for ensuring data integrity, both in software and in relational databases. As a platform for linking the two, we added support for persisting class fields whose type is a Java typesafe enumeration to Castor JDO.

To use this new feature your typesafe enumeration should follow the enum pattern commonly used and provide a `static valueOf(String)` method. An enum of different kinds of computer equipment may look like:

    public class KindEnum {
        private static final Map KINDS = new HashMap();

        public static final KindEnum MOUSE = new KindEnum("Mouse");
        public static final KindEnum KEYBOARD = new KindEnum("Keyboard");
        public static final KindEnum COMPUTER = new KindEnum("Computer");
        public static final KindEnum PRINTER = new KindEnum("Printer");
        public static final KindEnum MONITOR = new KindEnum("Monitor");

        private final String _kind;

        private KindEnum(final String kind) {
            _kind = kind;
            KINDS.put(kind, this);
        }

        public static KindEnum valueOf(final String kind) {
            return (KindEnum) KINDS.get(kind);
        }

        public String toString() { return _kind; }
    }

At your Product class you may want to have a property that tells you what kind of computer equipment a product is of.

    public class Product {
        private int         _id;
        private String      _name;
        private KindEnum    _kind;

        public Product() { }

        public int getId() { return _id; }
        public void setId(int id) { _id = id; }

        public String getName() { return _name; }
        public void setName(String name) { _name = name; }

        public KindEnum getKind() { return _kind; }
        public void setKind(KindEnum kind) { _kind = kind; }
    }

Your mapping for the Product class should be:

    <class name="Product" identity="id">
      <description>Product with kind enum</description>
      <map-to table="enum_prod"/>
      <field name="id" type="integer">
        <sql name="id" type="integer"/>
      </field>
      <field name="name" type="string">
        <sql name="name" type="char"/>
      </field>
      <field name="kind" type="KindEnum">
        <sql name="kind" type="char"/>
      </field>
    </class>

To add this new feature we added an additional check when searching for field types. Like before Castor first searches for know types and thereafter for a mapping for the class you specified as type. If both of them do not match it now checks if the class specified as type is available at classpath and has a static valueOf(String) method. Only if all of this conditions are met it will be viewed as a valid mapping.

### Parametrized boolean->char type converter

Pre patch we always returned a boolean value even if the database contained a value which does not conform to the rules defined. This behaviour caused that we could load records with wrong values without problems but got a ObjectModifiedException when we tried to update these values as our update statment includes checking of all old values in the where clause of SQL statement.

With the patch this behavier changes to strict checking if the loaded char/string value matches one of the boolean characters defined by conversion rule. If the value does not match a ClassCastException explaing the fail reason will be thrown.

### Performance improvements

Several code areas of Castor JDO have been severly refactored or rewritten from scratch, leading to some significantly improved runtime performance. This includes amongst others a reduced execution time when dealing with a large number of entities loaded as part of a single transaction, etc.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1204 | 20050823 | Werner Guttmann | Werner Guttmann | Added release notes for 0.9.9M1. | Bug |  | General
999 | 20050823 | Ralf Joachim | Ralf Joachim | Added ant targets to to check code conventions with checkstyle. Reporter: Ralf Joachim | Enh. |  | ALL
1203 | 20050823 | Ralf Joachim | Ralf Joachim | Calculation of priority to execute create and delete statements at commit returns wrong results when no keygen is used or class depends/extends another. Reporter: Ralf Joachim | Bug |  | JDO
920 | 20050822 | Werner Guttmann | Werner Guttmann | Changed argument handling code. | Bug |  | JDO
1151 | 20050821 | Werner Guttmann | Werner Guttmann | Completely refactored ClassMolder, introducing strategy objects for field resolution. | Enh. |  | JDO
1132 | 20050817 | Michael Westbay | Keith Visco | Added additional check for various built-in types when deciding whether or not to use the parent classes namespace if no local namespace has been defined. Reporter: Michael Westbay | Bug |  | XML
1179 | 20050817 | Ralf Joachim | Ralf Joachim | Refactored how transaction managers are maintained. Reporter: Ralf Joachim | Enh. |  | JDO
1158 | 20050808 | Ralf Joachim | Ralf Joachim | Stricter checking at type conversion from string to boolean. Reporter: Nick Stuart | Bug |  | JDO
943 | 20050806 | Ralf Joachim | Ralf Joachim | Created a test case for configuring JDO DataSource using a Properties collection. Reporter: Martin Fuchs | Bug |  | JDO
1190 | 20050806 | Ralf Joachim | Ralf Joachim | Fix syntax failures in sapdb.sql script and improve sapdb test coverage. Reporter: Ralf Joachim | Bug |  | JDO
1185 | 20050805 | Ralf Joachim | Ralf Joachim | Replaced MimeBase64Encoder/Decoder with new implementation Base64Encoder/Decoder. Reporter: Bruce Snyder | Enh. |  | All
799 | 20050805 | Werner Guttmann | Werner Guttmann | Refactored MANIFEST files and their usage within Castor | Enh. |  | JDO
1102 | 20050801 | Werner Guttmann | Werner Guttmann | Added support for various distributed caches. | Enh. |  | JDO
300 | 20050730 | Ralf Joachim | Ralf Joachim | JDO support for typesafe enumerations. Reporter: Rhett Sutphin | Enh. |  | JDO
1178 | 20050803 | Werner Guttmann | Werner Guttmann | Added code to set identity upon registering objects with ObjectTracker | Bug |  | JDO
1183 | 20050803 | Ralf Joachim | Ralf Joachim | Allow to initialize JDOManager with a preconfigured DataSource. Reporter: Ralf Joachim | Enh. |  | JDO
1173 | 20050801 | Gregory Block | Ralf Joachim | Solved problem using JDOConfFactory and transaction demarcation specification. Reporter: Gregory Block | Bug |  | JDO
755 | 20050731 | Ralf Joachim | Ralf Joachim | Place all JDO unit tests in a new src/tests/utf/org/exolab/castor/ tree. Reporter: Bruce Snyder | Enh. |  | JDO
1114 | 20050731 | Ralf Joachim | Ralf Joachim | Update docs on the limit clause support for OQL. Reporter: Bruce Snyder | Enh. |  | JDO
1169 | 20050727 | Werner Guttmann | Werner Guttmann | Refactored access to caches, adding CacheEntry class and making OID and CacheEntry implement java.io.Serializable. | Enh. |  | JDO
778 | 20050725 | Werner Guttmann | Werner Guttmann | Remove deleteExtend method from ClassMolder. | Bug |  | JDO
1135 | 20050724 | Ralf Joachim | Ralf Joachim | Refactor how JDBC connection factories are maintained. Reporter: Werner Guttmann | Enh. |  | JDO
1018 | 20050715 | Werner Guttmann | Werner Guttmann | Added support for polymorphism. | Enh. |  | JDO
1110 | 20050705 | Ralf Joachim | Ralf Joachim | Refactor CTF-JDO tests into subdirectories (part 2). Reporter: Ralf Joachim | Enh. |  | JDO
874 | 20050703 | Werner Guttmann | Werner Guttmann | Added DB2 category to src/tests/tests.xml. | Bug |  | JDO
1085 | 20050620 | Gregory Block | Werner Guttmann | Complete rewrite of TransactionContext with regards to obejct tracking. | Enh. |  | JDO
1155 | 20050617 | Werner Guttmann | Werner Guttmann | Added org.castor package to src/main. | Enh. |  | JDO
732 | 20050616 | Ralf Joachim | Ralf Joachim | Added performance test-suite for 1:n relations of JDO. Reporter: Stein M. Hugubakken | Enh. |  | JDO
352 | 20050615 | Werner Guttmann | Werner Guttmann | Added support for transient attribute at the <sql> element. | Enh. |  | JDO
633 | 20050614 | Werner Guttmann | Werner Guttmann | Removed hidden catch-block in LockEngine.updateCache(). Reporter: Stein M. Hugubakken | Ref. |  | JDO

# Release 0.9.7

Description: | Maintenance release for Castor XML and JDO
released: | June 8, 2005
managed by: | Werner Guttmann

## Download & installation instructions

This is the final 0.9.7. release, mainly a maintenance release. We are currently planning the next release which will be Castor 0.9.9, a feature release.

## Changes

### Moved key generators to jdo.keygen package

Whilst this change is non-intrusive per se, please note that you might have to change a local `castor.properties` file if you happened to re-specify key generators in there.

### Fixed problem with multiple <database> configurations

Support for multiple database configurations has been re-enabled.

Bug Fixes And Issues Addressed
Id | Date | Fixed by | Committed by | Description | Type | Project | Module
--- | --- | --- | --- | --- | --- | --- | ---
1147 | 20050607 | Werner Guttmann | Werner Guttmann | Reverted addition to src/tests/jdo/Collections due to problem with missing setItem(ArrayList). | Bug |  | General
1138 | 20050530 | Werner Guttmann | Werner Guttmann | Moved key generators to jdo.keygen package. | Bug |  | General
881 | 20050530 | Nick Stuart | Ralf Joachim | JDOManager can now handle more then one jdo-conf. Reporter: Nick Stuart | Bug |  | JDO
1131 | 20050525 | Werner Guttmann | Werner Guttmann | Update project documentation. | Bug |  | General

For all the releases prior to 0.9.7, the release notes can be found at here or here.

<notice> Copyright © 1999-2005 ExoLab Group, Intalio Inc., and Contributors. All rights reserved. </notice>
<notice> Java, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. XML, XML Schema, XSLT and related standards are trademarks or registered trademarks of MIT, INRIA, Keio or others, and a product of the World Wide Web Consortium. All other product names mentioned herein are trademarks of their respective owners. </notice>