On Oct 31, 2010, at 9:39, "Gary Gregory" <ggreg...@seagullsoftware.com> wrote:

> On Oct 31, 2010, at 8:55, "Phil Steitz" <phil.ste...@gmail.com> wrote:
> 
>> On 10/30/10 10:55 PM, Gary Gregory wrote:
>>>> -----Original Message----- From: Phil Steitz
>>>> [mailto:phil.ste...@gmail.com] Sent: Sunday, October 31, 2010
>>>> 06:35 To: Commons Developers List Subject: Re: [pool] Pool
>>>> config vs. factory hierarchies.
>>>> 
>>>> On 10/30/10 2:30 PM, Simone Tripodi wrote:
>>>>> Hi Phil, the benefits of eliminating the member variables in
>>>>> favor of storing pool config reference are IMHO in therms of
>>>>> code maintainability and keep it as much simple as possible.
>>>> 
>>>> Maybe I am being dense here, but I don't quite get that.  The
>>>> pool has properties such as numActive that it needs to maintain
>>>> as well as the config-related properties.  Keeping the Config
>>>> instance around as a new pool property adds complexity and
>>>> doesn't really improve maintainability, as far as I can see;
>>>> but it is quite possible I am missing something.
>>> 
>>> I do not think anyone is being dense here ;) This conversation is
>>> revealing to me that what the pool concepts I have in my head
>>> might be based on incorrect assumptions.
>>> 
>>> When I initially saw the long list of ivars (13 or so I think)
>>> that GOP and GKOP had in common, that duplication jumped out to
>>> me as duplication. This is the initial issue I was trying to
>>> resolve. It turns out that the 'fix' for that also leaked to the
>>> config classes.
>>> 
>>> As this thread goes on, it /sounds like/ that the GOP and GKOP
>>> are really completely different beasts, which justify what
>>> /appears/ like duplication. Here, it would help to have ivars and
>>> methods renamed to the best possible names, which would remove
>>> the appearance of duplication.
>> 
>> +1 to look carefully at the full list of member fields and exposed 
>> properties of the GOP and GKOP and decide which ones to rename in GKOP and 
>> which ones to drop or redefine.
> 
> Who can do this asap so we can see and understand our pile better ?
> 
>>> 
>>> But I do not buy the completely different beasts argument 100%
>>> because the GKOP pool feels related to the GOP.
>> 
>> They are not completely unrelated, but the differences are in the core 
>> methods both of the pools and their associated object factories.
>>> 
>>> It would be possible for example, that the GOP subclass GKOP as a
>>> degenerate simple case where the GOP has one pool in a GKOP. That
>>> seems radical, but it would eliminate a lot of apparent code
>>> duplication: public class AltGenericObjectPool<T>  extends
>>> GenericKeyedObjectPool<T, T>. That would be weird in the sense
>>> that APIs like borrowObject() and borrowObject(T) would be
>>> available but you get the idea.
>> 
>> I understand the reasoning here, but I don't see it as natural and it would 
>> be hard to implement efficiently (at least I don't see an easy way to do 
>> it).  Here again, I could be missing something that would make this easy.
>> 
> 
> Maybe it's another strategy that could plugged in that would give the pool a 
> keyed vs not behavior. 
> 
>>> Finally, if GOP and GKOP are really separate classes not meant to
>>> share code, then should go back to ivars instead of a config
>>> object in each pool?
>> 
>> I like replacing all of the vars in the ctors with Config instances.  
> 
> +1. I dislike classes with laundry lists of cries

$&@! iPhone. That's 'ctors', not 'cries'!

> 
>> What I am not sure adds value is keeping the Config instances as members of 
>> the pool classes
> 
> It might be interesting from the pov of being able to answer succinctly: here 
> is how I was configured. But you could do the same by creating a new config 
> object and answering it. 
> 
>> 
>> I don't like having to maintain similar code in GOP and GKOP and as we think 
>> about how to bring in the jdbc-pool stuff, I would like to see if we can 
>> reduce the amount of similar code in these two classes, or even if there is 
>> a way to somehow combine them efficiently, so I am open to ideas like above.
> 
> That is my ideal goal : efficient combo. 
> 
> GG 
>> 
>> Phil
>>> 
>>> Gary
>>> 
>>>> 
>>>>> 
>>>>> You can see the difference between the current
>>>>> Stack(Keyed)ObjectPool(Factory) - which are implemented
>>>>> according your vision - and Generic(Keyed)ObjectPool(Factory)
>>>>> implementations - that are still implemented with my first
>>>>> refactory.
>>>> 
>>>> No, these have the same new complexity (vis a vis the original
>>>> code) and I am not seeing what the benefit is.  Keeping the
>>>> pool properties as member fields, making the Config objects
>>>> immutable and just having the ctors copy properties from the
>>>> immutable Config instances (which are then thrown away) seems
>>>> simpler and no harder to maintain to me.  Again, I must be
>>>> missing something.
>>>> 
>>>> I guess at the end of the day, I don't see the "Config"
>>>> abstraction as adding anything post-construction - i.e,, this
>>>> abstraction is only useful at pool construction time.  From the
>>>> user perspective, the config properties are no different from
>>>> any other pool properties, nor are they different internally.
>>>> Why should we need to write Config.maxActive internally, but
>>>> just use numActive and other properties directly?  This looks
>>>> to me like added complexity that does not add any value, at
>>>> least for the pools.  It makes more sense to me for the
>>>> factories to hold a reference to a Config instance.
>>>> 
>>>> Phil
>>>> 
>>>>> 
>>>>> 
>>>>> On Sat, Oct 30, 2010 at 6:56 PM, Phil
>>>>> Steitz<phil.ste...@gmail.com>   wrote:
>>>>>> On 10/29/10 2:41 PM, James Carman wrote:
>>>>>>> 
>>>>>>> On Fri, Oct 29, 2010 at 2:24 PM, sebb<seb...@gmail.com>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> I had overlooked that aspect ...
>>>>>>>> 
>>>>>>>> If some changes are more expensive to perform, then the
>>>>>>>> method might want to determine which items have
>>>>>>>> changed, rather than just reconfiguring everything.
>>>>>>>> There may be some changes that don't require a pool
>>>>>>>> update.
>>>>>>>> 
>>>>>>> 
>>>>>>> Right now, it appears that they just call that "allocate"
>>>>>>> method which seems like they kind of "nuke and pave", so
>>>>>>> I don't think it's that big of a deal.
>>>>>>> 
>>>>>>>> Factory reconfig probably just needs to update the
>>>>>>>> stored config variable, which can be volatile.
>>>>>>>> 
>>>>>>> 
>>>>>>> I'm not familiar with this factory config stuff.  I'll
>>>>>>> have to dig in further.
>>>>>> 
>>>>>> Sorry to be late on this.  Here are the requirements:
>>>>>> 
>>>>>> 1. Some subset of the config properties (need to decide
>>>>>> this - should be topic of a different thread) need to be
>>>>>> *individually* mutable at runtime - e.g.,
>>>>>> setMaxActive(newMaxActive) needs to remain.  We have agreed
>>>>>> at this point that at least maxActive and maxWait need to
>>>>>> be runtime mutable.
>>>>>> 
>>>>>> 2. Correct functioning of the pool with the current
>>>>>> implementation requires that no thread can change maxActive
>>>>>> while another thread holds the lock on the pool's monitor.
>>>>>> Just making the properties volatile or protecting them with
>>>>>> another lock will cause problems.
>>>>>> 
>>>>>> I am OK keeping the mutable Config instances around, but I
>>>>>> don't see any real advantage to eliminating the member
>>>>>> variables storing pool config properties - i.e., my
>>>>>> preference would be to make the Config instances immutable
>>>>>> and only used as structs for ctors.
>>>>>> 
>>>>>> I am +0 on adding a (pool-synchronized) reconfigure(Config)
>>>>>> to enable multiple properties to be changed atomically.
>>>>>> 
>>>>>> Phil
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> ---------------------------------------------------------------------
>>>>>>> 
>>>>>>> 
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>>> For additional commands, e-mail:
>>>>>>> dev-h...@commons.apache.org
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> 
>>>>>> 
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>> For additional commands, e-mail:
>>>>>> dev-h...@commons.apache.org
>>>>>> 
>>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> 
>>>>> 
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> 
>>>> 
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> 
>>> 
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to