diff --git a/java/org/apache/catalina/session/JDBCStore.java b/java/org/apache/catalina/session/JDBCStore.java
index 7580c2b..a9d0cc4 100644
--- a/java/org/apache/catalina/session/JDBCStore.java
+++ b/java/org/apache/catalina/session/JDBCStore.java
@@ -874,11 +874,13 @@ public class JDBCStore extends StoreBase {
* @return Connection
if the connection succeeded
*/
protected Connection getConnection() {
+ Connection _conn = null;
try {
- if (dbConnection == null || dbConnection.isClosed()) {
+ _conn = open();
+ if (_conn == null || _conn.isClosed()) {
manager.getContainer().getLogger().info(sm.getString(getStoreName() + ".checkConnectionDBClosed"));
- open();
- if (dbConnection == null || dbConnection.isClosed()) {
+ _conn = open();
+ if (_conn == null || _conn.isClosed()) {
manager.getContainer().getLogger().info(sm.getString(getStoreName() + ".checkConnectionDBReOpenFail"));
}
}
@@ -887,7 +889,7 @@ public class JDBCStore extends StoreBase {
ex.toString()));
}
- return dbConnection;
+ return _conn;
}
/**
@@ -916,8 +918,8 @@ public class JDBCStore extends StoreBase {
}
if (dataSource != null) {
- dbConnection = dataSource.getConnection();
- return dbConnection;
+ Connection _conn = dataSource.getConnection();
+ return _conn;
}
// Instantiate our database driver if necessary
@@ -1014,13 +1016,15 @@ public class JDBCStore extends StoreBase {
}
/**
- * Release the connection, not needed here since the
- * connection is not associated with a connection pool.
+ * Release the connection, if it
+ * is associated with a connection pool.
*
* @param conn The connection to be released
*/
protected void release(Connection conn) {
- // NOOP
+ if (dataSource != null) {
+ close(conn);
+ }
}
/**
@@ -1034,7 +1038,13 @@ public class JDBCStore extends StoreBase {
protected synchronized void startInternal() throws LifecycleException {
// Open connection to the database
- this.dbConnection = getConnection();
+ Connection _conn = getConnection();
+ if (dataSource != null) {
+ // if connection was created by a dataSource, we will release it
+ close(_conn);
+ } else {
+ this.dbConnection = _conn;
+ }
super.startInternal();
}
diff --git a/java/org/apache/catalina/session/LocalStrings.properties b/java/org/apache/catalina/session/LocalStrings.properties
index b16f942..f7f6a6d 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -27,7 +27,7 @@ JDBCStore.checkConnectionDBClosed=The database connection is null or was found t
JDBCStore.checkConnectionDBReOpenFail=The re-open on the database failed. The database could be down.
JDBCStore.checkConnectionSQLException=A SQL exception occurred {0}
JDBCStore.checkConnectionClassNotFoundException=JDBC driver class not found {0}
-JDBCStore.wrongDataSource=Can't open JNDI DataSource [{0}]
+JDBCStore.wrongDataSource=Can not open JNDI DataSource [{0}]
JDBCStore.missingDataSourceName=No valid JNDI name was given.
managerBase.createRandom=Created random number generator for session ID generation in {0}ms.
managerBase.createSession.ise=createSession: Too many active sessions
diff --git a/webapps/docs/config/manager.xml b/webapps/docs/config/manager.xml
index f5b6bdc..2b9835e 100644
--- a/webapps/docs/config/manager.xml
+++ b/webapps/docs/config/manager.xml
@@ -360,7 +360,10 @@
Name of the JNDI resource for a JDBC DataSource-factory. If this option
is given and a valid JDBC resource can be found, it will be used and any
direct configuration of a JDBC connection via connectionURL
- and driverName
will be ignored.
driverName
will be ignored. Since this code uses prepared
+ statements, you might want to configure pooled prepared statements as
+ shown in the JNDI resources
+ HOW-TO.