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/12/01 23:15:13 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/core/proxy CollectionProxyDefaultImpl.java IndirectionHandlerDefaultImpl.java ProxyFactory.java
tomdz 2004/12/01 14:15:12
Modified: src/java/org/apache/ojb/broker/core
PersistenceBrokerImpl.java
src/test/org/apache/ojb/broker BrokerExamples.java
PolymorphicExtents.java
src/java/org/apache/ojb/broker/core/proxy
CollectionProxyDefaultImpl.java
IndirectionHandlerDefaultImpl.java
ProxyFactory.java
Log:
Replaced usage of PersistenceBrokerFactory in IndirectionHandlerDefaultImpl by binding it to a PersistenceConfiguration (similar to the collection proxies)
Revision Changes Path
1.101 +2 -2 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.100
retrieving revision 1.101
diff -u -r1.100 -r1.101
--- PersistenceBrokerImpl.java 28 Nov 2004 03:12:51 -0000 1.100
+++ PersistenceBrokerImpl.java 1 Dec 2004 22:15:01 -0000 1.101
@@ -405,7 +405,7 @@
try
{
// the invocation handler manages all delegation stuff
- IndirectionHandler handler = getProxyFactory().createIndirectionHandler(getPBKey(), realSubjectsIdentity);
+ IndirectionHandler handler = getProxyFactory().createIndirectionHandler(getConfiguration(), realSubjectsIdentity);
Constructor constructor = null;
// the proxy simply provides the interface of the real subject
1.21 +1 -1 db-ojb/src/test/org/apache/ojb/broker/BrokerExamples.java
Index: BrokerExamples.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/BrokerExamples.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- BrokerExamples.java 14 Nov 2004 09:41:31 -0000 1.20
+++ BrokerExamples.java 1 Dec 2004 22:15:10 -0000 1.21
@@ -41,7 +41,7 @@
ProductGroup tmpPG = new ProductGroup();
tmpPG.setId(1);
Identity pgID = new Identity(tmpPG, broker);
- ProductGroupProxy pgProxy = new ProductGroupProxy(ojb.getProxyFactory().createIndirectionHandler(broker.getPBKey(), pgID));
+ ProductGroupProxy pgProxy = new ProductGroupProxy(ojb.getProxyFactory().createIndirectionHandler(persistenceConf, pgID));
a.setProductGroup(pgProxy);
return a;
1.18 +1 -1 db-ojb/src/test/org/apache/ojb/broker/PolymorphicExtents.java
Index: PolymorphicExtents.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/PolymorphicExtents.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- PolymorphicExtents.java 14 Nov 2004 09:41:31 -0000 1.17
+++ PolymorphicExtents.java 1 Dec 2004 22:15:10 -0000 1.18
@@ -39,7 +39,7 @@
ProductGroup tmpPG = new ProductGroup();
tmpPG.setId(1);
Identity pgID = new Identity(tmpPG, broker);
- ProductGroupProxy pgProxy = new ProductGroupProxy(ojb.getProxyFactory().createIndirectionHandler(broker.getPBKey(),pgID));
+ ProductGroupProxy pgProxy = new ProductGroupProxy(ojb.getProxyFactory().createIndirectionHandler(persistenceConf, pgID));
a.setProductGroup(pgProxy);
return a;
}
1.17 +37 -43 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- CollectionProxyDefaultImpl.java 29 Nov 2004 22:11:59 -0000 1.16
+++ CollectionProxyDefaultImpl.java 1 Dec 2004 22:15:10 -0000 1.17
@@ -54,23 +54,17 @@
*/
private transient PersistenceConfiguration persistenceConf;
/** The query that defines the values in the collection */
- private Query m_query;
+ private Query query;
/** The actual data (if already loaded) */
- private Collection m_data;
+ private Collection data;
/** The collection type */
- private Class m_collectionClass;
+ private Class collectionClass;
/** The number of objects */
- private int m_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 m_needsClose;
+ private int size = -1;
+ /** Specifies whether we obtained a fresh broker which we have to close after we used it */
+ private boolean needsClose;
/** Objects that listen on this proxy for loading events */
- private transient ArrayList m_listeners;
+ private transient ArrayList listeners;
/**
* Creates a new collection proxy (uses
@@ -122,7 +116,7 @@
*/
public boolean isLoaded()
{
- return m_data != null;
+ return data != null;
}
/**
@@ -155,7 +149,7 @@
*/
protected synchronized void setSize(int size)
{
- m_size = size;
+ this.size = size;
}
/**
@@ -171,11 +165,11 @@
{
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) broker.getCollectionByQuery(getCollectionClass(), getQuery());
}
@@ -200,13 +194,13 @@
*/
protected void beforeLoading()
{
- if (m_listeners != null)
+ if (listeners != null)
{
CollectionProxyListener listener;
- for (int idx = m_listeners.size() - 1; idx >= 0; idx--)
+ for (int idx = listeners.size() - 1; idx >= 0; idx--)
{
- listener = (CollectionProxyListener)m_listeners.get(idx);
+ listener = (CollectionProxyListener)listeners.get(idx);
listener.beforeLoading(this);
}
}
@@ -217,13 +211,13 @@
*/
protected void afterLoading()
{
- if (m_listeners != null)
+ if (listeners != null)
{
CollectionProxyListener listener;
- for (int idx = m_listeners.size() - 1; idx >= 0; idx--)
+ for (int idx = listeners.size() - 1; idx >= 0; idx--)
{
- listener = (CollectionProxyListener)m_listeners.get(idx);
+ listener = (CollectionProxyListener)listeners.get(idx);
listener.afterLoading(this);
}
}
@@ -240,11 +234,11 @@
}
else
{
- if (m_size < 0)
+ if (size < 0)
{
- m_size = loadSize();
+ size = loadSize();
}
- return m_size;
+ return size;
}
}
@@ -367,7 +361,7 @@
setData(coll);
}
- m_size = 0;
+ size = 0;
}
/**
@@ -377,7 +371,7 @@
*/
public Query getQuery()
{
- return m_query;
+ return query;
}
/**
@@ -387,7 +381,7 @@
*/
protected void setQuery(Query query)
{
- m_query = query;
+ this.query = query;
}
/**
@@ -401,9 +395,9 @@
it from the PBF, do nothing if we obtain it from
PBThreadMapping
*/
- if (broker != null && m_needsClose)
+ if (broker != null && needsClose)
{
- m_needsClose = false;
+ needsClose = false;
broker.close();
}
}
@@ -435,7 +429,7 @@
broker = persistenceConf.createPersistenceBroker();
// signal that we use a new internal obtained PB instance to read the
// data and that this instance have to be closed after use
- m_needsClose = true;
+ needsClose = true;
}
return broker;
}
@@ -449,7 +443,7 @@
{
load();
- return m_data;
+ return data;
}
/**
@@ -459,7 +453,7 @@
*/
public void setData(Collection data)
{
- m_data = data;
+ this.data = data;
}
/**
@@ -469,7 +463,7 @@
*/
public Class getCollectionClass()
{
- return m_collectionClass;
+ return collectionClass;
}
/**
@@ -479,7 +473,7 @@
*/
protected void setCollectionClass(Class collClass)
{
- m_collectionClass = collClass;
+ collectionClass = collClass;
}
/**
@@ -542,11 +536,11 @@
*/
public synchronized void addListener(CollectionProxyListener listener)
{
- if (m_listeners == null)
+ if (listeners == null)
{
- m_listeners = new ArrayList();
+ listeners = new ArrayList();
}
- m_listeners.add(listener);
+ listeners.add(listener);
}
/**
@@ -556,9 +550,9 @@
*/
public synchronized void removeListener(CollectionProxyListener listener)
{
- if (m_listeners != null)
+ if (listeners != null)
{
- m_listeners.remove(listener);
+ listeners.remove(listener);
}
}
1.8 +54 -70 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- IndirectionHandlerDefaultImpl.java 7 Nov 2004 09:06:53 -0000 1.7
+++ IndirectionHandlerDefaultImpl.java 1 Dec 2004 22:15:10 -0000 1.8
@@ -15,6 +15,9 @@
* limitations under the License.
*/
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -22,7 +25,7 @@
import org.apache.ojb.broker.PBFactoryException;
import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerException;
-import org.apache.ojb.broker.PersistenceBrokerFactory;
+import org.apache.ojb.broker.PersistenceConfiguration;
import org.apache.ojb.broker.core.PersistenceBrokerThreadMapping;
import org.apache.ojb.broker.util.logging.LoggerFactory;
import org.apache.ojb.broker.PBKey;
@@ -36,35 +39,28 @@
public class IndirectionHandlerDefaultImpl implements IndirectionHandler
{
static final long serialVersionUID = -1993879565033755826L;
-
- /** Reference to the used PersistenceBroker */
- private transient PersistenceBroker _broker = null;
- /** The key for acquiring the above broker */
- private PBKey _brokerKey;
+
+ /** The persistence configuration that this indirection handler is bound to */
+ private transient PersistenceConfiguration persistenceConf;
/** The real subject which this is hidden by the proxy */
- private Object _realSubject = null;
+ private Object realSubject = null;
/** Represents the identity of the real subject. When the real subject is not
* yet materialized, it can be loaded from the underlying db by this identity object */
- private Identity _id = null;
+ private Identity id = null;
/** The materialization listeners */
- private transient ArrayList _listeners;
- /*
- arminw:
- only close broker instance if we get it from PBF, do
- not close if we obtain from PBThreadMapping
- TODO: Find a better solution
- */
- private boolean _needsClose;
+ private transient ArrayList listeners;
+ /** Specifies whether we obtained a fresh broker which we have to close after we used it */
+ 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
+ * @param persistenceConf The persistence configuration
+ * @param id The identity of the subject
*/
- public IndirectionHandlerDefaultImpl(PBKey brokerKey, Identity id)
+ public IndirectionHandlerDefaultImpl(PersistenceConfiguration persistenceConf, Identity id)
{
- setBrokerKey(brokerKey);
+ this.persistenceConf = persistenceConf;
setIdentity(id);
}
@@ -75,7 +71,7 @@
*/
public Identity getIdentity()
{
- return _id;
+ return id;
}
/**
@@ -85,7 +81,7 @@
*/
protected void setIdentity(Identity identity)
{
- _id = identity;
+ id = identity;
}
/**
@@ -95,17 +91,7 @@
*/
public PBKey getBrokerKey()
{
- return _brokerKey;
- }
-
- /**
- * Sets the key of the persistence broker used by this indirection handler.
- *
- * @param brokerKey The broker key
- */
- protected void setBrokerKey(PBKey brokerKey)
- {
- _brokerKey = brokerKey;
+ return persistenceConf == null ? null : persistenceConf.getKey();
}
/**
@@ -115,11 +101,11 @@
*/
public synchronized void addListener(MaterializationListener listener)
{
- if (_listeners == null)
+ if (listeners == null)
{
- _listeners = new ArrayList();
+ listeners = new ArrayList();
}
- _listeners.add(listener);
+ listeners.add(listener);
}
/**
@@ -129,9 +115,9 @@
*/
public synchronized void removeListener(MaterializationListener listener)
{
- if (_listeners != null)
+ if (listeners != null)
{
- _listeners.remove(listener);
+ listeners.remove(listener);
}
}
@@ -141,14 +127,14 @@
*/
protected void beforeMaterialization()
{
- if (_listeners != null)
+ if (listeners != null)
{
MaterializationListener listener;
- for (int idx = _listeners.size() - 1; idx >= 0; idx--)
+ for (int idx = listeners.size() - 1; idx >= 0; idx--)
{
- listener = (MaterializationListener)_listeners.get(idx);
- listener.beforeMaterialization(this, _id);
+ listener = (MaterializationListener)listeners.get(idx);
+ listener.beforeMaterialization(this, id);
}
}
}
@@ -159,17 +145,17 @@
*/
protected void afterMaterialization()
{
- if (_listeners != null)
+ if (listeners != null)
{
MaterializationListener listener;
// listeners may remove themselves during the afterMaterialization callback.
// thus we must iterate through the listeners vector from back to front
// to avoid index problems.
- for (int idx = _listeners.size() - 1; idx >= 0; idx--)
+ for (int idx = listeners.size() - 1; idx >= 0; idx--)
{
- listener = (MaterializationListener)_listeners.get(idx);
- listener.afterMaterialization(this, _realSubject);
+ listener = (MaterializationListener)listeners.get(idx);
+ listener.afterMaterialization(this, realSubject);
}
}
}
@@ -197,29 +183,26 @@
// 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) || broker.isClosed())
{
- if (_broker == null)
- {
- _broker = PersistenceBrokerFactory.createPersistenceBroker(getBrokerKey());
- // TODO: Better way?
- _needsClose = true;
- broker = _broker;
- }
+ broker = persistenceConf.createPersistenceBroker();
+ // TODO: Better way?
+ needsClose = true;
}
return broker;
}
/**
- * Release the PersistenceBroker instance currently used.
+ * Release the PersistenceBroker instance.
+ *
+ * @param broker The broker
*/
- protected void releaseBroker()
+ protected synchronized void releaseBroker(PersistenceBroker broker)
{
- if (_broker != null && _needsClose)
+ if (broker != null && needsClose)
{
- _needsClose = false;
- _broker.close();
- _broker = null;
+ needsClose = false;
+ broker.close();
}
}
@@ -338,13 +321,13 @@
*/
public Object getRealSubject() throws PersistenceBrokerException
{
- if (_realSubject == null)
+ if (realSubject == null)
{
beforeMaterialization();
- _realSubject = materializeSubject();
+ realSubject = materializeSubject();
afterMaterialization();
}
- return _realSubject;
+ return realSubject;
}
/**
@@ -355,7 +338,7 @@
*/
public void setRealSubject(Object object)
{
- _realSubject = object;
+ realSubject = object;
}
/**
@@ -366,13 +349,15 @@
*/
protected synchronized Object materializeSubject() throws PersistenceBrokerException
{
+ PersistenceBroker broker = getBroker();
+
try
{
- Object realSubject = getBroker().getObjectByIdentity(_id);
+ Object realSubject = broker.getObjectByIdentity(id);
if (realSubject == null)
{
- LoggerFactory.getLogger(IndirectionHandler.class).warn("Can not materialize object for Identity " + _id + " - using PBKey " + _brokerKey);
+ LoggerFactory.getLogger(IndirectionHandler.class).warn("Can not materialize object for Identity " + id + " - using PBKey " + getBrokerKey());
}
return realSubject;
}
@@ -382,7 +367,7 @@
}
finally
{
- releaseBroker();
+ releaseBroker(broker);
}
}
@@ -393,7 +378,6 @@
*/
public boolean alreadyMaterialized()
{
- return _realSubject != null;
+ return realSubject != null;
}
-
}
1.4 +7 -8 db-ojb/src/java/org/apache/ojb/broker/core/proxy/ProxyFactory.java
Index: ProxyFactory.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/proxy/ProxyFactory.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProxyFactory.java 29 Nov 2004 22:11:59 -0000 1.3
+++ ProxyFactory.java 1 Dec 2004 22:15:12 -0000 1.4
@@ -24,7 +24,6 @@
import org.apache.ojb.broker.Identity;
import org.apache.ojb.broker.ManageableCollection;
-import org.apache.ojb.broker.PBKey;
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.PersistenceConfiguration;
import org.apache.ojb.broker.metadata.MetadataException;
@@ -86,7 +85,7 @@
throw new MetadataException("Illegal class "+indirectionHandlerClass.getName()+" specified for IndirectionHandlerClass. Must be a concrete subclass of "+IndirectionHandler.class.getName());
}
- Class[] paramType = {PBKey.class, Identity.class};
+ Class[] paramType = {PersistenceConfiguration.class, Identity.class};
try
{
@@ -96,20 +95,20 @@
{
throw new MetadataException("The class "+indirectionHandlerClass.getName()+" specified for IndirectionHandlerClass"+
" is required to have a public constructor with signature ("+
- PBKey.class.getName()+", "+Identity.class.getName()+").");
+ PersistenceConfiguration.class.getName()+", "+Identity.class.getName()+").");
}
}
/**
* Creates a new indirection handler instance.
*
- * @param brokerKey The key of the persistence broker
- * @param id The subject's ids
+ * @param persistenceConf The persistence configuration
+ * @param id The subject's ids
* @return The new instance
*/
- public IndirectionHandler createIndirectionHandler(PBKey brokerKey, Identity id)
+ public IndirectionHandler createIndirectionHandler(PersistenceConfiguration persistenceConf, Identity id)
{
- Object args[] = { brokerKey, id };
+ Object args[] = { persistenceConf, id };
try
{
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org