commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicholas Hemley <>
Subject Re: [Pool] - GenericKeyedObjectPool - one object instance per key?
Date Fri, 20 Jul 2007 15:08:26 GMT

many thanks for your reply on this - basically, i am now using the setMaxActive to set the
active instances to one per key, which does what i want it to do, but i also have a cache
wrapping the pool to keep a track of the active objects and then deliver the same object when
requested by the same key - obviously the pool only keeps a handle on idle objects, so i have
wrapped with my own class to keep a track of active objects by key - this appears to be working
ok, so many thanks for your help here!


Phil Steitz <> wrote: One more note on this.  GenericKeyedObjectPool
does allow you to limit
the number of *active* instances per key, using setMaxActive(key). If
you want to allow one or more to be active, but just to limit the
number cached in the pool (numIdle) to 1 per key, this is not possible
directly and you need to subclass.  What exactly are you trying to do?


On 7/20/07, Phil Steitz 
> On 7/19/07, Nicholas Hemley  wrote:
> > Hello,
> >
> > I am using the commons pool for a project and would like only one object instance
to be stored per key using the GenericKeyedObjectPool - is this actually possible?
> No, not directly.
> >
> > The javadoc for KeyedObjectPool states that:
> > "KeyedObjectPool implementations may choose to store at most  one instance per key
value, or may choose to maintain a pool of instances  for each key (essentially creating a
Map of  pools)."
> >
> > However, having looked in the codebase, the GenericKeyedObjectPool implements a
linkedlist of objects, with no option for setting one object per key only...
> The problem is not actually with the backing store, but the maxTotal
> property not configurable per key.  If this is what you want, or
> anyone else thinks this would be useful, please open a Jira ticket
> asking for this enhancement.
> >
> > Also, I am unable to subclass GenericKeyedObjectPool to alter the behaviour since
the members are all private, so that is not an option.
> >
> One workaround would be to subclass and override borrowObject to check
> numIdle(key) and numActive(key) before calling super.borrowObject().
> If numIdle(key) is 1, borrow the instance. If it is 0 and
> numActive(key) is 1, wait or fail, depending on config.  If both are
> 0, call addObject and then borrowObject.  This is awkward, but could
> be made to work.
> If what you really want is a KeyedObjectPool that has maxTotal
> configurable per key, then open a JIRA (ideally with a patch) and we
> can look at implementing that.
> Phil
> > Another option would be to add a custom implementation to my project, however certain
member variables e.g. GenericObjectPool.EVICTION_TIMER are not visible, which procludes this
approach. The only option would be to add a new class to the commons jar, which I am loathe
to do since then it will not be compatible with future releases e.g. v2.
> >
> > Many thanks for any feedback.
> >
> > Cheerio,
> > Nic Hemley
> >
> >
> > ---------------------------------
> >  Yahoo! Answers - Get better answers from someone who knows. Tryit now.

To unsubscribe, e-mail:
For additional commands, e-mail:

 Yahoo! Mail is the world's favourite email. Don't settle for less, sign up for your freeaccount
  • Unnamed multipart/alternative (inline, 8-Bit, 0 bytes)
View raw message