It'd be cleaner to just remove it. Perhaps we could include in
log4j-samples a sort of rudimentary connection pool factory using dbcp?


On 5 February 2014 18:07, Remko Popma <remko.po...@gmail.com> wrote:

>
>
> On Thursday, February 6, 2014, Nick Williams <
> nicho...@nicholaswilliams.net> wrote:
>
>>
>> On Feb 5, 2014, at 5:52 PM, Remko Popma wrote:
>>
>>
>>
>> On Thursday, February 6, 2014, Nick Williams <
>> nicho...@nicholaswilliams.net> wrote:
>>
>>> Guys,
>>>
>>> Currently, the JDBCAppender allows users to specify a mechanism for
>>> connecting to the database using one of three options:
>>>
>>> - DataSourceConnectionSource: Looks up a JNDI data source
>>> - FactoryMethodConnectionSource: User specifies a class and static
>>> method for retrieving connections
>>> - DriverManagerConnectionSource: User specifies JDBC URL, username,
>>> password, etc. to manually connect directly from Log4j.
>>>
>>> Here's the problem: connections really need to be pooled for Log4j to
>>> log efficiently. In fact, I'd go so far as to say it's a *requirement*. It
>>> will either be flaky (if using the same connection continuously) or
>>> horrendously slow (if reconnecting every time) without pooling.
>>>
>>> DataSourceConnectionSource and FactoryMethodConnectionSource lend
>>> themselves naturally to pooling. We can simply tell the user, 1) the
>>> DataSource must be a pooled DataSource or performance will suffer greatly,
>>> and 2) The factory must be backed by a connection pool or performance will
>>> suffer greatly. At that point, it's out of our hands and left up to the
>>> user to pool it. I like this.
>>>
>>> DriverManagerConnectionSource is a different story. Since Log4j connects
>>> directly using this approach, we're left with two options:
>>>
>>> - Remove support for DriverManagerConnectionSource and force the user to
>>> supply a factory or DataSource. (This is my favorite option.)
>>
>>
>> I'd be fine with this option. If our experience so far shows that we
>> can't really support direct connections (that is, we don't have good
>> solutions for user problems) then removing it is not unreasonable I think.
>>
>>
>>> - Add Commons DBCP and Commons Pooling as required dependencies when
>>> using DriverManagerConnectionSource, then update
>>> DriverManagerConnectionSource to also accept connection pool size,
>>> thresholds, maximums, minimums, test queries, etc. (I really, *REALLY*
>>> don't like this option.)
>>
>>
>> If Commons DBCP can be set up as a pooled DataSource, then there is no
>> need for us to also support its use as a DriverManagerConnectionSource,
>>  is there?
>>
>>
>>> I'm looking for some input from the rest of y'all on which direction we
>>> should take, or if you can think of any other options.
>>
>>
>>
>> One other option (or perhaps this is more a migration path issue) is to
>> leave the DriverManagerConnectionSource there but mark it as
>> deprecated/dangerous/broken. Emit an ominous warn status logger message for
>> existing users, and in the docs clarify that this will be removed in a
>> subsequent release because we can't support it.
>>
>>
>> It would be rather illogical to deprecate a class and say it will be
>> remove "later" when we haven't even gone GA yet.
>>
>
> Some people are using beta-9 in production, and I was thinking to provide
> a migration path for them. But on second thought, simply removing is
> cleaner. If people want to upgrade they should use a pooled
> connection source. I'm fine with that.
>
>
>> Nick
>>
>


-- 
Matt Sicker <boa...@gmail.com>

Reply via email to