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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to