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 ar...@apache.org on 2006/05/14 02:37:17 UTC
svn commit: r406174 -
/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java
Author: arminw
Date: Sat May 13 17:37:17 2006
New Revision: 406174
URL: http://svn.apache.org/viewcvs?rev=406174&view=rev
Log:
improvement, use object identity based list to manage listener objects
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java?rev=406174&r1=406173&r2=406174&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerAbstractImpl.java Sat May 13 17:37:17 2006
@@ -23,6 +23,7 @@
import org.apache.ojb.broker.PersistenceBrokerEvent;
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.PersistenceBrokerInternal;
+import org.apache.ojb.broker.util.IdentityArrayList;
import org.apache.ojb.broker.util.configuration.Configuration;
import org.apache.ojb.broker.util.configuration.ConfigurationException;
import org.apache.ojb.broker.util.logging.LoggerFactory;
@@ -36,49 +37,44 @@
* @see org.apache.ojb.broker.PersistenceBrokerAware
* @see org.apache.ojb.broker.PBStateListener
*
- * @author Created by Charles on 12-Sep-2002 08:04:47
- * @author Armin Waibel
* @version $Id$
*/
public abstract class PersistenceBrokerAbstractImpl implements PersistenceBrokerInternal
{
- private static final PBStateListener[] NO_STATE_LISTENERS = new PBStateListener[0];
- private static final PBLifeCycleListener[] NO_LIFECYCLE_LISTENERS = new PBLifeCycleListener[0];
-
/**
* Returns <em>true</em> if PB-transaction check is enabled.
*/
private boolean txCheck;
/**
- * Array containing all permanent {@link org.apache.ojb.broker.PBStateListener}
+ * List containing all permanent {@link org.apache.ojb.broker.PBStateListener}
* instances.
*/
- private PBStateListener[] permanentStateListeners = NO_STATE_LISTENERS;
+ private IdentityArrayList permanentStateListeners = new IdentityArrayList();
- /**
- * Array containing all temporary {@link org.apache.ojb.broker.PBStateListener}
- * instances.
- */
- private PBStateListener[] temporaryStateListeners = NO_STATE_LISTENERS;
-
- /**
- * Array containing all permanent {@link org.apache.ojb.broker.PBLifeCycleListener}
- * instances.
- */
- private PBLifeCycleListener[] permanentLifeCycleListeners = NO_LIFECYCLE_LISTENERS;
-
- /**
- * Array containing all temporary {@link org.apache.ojb.broker.PBLifeCycleListener}
- * instances.
- */
- private PBLifeCycleListener[] temporaryLifeCycleListeners = NO_LIFECYCLE_LISTENERS;
+ /**
+ * List containing all temporary {@link org.apache.ojb.broker.PBStateListener}
+ * instances.
+ */
+ private IdentityArrayList temporaryStateListeners = new IdentityArrayList();
+
+ /**
+ * List containing all permanent {@link org.apache.ojb.broker.PBLifeCycleListener}
+ * instances.
+ */
+ private IdentityArrayList permanentLifeCycleListeners = new IdentityArrayList(100);
+
+ /**
+ * List containing all temporary {@link org.apache.ojb.broker.PBLifeCycleListener}
+ * instances.
+ */
+ private IdentityArrayList temporaryLifeCycleListeners = new IdentityArrayList(100);
/**
* Override if needed.
*
- * @see org.apache.ojb.broker.util.configuration.Configurable#configure(Configuration)
- */
+ * @see org.apache.ojb.broker.util.configuration.Configurable#configure(Configuration)
+ */
public void configure(Configuration pConfig) throws ConfigurationException
{
txCheck = pConfig.getBoolean("TxCheck", false);
@@ -127,50 +123,38 @@
{
if (listener instanceof PBStateListener)
{
- if (permanent)
- {
- if (!contains(permanentStateListeners, listener))
- {
- PBStateListener[] newListeners = new PBStateListener[permanentStateListeners.length + 1];
- System.arraycopy(permanentStateListeners, 0, newListeners, 0, permanentStateListeners.length);
- newListeners[newListeners.length - 1] = (PBStateListener) listener;
- permanentStateListeners = newListeners;
- }
- }
- else
- {
- if (!contains(temporaryStateListeners, listener))
- {
- PBStateListener[] newListeners = new PBStateListener[temporaryStateListeners.length + 1];
- System.arraycopy(temporaryStateListeners, 0, newListeners, 0, temporaryStateListeners.length);
- newListeners[newListeners.length - 1] = (PBStateListener) listener;
- temporaryStateListeners = newListeners;
- }
- }
+ if (permanent)
+ {
+ if (!permanentStateListeners.contains(listener))
+ {
+ permanentStateListeners.add(listener);
+ }
+ }
+ else
+ {
+ if (!temporaryStateListeners.contains(listener))
+ {
+ temporaryStateListeners.add(listener);
+ }
+ }
}
if (listener instanceof PBLifeCycleListener)
{
- if (permanent)
- {
- if (!contains(permanentLifeCycleListeners, listener))
- {
- PBLifeCycleListener[] newListeners = new PBLifeCycleListener[permanentLifeCycleListeners.length + 1];
- System.arraycopy(permanentLifeCycleListeners, 0, newListeners, 0, permanentLifeCycleListeners.length);
- newListeners[newListeners.length - 1] = (PBLifeCycleListener) listener;
- permanentLifeCycleListeners = newListeners;
- }
- }
- else
- {
- if (!contains(temporaryLifeCycleListeners, listener))
- {
- PBLifeCycleListener[] newListeners = new PBLifeCycleListener[temporaryLifeCycleListeners.length + 1];
- System.arraycopy(temporaryLifeCycleListeners, 0, newListeners, 0, temporaryLifeCycleListeners.length);
- newListeners[newListeners.length - 1] = (PBLifeCycleListener) listener;
- temporaryLifeCycleListeners = newListeners;
- }
- }
+ if (permanent)
+ {
+ if (!permanentLifeCycleListeners.contains(listener))
+ {
+ permanentLifeCycleListeners.add(listener);
+ }
+ }
+ else
+ {
+ if (!temporaryLifeCycleListeners.contains(listener))
+ {
+ temporaryLifeCycleListeners.add(listener);
+ }
+ }
}
}
@@ -181,81 +165,17 @@
{
if (listener instanceof PBStateListener)
{
- if (contains(permanentStateListeners, listener))
- {
- PBStateListener[] newListeners = new PBStateListener[permanentStateListeners.length - 1];
- int pos = 0;
-
- for (int i = 0; i < permanentStateListeners.length; i++)
- {
- if (permanentStateListeners[i] != listener)
- {
- newListeners[pos++] = permanentStateListeners[i];
- }
- }
- permanentStateListeners = newListeners;
- }
-
- if (contains(temporaryStateListeners, listener))
- {
- PBStateListener[] newListeners = new PBStateListener[temporaryStateListeners.length - 1];
- int pos = 0;
-
- for (int i = 0; i < temporaryStateListeners.length; i++)
- {
- if (temporaryStateListeners[i] != listener)
- {
- newListeners[pos++] = temporaryStateListeners[i];
- }
- }
- temporaryStateListeners = newListeners;
- }
+ permanentStateListeners.remove(listener);
+ temporaryStateListeners.remove(listener);
}
if (listener instanceof PBLifeCycleListener)
{
- if (contains(permanentLifeCycleListeners, listener))
- {
- PBLifeCycleListener[] newListeners = new PBLifeCycleListener[permanentLifeCycleListeners.length - 1];
- int pos = 0;
-
- for (int i = 0; i < permanentLifeCycleListeners.length; i++)
- {
- if (permanentLifeCycleListeners[i] != listener)
- {
- newListeners[pos++] = permanentLifeCycleListeners[i];
- }
- }
- permanentLifeCycleListeners = newListeners;
- }
-
- if (contains(temporaryLifeCycleListeners, listener))
- {
- PBLifeCycleListener[] newListeners = new PBLifeCycleListener[temporaryLifeCycleListeners.length - 1];
- int pos = 0;
-
- for (int i = 0; i < temporaryLifeCycleListeners.length; i++)
- {
- if (temporaryLifeCycleListeners[i] != listener)
- {
- newListeners[pos++] = temporaryLifeCycleListeners[i];
- }
- }
- temporaryLifeCycleListeners = newListeners;
- }
- }
+ permanentLifeCycleListeners.remove(listener);
+ temporaryLifeCycleListeners.remove(listener);
+ }
}
- protected boolean contains(PBListener[] listeners, PBListener listener)
- {
- for (int i = listeners.length - 1; i >= 0; i--)
- {
- if (listeners[i] == listener) return true;
- }
-
- return false;
- }
-
/**
* @see org.apache.ojb.broker.PersistenceBroker#removeAllListeners(boolean)
*/
@@ -264,12 +184,28 @@
if (permanent)
{
// remove permanent listeners as well
- permanentStateListeners = NO_STATE_LISTENERS;
- permanentLifeCycleListeners = NO_LIFECYCLE_LISTENERS;
+ permanentStateListeners.clear();
+ // this could be huge, thus simply replace instance
+ if(permanentLifeCycleListeners.size() > 10000)
+ {
+ permanentLifeCycleListeners = new IdentityArrayList(100);
+ }
+ else
+ {
+ permanentLifeCycleListeners.clear();
+ }
+ }
+
+ temporaryStateListeners.clear();
+ // this could be huge, thus simply replace instance
+ if(temporaryLifeCycleListeners.size() > 10000)
+ {
+ temporaryLifeCycleListeners = new IdentityArrayList(100);
+ }
+ else
+ {
+ temporaryLifeCycleListeners.clear();
}
-
- temporaryStateListeners = NO_STATE_LISTENERS;
- temporaryLifeCycleListeners = NO_LIFECYCLE_LISTENERS;
}
/**
@@ -282,22 +218,22 @@
public void fireBrokerEvent(PersistenceBrokerEvent event)
{
- if (event instanceof PBLifeCycleEvent)
- {
- fireBrokerEvent((PBLifeCycleEvent) event);
- }
- else if (event instanceof PBStateEvent)
- {
- fireBrokerEvent((PBStateEvent) event);
- }
- else
- {
- LoggerFactory.getDefaultLogger().error(
- PersistenceBrokerAbstractImpl.class.getName() + ": Unkown PersistenceBrokerEvent was fired " + event);
- }
+ if (event instanceof PBLifeCycleEvent)
+ {
+ fireBrokerEvent((PBLifeCycleEvent) event);
+ }
+ else if (event instanceof PBStateEvent)
+ {
+ fireBrokerEvent((PBStateEvent) event);
+ }
+ else
+ {
+ LoggerFactory.getDefaultLogger().error(
+ PersistenceBrokerAbstractImpl.class.getName() + ": Unkown PersistenceBrokerEvent was fired " + event);
+ }
}
- public void fireBrokerEvent(PBLifeCycleEvent event)
+ public void fireBrokerEvent(PBLifeCycleEvent event)
{
if (event.getPersitenceBrokerAware() != null)
{
@@ -305,38 +241,30 @@
performCallBack(event);
}
- // copy array references so they can't change in the middle of iteration
- PBLifeCycleListener[] permanent = permanentLifeCycleListeners;
- PBLifeCycleListener[] temporary = temporaryLifeCycleListeners;
-
// now we notify the listeners
- for (int i = permanent.length - 1; i >= 0; i--)
+ for (int i = permanentLifeCycleListeners.size() - 1; i >= 0; i--)
{
- notifiyObjectLifeCycleListener(permanent[i], event);
+ notifiyObjectLifeCycleListener((PBLifeCycleListener) permanentLifeCycleListeners.get(i), event);
}
- for (int i = temporary.length - 1; i >= 0; i--)
+ for(int i = temporaryLifeCycleListeners.size() - 1; i >= 0; i--)
{
- notifiyObjectLifeCycleListener(temporary[i], event);
+ notifiyObjectLifeCycleListener((PBLifeCycleListener) temporaryLifeCycleListeners.get(i), event);
+
}
}
- public void fireBrokerEvent(PBStateEvent event)
+ public void fireBrokerEvent(PBStateEvent event)
{
- // copy array references so they can't change in the middle of iteration
- PBStateListener[] permanent = permanentStateListeners;
- PBStateListener[] temporary = temporaryStateListeners;
-
- // now we notify the listeners
- for (int i = permanent.length - 1; i >= 0; i--)
- {
- notifiyStateListener(permanent[i], event);
- }
-
- for (int i = temporary.length - 1; i >= 0; i--)
- {
- notifiyStateListener(temporary[i], event);
- }
+ for(int i = permanentStateListeners.size() - 1; i >= 0; i--)
+ {
+ notifiyStateListener((PBStateListener) permanentStateListeners.get(i), event);
+ }
+
+ for(int i = temporaryStateListeners.size() - 1; i >= 0; i--)
+ {
+ notifiyStateListener((PBStateListener) temporaryStateListeners.get(i), event);
+ }
}
private void performCallBack(PBLifeCycleEvent event)
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org