提交 60b2f82c authored 作者: Thomas Mueller's avatar Thomas Mueller

The built-in connection pool was simplified a bit.

上级 7d92266c
...@@ -79,7 +79,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -79,7 +79,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
this.dataSource = dataSource; this.dataSource = dataSource;
try { try {
logWriter = dataSource.getLogWriter(); logWriter = dataSource.getLogWriter();
} catch (Exception e) { } catch (SQLException e) {
// ignore // ignore
} }
} }
...@@ -159,25 +159,15 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -159,25 +159,15 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
/** /**
* Closes all unused pooled connections. * Closes all unused pooled connections.
* Exceptions while closing are written to the log stream (if set).
*/ */
public synchronized void dispose() throws SQLException { public synchronized void dispose() {
if (isDisposed) { if (isDisposed) {
return; return;
} }
isDisposed = true; isDisposed = true;
SQLException e = null;
while (!recycledConnections.isEmpty()) { while (!recycledConnections.isEmpty()) {
PooledConnection pc = recycledConnections.pop(); closeConnection(recycledConnections.pop());
try {
pc.close();
} catch (SQLException e2) {
if (e == null) {
e = e2;
}
}
}
if (e != null) {
throw e;
} }
} }
...@@ -211,6 +201,13 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -211,6 +201,13 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
throw new SQLException("Login timeout", "08001", 8001); throw new SQLException("Login timeout", "08001", 8001);
} }
/**
* INTERNAL
*/
public Connection getConnection(String user, String password) {
throw new UnsupportedOperationException();
}
private Connection getConnectionNow() throws SQLException { private Connection getConnectionNow() throws SQLException {
if (isDisposed) { if (isDisposed) {
throw new IllegalStateException("Connection pool has been disposed."); throw new IllegalStateException("Connection pool has been disposed.");
...@@ -235,15 +232,11 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -235,15 +232,11 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
* @param pc the pooled connection * @param pc the pooled connection
*/ */
synchronized void recycleConnection(PooledConnection pc) { synchronized void recycleConnection(PooledConnection pc) {
if (isDisposed) {
disposeConnection(pc);
return;
}
if (activeConnections <= 0) { if (activeConnections <= 0) {
throw new AssertionError(); throw new AssertionError();
} }
activeConnections--; activeConnections--;
if (activeConnections < maxConnections) { if (!isDisposed && activeConnections < maxConnections) {
recycledConnections.push(pc); recycledConnections.push(pc);
} else { } else {
closeConnection(pc); closeConnection(pc);
...@@ -255,34 +248,9 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -255,34 +248,9 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
try { try {
pc.close(); pc.close();
} catch (SQLException e) { } catch (SQLException e) {
log("Error while closing database connection: " + e.toString()); if (logWriter != null) {
} e.printStackTrace(logWriter);
}
/**
* Close the connection, and don't add it back to the pool.
*
* @param pc the pooled connection
*/
synchronized void disposeConnection(PooledConnection pc) {
if (activeConnections <= 0) {
throw new AssertionError();
}
activeConnections--;
notifyAll();
closeConnection(pc);
}
private void log(String msg) {
String s = getClass().getName() + ": " + msg;
try {
if (logWriter == null) {
System.err.println(s);
} else {
logWriter.println(s);
} }
} catch (Exception e) {
// ignore
} }
} }
...@@ -299,9 +267,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -299,9 +267,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
* INTERNAL * INTERNAL
*/ */
public void connectionErrorOccurred(ConnectionEvent event) { public void connectionErrorOccurred(ConnectionEvent event) {
PooledConnection pc = (PooledConnection) event.getSource(); // not used
pc.removeConnectionEventListener(this);
disposeConnection(pc);
} }
/** /**
...@@ -316,13 +282,6 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -316,13 +282,6 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
return activeConnections; return activeConnections;
} }
/**
* INTERNAL
*/
public Connection getConnection(String username, String password) {
throw new UnsupportedOperationException();
}
/** /**
* INTERNAL * INTERNAL
*/ */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论