commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniele Bonetto <daniele.bone...@dnshosting.it>
Subject [GenericObjectPool] problem with numActive counter
Date Fri, 15 Jan 2010 10:26:48 GMT
Ok, if the borrow throws an exceptin the obj was null.
But i'm not sure that the invalidate was unnecessary. take a look at 
this: 
http://commons.apache.org/pool/apidocs/org/apache/commons/pool/ObjectPool.html

Example of use:

  Object obj =|null|;

  |try|  {
      obj = pool.borrowObject();
      |//...use the object...|
  }|catch|(Exception e) {
      |// invalidate the object|
      pool.invalidateObject(obj);
      |// do not return the object to the pool twice|
      obj =|null|;
  }|finally|  {
      |// make sure the object is returned to the pool|
      |if|(|null|  != obj) {
          pool.returnObject(obj);
     }
  }


In this example u can see that if the borrow throws an exception u have 
to invalidate the object from pool.

So. What happends to the object that i tried to borrow?

I have maxActive = 2 and without invalidate if i try more than 2 times 
the pool returns always:

java.util.NoSuchElementException: Timeout waiting for idle object


I think that without the invalidate the object remains in idle and it 
locks my pool... With invalidateObject the pool works correctly, but the 
counter wasn't correct.

Thanks guys for your replies.

Byez!
Daniele Bonetto




Il 15/01/2010 11.08, Mark Thomas ha scritto:
> On 15/01/2010 10:03, Simone Tripodi wrote:
>    
>> Ciao Daniele ;)
>> First, I suggest you to start the subject line with [componentname],
>> i.e. [POOL] if you're referring commons-pool, otherwise people risk to
>> get confused and not able to reply.
>>
>> I don't know the Pool so deeply and maybe I didn't understand the
>> problem, but reading your code I'm worried 'invalidateObject()' always
>> takes 'null' as argument... take a look at this with the
>> logger/debugger.
>>      
> Yep. That's the problem. That call is almost certainly unnecessary. If
> want to keep it, wrap it in a<code>if  (obj != null)</code>  test.
>
> Mark
>
>    
>> All the best,
>> Simo
>>
>> On Fri, Jan 15, 2010 at 10:53 AM, Daniele Bonetto
>> <daniele.bonetto@dnshosting.it>  wrote:
>>      
>>> Hello everyone!
>>>
>>> I notice a problem using GenericObjectPool.
>>>
>>> My code is like this:
>>>
>>>         Object obj = null;
>>>         try
>>>         {
>>>                 obj = this.borrowObject();
>>>         }
>>>         catch(NoSuchElementException ex)
>>>         {
>>>             log.error("no such element exception", ex);
>>>             this.invalidateObject(obj);
>>>             throw new NicProviderPoolException("no such element exception",
>>> ex);
>>>         }
>>>         catch(Exception ex)
>>>         {
>>>             log.error("exception", ex);
>>>             this.invalidateObject(obj);
>>>             throw new Exception("exception", ex);
>>>         }
>>>         return (NicProvider)obj;
>>>
>>> When the borrowObject throws an exception and i invalidate the
>>> borrowedObject the numActive counter was decreased by 1. The problem is that
>>> the counter will not be increased in case of exception... So, my numActive
>>> counter will be -1 and isn't correct.
>>>
>>> Someone has noticed this problem too?
>>>
>>> Thanks in advance,
>>> Byez!
>>>
>>> Daniele Bonetto
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: user-help@commons.apache.org
>>>
>>>
>>>        
>>
>>
>>      
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
>
>
>    

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message