[ 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)