mkalen 2005/03/14 22:42:04 Modified: src/java/org/apache/ojb/broker/core QueryReferenceBroker.java Log: Remove som warnings. Merge with OJB_1_0_RELEASE branch: Patch by Vadim Gritsenko: assert that classToPrefetch is always restored in a finally clause after temporary modification. Revision Changes Path 1.29 +35 -28 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.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- QueryReferenceBroker.java 6 Jan 2005 21:00:00 -0000 1.28 +++ QueryReferenceBroker.java 15 Mar 2005 06:42:04 -0000 1.29 @@ -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 @@ -161,10 +161,16 @@ 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; + } } } catch(RuntimeException e) @@ -368,7 +374,7 @@ } else { - refObj = getReferencedObject(id, rds, cld); + refObj = getReferencedObject(id, rds); } if (isRefObjDefined) @@ -412,16 +418,16 @@ 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.ojbLocalCache().enableMaterializationCache(); try { while (i.hasNext()) { - rds = (ObjectReferenceDescriptor) i.next(); + ObjectReferenceDescriptor rds = (ObjectReferenceDescriptor) i.next(); retrieveReference(newObj, cld, rds, forced); } } @@ -431,9 +437,11 @@ pb.ojbLocalCache().reset(false); throw e; } + finally + { + classToPrefetch = saveClassToPrefetch; + } pb.ojbLocalCache().disableMaterializationCache(); - - classToPrefetch = saveClassToPrefetch; } /** @@ -517,7 +525,7 @@ * <br> * If no Proxy-class is defined, a getObjectByIdentity(...) lookup is performed. */ - private Object getReferencedObject(Identity id, ObjectReferenceDescriptor rds, ClassDescriptor cld) + private Object getReferencedObject(Identity id, ObjectReferenceDescriptor rds) { Class referencedProxy; @@ -581,7 +589,7 @@ // this collection type will be used: Class collectionClass = cds.getCollectionClass(); PersistentField collectionField = cds.getPersistentField(); - Query fkQuery = getFKQuery(obj, cld, cds); + Query fkQuery = getFKQuery(obj, cds); Object value; pb.ojbLocalCache().enableMaterializationCache(); @@ -648,22 +656,21 @@ * defined by CollectionDescriptor. * * @param obj the owner of the relationship - * @param cld the ClassDescriptor for the owner - * @param cod the CollectionDescriptor + * @param cds the CollectionDescriptor * @return org.apache.ojb.broker.query.Query */ - private Query getFKQuery(Object obj, ClassDescriptor cld, CollectionDescriptor cds) + private Query getFKQuery(Object obj, CollectionDescriptor cds) { Query fkQuery = null; QueryByCriteria fkQueryCrit = null; if (cds.isMtoNRelation()) { - fkQueryCrit = getFKQueryMtoN(obj, cld, cds); + fkQueryCrit = getFKQueryMtoN(obj, cds); } else { - fkQueryCrit = getFKQuery1toN(obj, cld, cds); + fkQueryCrit = getFKQuery1toN(obj, cds); } // check if collection must be ordered @@ -694,11 +701,10 @@ * supports UNIDIRECTIONAL m:n using QueryByMtoNCriteria. * * @param obj the owner of the relationship - * @param cld the ClassDescriptor for the owner * @param cod the CollectionDescriptor * @return org.apache.ojb.broker.query.QueryByCriteria */ - private QueryByCriteria getFKQueryMtoN(Object obj, ClassDescriptor cld, CollectionDescriptor cod) + private QueryByCriteria getFKQueryMtoN(Object obj, CollectionDescriptor cod) { ValueContainer[] values = pb.serviceBrokerHelper().getFkTargetValuesForObject(cod, obj ,false); Object[] thisClassFks = cod.getFksToThisClass(); @@ -724,11 +730,10 @@ * Get Foreign key query for 1:n relationship. * * @param obj the owner of the relationship - * @param cld the ClassDescriptor for the owner * @param cod the CollectionDescriptor * @return org.apache.ojb.broker.query.QueryByCriteria */ - private QueryByCriteria getFKQuery1toN(Object obj, ClassDescriptor cld, CollectionDescriptor cod) + private QueryByCriteria getFKQuery1toN(Object obj, CollectionDescriptor cod) { ValueContainer[] values = pb.serviceBrokerHelper().getFkTargetValuesForObject(cod, obj ,false); ClassDescriptor refCld = cod.getItemClassDescriptor(); @@ -776,16 +781,16 @@ 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.ojbLocalCache().enableMaterializationCache(); try { while (i.hasNext()) { - cds = (CollectionDescriptor) i.next(); + CollectionDescriptor cds = (CollectionDescriptor) i.next(); retrieveCollection(newObj, cld, cds, forced); } } @@ -795,9 +800,11 @@ pb.ojbLocalCache().reset(false); throw e; } + finally + { + classToPrefetch = saveClassToPrefetch; + } pb.ojbLocalCache().disableMaterializationCache(); - - classToPrefetch = saveClassToPrefetch; } @@ -934,7 +941,7 @@ prefetchingAll = false; } - Class saveClassToPrefetch = classToPrefetch; + final Class saveClassToPrefetch = classToPrefetch; classToPrefetch = prefetcher.getItemClassDescriptor().getClassOfObject(); try {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]