Am Montag, den 06.06.2011, 17:56 +0100 schrieb Mark Thomas:
> On 06/06/2011 11:59, Keiichi Fujino wrote:
> > When jdbc-pool or DBCP is used as DB connection pool and
> > removeAbandoned is "true",
> > dbConnection is closed because dbConnection is not returned to the
> > connection pool.
> > And then, dbConnection is acquired again because dbConnection has been
> > already closed.
> > 
> > Should I return the connection to the connection pool?
> > Or, is the DB connection cached until removeAbandoned works?
> 
> The connection should be returned to the pool. If you could take care of
> that, that would be great. Sorry for missing that when I applied the patch.
It was a conscious decision not to return the connection to the pool for
the following reasons:
 1. the original code didn't do it
 2. we would have to close the prepared statements in case of pooled
connections
 3. the connection is not really abandoned, so one could argue, that you
should run the pool with removeAbandoned set to 'false'

But I would gladly provide a patch where connections are returned to the
pool. 

Felix
> 
> Mark
> 
> > 
> > 
> > 2011/6/4  <ma...@apache.org>:
> >> Author: markt
> >> Date: Fri Jun  3 22:13:09 2011
> >> New Revision: 1131263
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1131263&view=rev
> >> Log:
> >> Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51264
> >> Allow the JDBC persistent session store to use a JNDI datasource to define 
> >> the database in which sessions are persisted.
> >> Patch provided by Felix Schumacher.
> >>
> >> Modified:
> >>    tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
> >>    tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties
> >>    tomcat/trunk/webapps/docs/changelog.xml
> >>    tomcat/trunk/webapps/docs/config/manager.xml
> >>
> >> Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
> >> URL: 
> >> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1131263&r1=1131262&r2=1131263&view=diff
> >> ==============================================================================
> >> --- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original)
> >> +++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Fri Jun  
> >> 3 22:13:09 2011
> >> @@ -33,6 +33,11 @@ import java.sql.SQLException;
> >>  import java.util.ArrayList;
> >>  import java.util.Properties;
> >>
> >> +import javax.naming.Context;
> >> +import javax.naming.InitialContext;
> >> +import javax.naming.NamingException;
> >> +import javax.sql.DataSource;
> >> +
> >>  import org.apache.catalina.Container;
> >>  import org.apache.catalina.LifecycleException;
> >>  import org.apache.catalina.Loader;
> >> @@ -102,6 +107,16 @@ public class JDBCStore extends StoreBase
> >>      */
> >>     protected String driverName = null;
> >>
> >> +    /**
> >> +     * name of the JNDI resource
> >> +     */
> >> +    protected String dataSourceName = null;
> >> +
> >> +    /**
> >> +     * DataSource to use
> >> +     */
> >> +    protected DataSource dataSource = null;
> >> +
> >>     // ------------------------------------------------------------- Table 
> >> & cols
> >>
> >>     /**
> >> @@ -436,6 +451,27 @@ public class JDBCStore extends StoreBase
> >>         return (this.sessionLastAccessedCol);
> >>     }
> >>
> >> +    /**
> >> +     * Set the JNDI name of a DataSource-factory to use for db access
> >> +     *
> >> +     * @param dataSourceName The JNDI name of the DataSource-factory
> >> +     */
> >> +    public void setDataSourceName(String dataSourceName) {
> >> +        if (dataSourceName == null || "".equals(dataSourceName.trim())) {
> >> +            manager.getContainer().getLogger().warn(
> >> +                    sm.getString(getStoreName() + 
> >> ".missingDataSourceName"));
> >> +            return;
> >> +        }
> >> +        this.dataSourceName = dataSourceName;
> >> +    }
> >> +
> >> +    /**
> >> +     * Return the name of the JNDI DataSource-factory
> >> +     */
> >> +    public String getDataSourceName() {
> >> +        return this.dataSourceName;
> >> +    }
> >> +
> >>     // --------------------------------------------------------- Public 
> >> Methods
> >>
> >>     /**
> >> @@ -866,6 +902,24 @@ public class JDBCStore extends StoreBase
> >>         if (dbConnection != null)
> >>             return (dbConnection);
> >>
> >> +        if (dataSourceName != null && dataSource == null) {
> >> +            Context initCtx;
> >> +            try {
> >> +                initCtx = new InitialContext();
> >> +                Context envCtx = (Context) 
> >> initCtx.lookup("java:comp/env");
> >> +                this.dataSource = (DataSource) 
> >> envCtx.lookup(this.dataSourceName);
> >> +            } catch (NamingException e) {
> >> +                manager.getContainer().getLogger().error(
> >> +                        sm.getString(getStoreName() + ".wrongDataSource",
> >> +                                this.dataSourceName), e);
> >> +           }
> >> +        }
> >> +
> >> +        if (dataSource != null) {
> >> +            dbConnection = dataSource.getConnection();
> >> +            return dbConnection;
> >> +        }
> >> +
> >>         // Instantiate our database driver if necessary
> >>         if (driver == null) {
> >>             try {
> >>
> >> Modified: 
> >> tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties
> >> URL: 
> >> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties?rev=1131263&r1=1131262&r2=1131263&view=diff
> >> ==============================================================================
> >> --- tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties 
> >> (original)
> >> +++ tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties 
> >> Fri Jun  3 22:13:09 2011
> >> @@ -27,6 +27,8 @@ JDBCStore.checkConnectionDBClosed=The da
> >>  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.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
> >>  managerBase.sessionTimeout=Invalid session timeout setting {0}
> >>
> >> Modified: tomcat/trunk/webapps/docs/changelog.xml
> >> URL: 
> >> http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1131263&r1=1131262&r2=1131263&view=diff
> >> ==============================================================================
> >> --- tomcat/trunk/webapps/docs/changelog.xml (original)
> >> +++ tomcat/trunk/webapps/docs/changelog.xml Fri Jun  3 22:13:09 2011
> >> @@ -69,6 +69,11 @@
> >>         without error. (markt)
> >>       </fix>
> >>       <fix>
> >> +        <bug>51264</bug>: Allow the JDBC persistent session store to use a
> >> +        JNDI datasource to define the database in which sessions are 
> >> persisted.
> >> +        Patch provided by Felix Schumacher. (markt)
> >> +      </fix>
> >> +      <fix>
> >>         <bug>51274</bug>: Add missing i18n strings in 
> >> PersistentManagerBase.
> >>         Patch provided by Eiji Takahashi. (markt)
> >>       </fix>
> >>
> >> Modified: tomcat/trunk/webapps/docs/config/manager.xml
> >> URL: 
> >> http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/manager.xml?rev=1131263&r1=1131262&r2=1131263&view=diff
> >> ==============================================================================
> >> --- tomcat/trunk/webapps/docs/config/manager.xml (original)
> >> +++ tomcat/trunk/webapps/docs/config/manager.xml Fri Jun  3 22:13:09 2011
> >> @@ -356,6 +356,13 @@
> >>       session table.</p>
> >>     </attribute>
> >>
> >> +    <attribute name="dataSourceName" required="false">
> >> +      <p>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 
> >> <code>connectionURL</code>
> >> +      and <code>driverName</code> will be ignored.</p>
> >> +    </attribute>
> >> +
> >>     <attribute name="driverName" required="true">
> >>       <p>Java class name of the JDBC driver to be used.</p>
> >>     </attribute>
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> >> For additional commands, e-mail: dev-h...@tomcat.apache.org
> >>
> >>
> > 
> > 
> > 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to