package com.meidusa.amoeba.aladdin.handler;
import java.util.concurrent.CountDownLatch;
import org.apache.log4j.Logger;
import com.meidusa.amoeba.aladdin.io.ResultPacket;
import com.meidusa.amoeba.mysql.net.MysqlClientConnection;
import com.meidusa.amoeba.net.MessageHandler;
import com.meidusa.amoeba.net.poolable.PoolableObject;
/**
* @author struct
* @author hexianmao
* @version 2008-11-24 ����10:38:34
*/
public abstract class QueryRunnable implements MessageHandlerRunner {
private static Logger logger = Logger.getLogger(QueryRunnable.class);
protected Object parameter;
protected ResultPacket packet;
protected String query;
protected MysqlClientConnection source;
private CountDownLatch latch;
private PoolableObject conn;
public QueryRunnable(CountDownLatch latch, PoolableObject conn, String query, Object parameter, ResultPacket packet){
this.latch = latch;
this.conn = conn;
this.query = query;
this.parameter = parameter;
this.packet = packet;
}
public void init(MessageHandler handler) {
this.source = ((CommandMessageHandler) handler).source;
}
protected static boolean isSelect(String query) {
char ch = query.trim().charAt(0);
if (ch == 's' || ch == 'S') {
return true;
} else {
return false;
}
}
/**
* PoolableObject ����end session �з��ص�pool��
*/
protected abstract void doRun(PoolableObject conn);
public void run() {
try {
try {
doRun(conn);
} catch (Exception e) {
logger.error("run query error:", e);
}
} finally {
if (latch != null) {
latch.countDown();
}
reset();
}
}
public void reset() {
source = null;
query = null;
packet = null;
latch = null;
parameter = null;
conn = null;
}
}