On 06/06/2011 21:40, Felix Schumacher wrote:
> 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

The expected usage of pooled connections is that they are obtained from
the pool, used and then immediately returned. Removing a connection from
the pool and just keeping it defeats the point of having a pool.

>  2. we would have to close the prepared statements in case of pooled
> connections

Yes, although DBCP can pool those too (if appropriately configured). You
may wish to add something on that topic to the docs, if only a link the
the relevant DBCP config docs.

>  3. the connection is not really abandoned, so one could argue, that you
> should run the pool with removeAbandoned set to 'false'

Yep, but as per 1, it isn't really following the expected conventions
when using a connection pool.

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

That would be great. Thanks.

Mark

> 
> 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
> 


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

Reply via email to