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 mk...@apache.org on 2005/03/15 07:27:55 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/core QueryReferenceBroker.java
mkalen 2005/03/14 22:27:55
Modified: src/java/org/apache/ojb/broker/core Tag: OJB_1_0_RELEASE
QueryReferenceBroker.java
Log:
Patch by Vadim Gritsenko: assert that classToPrefetch is always restored in a finally clause after temporary modification.
Revision Changes Path
No revision
No revision
1.17.2.6 +33 -20 db-ojb/src/java/org/apache/ojb/broker/core/QueryReferenceBroker.java
Index: QueryReferenceBroker.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/QueryReferenceBroker.java,v
retrieving revision 1.17.2.5
retrieving revision 1.17.2.6
diff -u -r1.17.2.5 -r1.17.2.6
--- QueryReferenceBroker.java 13 Mar 2005 03:53:30 -0000 1.17.2.5
+++ QueryReferenceBroker.java 15 Mar 2005 06:27:55 -0000 1.17.2.6
@@ -93,10 +93,10 @@
ClassDescriptor cld = pb.getClassDescriptor(itemClass);
ManageableCollection result = null;
OJBIterator iter = null;
- boolean isRetrievalTasksCreated = (batchRetrieval && (m_retrievalTasks == null));
int fullSize = -1;
int size = 0;
+ final boolean isRetrievalTasksCreated = batchRetrieval && m_retrievalTasks == null;
if (isRetrievalTasksCreated)
{
// Maps ReferenceDescriptors to HashSets of owners
@@ -159,15 +159,21 @@
}
}
-
if (isRetrievalTasksCreated)
{
// turn off auto prefetching for related proxies
- Class saveClassToPrefetch = classToPrefetch;
+ final Class saveClassToPrefetch = classToPrefetch;
classToPrefetch = null;
- performRetrievalTasks();
- classToPrefetch = saveClassToPrefetch;
+ try
+ {
+ performRetrievalTasks();
+ }
+ finally
+ {
+ classToPrefetch = saveClassToPrefetch;
+ }
}
+
// ==> disable materialization cache
pb.getInternalCache().disableMaterializationCache();
}
@@ -427,16 +433,17 @@
public void retrieveReferences(Object newObj, ClassDescriptor cld, boolean forced) throws PersistenceBrokerException
{
Iterator i = cld.getObjectReferenceDescriptors().iterator();
- ObjectReferenceDescriptor rds = null;
+
// turn off auto prefetching for related proxies
- Class saveClassToPrefetch = classToPrefetch;
+ final Class saveClassToPrefetch = classToPrefetch;
classToPrefetch = null;
+
pb.getInternalCache().enableMaterializationCache();
try
{
while (i.hasNext())
{
- rds = (ObjectReferenceDescriptor) i.next();
+ ObjectReferenceDescriptor rds = (ObjectReferenceDescriptor) i.next();
retrieveReference(newObj, cld, rds, forced);
}
@@ -447,7 +454,10 @@
pb.getInternalCache().doLocalClear();
throw e;
}
- classToPrefetch = saveClassToPrefetch;
+ finally
+ {
+ classToPrefetch = saveClassToPrefetch;
+ }
}
/**
@@ -682,7 +692,7 @@
return fkQuery;
}
- /**
+ /**
* Get Foreign key query for m:n <br>
* supports UNIDIRECTIONAL m:n using QueryByMtoNCriteria
* @return org.apache.ojb.broker.query.QueryByCriteria
@@ -704,9 +714,8 @@
}
for (int i = 0; i < itemClassFks.length; i++)
{
- criteria.addColumnEqualToField(
- cod.getIndirectionTable() + "." + itemClassFks[i].toString(),
- refCld.getPkFields()[i].getAttributeName());
+ criteria.addColumnEqualToField(cod.getIndirectionTable() + "." + itemClassFks[i],
+ refCld.getPkFields()[i].getAttributeName());
}
return QueryFactory.newQuery(refCld.getClassOfObject(), cod.getIndirectionTable(), criteria);
@@ -767,26 +776,30 @@
public void retrieveCollections(Object newObj, ClassDescriptor cld, boolean forced) throws PersistenceBrokerException
{
Iterator i = cld.getCollectionDescriptors().iterator();
- CollectionDescriptor cds;
+
// turn off auto prefetching for related proxies
- Class saveClassToPrefetch = classToPrefetch;
+ final Class saveClassToPrefetch = classToPrefetch;
classToPrefetch = null;
+
pb.getInternalCache().enableMaterializationCache();
try
{
while (i.hasNext())
{
- cds = (CollectionDescriptor) i.next();
+ CollectionDescriptor cds = (CollectionDescriptor) i.next();
retrieveCollection(newObj, cld, cds, forced);
}
pb.getInternalCache().disableMaterializationCache();
}
- catch(RuntimeException e)
+ catch (RuntimeException e)
{
pb.getInternalCache().doLocalClear();
throw e;
}
- classToPrefetch = saveClassToPrefetch;
+ finally
+ {
+ classToPrefetch = saveClassToPrefetch;
+ }
}
@@ -923,7 +936,7 @@
prefetchingAll = false;
}
- Class saveClassToPrefetch = classToPrefetch;
+ final Class saveClassToPrefetch = classToPrefetch;
classToPrefetch = prefetcher.getItemClassDescriptor().getClassOfObject();
try
{
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org