db-ojb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From acl...@apache.org
Subject cvs commit: db-ojb/src/java/org/apache/ojb/broker/cache ObjectCacheTwoLevelImpl.java
Date Wed, 10 Aug 2005 19:32:19 GMT
aclute      2005/08/10 12:32:19

  Modified:    src/java/org/apache/ojb/broker/core Tag: OJB_1_0_RELEASE
                        QueryReferenceBroker.java
               src/java/org/apache/ojb/broker/cache Tag: OJB_1_0_RELEASE
                        ObjectCacheTwoLevelImpl.java
  Log:
  Refactor to allow for TLCache to able to force proxies for Collections and References when
retrieveing an object from cache.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.17.2.10 +52 -12    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.9
  retrieving revision 1.17.2.10
  diff -u -r1.17.2.9 -r1.17.2.10
  --- QueryReferenceBroker.java	9 Aug 2005 20:03:20 -0000	1.17.2.9
  +++ QueryReferenceBroker.java	10 Aug 2005 19:32:19 -0000	1.17.2.10
  @@ -273,11 +273,8 @@
           return (Collection) getCollectionByQuery(RemovalAwareCollection.class, query, lazy);
       }
   
  -    /**
  -     * retrieve a collection of itemClass Objects matching the Query query
  -     */
  -    private Collection getCollectionByQuery(Query query, CollectionDescriptor cds) throws
PersistenceBrokerException
  -    {
  +    
  +    private Class getCollectionTypeClass(CollectionDescriptor cds) throws PersistenceBrokerException{
           // BRJ: do not use RemovalAwareCollection for m:n relationships
           // see http://db.apache.org/ojb/docu/guides/basic-technique.html#Mapping+m%3An+associations
   
  @@ -304,10 +301,10 @@
           {
               throw new MetadataException("Cannot determine a default collection type for
collection "+cds.getAttributeName()+" in type "+cds.getClassDescriptor().getClassNameOfObject());
           }
  -
  -        return (Collection)getCollectionByQuery(collType, query, cds.isLazy());
  +        return collType;
       }
       
  +    
       /**
        * @return true if this is the first task for the given ObjectReferenceDescriptor
        */
  @@ -677,7 +674,7 @@
               return pb.doGetObjectByIdentity(id);
           }
       }
  -
  +    
       /**
        * Retrieve a single Collection on behalf of <b>obj</b>.
        * The Collection is retrieved only if <b>cascade.retrieve is true</b>
  @@ -691,6 +688,27 @@
        */
       public void retrieveCollection(Object obj, ClassDescriptor cld, CollectionDescriptor
cds, boolean forced)
       {
  +        doRetrieveCollection(obj, cld, cds, forced, cds.isLazy());
  +    }
  +    
  +    /**
  +     * Retrieve a single Proxied Collection on behalf of <b>obj</b>.
  +     * The Collection is retrieved only if <b>cascade.retrieve is true</b>
  +     * or if <b>forced</b> is set to true.     *
  +     *
  +     * @param obj - the object to be updated
  +     * @param cld - the ClassDescriptor describing obj
  +     * @param cds - the CollectionDescriptor describing the collection attribute to be
loaded
  +     * @param forced - if set to true a proxy will be placed, even if cds differs.
  +     *
  +     */
  +    public void retrieveProxyCollection(Object obj, ClassDescriptor cld, CollectionDescriptor
cds, boolean forced)
  +    {
  +        doRetrieveCollection(obj, cld, cds, forced, true);
  +    }
  +    
  +    private void doRetrieveCollection(Object obj, ClassDescriptor cld, CollectionDescriptor
cds, boolean forced, boolean lazyLoad)
  +    {
           if (forced || cds.getCascadeRetrieve())
           {
               if ((m_retrievalTasks != null) && !cds.isLazy()
  @@ -712,7 +730,7 @@
                   {
                       if (collectionClass == null)
                       {
  -                        Collection result = getCollectionByQuery(fkQuery, cds);
  +                        Collection result = (Collection)getCollectionByQuery(getCollectionTypeClass(cds),
fkQuery, lazyLoad);
   
                           // assign collection to objects attribute
                           // if attribute has an array type build an array, else assign collection
directly
  @@ -736,7 +754,7 @@
                       }
                       else
                       {
  -                        ManageableCollection result = getCollectionByQuery(collectionClass,
fkQuery, cds.isLazy());
  +                        ManageableCollection result = getCollectionByQuery(collectionClass,
fkQuery, lazyLoad);
                           collectionField.set(obj, result);
                           value = result;
                       }
  @@ -893,6 +911,24 @@
        */
       public void retrieveCollections(Object newObj, ClassDescriptor cld, boolean forced)
throws PersistenceBrokerException
       {
  +        doRetrieveCollections(newObj, cld, forced, false);
  +    }
  +    
  +    /**
  +     * Retrieve all Collection attributes of a given instance, and make all of the Proxy
Collections
  +     *
  +     * @param newObj the instance to be loaded or refreshed
  +     * @param cld the ClassDescriptor of the instance
  +     * @param forced if set to true, loading is forced even if cld differs
  +     *
  +     */
  +    public void retrieveProxyCollections(Object newObj, ClassDescriptor cld, boolean forced)
throws PersistenceBrokerException
  +    {
  +        doRetrieveCollections(newObj, cld, forced, true);
  +    }
  +    
  +    private void doRetrieveCollections(Object newObj, ClassDescriptor cld, boolean forced,
boolean forceProxyCollection) throws PersistenceBrokerException
  +    {
           Iterator i = cld.getCollectionDescriptors().iterator();
   
           // turn off auto prefetching for related proxies
  @@ -905,7 +941,11 @@
               while (i.hasNext())
               {
                   CollectionDescriptor cds = (CollectionDescriptor) i.next();
  -                retrieveCollection(newObj, cld, cds, forced);
  +                if (forceProxyCollection){
  +                    retrieveProxyCollection(newObj, cld, cds, forced);
  +                } else {
  +                    retrieveCollection(newObj, cld, cds, forced);
  +                }
               }
               pb.getInternalCache().disableMaterializationCache();
           }
  
  
  
  No                   revision
  No                   revision
  1.1.2.8   +4 -3      db-ojb/src/java/org/apache/ojb/broker/cache/Attic/ObjectCacheTwoLevelImpl.java
  
  Index: ObjectCacheTwoLevelImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/cache/Attic/ObjectCacheTwoLevelImpl.java,v
  retrieving revision 1.1.2.7
  retrieving revision 1.1.2.8
  diff -u -r1.1.2.7 -r1.1.2.8
  --- ObjectCacheTwoLevelImpl.java	9 Aug 2005 20:03:22 -0000	1.1.2.7
  +++ ObjectCacheTwoLevelImpl.java	10 Aug 2005 19:32:19 -0000	1.1.2.8
  @@ -382,10 +382,11 @@
           final boolean forced = false;
           if (forceProxies){
               broker.getReferenceBroker().retrieveProxyReferences(target, cld, forced);
  +            broker.getReferenceBroker().retrieveProxyCollections(target, cld, forced);
           }else{
               broker.getReferenceBroker().retrieveReferences(target, cld, forced);
  -        }      
  -        broker.getReferenceBroker().retrieveCollections(target, cld, forced);
  +            broker.getReferenceBroker().retrieveCollections(target, cld, forced);
  +        }    
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


Mime
View raw message