提交 27d7caa1 authored 作者: Thomas Mueller's avatar Thomas Mueller

The built-in connection pool is a bit faster.

上级 648064bb
...@@ -23,13 +23,13 @@ package org.h2.jdbcx; ...@@ -23,13 +23,13 @@ package org.h2.jdbcx;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Stack; import java.util.ArrayList;
import javax.sql.ConnectionEvent; import javax.sql.ConnectionEvent;
import javax.sql.ConnectionEventListener; import javax.sql.ConnectionEventListener;
import javax.sql.ConnectionPoolDataSource; import javax.sql.ConnectionPoolDataSource;
import javax.sql.DataSource; import javax.sql.DataSource;
import javax.sql.PooledConnection; import javax.sql.PooledConnection;
import org.h2.util.New;
//## Java 1.6 begin ## //## Java 1.6 begin ##
import org.h2.message.DbException; import org.h2.message.DbException;
...@@ -72,7 +72,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -72,7 +72,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
private static final int DEFAULT_MAX_CONNECTIONS = 10; private static final int DEFAULT_MAX_CONNECTIONS = 10;
private final ConnectionPoolDataSource dataSource; private final ConnectionPoolDataSource dataSource;
private final Stack<PooledConnection> recycledConnections = new Stack<PooledConnection>(); private final ArrayList<PooledConnection> recycledConnections = New.arrayList();
private PrintWriter logWriter; private PrintWriter logWriter;
private int maxConnections = DEFAULT_MAX_CONNECTIONS; private int maxConnections = DEFAULT_MAX_CONNECTIONS;
private int timeout = DEFAULT_TIMEOUT; private int timeout = DEFAULT_TIMEOUT;
...@@ -170,8 +170,9 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -170,8 +170,9 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
return; return;
} }
isDisposed = true; isDisposed = true;
while (!recycledConnections.isEmpty()) { ArrayList<PooledConnection> list = recycledConnections;
closeConnection(recycledConnections.pop()); for (int i = 0, size = list.size(); i < size; i++) {
closeConnection(list.get(i));
} }
} }
...@@ -217,8 +218,8 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -217,8 +218,8 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
throw new IllegalStateException("Connection pool has been disposed."); throw new IllegalStateException("Connection pool has been disposed.");
} }
PooledConnection pc; PooledConnection pc;
if (!recycledConnections.empty()) { if (!recycledConnections.isEmpty()) {
pc = recycledConnections.pop(); pc = recycledConnections.remove(recycledConnections.size() - 1);
} else { } else {
pc = dataSource.getPooledConnection(); pc = dataSource.getPooledConnection();
} }
...@@ -241,7 +242,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener { ...@@ -241,7 +242,7 @@ public class JdbcConnectionPool implements DataSource, ConnectionEventListener {
} }
activeConnections--; activeConnections--;
if (!isDisposed && activeConnections < maxConnections) { if (!isDisposed && activeConnections < maxConnections) {
recycledConnections.push(pc); recycledConnections.add(pc);
} else { } else {
closeConnection(pc); closeConnection(pc);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论