German Castro Donoso wrote:
I have to do something special when a validateObject fails or when I
invalidate an object?
No, you should not have to do anything special.
The error always occurs after that I discard an object, but I only see one
call to invalidateObject XOR returnObject...
That is odd, since only these decrement numActive. Are you sure neither
can be executed twice on the same object without it being borrowed back
from the pool in between?
Phil
Germán
On Tue, Aug 5, 2008 at 5:21 AM, Phil Steitz <[EMAIL PROTECTED]> wrote:
German Castro Donoso wrote:
Hi,
The pool is the version 1.4
The settings for the pool are:
pool = new GenericObjectPool(new PinCenterPoolFactory(), 10);
pool.setTestWhileIdle(true);
pool.setMaxIdle(5);
pool.setTimeBetweenEvictionRunsMillis(45000);
pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_FAIL);
The secuence of execution that I'm seeying is:
18:05:00 <DEBUG>[validateObject] Send message keepalive failed
Caused by: java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
at java.net.SocketOutputStream.write(SocketOutputStream.java:124)
at
com.sodimac.irtm.pincenter.PinConnection.sendRequest(PinConnection.java:170)
... 6 more
18:05:03 <DEBUG>[destroyObject] Closing socket (client port=33792)
18:05:03 <DEBUG>[destroyObject] Closing socket (client port=33792)
...
...
18:24:58 <DEBUG>[getConnection-63262596] Objects in pool idle=1 active=-1
What would explain both the active = -1 here and multiple clients ending up
with the same instances is if your client code is returning the same
instance twice without a borrowObject in between. See the note here:
http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPool.html#returnObject(java.lang.Object)<http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPool.html#returnObject%28java.lang.Object%29>
Phil
18:24:58 <DEBUG>[sendRequest-63262596] Sending message (client port:35525)
18:25:00 <DEBUG>[getConnection-730089636] Objects in pool idle=0 active=0
18:25:00 <DEBUG>[validateObject] Sending keepalive message
18:25:00 <DEBUG>[sendRequest-730089636] Enviando mensaje (client
port:35525)
18:25:00 <DEBUG>[sendRequest-63262596] Recibiendo mensaje (client
port:35525)
18:25:01 <DEBUG>[sendRequest-730089636] Recibiendo mensaje (client
port:35525)
18:25:01 <DEBUG>[close-63262596] Returning socket to pool
18:25:01 <DEBUG>[close-730089636] Returning socket to pool
The main code of the pool is (I deleted some unimportants lines of code):
public class PinPoolFactory implements PoolableObjectFactory
{
private int numFails;
public PinPoolFactory() throws BadPropertiesException {
super();
}
public Object makeObject() throws UnknownHostException, IOException {
PinConnection con = new PinConnection();
return con;
}
public void destroyObject(Object o){
PinConnection con = (PinConnection)o;
try{
con.disconnect();
}catch(Exception e){
}
}
// Here we check that the connection is alive, first with the socket
state.
// If socket is connected we have to send a "keep alive" packet to
server.
public boolean validateObject(Object o){
PinConnection con = (PinConnection)o;
if(!con.isConnected()){
return false;
}
while(!con.keepAlive() && con.getFailedMessages()<numFails){
try{
con.disconnect();
con.connect();
}catch(Exception e){
}
};
if(con.getFailedMessages()!=0){
try{
con.disconnect();
}catch(Exception e){}
return false;
}
return true;
}
public void activateObject(Object o){
}
public void passivateObject(Object o){
}
}
Any Idea?
Germán
On Sun, Aug 3, 2008 at 10:20 AM, Phil Steitz <[EMAIL PROTECTED]> wrote:
German Castro Donoso wrote:
Hello,
I have a pool that contains tcp sockets, looking the log files i've
noticed
that some times when a socket fails (in the validateObject function) the
object is destroyed... but twice. After that, when the pool recive 2
simultaneus request for a socket, the pool give the same socket to two
diferent clients at the same time.
Anybody had have a similar problem? it's a bug in my code or a bug in
the
pool?
What version of pool are you running? Can you provide more info on
configuration and what you are seeing in your code?
Phil
Thanks for any help.
Germán
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]