Author: arminw
Date: Thu Feb  2 10:12:48 2006
New Revision: 374451

URL: http://svn.apache.org/viewcvs?rev=374451&view=rev
Log:
performance optimization for refresh reference check

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/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java?rev=374451&r1=374450&r2=374451&view=diff
==============================================================================
--- 
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 Feb  2 10:12:48 2006
@@ -161,6 +161,12 @@
     private IdentityArrayList markedForDelete = new IdentityArrayList();
 
     /**
+     * Used for performance optimization of method
+     * [EMAIL PROTECTED] #checkRefreshRelationships(Object, 
org.apache.ojb.broker.Identity, org.apache.ojb.broker.metadata.ClassDescriptor)}
+     */
+    private IdentityArrayList skipRefreshRelationship = new 
IdentityArrayList();
+
+    /**
      * The set of identities of all deleted objects during current transaction
      */
     /*
@@ -390,6 +396,7 @@
         }
         finally
         {
+            if(skipRefreshRelationship.size() > 0) 
skipRefreshRelationship.clear();
             // reset flag indicating use in managed environment
             setManaged(false);
             // free current used DescriptorRepository reference
@@ -1433,6 +1440,8 @@
      */
     public void checkRefreshRelationships(Object obj, Identity oid, 
ClassDescriptor cld)
     {
+        if(skipRefreshRelationship.contains(cld)) return;
+
         Iterator iter;
         CollectionDescriptor cds;
         ObjectReferenceDescriptor rds;
@@ -1449,6 +1458,7 @@
         }
         try
         {
+            boolean needsRelationshipRefresh = false;
             getInternalCache().enableMaterializationCache();
             if(tmp == null)
             {
@@ -1462,6 +1472,7 @@
                 if (cds.isRefresh())
                 {
                     referencesBroker.retrieveCollection(obj, cld, cds, false);
+                    needsRelationshipRefresh = true;
                 }
             }
             iter = cld.getObjectReferenceDescriptors().iterator();
@@ -1471,9 +1482,14 @@
                 if (rds.isRefresh())
                 {
                     referencesBroker.retrieveReference(obj, cld, rds, false);
+                    needsRelationshipRefresh = true;
                 }
             }
             getInternalCache().disableMaterializationCache();
+            if(!needsRelationshipRefresh)
+            {
+                skipRefreshRelationship.add(cld);
+            }
         }
         catch(RuntimeException e)
         {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to