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]