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