You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by kr...@apache.org on 2008/02/05 14:15:57 UTC
svn commit: r618640 -
/db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java
Author: kristwaa
Date: Tue Feb 5 05:15:56 2008
New Revision: 618640
URL: http://svn.apache.org/viewvc?rev=618640&view=rev
Log:
DERBY-3308: Broken synchronization for event handling in ClientPooledConnection40. Merged revision 614536 from trunk (10.4).
Modified:
db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java
Modified: db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java?rev=618640&r1=618639&r2=618640&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java (original)
+++ db/derby/code/branches/10.3/java/client/org/apache/derby/client/ClientPooledConnection40.java Tue Feb 5 05:15:56 2008
@@ -23,7 +23,7 @@
import java.sql.PreparedStatement;
import java.sql.SQLException;
-import java.util.Vector;
+import java.util.ArrayList;
import javax.sql.StatementEventListener;
import javax.sql.StatementEvent;
import org.apache.derby.jdbc.ClientBaseDataSource;
@@ -37,9 +37,11 @@
*/
public class ClientPooledConnection40 extends ClientPooledConnection {
- //using generics to avoid casting problems
- protected final Vector<StatementEventListener> statementEventListeners =
- new Vector<StatementEventListener>();
+
+ /** List of statement event listeners. */
+ //@GuardedBy("this")
+ private final ArrayList<StatementEventListener> statementEventListeners =
+ new ArrayList<StatementEventListener>();
public ClientPooledConnection40(ClientBaseDataSource ds,
org.apache.derby.client.am.LogWriter logWriter,
@@ -76,11 +78,11 @@
* interface and wants to be notified of Statement closed or
* or Statement error occurred events
*/
- public void addStatementEventListener(StatementEventListener listener){
+ public synchronized void addStatementEventListener(StatementEventListener listener){
if (logWriter_ != null) {
logWriter_.traceEntry(this, "addStatementEventListener", listener);
}
- statementEventListeners.addElement(listener);
+ statementEventListeners.add(listener);
}
/**
@@ -92,11 +94,11 @@
* @param listener The previously registered event listener that needs to be
* removed from the list of components
*/
- public void removeStatementEventListener(StatementEventListener listener){
+ public synchronized void removeStatementEventListener(StatementEventListener listener){
if (logWriter_ != null) {
logWriter_.traceEntry(this, "removeConnectionEventListener", listener);
}
- statementEventListeners.removeElement(listener);
+ statementEventListeners.remove(listener);
}
/**
@@ -107,15 +109,11 @@
* @param statement The PreparedStatement that was closed
*
*/
- public void onStatementClose(PreparedStatement statement) {
+ public synchronized void onStatementClose(PreparedStatement statement) {
if (!statementEventListeners.isEmpty()) {
StatementEvent event = new StatementEvent(this,statement);
- //synchronized block on statementEventListeners to make it thread
- //safe
- synchronized(statementEventListeners) {
- for (StatementEventListener l : statementEventListeners) {
- l.statementClosed(event);
- }
+ for (StatementEventListener l : statementEventListeners) {
+ l.statementClosed(event);
}
}
}
@@ -130,16 +128,13 @@
* caused the invalidation of the PreparedStatements
*
*/
- public void onStatementErrorOccurred(PreparedStatement statement,
- SQLException sqle) {
+ public synchronized void onStatementErrorOccurred(
+ PreparedStatement statement,
+ SQLException sqle) {
if (!statementEventListeners.isEmpty()) {
StatementEvent event = new StatementEvent(this,statement,sqle);
- //synchronized block on statementEventListeners to make it thread
- //safe
- synchronized(statementEventListeners) {
- for (StatementEventListener l : statementEventListeners) {
- l.statementErrorOccurred(event);
- }
+ for (StatementEventListener l : statementEventListeners) {
+ l.statementErrorOccurred(event);
}
}
}