001: /*
002:
003: Derby - Class org.apache.derby.client.ClientPooledConnection40
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.client;
023:
024: import java.sql.PreparedStatement;
025: import java.sql.SQLException;
026: import java.util.Enumeration;
027: import java.util.Vector;
028: import javax.sql.ConnectionEventListener;
029: import javax.sql.StatementEventListener;
030: import javax.sql.StatementEvent;
031: import org.apache.derby.client.am.SqlException;
032: import org.apache.derby.client.net.NetXAConnection;
033: import org.apache.derby.jdbc.ClientBaseDataSource;
034: import org.apache.derby.jdbc.ClientDataSource;
035: import org.apache.derby.client.am.SqlException;
036: import org.apache.derby.client.net.NetLogWriter;
037:
038: /**
039: *
040: * The class extends from the ClientPooledConnection class
041: * and contains implementations for the JDBC 4.0 specific
042: * methods in the javax.sql.PooledConnection interface.
043: *
044: */
045:
046: public class ClientPooledConnection40 extends ClientPooledConnection {
047: //using generics to avoid casting problems
048: protected final Vector<StatementEventListener> statementEventListeners = new Vector<StatementEventListener>();
049:
050: public ClientPooledConnection40(ClientBaseDataSource ds,
051: org.apache.derby.client.am.LogWriter logWriter,
052: String user, String password) throws SQLException {
053: super (ds, logWriter, user, password);
054:
055: }
056:
057: public ClientPooledConnection40(ClientBaseDataSource ds,
058: org.apache.derby.client.am.LogWriter logWriter,
059: String user, String password, int rmId) throws SQLException {
060: super (ds, logWriter, user, password, rmId);
061:
062: }
063:
064: public ClientPooledConnection40(ClientBaseDataSource ds,
065: org.apache.derby.client.am.LogWriter logWriter)
066: throws SQLException {
067: super (ds, logWriter);
068: }
069:
070: /**
071: *
072: * Registers a StatementEventListener with this PooledConnection object.
073: * Components that wish to be informed of events associated with the
074: * PreparedStatement object created by this PooledConnection like the close
075: * or error occurred event can register a StatementEventListener with this
076: * PooledConnection object.
077: *
078: * @param listener A component that implements the StatementEventListener
079: * interface and wants to be notified of Statement closed or
080: * or Statement error occurred events
081: */
082: public void addStatementEventListener(
083: StatementEventListener listener) {
084: if (logWriter_ != null) {
085: logWriter_.traceEntry(this , "addStatementEventListener",
086: listener);
087: }
088: statementEventListeners.addElement(listener);
089: }
090:
091: /**
092: *
093: * Removes the specified previously registered listener object from the list
094: * of components that would be informed of events with a PreparedStatement
095: * object.
096: *
097: * @param listener The previously registered event listener that needs to be
098: * removed from the list of components
099: */
100: public void removeStatementEventListener(
101: StatementEventListener listener) {
102: if (logWriter_ != null) {
103: logWriter_.traceEntry(this ,
104: "removeConnectionEventListener", listener);
105: }
106: statementEventListeners.removeElement(listener);
107: }
108:
109: /**
110: *
111: * Raise the statementClosed event for all the listeners when the
112: * corresponding events occurs.
113: *
114: * @param statement The PreparedStatement that was closed
115: *
116: */
117: public void onStatementClose(PreparedStatement statement) {
118: if (!statementEventListeners.isEmpty()) {
119: StatementEvent event = new StatementEvent(this , statement);
120: //synchronized block on statementEventListeners to make it thread
121: //safe
122: synchronized (statementEventListeners) {
123: for (StatementEventListener l : statementEventListeners) {
124: l.statementClosed(event);
125: }
126: }
127: }
128: }
129:
130: /**
131: *
132: * Raise the statementErrorOccurred event for all the listeners when the
133: * corresponding events occurs.
134: *
135: * @param statement The PreparedStatement on which error occurred
136: * @param sqle The SQLException associated with the error that
137: * caused the invalidation of the PreparedStatements
138: *
139: */
140: public void onStatementErrorOccurred(PreparedStatement statement,
141: SQLException sqle) {
142: if (!statementEventListeners.isEmpty()) {
143: StatementEvent event = new StatementEvent(this , statement,
144: sqle);
145: //synchronized block on statementEventListeners to make it thread
146: //safe
147: synchronized (statementEventListeners) {
148: for (StatementEventListener l : statementEventListeners) {
149: l.statementErrorOccurred(event);
150: }
151: }
152: }
153: }
154: }
|