You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Brian McCallister <br...@apache.org> on 2005/04/05 14:38:58 UTC

Apache OJB 1.0.3 Released

Apache Object/Relational Bridge (OJB) is an Object/Relational mapping  
tool that allows transparent persistence for Java objects against  
relational databases.

The OJB team is happy to announce the 1.0.3 release:

---------------------------------------------------------------------
Release 1.0.3
---------------------------------------------------------------------
NEW FEATURES:


NOTES:
- odmg-api: Named objects can now be non- and persistence capable  
objects. At least
   the named object have to be serializable.

CHANGES:
- Refactoring DCollection implementations, remove DListImpl_2 classes  
(code moved to DListImpl)
- Object2ByteArrFieldConversion: If source object on conversion  
javaToSQL is 'null', no longer create an
   byte array simply return 'null'

BUG FIXES:
Please refer to our Bug tracking site  
(http://issues.apache.org/jira/secure/BrowseProject.jspa?id=10700)
to see details for a bug with id OJB-xxx.

- odmg-api: OJB-7 - Fix critical property setting in OJB.properties file
- odmg-api: OJB-8 - Fix bug when using cascading delete on empty 1:1  
reference
- odmg-api: Fix bug with named object. On 'unbind' of a named object,  
if the object is a persistence capable
   object (object with metadata mapping), the object itself will not be  
deleted. All other (serializable)
   named objects will be deleted on unbind.
- odmg-api: Fix bug with named objects when using database based  
Identity columns (SequenceManagerNativeImpl)
- odmg-api: Fix bug when persisting DCollection instances when using  
database based
   Identity columns (SequenceManagerNativeImpl).



KNOWN ISSUES:
- Auto-Detection for insert/update objects checks to avoid DB queries  
the PK fields of the object.
   If at least one PK field is 'NULL' or if primitive field '0', OJB  
assume the object is new and
   needs insert. This will be configurable in next upcoming version.  
Workaround for PB-api: use method
   PB#store(Object obj, ObjectModification mod) to state update or  
insert.
- Batch handling doesn't work proper with optimistic locking. This will  
be fixed
   in version 1.1
- Subqueries are not extent aware. see  
QueryTest#testSubQueryAgainstExtents
- When a class mapped on multiple joined tables was used in a reference  
only objects
   of the base type class will be instantiated, e.g. a Company class has
   a 1:n reference 'employees' to a base class Employee and class  
Manager extends Employee,
   then 'employees' only contains objects of type Employee even if the  
real type was Manager.
   See in OJB test suite  
...broker.InheritanceMultipleTableTest#testInheritancedObjectsInCollecti 
onReferences
   Same problem occur when query the base class, then OJB only returns  
objects of base type instead
   the real type.
- Managed Environment: When run OJB in managed environment and using  
PBStateListener, the call of
   PBStateListener#beforeClose(PBStateEvent event) is made twice when
   a PB instance was closed in a JTA-tx (for the first time when  
PB.close() was called
   in bean on the PB handle, second time when the JTA-tx completes)
- otm-api: The OTM API has a known caching issue and should not be  
considered for code used
   in production environments. The future of the OTM layer will be  
subject for discussion on the
   OJB developers list, if you are using it - please subscribe to  
ojb-dev and make your voice heard.
- Oracle9i platform: when using statement batching, there is a 2k limit  
on BLOB + 4k limit on CLOB.


---------------------------------------------------------------------
Release 1.0.2
---------------------------------------------------------------------
NEW FEATURES:

- New ant-target ojb-quickstart creates archives of ready-to-run apps  
for tutorials 1 and 2
   complete with pre-created Hsqldb databases (based on ojb-blank).
   These archives are also available in the binary download area.
- Introduce first version of a two-level cache (transactional session  
cache with an application cache
   handle with copies of cached objects). More detailed information see  
'object cache' reference guide in docs.
- All Oracle platforms will now transparently handle  
java.lang.Character fields mapped to
   jdbc-types CHAR or VARCHAR, without any conversion class.
- Oracle9i plaform now handles CLOB>4k and BLOB>2k when DBCP and/or  
P6Spy are used.
- Oracle9i plaform can now be used with Oracle10g JDBC-driver. Escape  
processing statements are
   removed and OracleConnection unwrapping have been adjusted to be  
compatible with 10g JDBC.
- XDoclet module:
     * Important: generate-table-info now only prevents the generation  
of a table in the database schema,
       the class-descriptor is unaffacted
     * The new ojb.class#generate-repository-info attribute prevents the  
generation of field/reference/collection
       descriptors in the repository as well as the table in the  
database schema
       This attribute should be used when using inheritance with  
interfaces/abstract classes
     * Database foreignkeys are now generated for collections, as well
     * It is possible to prevent the generation of database foreignkeys  
for individual references
       or collections using the database-foreignkey attribute  
(ojb.collection/ojb.reference).
       However this attribute cannot be used to force generation of  
database-foreignkeys
     * Inheritance with interfaces/abstract classes (i.e. classes  
without table) is now handled properly
       for types that are referenced by references/collections even if  
the relevant foreignkey
       (reference/1:n collection) or primarykey (m:n collection) is not  
defined in the basetype itself
       but only in the subtypes. The XDoclet module will determine these  
fields and generate virtual
       field descriptors in the class-descriptor of the basetype (even  
if generate-repository-info=false).
       Additionally, database foreignkeys are generated if the subtypes  
map to the same table
     * Additional attributes for generating documentation in the  
database schema:
         - ojb.class#table-documentation
         - ojb.field#column-documentation
         - ojb.collection#indirection-table-documentation
         -               #foreignkey-documentation
         -               #remote-foreignkey-documentation
     * Foreignkey columns of an m:n collection can be made primarykeys  
of the indirection table by
       using the ojb.collection#indirection-table-primarykeys attribute

NOTES:
- ODMG-api refactoring!! All known issues in test suite are fixed. But  
the refactored odmg-api
   version needs changes in auto-xxx settings in metadata and changed  
OJB.properties settings.
   Please read carefully the 'CHANGES notes' below.
- Don't forget to replace the old repository.dtd and OJB.properties  
file (both files changed).
- If you plan to use OJB with an J2SE version older than 1.4, then you  
have to
   replace the Geronimo jars with the corresponding ones from Sun's J2EE  
SDK. This
   is because Geronimo is a J2EE 1.4 implementation and thus dependant  
upon
   J2SE 1.4. Use instead the version of Sun's J2EE reference  
implementation that
   correspond to your J2SE version. E.g. for J2SE 1.3 use the J2EE 1.3  
SDK which
   you can get from here: http://java.sun.com/j2ee/1.3/index.jsp
- Performance improvement in handling of m:n relations
- Add new property 'sequenceStart' for SequenceManagerHighLowImpl and  
SequeceManagerInMemoryImpl
   more info see docs section 'sequence manager'
- Recommended to read the updated 'object cache' reference guide to  
reflect on the changes made in
   caching behavior.
- By default a new locking implementation was used for odmg, to enable  
the old deprecated odmg-locking,
   please see comments in OJB.properties file.

CHANGES:
- When using Oracl9i platform and DBCP connection factory, no  
PreparedStatement caching will occur
   in the DBCP pool (Oracle JDBC-driver statement caching is performed  
by the platform as default).
   statement pool, to avoid running out of server-side cursors when  
using Oracle9i platform.
- Oracle9i default platform should now be usable and have large LOB  
support in JBoss environemnts,
   please try the default Oracle9i platform and report your results to  
the ojb-user list.
- Oracle9i default platform should now be usable and have large LOB  
support in BEA WebLogic,
   please try the default Oracle9i platform in favor of WLOracle9i and  
report your results to
   the ojb-user list.
- Oracle9i platform no longer throws exceptions when Oracle-specific  
extensions initializer fails,
   this should enable Oracle9i platform to degrade smoothly in not yet  
handled managed environments.
- Oracle9i platform now uses ANSI SQL92 join syntax as per  
user-request. The Oracle platform
   still uses Oracle join syntax to be compatible with Oracle 8 and  
older versions.
- CollectionProxy classes will now throw an exception in constructor,  
if trying
   to use dynamic proxies with MetadataManager in 'per thread changes'  
mode but
   without any metadata profile key loaded in the current thread. See  
note about
   fix in CollectionProxy under "BUG FIXES" below.
- Minor changes in the repository.dtd. Add element object-cache to  
metadata interface and abstract class
   declaration in class-descriptor. So replacement of old repository.dtd  
is needed.
- Remove object-cache declaration from OJB.properties file. Use the  
'object-cache' element in
   repository file (example see repository_database.xml file shipped  
with OJB) to specify the cache
   implementation. More detailed information see caching reference guide  
in docs.
- Remove redundant ObjectCache implementations (ObjectCacheSoftImpl,  
ObjectCacheUnlimitiedImpl), same
   behavior is possible with ObjectCacheDefaultImpl.
- Remove undocumented 'ObjectCacheFilter' (used to filter out whole  
packages or classes from being cached).
   Filter out packages or classes from being cached is still possible,  
please see 'object cache' reference guide.
- !!!In managed enviroments the org.odmg.Transaction#abort() call no  
longer throws an
   TransactionAbortedExceptionOJB, instead OJB does internal cleanup and  
set used
   JTA-tx to setRollbackOnly if possible. Thus the client does no longer  
get an RemoteException.
   The user have to throw an EJBException by himself to notify the  
client.
- Performance of the default RowReader (RowReaderDefaultImpl) was  
improved, when mapping
   several classes to the same table ("ojb-conrete class" feature), now  
only the fields of the
   associated class were performed in RowReader instead invoking all  
fields of the table used by
   the mapped classes.
- Introduce new locking-package in kernel api. Now top-level api like  
odmg-api can use a kernel
   lock manager to provide locking. Adapt odmg-locking to the new lock  
management and declare old locking stuff
   in org.apache.ojb.odmg.locking package as deprecated. Add support for  
apache's commons-transaction locking part.
- Use of database identity column (SequenceManagerNativeImpl). Move  
assign of PK values from
   PersistenceBrokerImpl to JdbcAccessImpl#executeInsert. Remove usage  
of SequenceManager#setReferenceFKs,
   will be handled by OJB in same way as without usage of database  
identity column.
- odmg-api: Introduced new object reordering implementation (replaces  
old algorithm
   in ObjectEnvelopeTable).
- odmg-api: Change used 'OqlCollectionClass' in OJB.properties from a  
DList impl to ArrayList impl
   to improve performance. If you need the additional features of odmg  
DList comment in the DList impl.
- odmg-api: ** All relations (1:1, 1:n and m:n) need auto-update/delete  
setting 'none' to proper work.**
- odmg-api: Cascade delete is now configurable via OJB.properties file  
and at runtime using
   TransactionExt#setCascadingDelete method (cast Transaction instance  
to TransactionExt)

BUG FIXES:
Please refer to our Bug tracking site  
(http://issues.apache.org/scarab/servlet/scarab/)
under http://issues.apache.org/scarab/servlet/scarab/issues/id/OJBxxx
to see details for a bug with id OJBxxx.

- Fix problem with StatementManager when binding delete-statement  
parameters
   with null-values for numeric type columns under certain conditions.
   (Oracle9i and jdbc-type=NUMERIC with a conversion class that can  
return null-values
    was such a combination, resulting in SQLException in  
OracleStatement#get_internal_type.)
- Fix bug in MetadataManager, when 'per thread changes' is enabled and  
CollectionProxy
   proxies are used. Using proxies in this mode used to be undefined,  
since the lazy
   loading might or might not succeed depending on in which thread the  
data was loaded.
   OJB will now reload the metadata profile used when creating the proxy,
   before attempting to reference any persistence capable classes.
   (Fixes occasional ClassNotPersistenceCapable exceptions seen in  
multithreaded
    applications when using 'per thread changes'.)
   See  
http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=ojb- 
dev@db.apache.org&msgNo=9143
- Managed Environment: Fix problem of abandoned connections and  
statements (e.g. detected
   by JBoss) when query (iterator) result sets only partially  
materialized.
- Fix bug in ObjectCacheDefaultImpl resolve cache object conflicts, see
    
http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=ojb- 
user@db.apache.org&msgNo=15063
- LockManager#releaseLock, when a write lock was found all read locks  
will be released too.
    
http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=ojb- 
user@db.apache.org&msgNo=14885
- Fix problem with automatic generated sequence names in  
SequenceManagerHighLowImpl and
   SequenceManagerInMemoryImpl when different DB use the same table and  
column name for auto
   incremented fields.
   See  
http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=ojb- 
user@db.apache.org&msgNo=14528
- Fix materialization problem under heavy load, OJB no longer returns  
partially materialized
   objects from cache.
   See  
http://mail-archives.apache.org/eyebrowse/ReadMsg? 
listId=107&msgNo=14472
- Fix key constraint problems when insert m:n relation manually via  
"linking"
- Fix bug in SequenceManagerNativeImpl used to support DB identity  
columns, make counter for
   temporary keys static to prevent lock not granted exceptions on  
insert of new objects.
- odmg-api: if within a transaction the client returns a different  
instance of an already
   locked object (e.g. serialized through network) method tx.lock and  
tx.markDirty do not
   replace the already locked object instance by the new one. Now it  
will do so.
- odmg-api: In managed environment odmg-api does clenup internal stuff  
(cache, locking) when
   Synchronization#afterCompletion(int status) was called by the  
JTA-TxManager instead doing all this
   stuff in #beforeCompletion()
- odmg-api: Assign FK for 1:1 relations when persistent objects are  
written to DB, instead when objects
   were locked.
- odmg-api: Mixing of pessimistic and optimistic locking should be  
possible. Now all lock calls on objects
   with optimistic locking enabled will be ignored.
- odmg-api: Fixed: If a user exchange already existing objects in 1:n  
references without changing the size
   of the collection, the main object will not become dirty and the FK  
values of the exchanged objects
   will not be updated. This is fixed.
- odmg-api: Fixed: Creation of m:n relation only works when objects  
created step by step (or use PB-api
   as workaround), persist a whole object graph seems not to work  
proper. This is fixed.
- odmg-api: Fixed: Mapping classes on multiple joined tables was not  
supported in
   ODMG-API implementation. This is fixed (!except the known issue when  
Query or refer to a base class).


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org