Return-Path: Delivered-To: apmail-db-ojb-dev-archive@www.apache.org Received: (qmail 98339 invoked from network); 8 Feb 2004 13:19:51 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 8 Feb 2004 13:19:51 -0000 Received: (qmail 39769 invoked by uid 500); 8 Feb 2004 13:19:46 -0000 Delivered-To: apmail-db-ojb-dev-archive@db.apache.org Received: (qmail 39744 invoked by uid 500); 8 Feb 2004 13:19:46 -0000 Mailing-List: contact ojb-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "OJB Developers List" Reply-To: "OJB Developers List" Delivered-To: mailing list ojb-dev@db.apache.org Received: (qmail 39718 invoked by uid 500); 8 Feb 2004 13:19:45 -0000 Received: (qmail 39706 invoked from network); 8 Feb 2004 13:19:45 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 8 Feb 2004 13:19:45 -0000 Received: (qmail 98301 invoked by uid 1797); 8 Feb 2004 13:19:47 -0000 Date: 8 Feb 2004 13:19:47 -0000 Message-ID: <20040208131947.98300.qmail@minotaur.apache.org> From: tomdz@apache.org To: db-ojb-cvs@apache.org Subject: cvs commit: db-ojb/src/java/org/apache/ojb/broker Identity.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N tomdz 2004/02/08 05:19:47 Modified: src/java/org/apache/ojb/odmg TransactionImpl.java ObjectEnvelope.java src/java/org/apache/ojb/otm/core ConcreteEditingContext.java BaseConnection.java src/java/org/apache/ojb/otm/copy MetadataObjectCopyStrategy.java src/java/org/apache/ojb/broker/metadata ClassDescriptor.java src/java/org/apache/ojb/broker/util BrokerHelper.java ProxyHelper.java src/java/org/apache/ojb/broker/accesslayer PlainPrefetcher.java StatementsForClassImpl.java src/java/org/apache/ojb/broker Identity.java Log: Unified proxy handling so that only those classes that actually create proxy objects have to use Proxy/VirtualProxy. All other classes now use ProxyHelper and IndirectionHandler. Also contains a first fix that only identifies those Proxy objects as ojb-proxies that have IndirectionHandler as their invocation handler. Revision Changes Path 1.52 +8 -46 db-ojb/src/java/org/apache/ojb/odmg/TransactionImpl.java Index: TransactionImpl.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/odmg/TransactionImpl.java,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- TransactionImpl.java 4 Jan 2004 01:32:10 -0000 1.51 +++ TransactionImpl.java 8 Feb 2004 13:19:46 -0000 1.52 @@ -62,7 +62,6 @@ import org.apache.ojb.broker.PersistenceBrokerException; import org.apache.ojb.broker.PersistenceBrokerFactory; import org.apache.ojb.broker.PersistenceBrokerSQLException; -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.core.ValueContainer; import org.apache.ojb.broker.accesslayer.IndirectionHandler; import org.apache.ojb.broker.accesslayer.MaterializationListener; @@ -96,15 +95,6 @@ import java.util.Vector; import java.util.Arrays; -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif - - /** * * Implementation of Transaction for org.odmg.Transaction. @@ -803,14 +793,7 @@ IndirectionHandler handler = null; // Proxies must be treated specially - if (newTxObject instanceof VirtualProxy) - { - handler = VirtualProxy.getIndirectionHandler((VirtualProxy) newTxObject); - } - else if (newTxObject instanceof Proxy) - { - handler = (IndirectionHandler) Proxy.getInvocationHandler(newTxObject); - } + handler = ProxyHelper.getIndirectionHandler(newTxObject); /* if the object is a Proxy there are two options: @@ -882,20 +865,9 @@ { try { - if ((!ProxyHelper.isProxy(obj)) - && (ref != null)) + if (!ProxyHelper.isProxy(obj) && (ref != null)) { - Object refInstance = ref; - if (ref instanceof VirtualProxy) - { - refInstance = ((VirtualProxy) ref).getRealSubject(); - } - else if (ref instanceof Proxy) - { - IndirectionHandler ih = (IndirectionHandler) Proxy.getInvocationHandler(ref); - refInstance = ih.getRealSubject(); - } - + Object refInstance = ProxyHelper.getRealObject(ref); ClassDescriptor objCld = this.getBroker().getClassDescriptor(obj.getClass()); org.apache.ojb.broker.metadata.FieldDescriptor[] objFkFields = rds.getForeignKeyFieldDescriptors(objCld); @@ -1001,9 +973,9 @@ while (colIterator.hasNext()) { Object item = colIterator.next(); - if (Proxy.isProxyClass(item.getClass())) + IndirectionHandler handler = ProxyHelper.getIndirectionHandler(item); + if (handler != null) { - IndirectionHandler handler = (IndirectionHandler) Proxy.getInvocationHandler(item); if (!handler.alreadyMaterialized()) { continue; @@ -1013,18 +985,6 @@ item = handler.getRealSubject(); } } - if (item instanceof VirtualProxy) - { - VirtualProxy proxy = (VirtualProxy) item; - if (!proxy.alreadyMaterialized()) - { - continue; - } - else - { - item = proxy.getRealSubject(); - } - } //if itemCld refers to an interface the foreignKeyFieldDescriptors //have to be computed again for each concrete class if (itemCld.isInterface()) @@ -1076,7 +1036,9 @@ if (refObj != null) { if (ProxyHelper.isProxy(refObj)) + { lock(refObj, lockMode); + } else if (!registeredForLock.contains(refObj)) { lock(refObj, lockMode); 1.27 +7 -23 db-ojb/src/java/org/apache/ojb/odmg/ObjectEnvelope.java Index: ObjectEnvelope.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/odmg/ObjectEnvelope.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- ObjectEnvelope.java 7 Jan 2004 11:41:19 -0000 1.26 +++ ObjectEnvelope.java 8 Feb 2004 13:19:47 -0000 1.27 @@ -61,7 +61,6 @@ */ import org.apache.ojb.broker.Identity; import org.apache.ojb.broker.PersistenceBrokerException; -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.accesslayer.IndirectionHandler; import org.apache.ojb.broker.metadata.ClassDescriptor; import org.apache.ojb.broker.metadata.CollectionDescriptor; @@ -81,14 +80,6 @@ import java.util.Iterator; import java.util.Map; -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif - /** * ObjectEnvelope is used during ODMG transactions as a wrapper for a persistent objects declaration * @@ -267,30 +258,23 @@ * if it's been materialized, we put it in the map, because it could change. * if it hasn't been materialized, it hasn't changed. * - * Also handle virtual proxies. + * Also handles virtual proxies. */ - if ((temp != null) && (Proxy.isProxyClass(temp.getClass()))) + IndirectionHandler handler = ProxyHelper.getIndirectionHandler(temp); + + if (handler != null) { /** * only register if the proxy has been materialized * if it's materialized later and the map is compared, it will * trigger the update */ - IndirectionHandler handler = (IndirectionHandler) Proxy.getInvocationHandler(temp); fieldValues.put(rds, handler.getIdentity()); } - else if ((temp!=null) && (temp instanceof VirtualProxy)) - { - /** - * only register if the virtual proxy has been materialized - * if it's materialized later and the map is compared, it will - * trigger the update - */ - VirtualProxy proxy = (VirtualProxy) temp; - fieldValues.put(rds, VirtualProxy.getIndirectionHandler(proxy).getIdentity()); - } else - fieldValues.put(rds,temp); + { + fieldValues.put(rds, temp); + } } /** * MBAIRD 1.33 +2 -29 db-ojb/src/java/org/apache/ojb/otm/core/ConcreteEditingContext.java Index: ConcreteEditingContext.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/core/ConcreteEditingContext.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- ConcreteEditingContext.java 5 Jan 2004 01:40:00 -0000 1.32 +++ ConcreteEditingContext.java 8 Feb 2004 13:19:47 -0000 1.33 @@ -54,13 +54,6 @@ * . */ -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif import java.lang.reflect.Array; import java.math.BigDecimal; import java.util.ArrayList; @@ -78,7 +71,6 @@ import org.apache.ojb.broker.OJBRuntimeException; import org.apache.ojb.broker.PBKey; import org.apache.ojb.broker.PersistenceBroker; -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.accesslayer.CollectionProxy; import org.apache.ojb.broker.accesslayer.CollectionProxyListener; import org.apache.ojb.broker.accesslayer.ConnectionManagerIF; @@ -192,7 +184,7 @@ if (newObj != null) { - handler = getIndirectionHandler(newObj); + handler = ProxyHelper.getIndirectionHandler(newObj); if ((handler != null) && handler.alreadyMaterialized()) { newObj = handler.getRealSubject(); @@ -693,25 +685,6 @@ releaseLocksAndClear(); } - /** - * @return IndirectionHandler for the proxy object or null - */ - private static IndirectionHandler getIndirectionHandler(Object object) - { - if (Proxy.isProxyClass(object.getClass())) - { - return (IndirectionHandler) Proxy.getInvocationHandler(object); - } - else if (object instanceof VirtualProxy) - { - return VirtualProxy.getIndirectionHandler((VirtualProxy) object); - } - else - { - return null; - } - } - private void removeMaterializationListener() { for (Iterator it = _order.iterator(); it.hasNext();) @@ -1476,7 +1449,7 @@ object = theObject; if (object != null) { - handler = getIndirectionHandler(object); + handler = ProxyHelper.getIndirectionHandler(object); if ((handler != null) && handler.alreadyMaterialized()) { object = handler.getRealSubject(); 1.28 +2 -28 db-ojb/src/java/org/apache/ojb/otm/core/BaseConnection.java Index: BaseConnection.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/core/BaseConnection.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- BaseConnection.java 5 Feb 2004 18:33:29 -0000 1.27 +++ BaseConnection.java 8 Feb 2004 13:19:47 -0000 1.28 @@ -56,11 +56,11 @@ import org.apache.ojb.broker.*; import org.apache.ojb.broker.cache.ObjectCache; -import org.apache.ojb.broker.accesslayer.IndirectionHandler; import org.apache.ojb.broker.accesslayer.OJBIterator; import org.apache.ojb.broker.metadata.ClassDescriptor; import org.apache.ojb.broker.query.Query; import org.apache.ojb.broker.query.ReportQuery; +import org.apache.ojb.broker.util.ProxyHelper; import org.apache.ojb.broker.util.configuration.ConfigurationException; import org.apache.ojb.broker.util.configuration.Configurator; import org.apache.ojb.odmg.oql.EnhancedOQLQuery; @@ -73,13 +73,6 @@ import org.odmg.ODMGRuntimeException; import org.odmg.OQLQuery; -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; @@ -154,25 +147,6 @@ return _tx; } - private static boolean isMaterialized(Object object) - { - IndirectionHandler handler; - - if (Proxy.isProxyClass(object.getClass())) - { - handler = (IndirectionHandler) Proxy.getInvocationHandler(object); - } - else if (object instanceof VirtualProxy) - { - handler = VirtualProxy.getIndirectionHandler((VirtualProxy) object); - } - else - { - return true; - } - return handler.alreadyMaterialized(); - } - ////////////////////////////////////// // OTMConnection protocol ////////////////////////////////////// @@ -189,7 +163,7 @@ object = _editingContext.lookup(oid); - if ((object == null) || !isMaterialized(object)) + if ((object == null) || !ProxyHelper.isMaterialized(object)) { object = _pb.getObjectByIdentity(oid); if (object != null) 1.15 +4 -12 db-ojb/src/java/org/apache/ojb/otm/copy/MetadataObjectCopyStrategy.java Index: MetadataObjectCopyStrategy.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/copy/MetadataObjectCopyStrategy.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- MetadataObjectCopyStrategy.java 25 Oct 2003 23:59:27 -0000 1.14 +++ MetadataObjectCopyStrategy.java 8 Feb 2004 13:19:47 -0000 1.15 @@ -54,26 +54,18 @@ * . */ -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.metadata.*; import org.apache.ojb.broker.metadata.fieldaccess.PersistentField; import org.apache.ojb.broker.accesslayer.CollectionProxy; import org.apache.ojb.broker.util.ConstructorHelper; import org.apache.ojb.broker.util.IdentityMapFactory; +import org.apache.ojb.broker.util.ProxyHelper; import java.lang.reflect.Constructor; import java.util.Map; import java.util.Collection; import java.util.Iterator; -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif - /** * recursively copies an object based on the ClassDescriptor * User: matthew.baird @@ -117,11 +109,11 @@ /** * if this is a proxy, just copy the proxy, don't materialize it, and stop recursing */ - if (toCopy instanceof VirtualProxy) + if (ProxyHelper.isVirtualOjbProxy(toCopy)) { return _reflective.copy(toCopy); } - else if (Proxy.isProxyClass(toCopy.getClass())) + else if (ProxyHelper.isNormalOjbProxy(toCopy)) { return _serialize.copy(toCopy); } @@ -218,7 +210,7 @@ /** * if this is a proxy, just copy the proxy, don't materialize it, and stop recursing */ - if (obj instanceof Proxy) + if (ProxyHelper.isNormalOjbProxy(obj)) // tomdz: what about VirtualProxy ? { newCollection.add(obj); } 1.79 +3 -2 db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java Index: ClassDescriptor.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java,v retrieving revision 1.78 retrieving revision 1.79 diff -u -r1.78 -r1.79 --- ClassDescriptor.java 7 Jan 2004 19:11:10 -0000 1.78 +++ ClassDescriptor.java 8 Feb 2004 13:19:47 -0000 1.79 @@ -81,6 +81,7 @@ import org.apache.ojb.broker.core.ValueContainer; import org.apache.ojb.broker.metadata.fieldaccess.PersistentField; import org.apache.ojb.broker.util.ClassHelper; +import org.apache.ojb.broker.util.ProxyHelper; import org.apache.ojb.broker.util.SqlHelper; import org.apache.ojb.broker.util.configuration.Configuration; import org.apache.ojb.broker.util.configuration.Configurator; @@ -1402,7 +1403,7 @@ // proxy is optional if (theProxyClass != null) { - if (Proxy.isProxyClass(theProxyClass)) + if (ProxyHelper.isNormalOjbProxy(theProxyClass)) // tomdz: What about VirtualProxy ? { result += " " + tags.getAttribute(CLASS_PROXY, "dynamic") + eol; } 1.36 +4 -17 db-ojb/src/java/org/apache/ojb/broker/util/BrokerHelper.java Index: BrokerHelper.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/BrokerHelper.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- BrokerHelper.java 6 Feb 2004 13:01:53 -0000 1.35 +++ BrokerHelper.java 8 Feb 2004 13:19:47 -0000 1.36 @@ -62,7 +62,6 @@ import org.apache.ojb.broker.PBKey; import org.apache.ojb.broker.PersistenceBroker; import org.apache.ojb.broker.PersistenceBrokerException; -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.PersistenceBrokerSQLException; import org.apache.ojb.broker.query.Query; import org.apache.ojb.broker.query.QueryBySQL; @@ -83,7 +82,6 @@ import org.apache.ojb.broker.util.sequence.SequenceManagerException; import org.apache.ojb.broker.util.logging.LoggerFactory; //#ifdef JDK13 -import java.lang.reflect.Proxy; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -196,22 +194,11 @@ */ public ValueContainer[] getKeyValues(ClassDescriptor cld, Object objectOrProxy, boolean convertToSql) throws PersistenceBrokerException { - /* - arminw - TODO: Check it out. Because the isProxyClass method is costly and most objects - aren't proxies, I add a instanceof check before. Is every Proxy a instance of Proxy? - */ - if ((objectOrProxy instanceof Proxy) && Proxy.isProxyClass(objectOrProxy.getClass())) + IndirectionHandler handler = ProxyHelper.getIndirectionHandler(objectOrProxy); + + if (handler != null) { - IndirectionHandler handler; - handler = (IndirectionHandler) Proxy.getInvocationHandler(objectOrProxy); return getKeyValues(cld, handler.getIdentity(), convertToSql); //BRJ: convert Identity - } - else if (objectOrProxy instanceof VirtualProxy) - { - IndirectionHandler handler; - handler = VirtualProxy.getIndirectionHandler((VirtualProxy) objectOrProxy); - return getKeyValues(cld, handler.getIdentity(), convertToSql); //BRJ: convert Identity } else { 1.22 +58 -48 db-ojb/src/java/org/apache/ojb/broker/util/ProxyHelper.java Index: ProxyHelper.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/ProxyHelper.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- ProxyHelper.java 30 Jan 2004 18:34:30 -0000 1.21 +++ ProxyHelper.java 8 Feb 2004 13:19:47 -0000 1.22 @@ -136,23 +136,17 @@ */ public static final Object getRealObject(Object objectOrProxy) { - IndirectionHandler handler; - /* - arminw - TODO: Check it out. Because the isProxyClass method is costly and most objects - aren't proxies, I add a instanceof check before. Is every Proxy a instance of Proxy? - */ - if ((objectOrProxy instanceof Proxy) && Proxy.isProxyClass(objectOrProxy.getClass())) + if (isNormalOjbProxy(objectOrProxy)) { String msg; try { - handler = (IndirectionHandler) Proxy.getInvocationHandler(objectOrProxy); - return handler.getRealSubject(); + return ((IndirectionHandler)Proxy.getInvocationHandler(objectOrProxy)).getRealSubject(); } catch (ClassCastException e) { + // shouldn't happen but still ... msg = "The InvocationHandler for the provided Proxy was not an instance of " + IndirectionHandler.class.getName(); log.error(msg); throw new PersistenceBrokerException(msg, e); @@ -169,11 +163,11 @@ throw e; } } - else if (objectOrProxy instanceof VirtualProxy) + else if (isVirtualOjbProxy(objectOrProxy)) { try { - return ((VirtualProxy) objectOrProxy).getRealSubject(); + return ((VirtualProxy)objectOrProxy).getRealSubject(); } catch (PersistenceBrokerException e) { @@ -195,30 +189,19 @@ */ public static final Object getRealObjectIfMaterialized(Object objectOrProxy) { - IndirectionHandler handler; - /* - arminw - TODO: Check it out. Because the isProxyClass method is costly and most objects - aren't proxies, I add a instanceof check before. Is every Proxy a instance of Proxy? - */ - if ((objectOrProxy instanceof Proxy) && Proxy.isProxyClass(objectOrProxy.getClass())) + if (isNormalOjbProxy(objectOrProxy)) { String msg; try { - handler = (IndirectionHandler) Proxy.getInvocationHandler(objectOrProxy); - if (handler.alreadyMaterialized()) - { - return handler.getRealSubject(); - } - else - { - return null; - } + IndirectionHandler handler = (IndirectionHandler) Proxy.getInvocationHandler(objectOrProxy); + + return handler.alreadyMaterialized() ? handler.getRealSubject() : null; } catch (ClassCastException e) { + // shouldn't happen but still ... msg = "The InvocationHandler for the provided Proxy was not an instance of " + IndirectionHandler.class.getName(); log.error(msg); throw new PersistenceBrokerException(msg, e); @@ -235,19 +218,13 @@ throw e; } } - else if (objectOrProxy instanceof VirtualProxy) + else if (isVirtualOjbProxy(objectOrProxy)) { try { VirtualProxy proxy = (VirtualProxy)objectOrProxy; - if (proxy.alreadyMaterialized()) - { - return proxy.getRealSubject(); - } - else - { - return null; - } + + return proxy.alreadyMaterialized() ? proxy.getRealSubject() : null; } catch (PersistenceBrokerException e) { @@ -271,12 +248,7 @@ { IndirectionHandler handler; - /* - arminw - TODO: Check it out. Because the isProxyClass method is costly and most objects - aren't proxies, I add a instanceof check before. Is every Proxy a instance of Proxy? - */ - if ((objectOrProxy instanceof Proxy) && Proxy.isProxyClass(objectOrProxy.getClass())) + if (isNormalOjbProxy(objectOrProxy)) { String msg; @@ -292,6 +264,7 @@ } catch (ClassCastException e) { + // shouldn't happen but still ... msg = "The InvocationHandler for the provided Proxy was not an instance of " + IndirectionHandler.class.getName(); log.error(msg); throw new PersistenceBrokerException(msg, e); @@ -303,7 +276,7 @@ throw new PersistenceBrokerException(msg, e); } } - else if (objectOrProxy instanceof VirtualProxy) + else if (isVirtualOjbProxy(objectOrProxy)) { handler = VirtualProxy.getIndirectionHandler((VirtualProxy) objectOrProxy); /* @@ -367,22 +340,52 @@ } /** + * Determines whether the given object is an OJB proxy. + * + * @return true if the object is an OJB proxy + */ + public static boolean isNormalOjbProxy(Object proxyOrObject) + { + /* + arminw + TODO: Check it out. Because the isProxyClass method is costly and most objects + aren't proxies, I add a instanceof check before. Is every Proxy a instance of Proxy? + */ + return (proxyOrObject instanceof Proxy) && + Proxy.isProxyClass(proxyOrObject.getClass()) && + (Proxy.getInvocationHandler(proxyOrObject) instanceof IndirectionHandler); + } + + /** + * Determines whether the given object is an OJB virtual proxy. + * + * @return true if the object is an OJB virtual proxy + */ + public static boolean isVirtualOjbProxy(Object proxyOrObject) + { + return proxyOrObject instanceof VirtualProxy; + } + + /** * Returns true if the given object is a {@link java.lang.reflect.Proxy} * or a {@link VirtualProxy} instance. */ public static boolean isProxy(Object proxyOrObject) { - return ((proxyOrObject instanceof Proxy) && Proxy.isProxyClass(proxyOrObject.getClass())) - || proxyOrObject instanceof VirtualProxy; + return isNormalOjbProxy(proxyOrObject) || isVirtualOjbProxy(proxyOrObject); } public static IndirectionHandler getIndirectionHandler(Object obj) { - if (Proxy.isProxyClass(obj.getClass())) + if (obj == null) + { + return null; + } + else if (isNormalOjbProxy(obj)) { return (IndirectionHandler) Proxy.getInvocationHandler(obj); } - else if (obj instanceof VirtualProxy) + else if (isVirtualOjbProxy(obj)) { return VirtualProxy.getIndirectionHandler((VirtualProxy) obj); } @@ -390,5 +393,12 @@ { return null; } + } + + public static boolean isMaterialized(Object object) + { + IndirectionHandler handler = getIndirectionHandler(object); + + return handler == null ? true : handler.alreadyMaterialized(); } } 1.2 +9 -29 db-ojb/src/java/org/apache/ojb/broker/accesslayer/PlainPrefetcher.java Index: PlainPrefetcher.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/PlainPrefetcher.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PlainPrefetcher.java 25 Oct 2003 23:59:26 -0000 1.1 +++ PlainPrefetcher.java 8 Feb 2004 13:19:47 -0000 1.2 @@ -63,17 +63,9 @@ import org.apache.ojb.broker.Identity; import org.apache.ojb.broker.PersistenceBroker; -import org.apache.ojb.broker.VirtualProxy; import org.apache.ojb.broker.cache.ObjectCache; import org.apache.ojb.broker.query.Query; - -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif +import org.apache.ojb.broker.util.ProxyHelper; /** * Prefetcher for plain list of objects (no relations). @@ -111,15 +103,9 @@ for (Iterator it = proxies.iterator(); it.hasNext(); ) { proxy = it.next(); - if (Proxy.isProxyClass(proxy.getClass())) - { - handler = (IndirectionHandler) Proxy.getInvocationHandler(proxy); - } - else if (proxy instanceof VirtualProxy) - { - handler = VirtualProxy.getIndirectionHandler((VirtualProxy) proxy); - } - else + handler = ProxyHelper.getIndirectionHandler(proxy); + + if (handler == null) { continue; } @@ -160,19 +146,13 @@ for (Iterator it = proxies.iterator(); it.hasNext(); ) { proxy = it.next(); - if (Proxy.isProxyClass(proxy.getClass())) - { - handler = (IndirectionHandler) Proxy.getInvocationHandler(proxy); - } - else if (proxy instanceof VirtualProxy) - { - handler = VirtualProxy.getIndirectionHandler((VirtualProxy) proxy); - } - else + handler = ProxyHelper.getIndirectionHandler(proxy); + + if (handler == null) { continue; } - + id = handler.getIdentity(); if (cache.lookup(id) != null) { 1.19 +3 -10 db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementsForClassImpl.java Index: StatementsForClassImpl.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementsForClassImpl.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- StatementsForClassImpl.java 6 Oct 2003 07:24:02 -0000 1.18 +++ StatementsForClassImpl.java 8 Feb 2004 13:19:47 -0000 1.19 @@ -54,14 +54,6 @@ * . */ -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -77,6 +69,7 @@ import org.apache.ojb.broker.platforms.PlatformException; import org.apache.ojb.broker.platforms.PlatformFactory; import org.apache.ojb.broker.query.Query; +import org.apache.ojb.broker.util.ProxyHelper; import org.apache.ojb.broker.util.logging.Logger; import org.apache.ojb.broker.util.logging.LoggerFactory; @@ -374,7 +367,7 @@ } try { - if (!(result instanceof Proxy)) + if (!ProxyHelper.isNormalOjbProxy(result)) // tomdz: What about VirtualProxy { platform.afterStatementCreate(result); } 1.31 +13 -31 db-ojb/src/java/org/apache/ojb/broker/Identity.java Index: Identity.java =================================================================== RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/Identity.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- Identity.java 7 Jan 2004 11:41:20 -0000 1.30 +++ Identity.java 8 Feb 2004 13:19:47 -0000 1.31 @@ -59,6 +59,7 @@ import org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException; import org.apache.ojb.broker.core.ValueContainer; import org.apache.ojb.broker.util.BrokerHelper; +import org.apache.ojb.broker.util.ProxyHelper; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -69,15 +70,6 @@ import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; -//#ifdef JDK13 -import java.lang.reflect.Proxy; -//#else -/* -import com.develop.java.lang.reflect.Proxy; -*/ -//#endif - - /** * represents the identity of an object. * identity (it's primary keys) must be unique accross extents ! @@ -133,26 +125,16 @@ init(objectToIdentitify, targetBroker, cld); } - private void init(Object objectToIdentitify, PersistenceBroker targetBroker, ClassDescriptor cld) + private void init(Object objectToIdentify, PersistenceBroker targetBroker, ClassDescriptor cld) { - if(objectToIdentitify == null) throw new OJBRuntimeException("Can't create Identity for 'null'-object"); + if(objectToIdentify == null) throw new OJBRuntimeException("Can't create Identity for 'null'-object"); try { - if (objectToIdentitify instanceof VirtualProxy) - { - VirtualProxy p = (VirtualProxy) objectToIdentitify; - Identity sourceOID = p.getIdentity(); - m_objectsTopLevelClass = sourceOID.m_objectsTopLevelClass; - m_objectsRealClass = sourceOID.m_objectsRealClass; - m_pkValues = sourceOID.m_pkValues; - } - else if (objectToIdentitify instanceof Proxy) + IndirectionHandler handler = ProxyHelper.getIndirectionHandler(objectToIdentify); + + if (handler != null) { - // Proxy p = (Proxy) objectToIdentitify; - // InvocationHandler h = Proxy.getInvocationHandler(p); - // IndirectionHandler ih = (IndirectionHandler) h; - IndirectionHandler ih = (IndirectionHandler) Proxy.getInvocationHandler(objectToIdentitify); - Identity sourceOID = ih.getIdentity(); + Identity sourceOID = handler.getIdentity(); m_objectsTopLevelClass = sourceOID.m_objectsTopLevelClass; m_objectsRealClass = sourceOID.m_objectsRealClass; m_pkValues = sourceOID.m_pkValues; @@ -161,17 +143,17 @@ { if (cld == null) { - cld = targetBroker.getClassDescriptor(objectToIdentitify.getClass()); + cld = targetBroker.getClassDescriptor(objectToIdentify.getClass()); } // identities must be unique accross extents ! - m_objectsTopLevelClass = targetBroker.getTopLevelClass(objectToIdentitify.getClass()); - m_objectsRealClass = objectToIdentitify.getClass(); + m_objectsTopLevelClass = targetBroker.getTopLevelClass(objectToIdentify.getClass()); + m_objectsRealClass = objectToIdentify.getClass(); // BRJ: definitely do NOT convertToSql // conversion is done when binding the sql-statement BrokerHelper helper = targetBroker.serviceBrokerHelper(); - m_pkValues = helper.extractValueArray( helper.getKeyValues(cld, objectToIdentitify, false) ); + m_pkValues = helper.extractValueArray( helper.getKeyValues(cld, objectToIdentify, false) ); } checkForPrimaryKeys(); @@ -179,7 +161,7 @@ catch (Exception e) { throw new ClassNotPersistenceCapableException("Can not init Identity for given object " + - objectToIdentitify, e); + objectToIdentify, e); } } --------------------------------------------------------------------- To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org For additional commands, e-mail: ojb-dev-help@db.apache.org