Author: arminw Date: Thu Aug 2 08:31:35 2007 New Revision: 562137 URL: http://svn.apache.org/viewvc?view=rev&rev=562137 Log: rename of non public methods, minor enhancements
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java?view=diff&rev=562137&r1=562136&r2=562137 ============================================================================== --- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java (original) +++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java Thu Aug 2 08:31:35 2007 @@ -84,6 +84,7 @@ import org.apache.ojb.broker.util.ClassHelper; import org.apache.ojb.broker.util.IdentityHashSet; import org.apache.ojb.broker.util.ObjectModification; +import org.apache.ojb.broker.util.IdentityArrayList; import org.apache.ojb.broker.util.configuration.Configuration; import org.apache.ojb.broker.util.configuration.ConfigurationException; import org.apache.ojb.broker.util.logging.Logger; @@ -165,7 +166,7 @@ with user implemented equals/hashCode methods of persistence capable objects (e.g. objects are equals but PK fields not) */ - private Collection nowStoring = new IdentityHashSet(); + private Collection nowStoring = new IdentityArrayList(); /** * Lists for object registration during delete operations. @@ -174,13 +175,13 @@ */ /* arminw: list was cleared before delete method end. Internal we only - call doDelete(...) method. Same procedure as 'nowStoring' + call internalDelete(...) method. Same procedure as 'nowStoring' we use an object identity based List to compare objects to prevent problems with user implemented equals/hashCode methods of persistence capable objects (e.g. objects are equals but PK fields not) */ - private Collection markedForDelete = new IdentityHashSet(); + private Collection nowDeleting = new IdentityArrayList(); /** * Used for performance optimization of method @@ -609,11 +610,11 @@ { ClassDescriptor cld = getClassDescriptor(getProxyFactory().getRealClass(obj)); Identity oid = serviceIdentity().buildIdentity(cld, obj); - doDelete(obj, oid, cld, ignoreReferences); + internalDelete(obj, oid, cld, ignoreReferences); } finally { - markedForDelete.clear(); + nowDeleting.clear(); } } @@ -628,11 +629,11 @@ doTxCheck(); try { - doDelete(obj, oid, cld, ignoreReferences); + internalDelete(obj, oid, cld, ignoreReferences); } finally { - markedForDelete.clear(); + nowDeleting.clear(); } } @@ -646,9 +647,9 @@ /** * do delete given object. Should be used by all intern classes to delete - * objects. + * objects of an object graph. */ - private void doDelete(Object obj, Identity oid, ClassDescriptor cld, boolean ignoreReferences) + private void internalDelete(Object obj, Identity oid, ClassDescriptor cld, boolean ignoreReferences) throws PersistenceBrokerException { // replace specified object with the real one @@ -663,7 +664,7 @@ use object identity based list, because using objects we get a better performance. I can't find side-effects in doing so. */ - if (markedForDelete.contains(obj)) + if (nowDeleting.contains(obj)) { return; } @@ -682,7 +683,7 @@ * MBAIRD * 2. register object in markedForDelete map. */ - markedForDelete.add(obj); + nowDeleting.add(obj); // Invoke events on PersistenceBrokerAware instances and listeners BEFORE_DELETE_EVENT.setTarget(obj); @@ -868,7 +869,7 @@ } else { - doDelete(referencedObject, null, null, ignoreReferences); + internalDelete(referencedObject, null, null, ignoreReferences); } } } @@ -913,7 +914,7 @@ Iterator colIterator = BrokerHelper.getCollectionIterator(col); while (colIterator.hasNext()) { - doDelete(colIterator.next(), null, null, false); + internalDelete(colIterator.next(), null, null, false); } } } @@ -925,7 +926,7 @@ * Store only transient/new objects, if the object is persistent (is already * stored) it's skipped - no update will be performed. */ - public void storeOnlyNew(Object obj) throws PersistenceBrokerException + void storeOnlyNew(Object obj) throws PersistenceBrokerException { Class clazz = getProxyFactory().getRealClass(obj); ClassDescriptor cld = getClassDescriptor(clazz); @@ -1092,20 +1093,29 @@ return; } Iterator i = listRds.iterator(); + ObjectReferenceDescriptor superReference = null; while (i.hasNext()) { ObjectReferenceDescriptor rds = (ObjectReferenceDescriptor) i.next(); /* arminw: the super-references (used for table per subclass inheritance) must be performed in any case. The "normal" 1:1 references can be ignored when - flag "ignoreReferences" is set + flag "ignoreReferences" is set. + But in any case the super-reference have to be performed as last! */ - if((!ignoreReferences && !rds.isCascadingStoreNone()) - || rds.isSuperReferenceDescriptor()) + if(rds.isSuperReferenceDescriptor()) + { + superReference = rds; + } + else if((!ignoreReferences && !rds.isCascadingStoreNone())) { storeAndLinkOneToOne(false, obj, cld, rds, insert); } } + if(superReference != null) + { + storeAndLinkOneToOne(false, obj, cld, superReference, insert); + } } /** @@ -1151,7 +1161,7 @@ // get all members of obj that are collections and store all their elements Collection listCods = cld.getCollectionDescriptors(); // return if nothing to do - if (listCods.size() == 0) + if (listCods.isEmpty()) { return; } @@ -1267,8 +1277,8 @@ - on insert we link and insert the referenced objects, because the proxy collection maybe "inherited" from the object before the PK was replaced */ - if(insert || !(referencedObjects instanceof CollectionProxyDefaultImpl - && !((CollectionProxyDefaultImpl) referencedObjects).isLoaded())) + if(insert || !(referencedObjects instanceof CollectionProxy + && !((CollectionProxy) referencedObjects).isLoaded())) { Iterator it = BrokerHelper.getCollectionIterator(referencedObjects); Object refObj; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]