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 2006/02/02 19:12:52 UTC

svn commit: r374451 - /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java

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
+     * {@link #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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org