arminw      2005/02/15 11:17:49

  Modified:    src/java/org/apache/ojb/broker/accesslayer Tag:
                        OJB_1_0_RELEASE RelationshipPrefetcherFactory.java
                        RsIterator.java
               src/java/org/apache/ojb/broker/core Tag: OJB_1_0_RELEASE
                        PersistenceBrokerImpl.java
                        QueryReferenceBroker.java
               src/test/org/apache/ojb/broker/metadata Tag: OJB_1_0_RELEASE
                        MetadataMultithreadedTest.java
  Log:
  fix concurrency problem caused by RelationshipPrefetcherFactory
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.6.2.1   +16 -9     
db-ojb/src/java/org/apache/ojb/broker/accesslayer/RelationshipPrefetcherFactory.java
  
  Index: RelationshipPrefetcherFactory.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RelationshipPrefetcherFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.6.2.1
  diff -u -r1.6 -r1.6.2.1
  --- RelationshipPrefetcherFactory.java        12 May 2004 19:25:54 -0000      
1.6
  +++ RelationshipPrefetcherFactory.java        15 Feb 2005 19:17:48 -0000      
1.6.2.1
  @@ -29,33 +29,40 @@
    */
   public class RelationshipPrefetcherFactory
   {
  +    private PersistenceBrokerImpl broker;
  +
  +    public RelationshipPrefetcherFactory(final PersistenceBrokerImpl broker)
  +    {
  +        this.broker = broker;
  +    }
  +
       /**
        * create either a CollectionPrefetcher or a ReferencePrefetcher
        */ 
  -    public static RelationshipPrefetcher 
createRelationshipPrefetcher(PersistenceBrokerImpl aBroker, 
ObjectReferenceDescriptor ord)
  +    public RelationshipPrefetcher 
createRelationshipPrefetcher(ObjectReferenceDescriptor ord)
       {
           if (ord instanceof CollectionDescriptor)
           {
               CollectionDescriptor cds = (CollectionDescriptor)ord;
               if (cds.isMtoNRelation())
               {
  -                return new MtoNCollectionPrefetcher(aBroker, cds);           
                     
  +                return new MtoNCollectionPrefetcher(broker, cds);
               }
               else
               {
  -                return new CollectionPrefetcher(aBroker, cds);               
 
  +                return new CollectionPrefetcher(broker, cds);
               }
           }
           else
           {    
  -            return new ReferencePrefetcher(aBroker, ord);
  +            return new ReferencePrefetcher(broker, ord);
           }
       }   
       
       /**
        * create either a CollectionPrefetcher or a ReferencePrefetcher
        */ 
  -    public static RelationshipPrefetcher 
createRelationshipPrefetcher(PersistenceBrokerImpl aBroker, ClassDescriptor 
anOwnerCld, String aRelationshipName)
  +    public RelationshipPrefetcher 
createRelationshipPrefetcher(ClassDescriptor anOwnerCld, String 
aRelationshipName)
       {
           ObjectReferenceDescriptor ord;
           
  @@ -65,10 +72,10 @@
               ord = 
anOwnerCld.getObjectReferenceDescriptorByName(aRelationshipName);
               if (ord == null)
               {
  -                throw new PersistenceBrokerException("Relationship not 
found: " + aRelationshipName);
  +                throw new PersistenceBrokerException("Relationship named '" 
+ aRelationshipName
  +                        + "' not found in owner class " + (anOwnerCld != 
null ? anOwnerCld.getClassNameOfObject() : null));
               }
           }
  -        
  -        return createRelationshipPrefetcher(aBroker, ord);
  +        return createRelationshipPrefetcher(ord);
       }   
   }
  
  
  
  1.63.2.8  +3 -3      
db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
  
  Index: RsIterator.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java,v
  retrieving revision 1.63.2.7
  retrieving revision 1.63.2.8
  diff -u -r1.63.2.7 -r1.63.2.8
  --- RsIterator.java   23 Jan 2005 03:07:31 -0000      1.63.2.7
  +++ RsIterator.java   15 Feb 2005 19:17:48 -0000      1.63.2.8
  @@ -354,8 +354,8 @@
           for (int i = 0; i < prefetchedRel.size(); i++)
           {
               relName = (String) prefetchedRel.get(i);
  -            prefetchers[i] =
  -                    
RelationshipPrefetcherFactory.createRelationshipPrefetcher(getBroker(), 
getQueryObject().getClassDescriptor(), relName);
  +            prefetchers[i] = getBroker().getRelationshipPrefetcherFactory()
  +                    
.createRelationshipPrefetcher(getQueryObject().getClassDescriptor(), relName);
               prefetchers[i].prepareRelationshipSettings();
           }
   
  
  
  
  No                   revision
  No                   revision
  1.83.2.12 +10 -3     
db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
  
  Index: PersistenceBrokerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java,v
  retrieving revision 1.83.2.11
  retrieving revision 1.83.2.12
  diff -u -r1.83.2.11 -r1.83.2.12
  --- PersistenceBrokerImpl.java        23 Jan 2005 03:07:32 -0000      
1.83.2.11
  +++ PersistenceBrokerImpl.java        15 Feb 2005 19:17:49 -0000      
1.83.2.12
  @@ -28,7 +28,6 @@
   import org.apache.ojb.broker.IdentityFactory;
   import org.apache.ojb.broker.ManageableCollection;
   import org.apache.ojb.broker.MtoNImplementor;
  -import org.apache.ojb.broker.OJBRuntimeException;
   import org.apache.ojb.broker.PBKey;
   import org.apache.ojb.broker.PBState;
   import org.apache.ojb.broker.PersistenceBrokerException;
  @@ -46,6 +45,7 @@
   import org.apache.ojb.broker.accesslayer.PkEnumeration;
   import org.apache.ojb.broker.accesslayer.StatementManagerFactory;
   import org.apache.ojb.broker.accesslayer.StatementManagerIF;
  +import org.apache.ojb.broker.accesslayer.RelationshipPrefetcherFactory;
   import org.apache.ojb.broker.accesslayer.sql.SqlGenerator;
   import org.apache.ojb.broker.accesslayer.sql.SqlGeneratorFactory;
   import org.apache.ojb.broker.cache.MaterializationCache;
  @@ -119,6 +119,7 @@
       private StatementManagerIF statementManager = null;
       private SqlGenerator sqlGenerator;
       private IdentityFactory identityFactory;
  +    private RelationshipPrefetcherFactory relationshipPrefetcherFactory;
       private PBKey pbKey;
   
       /**
  @@ -191,6 +192,7 @@
           mtoNBroker = new MtoNBroker(this);
           referencesBroker = new QueryReferenceBroker(this);
           identityFactory = new IdentityFactoryImpl(this);
  +        relationshipPrefetcherFactory = new 
RelationshipPrefetcherFactory(this);
       }
   
       public MaterializationCache getInternalCache()
  @@ -243,6 +245,11 @@
           return this.referencesBroker;
       }
   
  +    public RelationshipPrefetcherFactory getRelationshipPrefetcherFactory()
  +    {
  +        return relationshipPrefetcherFactory;
  +    }
  +
       public boolean isClosed()
       {
           return this.isClosed;
  @@ -346,12 +353,12 @@
                   */
                   connectionManager.setBatchMode(false);
               }
  -            removeAllListeners();
           }
           finally
           {
               // free current used DescriptorRepository reference
               descriptorRepository = null;
  +            removeAllListeners();
               this.setClosed(true);
           }
           return true;
  
  
  
  1.17.2.3  +6 -7      
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.2
  retrieving revision 1.17.2.3
  diff -u -r1.17.2.2 -r1.17.2.3
  --- QueryReferenceBroker.java 23 Jan 2005 03:07:32 -0000      1.17.2.2
  +++ QueryReferenceBroker.java 15 Feb 2005 19:17:49 -0000      1.17.2.3
  @@ -30,7 +30,6 @@
   import org.apache.ojb.broker.accesslayer.PagingIterator;
   import org.apache.ojb.broker.accesslayer.PlainPrefetcher;
   import org.apache.ojb.broker.accesslayer.RelationshipPrefetcher;
  -import org.apache.ojb.broker.accesslayer.RelationshipPrefetcherFactory;
   import org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl;
   import org.apache.ojb.broker.core.proxy.CollectionProxyListener;
   import org.apache.ojb.broker.core.proxy.IndirectionHandler;
  @@ -338,7 +337,7 @@
                       continue;
                   }
   
  -                prefetcher = 
RelationshipPrefetcherFactory.createRelationshipPrefetcher(pb, ord);
  +                prefetcher = 
pb.getRelationshipPrefetcherFactory().createRelationshipPrefetcher(ord);
                   prefetcher.prefetchRelationship(owners);
                   it.remove();
               }
  @@ -385,7 +384,7 @@
                   }
                   else
                   {
  -                    refObj = getReferencedObject(id, rds, cld);
  +                    refObj = getReferencedObject(id, rds);
                   }
   
                   if (isRefObjDefined)
  @@ -529,7 +528,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;
   
  @@ -865,7 +864,7 @@
           {
               if (_key instanceof ObjectReferenceDescriptor)
               {
  -                return 
RelationshipPrefetcherFactory.createRelationshipPrefetcher(pb, 
(ObjectReferenceDescriptor) _key);
  +                return 
pb.getRelationshipPrefetcherFactory().createRelationshipPrefetcher((ObjectReferenceDescriptor)
 _key);
               }
               else // PersistentBrokerImpl.this
               {
  @@ -996,7 +995,7 @@
   
           protected RelationshipPrefetcher getPrefetcher(Object listenedObject)
           {
  -            return 
RelationshipPrefetcherFactory.createRelationshipPrefetcher(pb, 
(CollectionDescriptor)_key);
  +            return 
pb.getRelationshipPrefetcherFactory().createRelationshipPrefetcher((CollectionDescriptor)_key);
           }
   
           public void beforeLoading(CollectionProxyDefaultImpl col)
  
  
  
  No                   revision
  No                   revision
  1.7.2.1   +6 -7      
db-ojb/src/test/org/apache/ojb/broker/metadata/MetadataMultithreadedTest.java
  
  Index: MetadataMultithreadedTest.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/test/org/apache/ojb/broker/metadata/MetadataMultithreadedTest.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- MetadataMultithreadedTest.java    5 Apr 2004 17:13:27 -0000       1.7
  +++ MetadataMultithreadedTest.java    15 Feb 2005 19:17:49 -0000      1.7.2.1
  @@ -26,6 +26,11 @@
       // we change table name in test for target class
       private String newTestObjectString = "SM_TAB_MAX_AA";
       private Class targetTestClass = Repository.SMMaxA.class;
  +    int loops = 7;
  +    int threads = 4;
  +    // need min 80% free memory after test campared with
  +    // beginning, else test fails
  +    int minimalFreeMemAfterTest = 80;
   
       private String oldTestObjectString;
       DescriptorRepository defaultRepository;
  @@ -67,12 +72,6 @@
   
       public void testRuntimeMetadataChanges() throws Exception
       {
  -        int loops = 7;
  -        int threads = 8;
  -        // need min 80% free memory after test campared with
  -        // beginning, else test fails
  -        int minimalFreeMemAfterTest = 80;
  -
           PersistenceBroker broker = null;
           try
           {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to