[ 
https://issues.apache.org/jira/browse/DERBY-3581?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kristian Waagan updated DERBY-3581:
-----------------------------------

    Attachment: derby-3581-1a-remove_user_password_iteration1.diff

'derby-3581-1a-remove_user_password_iteration1.diff' removes the use of user 
and password variables when resetting a pooled connection. The only call to the 
top-level method changed is in ClientPooledConnection.getConnection().

I have run suites.All without failures, and will continue the work by checking 
if and for what the data source reference is needed when resetting a physical 
connection.
Note that there is no way to change the user name and/or password except for 
getting a new connection. One can either change the values held be the creating 
data source, or once can use getPooledConnection(user, password).

Patch ready for review.
I have started derbyall as well, and will report back if it fails.

> Changing certain properties on client DataSource objects causes existing 
> connections to reflect the new values
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3581
>                 URL: https://issues.apache.org/jira/browse/DERBY-3581
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC, Network Client
>    Affects Versions: 10.3.2.1, 10.4.0.0, 10.5.0.0
>            Reporter: Kristian Waagan
>            Assignee: Kristian Waagan
>         Attachments: derby-3581-1a-remove_user_password_iteration1.diff
>
>
> The client driver has code propagating changes made to the DataSource to 
> existing connections created by that DataSource.
> There is some discussion of this in the thread 
> http://www.nabble.com/ConnectionPoolDataSource-properties-td15740457.html, 
> and there is also an example of what can happen due to this "feature".
> Besides from being a bug with the potential to cause strange errors in 
> deployment, the issue also makes the client driver code harder to read and 
> understand.
> As far as I can see, there is also some related code in other parts of the 
> client driver, for instance for "fully" resetting statements. There is 
> mention of dynamic versus static sections in the comments (this one from 
> am.Statement):
>     // If a dataSource is passed into resetClientConnection(), then we will 
> assume
>     // properties on the dataSource may have changed, and we will need to go 
> through
>     // the open-statement list on the connection and do a full reset on all 
> statements,
>     // including preparedStatement's and callableStatement's.  This is 
> because property
>     // change may influence the section we allocate for the 
> preparedStatement, and
>     // also the cursor attributes, i.e. setCursorSensitivity().
>     // If no dataSource is passed into resetClientConnection(), then we will 
> do the
>     // minimum reset required for preparedStatement's and callableStatement's.
> Note that the reset code for statements is also invoked when 
> ClientPooledConnection.getConnection() is invoked. I do not understand why we 
> should reset statements when we get a new logical connection.
> Further, I also suspect the concept of a deferred reset has been introduced 
> because of the feature/bug described by this Jira issue. A deferred reset 
> seems to be a mechanism to avoid a round-trip to validate the newly changed 
> DataSource properties (typically user, password and security mechanism).
> I will look into removing code related to deferred resets as well. If you 
> have historic information about these parts of the driver, I would appreciate 
> if you share it with the community if possible.
> Just to be clear, it is my opinion that changed DataSource properties should 
> take effect when one of the following methods is invoked:
>  * DataSource.getConnection()
>  * ConnectionPoolDataSource.getPooledConnection()
>  * XADataSource.getXAConnection()
> All of the methods above returns a physical connection. Properties like user 
> name and password are associated with the physical connection, and thus 
> requests to obtain a logical connection should not cause any of these 
> properties to change.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to