[ 
https://issues.apache.org/jira/browse/POOL-283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14307637#comment-14307637
 ] 

Valentin Mayamsin edited comment on POOL-283 at 2/5/15 5:50 PM:
----------------------------------------------------------------

I resolved this issue in my project by switching to 1.6, it doesn't have this 
issue since it's implemented differently. For 2.x let me suggest wrapping 
objects into a wrapper similar to this (pseudo-code):

{code}
class IdentityWrapper {
    Object obj;
    IdentityWrapper(Object obj) {
        this.obj=obj;
    }
    boolean equals(Object that) {
         return that==obj;
    }
    int hashCode() {
        return System.identityHashcode(obj);
    }
}
{code}

The drawback is it will create extra object for each returnObject(Object obj) 
call. I'm not sure how significant is it.


was (Author: yavalek):
I resolved this issue in my project by switching to 1.6, it doesn't have this 
issue since it's implemented differently. For 2.x let me suggest wrapping 
objects into a wrapper similar this (pseudo-code):

{code}
class IdentityWrapper {
    Object obj;
    IdentityWrapper(Object obj) {
        this.obj=obj;
    }
    boolean equals(Object that) {
         return that==obj;
    }
    int hashCode() {
        return System.identityHashcode(obj);
    }
}
{code}

The drawback is it will create extra object for each returnObject(Object obj) 
call. I'm not sure how significant is it.

> 'Object has already been retured to this pool or is invalid' for collections
> ----------------------------------------------------------------------------
>
>                 Key: POOL-283
>                 URL: https://issues.apache.org/jira/browse/POOL-283
>             Project: Commons Pool
>          Issue Type: Bug
>    Affects Versions: 2.2
>            Reporter: Valentin Mayamsin
>
> This test throws exception:
> {code}
>  GenericObjectPoolConfig config = new GenericObjectPoolConfig ();
>         config.setMaxTotal ( 2 );
>         GenericObjectPool<Set> setsPool = new GenericObjectPool<> ( new 
> BasePooledObjectFactory<Set> ()
>         {
>             @Override
>             public Set create () throws Exception
>             {
>                 return new HashSet();
>             }
>             @Override
>             public PooledObject<Set> wrap ( Set o )
>             {
>                 return new DefaultPooledObject<> ( o );
>             }
>             @Override
>             public void passivateObject ( PooledObject<Set> p ) throws 
> Exception
>             {
>                 p.getObject ().clear ();
>                 super.passivateObject ( p );
>             }
>         }, config );
>         final Set set1 = setsPool.borrowObject ();
>         final Set set2 = setsPool.borrowObject ();
>         setsPool.returnObject ( set1 );
>         setsPool.returnObject ( set2 ); // this throws 
> java.lang.IllegalStateException: Object has already been retured to this pool 
> or is invalid
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to