blob: 7543ad1dce157b50be600858d2e587907c3541c8 [file] [log] [blame]
/*
* This file is part of the QuickServer library
* Copyright (C) QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/
package org.quickserver.util.pool;
import org.quickserver.net.server.ClientHandler;
import org.quickserver.net.server.impl.*;
import org.apache.commons.pool.BasePoolableObjectFactory;
/**
* A factory for creating {@link org.quickserver.net.server.ClientHandler}
* instances.
* @author Akshathkumar Shetty
* @since 1.3
*/
public class ClientHandlerObjectFactory extends BasePoolableObjectFactory {
private static int instanceCount = 0;
private int id = -1;
private boolean blocking = true;
public ClientHandlerObjectFactory(boolean blocking) {
super();
id = ++instanceCount;
this.blocking = blocking;
}
//Creates an instance that can be returned by the pool.
public Object makeObject() {
if(blocking)
return new BlockingClientHandler(id);
else
return new NonBlockingClientHandler(id);
}
//Uninitialize an instance to be returned to the pool.
public void passivateObject(Object obj) {
ClientHandler ch = (ClientHandler)obj;
ch.clean();
}
//Reinitialize an instance to be returned by the pool.
public void activateObject(Object obj) {
}
//Destroys an instance no longer needed by the pool.
public void destroyObject(Object obj) {
if(obj==null) return;
passivateObject(obj);
obj = null;
}
//Ensures that the instance is safe to be returned by the pool.
public boolean validateObject(Object obj) {
if(obj==null)
return false;
BasicClientHandler ch = (BasicClientHandler)obj;
if(ch.getInstanceCount()==id)
return true;
else {
return false;
}
}
}