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 [EMAIL PROTECTED]
org.apache.ojb.broker.PBStateListener}
+ * List containing all permanent [EMAIL PROTECTED]
org.apache.ojb.broker.PBStateListener}
* instances.
*/
- private PBStateListener[] permanentStateListeners = NO_STATE_LISTENERS;
+ private IdentityArrayList permanentStateListeners = new
IdentityArrayList();
- /**
- * Array containing all temporary [EMAIL PROTECTED]
org.apache.ojb.broker.PBStateListener}
- * instances.
- */
- private PBStateListener[] temporaryStateListeners = NO_STATE_LISTENERS;
-
- /**
- * Array containing all permanent [EMAIL PROTECTED]
org.apache.ojb.broker.PBLifeCycleListener}
- * instances.
- */
- private PBLifeCycleListener[] permanentLifeCycleListeners =
NO_LIFECYCLE_LISTENERS;
-
- /**
- * Array containing all temporary [EMAIL PROTECTED]
org.apache.ojb.broker.PBLifeCycleListener}
- * instances.
- */
- private PBLifeCycleListener[] temporaryLifeCycleListeners =
NO_LIFECYCLE_LISTENERS;
+ /**
+ * List containing all temporary [EMAIL PROTECTED]
org.apache.ojb.broker.PBStateListener}
+ * instances.
+ */
+ private IdentityArrayList temporaryStateListeners = new
IdentityArrayList();
+
+ /**
+ * List containing all permanent [EMAIL PROTECTED]
org.apache.ojb.broker.PBLifeCycleListener}
+ * instances.
+ */
+ private IdentityArrayList permanentLifeCycleListeners = new
IdentityArrayList(100);
+
+ /**
+ * List containing all temporary [EMAIL PROTECTED]
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]