[PATCH] Proposal for a new pool type SharedObjectPool
-----------------------------------------------------

                 Key: POOL-84
                 URL: http://issues.apache.org/jira/browse/POOL-84
             Project: Commons Pool
          Issue Type: New Feature
    Affects Versions: 1.3
            Reporter: Mariusz Krzemien


SharedObjectPool is a pool with additional feature of sharing pooled objects 
among many clients. Such pool is applicable for any resource that can be shared 
by multiple clients in the same time. The JMS Connection (which can be shared 
among many MessageConsumers in the same time) is an example of such resource.

Existing pools don't provide such functionality. Object can either be borrowed 
(exclusively accessed by just single client and out of control of the pool) or 
returned in the pool (where it is always treated as idle and so e.g. may be 
evicted at any time)

The SharedObjectPool interface introduced here is a proposition for a solution. 
The borrowed object gets associated with the borrowing client. It may be 
returned to the pool but still remain associated with the client. The object 
may then be borrowed by this client again. It may be also borrowed by some 
other clients in case (depending on the policy of actual implementation) the 
pool decides that borrowing an object with already associated client is 
preferable to returning a new or idle one.

I tried to be as compliant as possible with the existing structure of the 
Commons Pool types. Because there is a key parameter in main methods (that is 
used to associate the client with the pooled object) in my proposition the 
SharedObjectPool extends the KeyedObjectPool. It may equally be changed to a 
separate pool type since there are some incompatibilities (addObject(key) has 
no meaning for SharedObjectPool, so I had to add addObject() to the interface; 
also the existing tests assume that the KeyedObjectPool instance allows for 
multiple objects for the same key which is not true for SharedObjectPool).

The patch contains one implementation GenericSharedObjectPool - which is in 
fact the GenericObjectPool extended for purposes of object sharing.

There are also classes from the org.apache.commons.collections package - they 
are used by the GenericSharedObjectPool as a part of the implementation. I had 
to attach these classes here since they are not yet a part of the Commons 
Collections distribution - I contributed them in a separate patch proposal: 
https://issues.apache.org/jira/browse/COLLECTIONS-224. These classes in turn 
depend on the Commons Collections distribution.

Following main classes are attached in this patch:
SharedObjectPool - general interface
BaseSharedObjectPool - base (mostly stubbed) implementation
GenericSharedObjectPool - actual implementation with the policy that in case 
the number of created objects reaches declared maximum, if a client requests 
borrowing an object it is returned with an already shared object with possibly 
the least number of associated clients from the objects actually available in 
the pool (not borrowed by any client - borrowing the object is the way of 
blocking it for access from any other client).



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to