The RC is out. Please review it :-)

Gary

On Tue, Jun 12, 2018, 15:49 Gary Gregory <garydgreg...@gmail.com> wrote:

> After fixing prepared statements in the cpdsadapter package, I found a
> cleaner solution that delegates all prepared and callable statement pooling
> to DBCP's cpdsadapter.
>
> Thank you for the feedback.
>
> I think I am ready to create an RC for DBCP 2.4.0.
>
> Gary
>
> On Thu, Jun 7, 2018 at 5:01 PM Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> Thanks for your feedback Mark.
>>
>> Looking deeper into DBCP for a cleaner solution, it seems we are missing
>> support for preparing callable statements
>> in org.apache.commons.dbcp2.cpdsadapter.ConnectionImpl
>> and org.apache.commons.dbcp2.cpdsadapter.PooledConnectionImpl. I see APIs
>> implemented for prepareStatement(*) but not prepareCall(*). That's a big
>> hole for our server. I'll look into filling it now...
>>
>> Gary
>>
>> On Thu, Jun 7, 2018 at 1:09 PM, Mark Thomas <ma...@apache.org> wrote:
>>
>>> On 07/06/18 17:18, Matt Sicker wrote:
>>> > This sounds like an honest bug that should be fixed, backwards
>>> > compatibility be damned. I don't see how the old behavior is useful for
>>> > anything other than connection starvation or some other strange
>>> behavior.
>>>
>>> I have completely the opposite view.
>>>
>>> There is nothing in the DBCP API that suggests that a Connection object
>>> provided by the pool will ever be seen by the client again.
>>>
>>> The implementation below sounds like deliberate misuse of the pool.
>>> Clients are not meant to retain references to objects that have been
>>> returned to the pool. To do so is nearly always the cause of all sorts
>>> of problems. I would be very strongly against any change that encouraged
>>> that sort of misuse.
>>>
>>> What is the actual use case here? What is the purpose of retaining this
>>> Map? Maybe we can come up with a better solution and/or an API change
>>> that enables the requirement to be met without having to retain
>>> references to connections after they have been returned to the pool.
>>>
>>> Mark
>>>
>>>
>>> >
>>> > On 7 June 2018 at 10:44, Gary Gregory <garydgreg...@gmail.com> wrote:
>>> >
>>> >> Hi All:
>>> >>
>>> >> I just ran into a case where different instances of subclasses
>>> >> of DelegatingConnection like PoolGuardConnectionWrapper and
>>> ConnectionImpl
>>> >> are used as keys in a Map (Map<java.sql.Connection, Foo>)
>>> >>
>>> >> The problem is that when you borrow a Connection out of a pool, you
>>> get a
>>> >> new PoolGuardConnectionWrapper, so that the Map in the eventual call
>>> site
>>> >> grows and grows because the intention is that the Map key should be
>>> the
>>> >> same when you borrow the same underlying Connection later.
>>> >>
>>> >> If DelegatingConnection implemented hashCode() and equals() to
>>> account for
>>> >> some or all of its instance variables, then one could use
>>> >> DelegatingConnection instances as keys in a Map with the behavior I
>>> expect,
>>> >> YMMV.
>>> >>
>>> >> The issue is that implementing hashCode() and equals() where we did
>>> not
>>> >> before could have unexpected side-effects for existing applications.
>>> >>
>>> >> Thoughts?
>>> >>
>>> >> Gary
>>> >>
>>> >
>>> >
>>> >
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>>
>>

Reply via email to