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 br...@apache.org on 2004/08/11 20:57:16 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker IdentityFactory.java

brj         2004/08/11 11:57:16

  Modified:    src/java/org/apache/ojb/broker/accesslayer
                        MtoNCollectionPrefetcher.java
                        CollectionPrefetcher.java
               src/java/org/apache/ojb/broker/core IdentityFactoryImpl.java
               src/java/org/apache/ojb/broker IdentityFactory.java
  Log:
  use IdentityFactory in prefetcher classes
  
  Revision  Changes    Path
  1.13      +14 -10    db-ojb/src/java/org/apache/ojb/broker/accesslayer/MtoNCollectionPrefetcher.java
  
  Index: MtoNCollectionPrefetcher.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/MtoNCollectionPrefetcher.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- MtoNCollectionPrefetcher.java	11 Jun 2004 18:49:09 -0000	1.12
  +++ MtoNCollectionPrefetcher.java	11 Aug 2004 18:57:16 -0000	1.13
  @@ -24,6 +24,7 @@
   import java.util.List;
   
   import org.apache.ojb.broker.Identity;
  +import org.apache.ojb.broker.IdentityFactory;
   import org.apache.ojb.broker.ManageableCollection;
   import org.apache.ojb.broker.PersistenceBroker;
   import org.apache.ojb.broker.core.PersistenceBrokerImpl;
  @@ -209,9 +210,11 @@
        */
       protected Query[] buildMtoNImplementorQueries(Collection owners, Collection children)
       {
  +        PersistenceBroker pb = getBroker();
  +        IdentityFactory idFactory = pb.serviceIdentity();
           ClassDescriptor cld = getOwnerClassDescriptor();
  -        Class topLevelClass = getBroker().getTopLevelClass(cld.getClassOfObject());
  -        BrokerHelper helper = getBroker().serviceBrokerHelper();
  +        Class topLevelClass = pb.getTopLevelClass(cld.getClassOfObject());
  +        BrokerHelper helper = pb.serviceBrokerHelper();
           Collection queries = new ArrayList(owners.size());
           Collection idsSubset = new HashSet(owners.size());
           Object[] fkValues;
  @@ -223,7 +226,7 @@
           {
               owner = iter.next();
               fkValues = helper.extractValueArray(helper.getKeyValues(cld, owner));
  -            id = new Identity(null, topLevelClass, fkValues);
  +            id = idFactory.buildIdentity(null, topLevelClass, fkValues);
               idsSubset.add(id);
               if (idsSubset.size() == pkLimit)
               {
  @@ -364,9 +367,10 @@
        */
       protected void associateBatched(Collection owners, Collection children, Collection mToNImplementors)
       {
  +        PersistenceBroker pb = getBroker();
  +        IdentityFactory idFactory = pb.serviceIdentity();
           CollectionDescriptor cds = getCollectionDescriptor();
           PersistentField field = cds.getPersistentField();
  -        PersistenceBroker pb = getBroker();
           Class ownerTopLevelClass = pb.getTopLevelClass(getOwnerClassDescriptor().getClassOfObject());
           Class childTopLevelClass = pb.getTopLevelClass(getItemClassDescriptor().getClassOfObject());
           Class collectionClass = cds.getCollectionClass(); // this collection type will be used:
  @@ -377,14 +381,14 @@
           for (Iterator it = owners.iterator(); it.hasNext();)
           {
               Object owner = it.next();
  -            ownerIdsToLists.put(new Identity(owner, pb), new ArrayList());
  +            ownerIdsToLists.put(idFactory.buildIdentity(owner), new ArrayList());
           }
   
           // build the children map
           for (Iterator it = children.iterator(); it.hasNext();)
           {
               Object child = it.next();
  -            childMap.put(new Identity(child, pb), child);
  +            childMap.put(idFactory.buildIdentity(child), child);
           }
   
           int ownerPkLen = getOwnerClassDescriptor().getPkFields().length;
  @@ -399,8 +403,8 @@
               System.arraycopy(mToN, 0, ownerPk, 0, ownerPkLen);
               System.arraycopy(mToN, ownerPkLen, childPk, 0, childPkLen);
   
  -            Identity ownerId = new Identity(null, ownerTopLevelClass, ownerPk);
  -            Identity childId = new Identity(null, childTopLevelClass, childPk);
  +            Identity ownerId = idFactory.buildIdentity(null, ownerTopLevelClass, ownerPk);
  +            Identity childId = idFactory.buildIdentity(null, childTopLevelClass, childPk);
   
               // Identities may not be equal due to type-mismatch
               Collection list = (Collection) ownerIdsToLists.get(ownerId);
  @@ -413,7 +417,7 @@
           {
               Object result;
               Object owner = it.next();
  -            Identity ownerId = new Identity(owner, pb);
  +            Identity ownerId = idFactory.buildIdentity(owner);
   
               List list = (List) ownerIdsToLists.get(ownerId);
   
  
  
  
  1.31      +12 -7     db-ojb/src/java/org/apache/ojb/broker/accesslayer/CollectionPrefetcher.java
  
  Index: CollectionPrefetcher.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/CollectionPrefetcher.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- CollectionPrefetcher.java	11 Aug 2004 00:42:52 -0000	1.30
  +++ CollectionPrefetcher.java	11 Aug 2004 18:57:16 -0000	1.31
  @@ -24,6 +24,7 @@
   import java.util.List;
   
   import org.apache.ojb.broker.Identity;
  +import org.apache.ojb.broker.IdentityFactory;
   import org.apache.ojb.broker.ManageableCollection;
   import org.apache.ojb.broker.OJBRuntimeException;
   import org.apache.ojb.broker.PersistenceBroker;
  @@ -69,9 +70,11 @@
        */
       protected Query[] buildPrefetchQueries(Collection owners, Collection children)
       {
  +        PersistenceBroker pb = getBroker();
  +        IdentityFactory idFactory = pb.serviceIdentity();
           ClassDescriptor cld = getOwnerClassDescriptor();
  -        Class topLevelClass = getBroker().getTopLevelClass(cld.getClassOfObject());
  -        BrokerHelper helper = getBroker().serviceBrokerHelper();
  +        Class topLevelClass = pb.getTopLevelClass(cld.getClassOfObject());
  +        BrokerHelper helper = pb.serviceBrokerHelper();
           Collection queries = new ArrayList(owners.size());
           Collection idsSubset = new HashSet(owners.size());
           Object[] fkValues;
  @@ -83,7 +86,7 @@
           {
               owner = iter.next();
               fkValues = helper.extractValueArray(helper.getKeyValues(cld, owner));
  -            id = new Identity(null, topLevelClass, fkValues);
  +            id = idFactory.buildIdentity(null, topLevelClass, fkValues);
               idsSubset.add(id);
               if (idsSubset.size() == pkLimit)
               {
  @@ -141,9 +144,10 @@
        */
       protected void associateBatched(Collection owners, Collection children)
       {
  +        PersistenceBroker pb = getBroker();
  +        IdentityFactory idFactory = pb.serviceIdentity();
           CollectionDescriptor cds = getCollectionDescriptor();
           PersistentField field = cds.getPersistentField();
  -        PersistenceBroker pb = getBroker();
           Class ownerTopLevelClass = pb.getTopLevelClass(getOwnerClassDescriptor().getClassOfObject());
           Class collectionClass = cds.getCollectionClass(); // this collection type will be used:
           HashMap ownerIdsToLists = new HashMap(owners.size());
  @@ -162,8 +166,9 @@
               // BRJ: use cld for real class, relatedObject could be Proxy
               ClassDescriptor cld = getDescriptorRepository().getDescriptorFor(ProxyHelper.getRealClass(child));
   
  -            Object[] fkValues = cds.getForeignKeyValues(child, cld);
  -            Identity ownerId = new Identity(null, ownerTopLevelClass, fkValues);
  +            Object[] fkValues = cds.getForeignKeyValues(child, cld);             
  +            Identity ownerId = idFactory.buildIdentity(null, ownerTopLevelClass, fkValues);
  +            
               List list = (List) ownerIdsToLists.get(ownerId);
               if (list != null)
               {
  
  
  
  1.3       +12 -3     db-ojb/src/java/org/apache/ojb/broker/core/IdentityFactoryImpl.java
  
  Index: IdentityFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/IdentityFactoryImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IdentityFactoryImpl.java	7 Jul 2004 13:13:14 -0000	1.2
  +++ IdentityFactoryImpl.java	11 Aug 2004 18:57:16 -0000	1.3
  @@ -64,7 +64,8 @@
                   orderedPKValues = reorderPKValues(flds, pkFieldNames, pkValues);
               }
           }
  -        return new Identity(realClass, topLevelClass, orderedPKValues);
  +        
  +        return buildIdentity(realClass, topLevelClass, orderedPKValues);
       }
   
       private Object[] reorderPKValues(FieldDescriptor[] flds, String[] pkFieldNames, Object[] pkValues)
  @@ -126,6 +127,14 @@
        */
       public Identity buildIdentity(Class realClass, Object pkValue)
       {
  -        return buildIdentity(realClass, null, new Object[]{pkValue});
  +        return buildIdentity(realClass, broker.getTopLevelClass(realClass), new Object[]{pkValue});
  +    }
  +    
  +    /**
  +     * @see org.apache.ojb.broker.IdentityFactory#buildIdentity(java.lang.Class, java.lang.Class, java.lang.Object[])
  +     */
  +    public Identity buildIdentity(Class realClass, Class topLevelClass, Object[] pkValues)
  +    {
  +        return new Identity(realClass, topLevelClass, pkValues);
       }
   }
  
  
  
  1.3       +13 -1     db-ojb/src/java/org/apache/ojb/broker/IdentityFactory.java
  
  Index: IdentityFactory.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/IdentityFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IdentityFactory.java	7 Jul 2004 13:13:14 -0000	1.2
  +++ IdentityFactory.java	11 Aug 2004 18:57:16 -0000	1.3
  @@ -60,6 +60,18 @@
       Identity buildIdentity(Class realClass, Class topLevelClass, String[] pkFieldName, Object[] pkValues);
   
       /**
  +     * Build a unique {@link org.apache.ojb.broker.Identity}
  +     * for the given primary key values (composite PK's) of a
  +     * persistence capable object.
  +     *
  +     * @param realClass The class of the associated object.
  +     * @param topLevelClass The top-level class of the associated object.
  +     * @param pkValues The PK values.
  +     * @return The a new created <em>Identity</em> object.
  +     */
  +    Identity buildIdentity(Class realClass, Class topLevelClass, Object[] pkValues);
  +
  +    /**
        * Convenience method for
        * {@link #buildIdentity(java.lang.Class, java.lang.Class, java.lang.String[], java.lang.Object[])}
        */
  
  
  

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