You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2007/10/03 00:01:59 UTC

svn commit: r581404 - in /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg: Image.java NarrowTransaction.java ObjectEnvelope.java ObjectEnvelopeTable.java TransactionExt.java TransactionImpl.java

Author: arminw
Date: Tue Oct  2 15:01:59 2007
New Revision: 581404

URL: http://svn.apache.org/viewvc?rev=581404&view=rev
Log:
improve handling of orphan objects

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/Image.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/NarrowTransaction.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelope.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelopeTable.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionExt.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/Image.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/Image.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/Image.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/Image.java Tue Oct  2 15:01:59 2007
@@ -206,7 +206,7 @@
                     */
                     if(!isUnmaterializedProxy() && !containsReference(oldOid))
                     {
-                        listener.deletedXToN(cod, entry.getValue(), oldOid);
+                        listener.removedXToN(cod, entry.getValue(), oldOid);
                     }
                 }
             }
@@ -371,7 +371,7 @@
                 {
                     if(oldOid != null)
                     {
-                        listener.deletedOneToOne(ord, oldRef.referenceObjOrProxy, oldOid, true);
+                        listener.removedOneToOne(ord, oldRef.referenceObjOrProxy, oldOid, true);
                     }
                 }
                 else
@@ -384,7 +384,7 @@
                     {
                         if(!newOid.equals(oldOid))
                         {
-                            listener.deletedOneToOne(ord, oldRef.referenceObjOrProxy, oldOid, false);
+                            listener.removedOneToOne(ord, oldRef.referenceObjOrProxy, oldOid, false);
                             listener.addedOneToOne(ord, referenceObjOrProxy, newOid);
                         }
                     }
@@ -481,15 +481,19 @@
     //===================================================================
     // inner interface
     //===================================================================
+    /**
+     * This interface is used to register the detected 'new' or 'removed' objects
+     * when comparing the {@link org.apache.ojb.odmg.Image} snapshots.
+     */
     public static interface ImageListener
     {
         public void addedOneToOne(ObjectReferenceDescriptor ord, Object refObjOrProxy, Identity oid);
 
-        public void deletedOneToOne(ObjectReferenceDescriptor ord, Object refObjOrProxy, Identity oid, boolean needsUnlink);
+        public void removedOneToOne(ObjectReferenceDescriptor ord, Object refObjOrProxy, Identity oid, boolean needsUnlink);
 
         public void addedXToN(CollectionDescriptor ord, Object refObjOrProxy, Identity oid);
 
-        public void deletedXToN(CollectionDescriptor ord, Object refObjOrProxy, Identity oid);
+        public void removedXToN(CollectionDescriptor ord, Object refObjOrProxy, Identity oid);
 
         public PersistenceBrokerInternal getBroker();
     }
@@ -497,7 +501,6 @@
     //====================================================
     // inner class
     //====================================================
-
     /**
      * Thrown if something unexpected is happen when handling the
      * object images for state detection.

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/NarrowTransaction.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/NarrowTransaction.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/NarrowTransaction.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/NarrowTransaction.java Tue Oct  2 15:01:59 2007
@@ -180,6 +180,17 @@
         tx.setCascadingDelete(target, doCascade);
     }
 
+
+    public void setDeleteOrphan(Class target, boolean deleteOrphan)
+    {
+        tx.setDeleteOrphan(target, deleteOrphan);
+    }
+
+    public void setDeleteOrphan(Class target, String referenceField, boolean deleteOrphan)
+    {
+        tx.setDeleteOrphan(target, referenceField, deleteOrphan);
+    }
+
     public boolean isOrdering()
     {
         return tx.isOrdering();

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelope.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelope.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelope.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelope.java Tue Oct  2 15:01:59 2007
@@ -788,24 +788,27 @@
         addLinkOneToOne(ord, false);
     }
 
-    public void deletedOneToOne(ObjectReferenceDescriptor ord, Object refObjOrProxy, Identity oid, boolean needsUnlink)
+    public void removedOneToOne(ObjectReferenceDescriptor ord, Object refObjOrProxy, Identity oid, boolean needsUnlink)
     {
         // the main objects needs link/unlink of the FK to 1:1 reference,
         // so mark this dirty
         setModificationState(modificationState.markDirty());
-        ObjectEnvelope oldRefMod = buffer.getByIdentity(oid);
-        // only delete when the reference wasn't assigned with another object
-        if(!buffer.isNewAssociatedObject(oid))
-        {
-            // if cascading delete is enabled, remove the 1:1 reference
-            // because it was removed from the main object
-            if(buffer.getTransaction().cascadeDeleteFor(ord))
-            {
-                oldRefMod.setModificationState(oldRefMod.modificationState.markDelete());
-            }
-            // unlink the main object
-            if(needsUnlink) addLinkOneToOne(ord, true);
-        }
+// arminw: to delete a removed 1:1 reference is not the expected behavior. Only unlink the main object
+// and let the reference untouched. TODO: Would it make sense to support such a behavior by configuration property?
+//        ObjectEnvelope oldRefMod = buffer.getByIdentity(oid);
+//        // only delete when the reference wasn't assigned with another object
+//        if(!buffer.isNewAssociatedObject(oid))
+//        {
+//            // if delete orphan is enabled, remove the 1:1 reference
+//            // because it was removed from the main object
+//            if(buffer.getTransaction().isDeleteOrphan(ord))
+//            {
+//                oldRefMod.setModificationState(oldRefMod.modificationState.markDelete());
+//            }
+//            // unlink the main object
+//            if(needsUnlink) addLinkOneToOne(ord, true);
+//        }
+        if(needsUnlink) addLinkOneToOne(ord, true);
     }
 
     public void addedXToN(CollectionDescriptor cod, Object refObjOrProxy, Identity oid)
@@ -847,15 +850,9 @@
             // we have to link the new object
             mod.addLinkOneToN(cod, myObj, false);
         }
-// arminw: this object will be matched again in ObjectEnvelopeTable#cascadingDependents()
-// and then be added
-//        if(mod.needsInsert())
-//        {
-//            buffer.addForInsertDependent(mod);
-//        }
     }
 
-    public void deletedXToN(CollectionDescriptor cod, Object refObjOrProxy, Identity oid)
+    public void removedXToN(CollectionDescriptor cod, Object refObjOrProxy, Identity oid)
     {
         ObjectEnvelope mod = buffer.getByIdentity(oid);
         // if this object is associated with another object it's
@@ -864,13 +861,10 @@
         {
             if(mod != null)
             {
-                boolean cascade = buffer.getTransaction().cascadeDeleteFor(cod);
-                if(cascade)
+                boolean deleteOrphan = buffer.getTransaction().isDeleteOrphan(cod);
+                if(deleteOrphan)
                 {
                     mod.setModificationState(mod.modificationState.markDelete());
-                    // arminw: this object will be matched again in ObjectEnvelopeTable#cascadingDependents()
-                    // and then be added
-                    //buffer.addForDeletionDependent(mod);
                 }
                 if(cod.isMtoNRelation())
                 {
@@ -878,19 +872,19 @@
                 }
                 else
                 {
-                    // if cascade 'true', we remove all dependent objects, so no need
-                    // to unlink, else we have to unlink all referenced objects of this
-                    // object
-                    if(!cascade)
+                    // if deleteOrphan is 'true', delete the removed object (no need
+                    // to unlink) else we have to unlink the removed object, because it no
+                    // longer belongs to the main object
+                    if(!deleteOrphan)
                     {
                         mod.setModificationState(mod.modificationState.markDirty());
-                        mod.addLinkOneToN(cod, myObj, true);
+                        mod.addLinkOneToN(cod, mod.getRealObject(), true);
                     }
                 }
             }
             else
             {
-                throw new Image.ImageException("Unexpected behaviour, unregistered object to delete: "
+                throw new Image.ImageException("Unexpected behaviour, unregistered object performed: "
                         + oid + ", main object is " + getIdentity()+ ", envelope object is " + this.toString());
             }
         }

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelopeTable.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelopeTable.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelopeTable.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/ObjectEnvelopeTable.java Tue Oct  2 15:01:59 2007
@@ -731,7 +731,7 @@
         for(int i = 0; i < descriptor.size(); i++)
         {
             ObjectReferenceDescriptor ord = (ObjectReferenceDescriptor) descriptor.get(i);
-            if(getTransaction().cascadeDeleteFor(ord))
+            if(getTransaction().isCascadeDelete(ord))
             {
                 Object depObj = ord.getPersistentField().get(source.getRealObject());
                 if(depObj != null)
@@ -756,7 +756,7 @@
         for(int i = 0; i < descriptor.size(); i++)
         {
             CollectionDescriptor col = (CollectionDescriptor) descriptor.get(i);
-            boolean cascadeDelete = getTransaction().cascadeDeleteFor(col);
+            boolean cascadeDelete = getTransaction().isCascadeDelete(col);
             Object collOrArray = col.getPersistentField().get(source.getRealObject());
             // TODO: remove cast
             CollectionProxyDefaultImpl proxy = (CollectionProxyDefaultImpl) pb.getProxyFactory().getCollectionProxy(collOrArray);

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionExt.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionExt.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionExt.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionExt.java Tue Oct  2 15:01:59 2007
@@ -20,8 +20,8 @@
  */
 
 
-import org.odmg.Transaction;
 import org.apache.ojb.broker.Identity;
+import org.odmg.Transaction;
 
 /**
  * Offers useful none odmg-standard methods of the odmg {@link org.odmg.Transaction} interface.
@@ -96,18 +96,39 @@
      *
      * @param target The class to change cascading delete behavior of the references.
      * @param referenceField The field name of the 1:1, 1:n or m:n reference.
-     * @param doCascade If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
+     * @param cascadeDelete If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
      */
-    public void setCascadingDelete(Class target, String referenceField, boolean doCascade);
+    public void setCascadingDelete(Class target, String referenceField, boolean cascadeDelete);
 
     /**
      * Allows to change the <em>cascading delete</em> behavior of all references of the
      * specified class while this transaction is in use.
      *
      * @param target The class to change cascading delete behavior of all references.
-     * @param doCascade If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
+     * @param cascadeDelete If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
+     */
+    public void setCascadingDelete(Class target, boolean cascadeDelete);
+
+    /**
+     * Allows to change the <em>delete orphan</em> behavior of the specified reference
+     * of the target class while this transaction is in use.
+     *
+     * @param target The class to change delete orphan behavior of the references.
+     * @param referenceField The field name of the 1:1, 1:n or 1:n reference.
+     * @param deleteOrphan If <em>true</em> delete orphan is enabled, <em>false</em> disabled.
+     */
+    public void setDeleteOrphan(Class target, String referenceField, boolean deleteOrphan);
+
+    /**
+     * Allows to change the <em>delete orphan</em> behavior of all 1:n and m:n references of the
+     * specified class while this transaction is in use - if the specified class is an
+     * interface, abstract class or class with "extent" classes the delete orphan flag will
+     * be propagated.
+     *
+     * @param target The class to change delete orphan behavior of collection references.
+     * @param deleteOrphan If <em>true</em> delete orphan is enabled, <em>false</em> disabled.
      */
-    public void setCascadingDelete(Class target, boolean doCascade);
+    public void setDeleteOrphan(Class target, boolean deleteOrphan);
 
     /**
      * Return <em>true</em> if the OJB ordering algorithm is enabled.

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java?rev=581404&r1=581403&r2=581404&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java Tue Oct  2 15:01:59 2007
@@ -50,6 +50,7 @@
 import org.apache.ojb.broker.util.BrokerHelper;
 import org.apache.ojb.broker.util.GUIDFactory;
 import org.apache.ojb.broker.util.IdentityArrayList;
+import org.apache.ojb.broker.util.collections.IRemovalAwareCollection;
 import org.apache.ojb.broker.util.configuration.Configurable;
 import org.apache.ojb.broker.util.configuration.Configuration;
 import org.apache.ojb.broker.util.configuration.ConfigurationException;
@@ -80,7 +81,8 @@
     private final ImplementationImpl implementation;
     private final NamedRootsMap namedRootsMap;
     protected PersistenceBrokerInternal broker = null;
-    //private ArrayList registrationList = new ArrayList();
+    private HashMap runtimeCascadeDeleteMap = new HashMap();
+    private HashMap runtimeDeleteOrphanMap = new HashMap();
 
     private boolean impliciteWriteLocks;
     private boolean implicitLocking;
@@ -236,8 +238,7 @@
      * @param  obj       object to acquire a lock on.
      * @param  lockMode  lock mode to acquire. The lock modes
      * are <code>READ</code> , <code>UPGRADE</code> , and <code>WRITE</code> .
-     *
-     * @exception  LockNotGrantedException    Description of Exception
+     * @throws LockNotGrantedException Description of Exception
      */
     public void lock(Object obj, int lockMode) throws LockNotGrantedException
     {
@@ -388,8 +389,7 @@
      * @param  oid The {@link org.apache.ojb.broker.Identity} of the object to lock.
      * @param  lockMode  lock mode to acquire. The lock modes
      * are <code>READ</code> , <code>UPGRADE</code> , and <code>WRITE</code>.
-     *
-     * @exception  LockNotGrantedException    Description of Exception
+     * @throws LockNotGrantedException Description of Exception
      */
     void internalSingleLock(final ClassDescriptor cld, final Identity oid, final int lockMode) throws LockNotGrantedException
     {
@@ -695,6 +695,7 @@
      * Upgrade the lock on the given object to the given lock mode. Method <code>
      * tryLock</code> is the same as <code>lock</code> except it returns a boolean
      * indicating whether the lock was granted instead of generating an exception.
+     *
      * @param  obj          Description of Parameter
      * @param  lockMode     Description of Parameter
      * @return true          if the lock has been acquired, otherwise false.
@@ -931,6 +932,7 @@
     /**
      * Get object by identity. First lookup among objects registered in the
      * transaction, then in persistent storage.
+     * 
      * @param id The identity
      * @return The object
      * @throws PersistenceBrokerException
@@ -1081,6 +1083,7 @@
     /**
      *  this callback is invoked before an Object is materialized
      *  within an IndirectionHandler.
+     *
      *  @param handler the invoking handler
      *  @param oid the identity of the object to be materialized
      */
@@ -1094,6 +1097,7 @@
      *  within an IndirectionHandler.
      *  this callback allows to defer registration of objects until
      *  it's really neccessary.
+     * 
      *  @param handler the invoking handler
      *  @param materializedObject the materialized Object
      */
@@ -1227,8 +1231,8 @@
             }
             catch (PBFactoryException e)
             {
-                log.error("Cannot obtain PersistenceBroker from PersistenceBrokerFactory, " +
-                        "found PBKey was " + curDB.getPBKey(), e);
+                log.error("Cannot obtain 'PersistenceBroker' instance from Database object instance: "
+                        + curDB, e);
                 throw new PersistenceBrokerException(e);
             }
         }
@@ -1405,15 +1409,7 @@
         return isTransient;
     }
 
-    /**
-     * Allows to change the <em>cascading delete</em> behavior of the specified reference
-     * of the target class while this transaction is in use.
-     *
-     * @param target The class to change cascading delete behavior of the references.
-     * @param referenceField The field name of the 1:1, 1:n or 1:n reference.
-     * @param doCascade If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
-     */
-    public void setCascadingDelete(Class target, String referenceField, boolean doCascade)
+    private ObjectReferenceDescriptor findReference(Class target, String referenceField)
     {
         ClassDescriptor cld = getBroker().getClassDescriptor(target);
         ObjectReferenceDescriptor ord = cld.getObjectReferenceDescriptorByName(referenceField);
@@ -1423,36 +1419,23 @@
         }
         if(ord == null)
         {
-            throw new CascadeSettingException("Invalid reference field name '" + referenceField
+            throw new RuntimeSettingException("Invalid reference field name '" + referenceField
                     + "', can't find 1:1, 1:n or m:n relation with that name in " + target);
         }
-        runtimeCascadeDeleteMap.put(ord, (doCascade ? Boolean.TRUE : Boolean.FALSE));
+        return ord;
     }
 
-    /**
-     * Allows to change the <em>cascading delete</em> behavior of all references of the
-     * specified class while this transaction is in use - if the specified class is an
-     * interface, abstract class or class with "extent" classes the cascading flag will
-     * be propagated.
-     *
-     * @param target The class to change cascading delete behavior of all references.
-     * @param doCascade If <em>true</em> cascading delete is enabled, <em>false</em> disabled.
-     */
-    public void setCascadingDelete(Class target, boolean doCascade)
+    public void setCascadingDelete(Class target, String referenceField, boolean cascade)
+    {
+        ObjectReferenceDescriptor ord = findReference(target, referenceField);
+        runtimeCascadeDeleteMap.put(ord, (cascade ? Boolean.TRUE : Boolean.FALSE));
+    }
+
+    public void setCascadingDelete(Class target, boolean cascade)
     {
         ClassDescriptor cld = getBroker().getClassDescriptor(target);
-        List extents = cld.getExtentClasses();
-        Boolean result = doCascade ? Boolean.TRUE : Boolean.FALSE;
+        Boolean result = cascade ? Boolean.TRUE : Boolean.FALSE;
         setCascadingDelete(cld, result);
-        if(extents != null && extents.size() > 0)
-        {
-            for(int i = 0; i < extents.size(); i++)
-            {
-                Class extent =  (Class) extents.get(i);
-                ClassDescriptor tmp = getBroker().getClassDescriptor(extent);
-                setCascadingDelete(tmp, result);
-            }
-        }
     }
 
     private void setCascadingDelete(ClassDescriptor cld, Boolean cascade)
@@ -1469,14 +1452,23 @@
             Object o =  collectionRefs.get(i);
             runtimeCascadeDeleteMap.put(o, cascade);
         }
+        if(cld.isExtent())
+        {
+            List extents = cld.getExtentClasses();
+            for(int i = 0; i < extents.size(); i++)
+            {
+                Class extent =  (Class) extents.get(i);
+                ClassDescriptor tmp = getBroker().getClassDescriptor(extent);
+                setCascadingDelete(tmp, cascade);
+            }
+        }
     }
 
-    private HashMap runtimeCascadeDeleteMap = new HashMap();
     /**
      * Returns <em>true</em> if cascading delete is enabled for the specified
      * single or collection descriptor.
      */
-    protected boolean cascadeDeleteFor(ObjectReferenceDescriptor ord)
+    protected boolean isCascadeDelete(ObjectReferenceDescriptor ord)
     {
         boolean result;
         Boolean runtimeSetting = (Boolean) runtimeCascadeDeleteMap.get(ord);
@@ -1494,6 +1486,63 @@
         return result;
     }
 
+
+
+    public void setDeleteOrphan(Class target, String referenceField, boolean deleteOrphan)
+    {
+        ObjectReferenceDescriptor ord = findReference(target, referenceField);
+        runtimeDeleteOrphanMap.put(ord, (deleteOrphan ? Boolean.TRUE : Boolean.FALSE));
+    }
+
+    public void setDeleteOrphan(Class target, boolean deleteOrphan)
+    {
+        ClassDescriptor cld = getBroker().getClassDescriptor(target);
+        List extents = cld.getExtentClasses();
+        Boolean result = deleteOrphan ? Boolean.TRUE : Boolean.FALSE;
+        setDeleteOrphan(cld, result);
+        if(extents != null && extents.size() > 0)
+        {
+            for(int i = 0; i < extents.size(); i++)
+            {
+                Class extent =  (Class) extents.get(i);
+                ClassDescriptor tmp = getBroker().getClassDescriptor(extent);
+                setDeleteOrphan(tmp, result);
+            }
+        }
+    }
+
+    private void setDeleteOrphan(ClassDescriptor cld, Boolean cascade)
+    {
+        List collectionRefs = cld.getCollectionDescriptors(true);
+        for(int i = 0; i < collectionRefs.size(); i++)
+        {
+            Object o =  collectionRefs.get(i);
+            runtimeDeleteOrphanMap.put(o, cascade);
+        }
+    }
+
+    /**
+     * Returns <em>true</em> if delete orphan is enabled for the specified
+     * single or collection descriptor.
+     */
+    protected boolean isDeleteOrphan(ObjectReferenceDescriptor ord)
+    {
+        boolean result;
+        Boolean runtimeSetting = (Boolean) runtimeDeleteOrphanMap.get(ord);
+        if(runtimeSetting == null)
+        {
+            result = ord instanceof CollectionDescriptor && IRemovalAwareCollection.class.isAssignableFrom(
+                    getBrokerInternal().getCollectionTypes().getCollectionClass((CollectionDescriptor) ord));
+        }
+        else
+        {
+            result = runtimeSetting.booleanValue();
+        }
+        return result;
+    }
+
+
+
     int getImpliciteLockType(int parentLockMode)
     {
         return (parentLockMode == Transaction.WRITE && impliciteWriteLocks) ? Transaction.WRITE : Transaction.READ;
@@ -1501,6 +1550,7 @@
 
     /**
      * Return <em>true</em> if the OJB ordering algorithm is enabled.
+     * 
      * @see #setOrdering(boolean)
      */
     public boolean isOrdering()
@@ -1563,25 +1613,25 @@
     // inner class
     //============================================================
     /**
-     * This was thrown when something wrong with the cascading delete setting.
+     * This was thrown when something wrong with the runtime setting.
      */
-    static class CascadeSettingException extends OJBRuntimeException
+    static class RuntimeSettingException extends OJBRuntimeException
     {
-        public CascadeSettingException()
+        public RuntimeSettingException()
         {
         }
 
-        public CascadeSettingException(String msg)
+        public RuntimeSettingException(String msg)
         {
             super(msg);
         }
 
-        public CascadeSettingException(Throwable cause)
+        public RuntimeSettingException(Throwable cause)
         {
             super(cause);
         }
 
-        public CascadeSettingException(String msg, Throwable cause)
+        public RuntimeSettingException(String msg, Throwable cause)
         {
             super(msg, cause);
         }



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