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.

> 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

Reply via email to