You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Antonio Dias (JIRA)" <ji...@apache.org> on 2017/03/21 16:04:41 UTC

[jira] [Created] (OPENEJB-2133) Closing connection returned from ManagedDataSource creantes new connection

Antonio Dias created OPENEJB-2133:
-------------------------------------

             Summary: Closing connection returned from ManagedDataSource creantes new connection
                 Key: OPENEJB-2133
                 URL: https://issues.apache.org/jira/browse/OPENEJB-2133
             Project: OpenEJB
          Issue Type: Bug
            Reporter: Antonio Dias
            Priority: Minor


I'm doing a small component to health check a Datasource registered in Tomee. I was expecting that when you get a connection if the database was unavailable it would throw a SqlException. Of cource with database pooling things are not so 'easy', so let's ignore that.
The issue I found is that when you call getConnection in a ManagedDataSource it always created a new ManagedConnection passing a delegate. 
{code}
 private Connection managed(final String u, final String p) {
        return (Connection) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), CONNECTION_CLASS,
                new ManagedConnection(delegate, transactionManager, registry, u, p));
    }

{code}
This delegate (DataSource) is then used to create a Key. This DataSource is not assigned to the ManagedConnection delegate field in the ctor, so when invoking the "close" method, without executing any other statement after getting the connection, the ManagedConnection has to first create one connection to then close it. (line 101). 
If the dabase is down this meas i get an exceptionwhen closing the connection and not when getting it from the pool.





--
This message was sent by Atlassian JIRA
(v6.3.15#6346)