Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Simone Tripodi
don't worry, the community is here to solve problems :)
Ciao ;)
Simo

On Fri, Jan 15, 2010 at 1:58 PM, Daniele Bonetto
 wrote:
> i've found the problem.
> it was fixed in the latest release (1.5.4), but rebuilding the source
> eclipse doesn't change the lib in webapp (that remains 1.5.2).
>
> i confirm that if borrowObject throws an exception the pool invalidates the
> broken object, so is unnecessary invalidate the object in the catch
> expression.
>
> many thanks to all, sorry for wasting your time.
>
> best regards,
> Daniele Bonetto
>
>
>
>
>
>
> Il 15/01/2010 13.11, Mark Thomas ha scritto:
>>
>> On 15/01/2010 12:07, Daniele Bonetto wrote:
>>
>>>
>>> I've already the latest version... :(((
>>>
>>> Other suggestions??
>>>
>>
>> Could be a pool bug. Could you provide some more detail about what your
>> obejct factory is doing when the network is down. Does it create
>> objects? Does it validate them?
>>
>> Mark
>>
>>
>>>
>>> Daniele
>>>
>>>
>>>
>>>
>>> Il 15/01/2010 12.23, Mark Thomas ha scritto:
>>>

 On 15/01/2010 10:59, Daniele Bonetto wrote:


>
> yes, but if i don't invalidate the object i continue to have the
> problem
>
> Timeout waiting for idle object
>
> that blocks my pool as u can see in the following examples... :(
>
>

 Which version of pool are you using? If not 1.5.4, try upgrading as
 there were a couple of bugs in the earlier 1.5.x releases that could
 cause this.

 Mark



>
> */Example 1: without invalidateObject/*
>
> MaxActive = 2
> NumActive = 0
>
> -->   Network is ok.
> Borrow obj1 -->   ok [numActive 1]
> Borrow obj2 -->   ok [numActive 2]
> Borrow obj3 -->   nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 -->   ok [numActive 1]
> Return obj3 [numActive 0]
>
> -->   Network turns nok.
> Borrow obj1 -->   nok, cannot create an activated object [numActive 0]
> Borrow obj2 -->   nok, cannot create an activated object [numActive 0]
> Borrow obj3 -->   nok, timeout waiting for idle object [numActive 0]
>
> -->   Network turns ok.
> Borrow obj1 -->   nok, timeout waiting for idle object [numActive 0]
> Borrow obj2 -->   nok, timeout waiting for idle object [numActive 0]
> Borrow obj3 -->   nok, timeout waiting for idle object [numActive 0]
>
> and so on... It persists forever, locking my pool...
>
>
>
> */Example 2: with invalidateObject/*
>
> MaxActive = 2
> NumActive = 0
>
> -->   Network is ok.
> Borrow obj1 -->   ok [numActive 1]
> Borrow obj2 -->   ok [numActive 2]
> Borrow obj3 -->   nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 -->   ok [numActive 1]
> Return obj3 [numActive 0]
>
> -->   Network turns nok.
> Borrow obj1 -->   nok, cannot create an activated object [numActive 0]
> Invalidate obj1 [numActive -1]
> Borrow obj2 -->   nok, cannot create an activated object [numActive -1]
> Invalidate obj2 [numActive -2]
> Borrow obj3 -->   nok, cannot create an activated object [numActive -2]
> Invalidate obj3 [numActive -3]
>
> -->   Network turns ok.
> Borrow obj1 -->   ok [numActive -2]
> Borrow obj2 -->   ok [numActive -1]
> Borrow obj3 -->   ok [numActive 0]
> Return obj1 [numActive -1]
> Return obj2 [numActive -2]
> Return obj3 [numActive -3]
>
> In this case the object are correctly borrowed and the pool works well,
> but the numActive counter isn't correct and it make me borrow more than
> 2 objects (and it's a big problem cause i have limited connections to
> respect).
>
> Byez!
> Daniele Bonetto
>
>
>
>
>
> Il 15/01/2010 11.37, Simone Tripodi ha scritto:
>
>
>>
>> In the example, the catch group catches exceptions that could be
>> thrown by the object _use_, I *suppose* whenever you catch a
>> java.util.NoSuchElementException you don't need to invalidate the
>> object, that's what Mark was pointing.
>> let us know, all the best,
>> Simo
>>
>> On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
>>     wrote:
>>
>>
>>
>>>
>>> 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 

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Daniele Bonetto

i've found the problem.
it was fixed in the latest release (1.5.4), but rebuilding the source 
eclipse doesn't change the lib in webapp (that remains 1.5.2).


i confirm that if borrowObject throws an exception the pool invalidates 
the broken object, so is unnecessary invalidate the object in the catch 
expression.


many thanks to all, sorry for wasting your time.

best regards,
Daniele Bonetto






Il 15/01/2010 13.11, Mark Thomas ha scritto:

On 15/01/2010 12:07, Daniele Bonetto wrote:
   

I've already the latest version... :(((

Other suggestions??
 

Could be a pool bug. Could you provide some more detail about what your
obejct factory is doing when the network is down. Does it create
objects? Does it validate them?

Mark

   

Daniele




Il 15/01/2010 12.23, Mark Thomas ha scritto:
 

On 15/01/2010 10:59, Daniele Bonetto wrote:

   

yes, but if i don't invalidate the object i continue to have the problem

Timeout waiting for idle object

that blocks my pool as u can see in the following examples... :(

 

Which version of pool are you using? If not 1.5.4, try upgrading as
there were a couple of bugs in the earlier 1.5.x releases that could
cause this.

Mark


   

*/Example 1: without invalidateObject/*

MaxActive = 2
NumActive = 0

-->   Network is ok.
Borrow obj1 -->   ok [numActive 1]
Borrow obj2 -->   ok [numActive 2]
Borrow obj3 -->   nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 -->   ok [numActive 1]
Return obj3 [numActive 0]

-->   Network turns nok.
Borrow obj1 -->   nok, cannot create an activated object [numActive 0]
Borrow obj2 -->   nok, cannot create an activated object [numActive 0]
Borrow obj3 -->   nok, timeout waiting for idle object [numActive 0]

-->   Network turns ok.
Borrow obj1 -->   nok, timeout waiting for idle object [numActive 0]
Borrow obj2 -->   nok, timeout waiting for idle object [numActive 0]
Borrow obj3 -->   nok, timeout waiting for idle object [numActive 0]

and so on... It persists forever, locking my pool...



*/Example 2: with invalidateObject/*

MaxActive = 2
NumActive = 0

-->   Network is ok.
Borrow obj1 -->   ok [numActive 1]
Borrow obj2 -->   ok [numActive 2]
Borrow obj3 -->   nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 -->   ok [numActive 1]
Return obj3 [numActive 0]

-->   Network turns nok.
Borrow obj1 -->   nok, cannot create an activated object [numActive 0]
Invalidate obj1 [numActive -1]
Borrow obj2 -->   nok, cannot create an activated object [numActive -1]
Invalidate obj2 [numActive -2]
Borrow obj3 -->   nok, cannot create an activated object [numActive -2]
Invalidate obj3 [numActive -3]

-->   Network turns ok.
Borrow obj1 -->   ok [numActive -2]
Borrow obj2 -->   ok [numActive -1]
Borrow obj3 -->   ok [numActive 0]
Return obj1 [numActive -1]
Return obj2 [numActive -2]
Return obj3 [numActive -3]

In this case the object are correctly borrowed and the pool works well,
but the numActive counter isn't correct and it make me borrow more than
2 objects (and it's a big problem cause i have limited connections to
respect).

Byez!
Daniele Bonetto





Il 15/01/2010 11.37, Simone Tripodi ha scritto:

 

In the example, the catch group catches exceptions that could be
thrown by the object _use_, I *suppose* whenever you catch a
java.util.NoSuchElementException you don't need to invalidate the
object, that's what Mark was pointing.
let us know, all the best,
Simo

On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
wrote:


   

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

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Mark Thomas
On 15/01/2010 12:07, Daniele Bonetto wrote:
> I've already the latest version... :(((
> 
> Other suggestions??

Could be a pool bug. Could you provide some more detail about what your
obejct factory is doing when the network is down. Does it create
objects? Does it validate them?

Mark

> 
> Daniele
> 
> 
> 
> 
> Il 15/01/2010 12.23, Mark Thomas ha scritto:
>> On 15/01/2010 10:59, Daniele Bonetto wrote:
>>   
>>> yes, but if i don't invalidate the object i continue to have the problem
>>>
>>> Timeout waiting for idle object
>>>
>>> that blocks my pool as u can see in the following examples... :(
>>>  
>> Which version of pool are you using? If not 1.5.4, try upgrading as
>> there were a couple of bugs in the earlier 1.5.x releases that could
>> cause this.
>>
>> Mark
>>
>>   
>>> */Example 1: without invalidateObject/*
>>>
>>> MaxActive = 2
>>> NumActive = 0
>>>
>>> -->  Network is ok.
>>> Borrow obj1 -->  ok [numActive 1]
>>> Borrow obj2 -->  ok [numActive 2]
>>> Borrow obj3 -->  nok, maxActive reached [numActive 2]
>>> Return obj1 [numActive 1]
>>> Return obj2 [numActive 0]
>>> Borrow obj3 -->  ok [numActive 1]
>>> Return obj3 [numActive 0]
>>>
>>> -->  Network turns nok.
>>> Borrow obj1 -->  nok, cannot create an activated object [numActive 0]
>>> Borrow obj2 -->  nok, cannot create an activated object [numActive 0]
>>> Borrow obj3 -->  nok, timeout waiting for idle object [numActive 0]
>>>
>>> -->  Network turns ok.
>>> Borrow obj1 -->  nok, timeout waiting for idle object [numActive 0]
>>> Borrow obj2 -->  nok, timeout waiting for idle object [numActive 0]
>>> Borrow obj3 -->  nok, timeout waiting for idle object [numActive 0]
>>>
>>> and so on... It persists forever, locking my pool...
>>>
>>>
>>>
>>> */Example 2: with invalidateObject/*
>>>
>>> MaxActive = 2
>>> NumActive = 0
>>>
>>> -->  Network is ok.
>>> Borrow obj1 -->  ok [numActive 1]
>>> Borrow obj2 -->  ok [numActive 2]
>>> Borrow obj3 -->  nok, maxActive reached [numActive 2]
>>> Return obj1 [numActive 1]
>>> Return obj2 [numActive 0]
>>> Borrow obj3 -->  ok [numActive 1]
>>> Return obj3 [numActive 0]
>>>
>>> -->  Network turns nok.
>>> Borrow obj1 -->  nok, cannot create an activated object [numActive 0]
>>> Invalidate obj1 [numActive -1]
>>> Borrow obj2 -->  nok, cannot create an activated object [numActive -1]
>>> Invalidate obj2 [numActive -2]
>>> Borrow obj3 -->  nok, cannot create an activated object [numActive -2]
>>> Invalidate obj3 [numActive -3]
>>>
>>> -->  Network turns ok.
>>> Borrow obj1 -->  ok [numActive -2]
>>> Borrow obj2 -->  ok [numActive -1]
>>> Borrow obj3 -->  ok [numActive 0]
>>> Return obj1 [numActive -1]
>>> Return obj2 [numActive -2]
>>> Return obj3 [numActive -3]
>>>
>>> In this case the object are correctly borrowed and the pool works well,
>>> but the numActive counter isn't correct and it make me borrow more than
>>> 2 objects (and it's a big problem cause i have limited connections to
>>> respect).
>>>
>>> Byez!
>>> Daniele Bonetto
>>>
>>>
>>>
>>>
>>>
>>> Il 15/01/2010 11.37, Simone Tripodi ha scritto:
>>> 
 In the example, the catch group catches exceptions that could be
 thrown by the object _use_, I *suppose* whenever you catch a
 java.util.NoSuchElementException you don't need to invalidate the
 object, that's what Mark was pointing.
 let us know, all the best,
 Simo

 On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
wrote:

   
> 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

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Daniele Bonetto

I've already the latest version... :(((

Other suggestions??

Daniele




Il 15/01/2010 12.23, Mark Thomas ha scritto:

On 15/01/2010 10:59, Daniele Bonetto wrote:
   

yes, but if i don't invalidate the object i continue to have the problem

Timeout waiting for idle object

that blocks my pool as u can see in the following examples... :(
 

Which version of pool are you using? If not 1.5.4, try upgrading as
there were a couple of bugs in the earlier 1.5.x releases that could
cause this.

Mark

   

*/Example 1: without invalidateObject/*

MaxActive = 2
NumActive = 0

-->  Network is ok.
Borrow obj1 -->  ok [numActive 1]
Borrow obj2 -->  ok [numActive 2]
Borrow obj3 -->  nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 -->  ok [numActive 1]
Return obj3 [numActive 0]

-->  Network turns nok.
Borrow obj1 -->  nok, cannot create an activated object [numActive 0]
Borrow obj2 -->  nok, cannot create an activated object [numActive 0]
Borrow obj3 -->  nok, timeout waiting for idle object [numActive 0]

-->  Network turns ok.
Borrow obj1 -->  nok, timeout waiting for idle object [numActive 0]
Borrow obj2 -->  nok, timeout waiting for idle object [numActive 0]
Borrow obj3 -->  nok, timeout waiting for idle object [numActive 0]

and so on... It persists forever, locking my pool...



*/Example 2: with invalidateObject/*

MaxActive = 2
NumActive = 0

-->  Network is ok.
Borrow obj1 -->  ok [numActive 1]
Borrow obj2 -->  ok [numActive 2]
Borrow obj3 -->  nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 -->  ok [numActive 1]
Return obj3 [numActive 0]

-->  Network turns nok.
Borrow obj1 -->  nok, cannot create an activated object [numActive 0]
Invalidate obj1 [numActive -1]
Borrow obj2 -->  nok, cannot create an activated object [numActive -1]
Invalidate obj2 [numActive -2]
Borrow obj3 -->  nok, cannot create an activated object [numActive -2]
Invalidate obj3 [numActive -3]

-->  Network turns ok.
Borrow obj1 -->  ok [numActive -2]
Borrow obj2 -->  ok [numActive -1]
Borrow obj3 -->  ok [numActive 0]
Return obj1 [numActive -1]
Return obj2 [numActive -2]
Return obj3 [numActive -3]

In this case the object are correctly borrowed and the pool works well,
but the numActive counter isn't correct and it make me borrow more than
2 objects (and it's a big problem cause i have limited connections to
respect).

Byez!
Daniele Bonetto





Il 15/01/2010 11.37, Simone Tripodi ha scritto:
 

In the example, the catch group catches exceptions that could be
thrown by the object _use_, I *suppose* whenever you catch a
java.util.NoSuchElementException you don't need to invalidate the
object, that's what Mark was pointing.
let us know, all the best,
Simo

On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
   wrote:

   

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 aif  (obj != null) test.

Mark



   

All the best,
Simo

On Fri, Jan 15, 2010 at 10:53 AM, Daniele Bonetto
 wrote:


 

Hello everyone!

I notice a problem using GenericObjectPool.

My code is like this:

 Object obj = null;
 try
 {
 obj =

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Simone Tripodi
It sounds invalidating the object doesn't afflict the pool status,
since in some cases you invalidate null. try following Mark
suggestions.
all the best,
Simo

On Fri, Jan 15, 2010 at 11:59 AM, Daniele Bonetto
 wrote:
> yes, but if i don't invalidate the object i continue to have the problem
>
> Timeout waiting for idle object
>
> that blocks my pool as u can see in the following examples... :(
>
>
> */Example 1: without invalidateObject/*
>
> MaxActive = 2
> NumActive = 0
>
> --> Network is ok.
> Borrow obj1 --> ok [numActive 1]
> Borrow obj2 --> ok [numActive 2]
> Borrow obj3 --> nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 --> ok [numActive 1]
> Return obj3 [numActive 0]
>
> --> Network turns nok.
> Borrow obj1 --> nok, cannot create an activated object [numActive 0]
> Borrow obj2 --> nok, cannot create an activated object [numActive 0]
> Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]
>
> --> Network turns ok.
> Borrow obj1 --> nok, timeout waiting for idle object [numActive 0]
> Borrow obj2 --> nok, timeout waiting for idle object [numActive 0]
> Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]
>
> and so on... It persists forever, locking my pool...
>
>
>
> */Example 2: with invalidateObject/*
>
> MaxActive = 2
> NumActive = 0
>
> --> Network is ok.
> Borrow obj1 --> ok [numActive 1]
> Borrow obj2 --> ok [numActive 2]
> Borrow obj3 --> nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 --> ok [numActive 1]
> Return obj3 [numActive 0]
>
> --> Network turns nok.
> Borrow obj1 --> nok, cannot create an activated object [numActive 0]
> Invalidate obj1 [numActive -1]
> Borrow obj2 --> nok, cannot create an activated object [numActive -1]
> Invalidate obj2 [numActive -2]
> Borrow obj3 --> nok, cannot create an activated object [numActive -2]
> Invalidate obj3 [numActive -3]
>
> --> Network turns ok.
> Borrow obj1 --> ok [numActive -2]
> Borrow obj2 --> ok [numActive -1]
> Borrow obj3 --> ok [numActive 0]
> Return obj1 [numActive -1]
> Return obj2 [numActive -2]
> Return obj3 [numActive -3]
>
> In this case the object are correctly borrowed and the pool works well, but
> the numActive counter isn't correct and it make me borrow more than 2
> objects (and it's a big problem cause i have limited connections to
> respect).
>
> Byez!
> Daniele Bonetto
>
>
>
>
>
> Il 15/01/2010 11.37, Simone Tripodi ha scritto:
>>
>> In the example, the catch group catches exceptions that could be
>> thrown by the object _use_, I *suppose* whenever you catch a
>> java.util.NoSuchElementException you don't need to invalidate the
>> object, that's what Mark was pointing.
>> let us know, all the best,
>> Simo
>>
>> On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
>>   wrote:
>>
>>>
>>> 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 aif  (obj != null)    test.

 Mark



>
>>>

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Mark Thomas
On 15/01/2010 10:59, Daniele Bonetto wrote:
> yes, but if i don't invalidate the object i continue to have the problem
> 
> Timeout waiting for idle object
> 
> that blocks my pool as u can see in the following examples... :(

Which version of pool are you using? If not 1.5.4, try upgrading as
there were a couple of bugs in the earlier 1.5.x releases that could
cause this.

Mark

> */Example 1: without invalidateObject/*
> 
> MaxActive = 2
> NumActive = 0
> 
> --> Network is ok.
> Borrow obj1 --> ok [numActive 1]
> Borrow obj2 --> ok [numActive 2]
> Borrow obj3 --> nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 --> ok [numActive 1]
> Return obj3 [numActive 0]
> 
> --> Network turns nok.
> Borrow obj1 --> nok, cannot create an activated object [numActive 0]
> Borrow obj2 --> nok, cannot create an activated object [numActive 0]
> Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]
> 
> --> Network turns ok.
> Borrow obj1 --> nok, timeout waiting for idle object [numActive 0]
> Borrow obj2 --> nok, timeout waiting for idle object [numActive 0]
> Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]
> 
> and so on... It persists forever, locking my pool...
> 
> 
> 
> */Example 2: with invalidateObject/*
> 
> MaxActive = 2
> NumActive = 0
> 
> --> Network is ok.
> Borrow obj1 --> ok [numActive 1]
> Borrow obj2 --> ok [numActive 2]
> Borrow obj3 --> nok, maxActive reached [numActive 2]
> Return obj1 [numActive 1]
> Return obj2 [numActive 0]
> Borrow obj3 --> ok [numActive 1]
> Return obj3 [numActive 0]
> 
> --> Network turns nok.
> Borrow obj1 --> nok, cannot create an activated object [numActive 0]
> Invalidate obj1 [numActive -1]
> Borrow obj2 --> nok, cannot create an activated object [numActive -1]
> Invalidate obj2 [numActive -2]
> Borrow obj3 --> nok, cannot create an activated object [numActive -2]
> Invalidate obj3 [numActive -3]
> 
> --> Network turns ok.
> Borrow obj1 --> ok [numActive -2]
> Borrow obj2 --> ok [numActive -1]
> Borrow obj3 --> ok [numActive 0]
> Return obj1 [numActive -1]
> Return obj2 [numActive -2]
> Return obj3 [numActive -3]
> 
> In this case the object are correctly borrowed and the pool works well,
> but the numActive counter isn't correct and it make me borrow more than
> 2 objects (and it's a big problem cause i have limited connections to
> respect).
> 
> Byez!
> Daniele Bonetto
> 
> 
> 
> 
> 
> Il 15/01/2010 11.37, Simone Tripodi ha scritto:
>> In the example, the catch group catches exceptions that could be
>> thrown by the object _use_, I *suppose* whenever you catch a
>> java.util.NoSuchElementException you don't need to invalidate the
>> object, that's what Mark was pointing.
>> let us know, all the best,
>> Simo
>>
>> On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
>>   wrote:
>>   
>>> 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 aif  (obj != null)test.

 Mark

>>

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Daniele Bonetto

yes, but if i don't invalidate the object i continue to have the problem

Timeout waiting for idle object

that blocks my pool as u can see in the following examples... :(


*/Example 1: without invalidateObject/*

MaxActive = 2
NumActive = 0

--> Network is ok.
Borrow obj1 --> ok [numActive 1]
Borrow obj2 --> ok [numActive 2]
Borrow obj3 --> nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 --> ok [numActive 1]
Return obj3 [numActive 0]

--> Network turns nok.
Borrow obj1 --> nok, cannot create an activated object [numActive 0]
Borrow obj2 --> nok, cannot create an activated object [numActive 0]
Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]

--> Network turns ok.
Borrow obj1 --> nok, timeout waiting for idle object [numActive 0]
Borrow obj2 --> nok, timeout waiting for idle object [numActive 0]
Borrow obj3 --> nok, timeout waiting for idle object [numActive 0]

and so on... It persists forever, locking my pool...



*/Example 2: with invalidateObject/*

MaxActive = 2
NumActive = 0

--> Network is ok.
Borrow obj1 --> ok [numActive 1]
Borrow obj2 --> ok [numActive 2]
Borrow obj3 --> nok, maxActive reached [numActive 2]
Return obj1 [numActive 1]
Return obj2 [numActive 0]
Borrow obj3 --> ok [numActive 1]
Return obj3 [numActive 0]

--> Network turns nok.
Borrow obj1 --> nok, cannot create an activated object [numActive 0]
Invalidate obj1 [numActive -1]
Borrow obj2 --> nok, cannot create an activated object [numActive -1]
Invalidate obj2 [numActive -2]
Borrow obj3 --> nok, cannot create an activated object [numActive -2]
Invalidate obj3 [numActive -3]

--> Network turns ok.
Borrow obj1 --> ok [numActive -2]
Borrow obj2 --> ok [numActive -1]
Borrow obj3 --> ok [numActive 0]
Return obj1 [numActive -1]
Return obj2 [numActive -2]
Return obj3 [numActive -3]

In this case the object are correctly borrowed and the pool works well, 
but the numActive counter isn't correct and it make me borrow more than 
2 objects (and it's a big problem cause i have limited connections to 
respect).


Byez!
Daniele Bonetto





Il 15/01/2010 11.37, Simone Tripodi ha scritto:

In the example, the catch group catches exceptions that could be
thrown by the object _use_, I *suppose* whenever you catch a
java.util.NoSuchElementException you don't need to invalidate the
object, that's what Mark was pointing.
let us know, all the best,
Simo

On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
  wrote:
   

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 aif  (obj != null)test.

Mark


   

All the best,
Simo

On Fri, Jan 15, 2010 at 10:53 AM, Daniele Bonetto
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 Except

Re: [GenericObjectPool] problem with numActive counter

2010-01-15 Thread Simone Tripodi
In the example, the catch group catches exceptions that could be
thrown by the object _use_, I *suppose* whenever you catch a
java.util.NoSuchElementException you don't need to invalidate the
object, that's what Mark was pointing.
let us know, all the best,
Simo

On Fri, Jan 15, 2010 at 11:26 AM, Daniele Bonetto
 wrote:
> 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 aif  (obj != null)  test.
>>
>> Mark
>>
>>
>>>
>>> All the best,
>>> Simo
>>>
>>> On Fri, Jan 15, 2010 at 10:53 AM, Daniele Bonetto
>>>   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-unsubscr...@commons.apache.org
 For additional commands, e-mail: user-h...@commons.apache.org



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



-- 
http://people.apache.org/~simonetripodi/

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



[GenericObjectPool] problem with numActive counter

2010-01-15 Thread Daniele Bonetto

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 aif  (obj != null)  test.

Mark

   

All the best,
Simo

On Fri, Jan 15, 2010 at 10:53 AM, Daniele Bonetto
  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-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org


   



 




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