01: /*
02: * XAPool: Open Source XA JDBC Pool
03: * Copyright (C) 2003 Objectweb.org
04: * Initial Developer: Lutris Technologies Inc.
05: * Contact: xapool-public@lists.debian-sf.objectweb.org
06: *
07: * This library is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU Lesser General Public
09: * License as published by the Free Software Foundation; either
10: * version 2.1 of the License, or any later version.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this library; if not, write to the Free Software
19: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20: * USA
21: */
22: package org.enhydra.jdbc.standard;
23:
24: import java.sql.PreparedStatement;
25: import java.sql.SQLException;
26: import org.enhydra.jdbc.core.CorePreparedStatement;
27:
28: /**
29: * A very simple implementation of PreparedStatement. When created
30: * it is supplied with another PreparedStatement to which nearly all
31: * of this class' methods delegate their work.
32: *
33: * Close() is overridden to prevent the statement from actually
34: * being closed.
35: */
36: public class StandardPreparedStatement extends CorePreparedStatement {
37:
38: public Object key;
39: // key that StandardConnectionHandle uses to return to cache
40: private StandardConnectionHandle con;
41: // the StandardConnectionHandle that created this object
42: public boolean closed; // true when the PreparedStatement has been closed
43:
44: /**
45: * Constructor.
46: */
47: StandardPreparedStatement(StandardConnectionHandle con,
48: PreparedStatement preparedStatement, Object key) {
49: this .con = con;
50: this .key = key;
51: ps = preparedStatement;
52: }
53:
54: StandardPreparedStatement() {
55: super ();
56: }
57:
58: /**
59: * Close this statement.
60: */
61: public void close() throws SQLException {
62: // Note no check for already closed - some servers make mistakes
63: closed = true;
64: if (con.preparedStmtCacheSize == 0) {
65: // no cache, so we just close
66: if (ps != null) {
67: ps.close();
68: }
69: } else {
70: con.returnToCache(key);
71: // return the underlying statement to the cache
72: }
73: }
74:
75: /**
76: * Pre-invokation of the delegation, in case of the Statement is
77: * closed, we throw an exception
78: */
79: public void preInvoke() throws SQLException {
80: if (closed)
81: throw new SQLException("Prepare Statement is closed");
82: }
83:
84: /**
85: * Exception management : catch or throw the exception
86: */
87: public void catchInvoke(SQLException sqlException)
88: throws SQLException {
89: //ConnectionEvent event = new ConnectionEvent(con.pooledCon);
90: //con.pooledCon.connectionErrorOccurred(event);
91: throw (sqlException);
92: }
93:
94: }
|