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 to...@apache.org on 2004/04/12 20:03:43 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/core/proxy CollectionProxyDefaultImpl.java IndirectionHandlerDefaultImpl.java
tomdz 2004/04/12 11:03:43
Modified: src/java/org/apache/ojb/broker/core/proxy
CollectionProxyDefaultImpl.java
IndirectionHandlerDefaultImpl.java
Log:
Enhanced documentation and added setSize method for subclasses of CollectionProxyDefaultImpl
Revision Changes Path
1.3 +161 -91 db-ojb/src/java/org/apache/ojb/broker/core/proxy/CollectionProxyDefaultImpl.java
Index: CollectionProxyDefaultImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/proxy/CollectionProxyDefaultImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CollectionProxyDefaultImpl.java 12 Apr 2004 16:32:40 -0000 1.2
+++ CollectionProxyDefaultImpl.java 12 Apr 2004 18:03:43 -0000 1.3
@@ -31,55 +31,81 @@
import org.apache.ojb.broker.util.collections.RemovalAwareCollection;
/**
- * A placeHolder for a whole collection to support deferred loading of relationships.
- * The complete relationship is loaded on request.
+ * A place holder for a whole collection to support deferred loading of relationships.
+ * The complete collection is loaded on access to the data.
*
* @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
* @version $Id$
*/
public class CollectionProxyDefaultImpl implements Collection, ManageableCollection
{
- private transient PersistenceBroker m_broker;
- private PBKey m_brokerKey;
- private Query m_query;
- private Collection m_data;
- private Class m_collectionClass;
- private int m_size = -1;
+ /** Reference to the used PersistenceBroker */
+ private transient PersistenceBroker _broker;
+ /** The key for acquiring the above broker */
+ private PBKey _brokerKey;
+ /** The query that defines the values in the collection */
+ private Query _query;
+ /** The actual data (if already loaded) */
+ private Collection _data;
+ /** The collection type */
+ private Class _collectionClass;
+ /** The number of objects */
+ private int _size = -1;
/*
arminw
fix a bug, caused by closing PB instances
obtained from PersistenceBrokerThreadMapping.
TODO: Could we find a better solution for this?
*/
- private boolean needsClose;
+ private boolean _needsClose;
+ /** Objects that listen on this proxy for loading events */
+ private transient ArrayList _listeners;
- private transient ArrayList m_listeners;
-
- public CollectionProxyDefaultImpl(PBKey aKey, Query aQuery)
+ /**
+ * Creates a new collection proxy (uses
+ * {@link org.apache.ojb.broker.util.collections.RemovalAwareCollection}
+ * as the collection class).
+ *
+ * @param brokerKey The key of the persistence broker
+ * @param query The defining query
+ */
+ public CollectionProxyDefaultImpl(PBKey brokerKey, Query query)
{
- this(aKey, RemovalAwareCollection.class, aQuery);
+ this(brokerKey, RemovalAwareCollection.class, query);
}
- public CollectionProxyDefaultImpl(PBKey aKey, Class aCollClass, Query aQuery)
+ /**
+ * Creates a new collection proxy that uses the given collection type.
+ *
+ * @param brokerKey The key of the persistence broker
+ * @param collClass The collection type
+ * @param query The defining query
+ */
+ public CollectionProxyDefaultImpl(PBKey brokerKey, Class collClass, Query query)
{
- setBrokerKey(aKey);
- setCollectionClass(aCollClass);
- setQuery(aQuery);
+ setBrokerKey(brokerKey);
+ setCollectionClass(collClass);
+ setQuery(query);
}
+ /**
+ * Determines whether the collection data already has been loaded from the database.
+ *
+ * @return <code>true</code> if the data is already loaded
+ */
public boolean isLoaded()
{
- return m_data != null;
+ return _data != null;
}
/**
- * do a count(*) with the query
+ * Determines the number of elements that the query would return.
*/
protected synchronized void loadSize() throws PersistenceBrokerException
{
try
{
- m_size = getBroker().getCount(getQuery());
+ setSize(getBroker().getCount(getQuery()));
}
catch (Exception ex)
{
@@ -92,24 +118,37 @@
}
/**
- * loads the data from the database, if count(*) returned > 0
+ * Sets the size internally.
+ *
+ * @param size The new size
+ */
+ protected synchronized void setSize(int size)
+ {
+ _size = size;
+ }
+
+ /**
+ * Loads the data from the database.
+ *
+ * @return The loaded data
*/
protected Collection loadData() throws PersistenceBrokerException
{
try
{
Collection result;
- if (m_data != null) // could be set by listener
+
+ if (_data != null) // could be set by listener
{
- result = m_data;
+ result = _data;
}
- else if (m_size != 0)
+ else if (_size != 0)
{
- result = (Collection) getBroker().getCollectionByQuery(getCollectionClass(), getQuery());
+ result = (Collection)getBroker().getCollectionByQuery(getCollectionClass(), getQuery());
}
else
{
- result = (Collection) getCollectionClass().newInstance();
+ result = (Collection)getCollectionClass().newInstance();
}
return result;
}
@@ -123,26 +162,36 @@
}
}
+ /**
+ * Notifies all listeners that the data is about to be loaded.
+ */
protected void beforeLoading()
{
- if (m_listeners != null)
+ if (_listeners != null)
{
- for (int i = m_listeners.size() - 1; i >= 0; i--)
+ CollectionProxyListener listener;
+
+ for (int idx = _listeners.size() - 1; idx >= 0; idx--)
{
- CollectionProxyListener l = (CollectionProxyListener) m_listeners.get(i);
- l.beforeLoading(this);
+ listener = (CollectionProxyListener)_listeners.get(idx);
+ listener.beforeLoading(this);
}
}
}
+ /**
+ * Notifies all listeners that the data has been loaded.
+ */
protected void afterLoading()
{
- if (m_listeners != null)
+ if (_listeners != null)
{
- for (int i = m_listeners.size() - 1; i >= 0; i--)
+ CollectionProxyListener listener;
+
+ for (int idx = _listeners.size() - 1; idx >= 0; idx--)
{
- CollectionProxyListener l = (CollectionProxyListener) m_listeners.get(i);
- l.afterLoading(this);
+ listener = (CollectionProxyListener)_listeners.get(idx);
+ listener.afterLoading(this);
}
}
}
@@ -158,11 +207,11 @@
}
else
{
- if (m_size < 0)
+ if (_size < 0)
{
loadSize();
}
- return m_size;
+ return _size;
}
}
@@ -255,7 +304,7 @@
}
/**
- * Clear the proxy. A cleared proxy is defined as loaded
+ * Clears the proxy. A cleared proxy is defined as loaded
*
* @see Collection#clear()
*/
@@ -273,31 +322,32 @@
coll = new ArrayList();
}
setData(coll);
- m_size = 0;
+ _size = 0;
}
/**
- * Gets the query.
- * @return Returns a Query
+ * Returns the defining query.
+ *
+ * @return The query
*/
public Query getQuery()
{
- return m_query;
+ return _query;
}
/**
- * Sets the query.
- * @param query The query to set
+ * Sets the defining query.
+ *
+ * @param query The query
*/
protected void setQuery(Query query)
{
- this.m_query = query;
+ _query = query;
}
-
/**
- * release the PersistenceBroker
+ * Release the broker instance.
*/
protected synchronized void releaseBroker()
{
@@ -307,22 +357,23 @@
it from the PBF, do nothing if we obtain it from
PBThreadMapping
*/
- if (m_broker != null && needsClose)
+ if (_broker != null && _needsClose)
{
- needsClose = false;
- m_broker.close();
- m_broker = null;
+ _needsClose = false;
+ _broker.close();
+ _broker = null;
}
}
/**
- * Gets the broker.
- * If no PBKey is available a runtime exception will be thrown.
- * @return a PersistenceBroker
+ * Acquires a broker instance. If no PBKey is available a runtime exception will be thrown.
+ *
+ * @return A broker instance
*/
protected synchronized PersistenceBroker getBroker() throws PBFactoryException
{
PersistenceBroker broker;
+
if (getBrokerKey() == null)
{
/*
@@ -331,27 +382,28 @@
know which PB (connection) should be used.
*/
throw new OJBRuntimeException("Can't find associated PBKey. Need PBKey to obtain a valid" +
- "PersistenceBroker instance from intern resources.");
+ "PersistenceBroker instance from intern resources.");
}
// first try to use the current threaded broker to avoid blocking
broker = PersistenceBrokerThreadMapping.currentPersistenceBroker(getBrokerKey());
// current broker not found, create a intern new one
- if(broker == null)
+ if (broker == null)
{
- if (m_broker == null)
+ if (_broker == null)
{
- m_broker = PersistenceBrokerFactory.createPersistenceBroker(getBrokerKey());
+ _broker = PersistenceBrokerFactory.createPersistenceBroker(getBrokerKey());
// TODO: Better way?
- needsClose = true;
- broker = m_broker;
+ _needsClose = true;
+ broker = _broker;
}
}
return broker;
}
/**
- * Gets the data, load it if not already done.
- * @return Returns a Collection
+ * Returns the collection data, load it if not already done so.
+ *
+ * @return The data
*/
public synchronized Collection getData()
{
@@ -362,38 +414,41 @@
afterLoading();
}
- return m_data;
+ return _data;
}
/**
- * Sets the data.
- * @param data The data to set
+ * Sets the collection data.
+ *
+ * @param data The data
*/
public void setData(Collection data)
{
- this.m_data = data;
+ _data = data;
}
/**
- * Gets the collectionClass.
- * @return Returns a Class
+ * Returns the collection type.
+ *
+ * @return The collection type
*/
public Class getCollectionClass()
{
- return m_collectionClass;
+ return _collectionClass;
}
/**
- * Sets the collectionClass.
- * @param collectionClass The collectionClass to set
+ * Sets the collection type.
+ *
+ * @param collClass The collection type
*/
- protected void setCollectionClass(Class collectionClass)
+ protected void setCollectionClass(Class collClass)
{
- this.m_collectionClass = collectionClass;
+ _collectionClass = collClass;
}
/**
- * @see ManageableCollection#ojbAdd(Object)
+ * @see org.apache.ojb.broker.ManageableCollection#ojbAdd(Object)
*/
public void ojbAdd(Object anObject)
{
@@ -401,15 +456,15 @@
}
/**
- * @see ManageableCollection#ojbAddAll(ManageableCollection)
+ * @see org.apache.ojb.broker.ManageableCollection#ojbAddAll(ManageableCollection)
*/
public void ojbAddAll(ManageableCollection otherCollection)
{
- addAll((CollectionProxyDefaultImpl) otherCollection);
+ addAll((CollectionProxyDefaultImpl)otherCollection);
}
/**
- * @see ManageableCollection#ojbIterator()
+ * @see org.apache.ojb.broker.ManageableCollection#ojbIterator()
*/
public Iterator ojbIterator()
{
@@ -424,42 +479,57 @@
// If the real subject is a ManageableCollection
// the afterStore() callback must be invoked !
Collection c = getData();
+
if (c instanceof ManageableCollection)
- ((ManageableCollection) c).afterStore(broker);
+ {
+ ((ManageableCollection)c).afterStore(broker);
+ }
}
/**
- * Returns the brokerKey.
- * @return PBKey
+ * Returns the key of the persistence broker used by this collection.
+ *
+ * @return The broker key
*/
public PBKey getBrokerKey()
{
- return m_brokerKey;
+ return _brokerKey;
}
/**
- * Sets the brokerKey.
- * @param brokerKey The brokerKey to set
+ * Sets the key of the persistence broker used by this collection.
+ *
+ * @param brokerKey The key of the broker
*/
protected void setBrokerKey(PBKey brokerKey)
{
- this.m_brokerKey = brokerKey;
+ _brokerKey = brokerKey;
}
- public synchronized void addListener(CollectionProxyListener l)
+ /**
+ * Adds a listener to this collection.
+ *
+ * @param listener The listener to add
+ */
+ public synchronized void addListener(CollectionProxyListener listener)
{
- if (m_listeners == null)
+ if (_listeners == null)
{
- m_listeners = new ArrayList();
+ _listeners = new ArrayList();
}
- m_listeners.add(l);
+ _listeners.add(listener);
}
- public synchronized void removeListener(CollectionProxyListener l)
+ /**
+ * Removes the given listener from this collecton.
+ *
+ * @param listener The listener to remove
+ */
+ public synchronized void removeListener(CollectionProxyListener listener)
{
- if (m_listeners != null)
+ if (_listeners != null)
{
- m_listeners.remove(l);
+ _listeners.remove(listener);
}
}
1.2 +7 -1 db-ojb/src/java/org/apache/ojb/broker/core/proxy/IndirectionHandlerDefaultImpl.java
Index: IndirectionHandlerDefaultImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/proxy/IndirectionHandlerDefaultImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- IndirectionHandlerDefaultImpl.java 9 Apr 2004 13:22:29 -0000 1.1
+++ IndirectionHandlerDefaultImpl.java 12 Apr 2004 18:03:43 -0000 1.2
@@ -56,6 +56,12 @@
*/
private boolean _needsClose;
+ /**
+ * Creates a new indirection handler for the indicated object.
+ *
+ * @param brokerKey The key of the persistence broker
+ * @param id The identity of the subject
+ */
public IndirectionHandlerDefaultImpl(PBKey brokerKey, Identity id)
{
setBrokerKey(brokerKey);
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org