You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Robert Anderson <ra...@gmail.com> on 2015/12/17 14:25:58 UTC

[Tomcat-JDBC] RemovedAbandoned doesn't trigger JdbcInterceptors

Hi,

When a connection is closed by "ResetAbandoned" the invoke() method from
JdbcInterceptor is not called. Is it the expected behaviour?

-->server.xml

       <Resource name="jdbc/cacheapp" auth="Container"
type="javax.sql.DataSource" removeAbandoned="true"
removeAbandonedTimeout="30"
                                   maxActive="5" maxIdle="1"
initialSize="0" minIdle="0" maxWait="5000"
                   validationQuery="select 1"
                   maxAge="1"
                   testOnBorrow="true"
   factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
   alternateUsernameAllowed="true"
 jdbcInterceptors="pool.ExampleInterceptor"
   username="tomcat" password="example"
driverClassName="com.intersys.jdbc.CacheDriver"
   url="jdbc:Cache://serverip:1972/NS"/>

--> pool.ExampleInterceptor

public class ExampleInterceptor extends JdbcInterceptor {


    public Object invoke(Object proxy, Method method, Object[] args) throws
Throwable {
        if (method.getName() == CLOSE_VAL) {
            System.out.println("Interceptor called."); //Doesn't happen but
connection is really closed (checked via JMX)
        }
        return super.invoke(proxy, method, args);
    }

--> JSP to simulate long running query

<%@ page session="false" import="java.sql.*,javax.naming.*, javax.sql.*,
java.util.*" contentType="text/html" %><%
Connection conn = null;
try {
        Context ctx = new InitialContext();
        DataSource ds =
(DataSource)ctx.lookup("java:comp/env/jdbc/cacheapp");
        conn = ds.getConnection();
Thread.sleep(60000);
} catch (Exception e) {
        out.print(e.getMessage());
} finally {
        if (conn != null) {
                try {
                        //conn.close(); //Don't close to force
RemovedAbandonedTimeout
                } catch (Exception e) {}
        }
}
%>


Server version: Apache Tomcat/7.0.65
Server built:   Oct 9 2015 08:36:58 UTC
Server number:  7.0.65.0
OS Name:        Linux
OS Version:     2.6.18-194.32.1.el5
Architecture:   amd64
JVM Version:    1.7.0_80-b15
JVM Vendor:     Oracle Corporation

Thanks in advance.

P.S: Sorry, the subject was wrong.

Re: [Tomcat-JDBC] RemovedAbandoned doesn't trigger JdbcInterceptors

Posted by Robert Anderson <ra...@gmail.com>.
Thanks, Keiichi.

2015-12-18 3:21 GMT-03:00 Keiichi Fujino <kf...@apache.org>:

> 2015-12-17 22:25 GMT+09:00 Robert Anderson <ra...@gmail.com>:
>
> > Hi,
> >
> > When a connection is closed by "ResetAbandoned" the invoke() method from
> > JdbcInterceptor is not called. Is it the expected behaviour?
> >
> >
> Yes.
>
> The JdbcInterceptor.invoke() method is not called when removeAbandoned.
> The Connection(PooledConnection) is directly released without going through
> the JdbcInterceptors.
> (see PooledConnection.release())
>
> If you want to capture the close of the connection,
> you can use JdbcInterceptor.disconnected or reset (null, null).
>
>
>
>
> > -->server.xml
> >
> >        <Resource name="jdbc/cacheapp" auth="Container"
> > type="javax.sql.DataSource" removeAbandoned="true"
> > removeAbandonedTimeout="30"
> >                                    maxActive="5" maxIdle="1"
> > initialSize="0" minIdle="0" maxWait="5000"
> >                    validationQuery="select 1"
> >                    maxAge="1"
> >                    testOnBorrow="true"
> >    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
> >    alternateUsernameAllowed="true"
> >  jdbcInterceptors="pool.ExampleInterceptor"
> >    username="tomcat" password="example"
> > driverClassName="com.intersys.jdbc.CacheDriver"
> >    url="jdbc:Cache://serverip:1972/NS"/>
> >
> > --> pool.ExampleInterceptor
> >
> > public class ExampleInterceptor extends JdbcInterceptor {
> >
> >
> >     public Object invoke(Object proxy, Method method, Object[] args)
> throws
> > Throwable {
> >         if (method.getName() == CLOSE_VAL) {
> >             System.out.println("Interceptor called."); //Doesn't happen
> but
> > connection is really closed (checked via JMX)
> >         }
> >         return super.invoke(proxy, method, args);
> >     }
> >
> > --> JSP to simulate long running query
> >
> > <%@ page session="false" import="java.sql.*,javax.naming.*, javax.sql.*,
> > java.util.*" contentType="text/html" %><%
> > Connection conn = null;
> > try {
> >         Context ctx = new InitialContext();
> >         DataSource ds =
> > (DataSource)ctx.lookup("java:comp/env/jdbc/cacheapp");
> >         conn = ds.getConnection();
> > Thread.sleep(60000);
> > } catch (Exception e) {
> >         out.print(e.getMessage());
> > } finally {
> >         if (conn != null) {
> >                 try {
> >                         //conn.close(); //Don't close to force
> > RemovedAbandonedTimeout
> >                 } catch (Exception e) {}
> >         }
> > }
> > %>
> >
> >
> > Server version: Apache Tomcat/7.0.65
> > Server built:   Oct 9 2015 08:36:58 UTC
> > Server number:  7.0.65.0
> > OS Name:        Linux
> > OS Version:     2.6.18-194.32.1.el5
> > Architecture:   amd64
> > JVM Version:    1.7.0_80-b15
> > JVM Vendor:     Oracle Corporation
> >
> > Thanks in advance.
> >
> > P.S: Sorry, the subject was wrong.
> >
> > --
> > Keiichi.Fujino
> >
>

Re: [Tomcat-JDBC] RemovedAbandoned doesn't trigger JdbcInterceptors

Posted by Keiichi Fujino <kf...@apache.org>.
2015-12-17 22:25 GMT+09:00 Robert Anderson <ra...@gmail.com>:

> Hi,
>
> When a connection is closed by "ResetAbandoned" the invoke() method from
> JdbcInterceptor is not called. Is it the expected behaviour?
>
>
Yes.

The JdbcInterceptor.invoke() method is not called when removeAbandoned.
The Connection(PooledConnection) is directly released without going through
the JdbcInterceptors.
(see PooledConnection.release())

If you want to capture the close of the connection,
you can use JdbcInterceptor.disconnected or reset (null, null).




> -->server.xml
>
>        <Resource name="jdbc/cacheapp" auth="Container"
> type="javax.sql.DataSource" removeAbandoned="true"
> removeAbandonedTimeout="30"
>                                    maxActive="5" maxIdle="1"
> initialSize="0" minIdle="0" maxWait="5000"
>                    validationQuery="select 1"
>                    maxAge="1"
>                    testOnBorrow="true"
>    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>    alternateUsernameAllowed="true"
>  jdbcInterceptors="pool.ExampleInterceptor"
>    username="tomcat" password="example"
> driverClassName="com.intersys.jdbc.CacheDriver"
>    url="jdbc:Cache://serverip:1972/NS"/>
>
> --> pool.ExampleInterceptor
>
> public class ExampleInterceptor extends JdbcInterceptor {
>
>
>     public Object invoke(Object proxy, Method method, Object[] args) throws
> Throwable {
>         if (method.getName() == CLOSE_VAL) {
>             System.out.println("Interceptor called."); //Doesn't happen but
> connection is really closed (checked via JMX)
>         }
>         return super.invoke(proxy, method, args);
>     }
>
> --> JSP to simulate long running query
>
> <%@ page session="false" import="java.sql.*,javax.naming.*, javax.sql.*,
> java.util.*" contentType="text/html" %><%
> Connection conn = null;
> try {
>         Context ctx = new InitialContext();
>         DataSource ds =
> (DataSource)ctx.lookup("java:comp/env/jdbc/cacheapp");
>         conn = ds.getConnection();
> Thread.sleep(60000);
> } catch (Exception e) {
>         out.print(e.getMessage());
> } finally {
>         if (conn != null) {
>                 try {
>                         //conn.close(); //Don't close to force
> RemovedAbandonedTimeout
>                 } catch (Exception e) {}
>         }
> }
> %>
>
>
> Server version: Apache Tomcat/7.0.65
> Server built:   Oct 9 2015 08:36:58 UTC
> Server number:  7.0.65.0
> OS Name:        Linux
> OS Version:     2.6.18-194.32.1.el5
> Architecture:   amd64
> JVM Version:    1.7.0_80-b15
> JVM Vendor:     Oracle Corporation
>
> Thanks in advance.
>
> P.S: Sorry, the subject was wrong.
>
> --
> Keiichi.Fujino
>