blob: ca5dd3ac54c7aa14fddb9f8408168660613239bd [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.thread;
import org.apache.commons.pool.BasePoolableObjectFactory;
/**
* A factory for creating {@link org.quickserver.util.pool.thread.ClientThread}
* instances.
* @author Akshathkumar Shetty
* @since 1.3
*/
public class ThreadObjectFactory extends BasePoolableObjectFactory {
private ClientPool pool;
private static int instanceCount = 0;
private int id = -1;
public ThreadObjectFactory() {
super();
id = ++instanceCount;
}
public void setClientPool(ClientPool pool) {
this.pool = pool;
}
//Creates an instance that can be returned by the pool.
public Object makeObject() {
ClientThread ct = new ClientThread(pool, id);
ct.start();
return ct;
}
//Uninitialize an instance to be returned to the pool.
public void passivateObject(Object obj) {
((ClientThread)obj).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;
Thread thread = (Thread) obj;
synchronized(thread) {
thread.interrupt();
}
thread = null;
}
//Ensures that the instance is safe to be returned by the pool.
public boolean validateObject(Object obj) {
if(obj==null) return false;
Thread thread = (Thread)obj;
return thread.isAlive();
}
}