// Path: src/main/java/com/dianping/polestar/jobs/Job.java
// public interface Job {
// 
// 	Integer run() throws Exception;
// 	
// 	void cancel();
// 
// 	boolean isCanceled();
// 
// }
// 
// Path: src/main/java/com/dianping/polestar/jobs/JobManager.java
// public class JobManager {
// 	private final static Map<String, Job> idToJob = new ConcurrentHashMap<String, Job>(
// 			100);
// 	private final static Map<String, JobContext> idToJobContext = new ConcurrentHashMap<String, JobContext>(
// 			100);
// 
// 	public static Job getJobById(String id) {
// 		return idToJob.get(id);
// 	}
// 
// 	public static JobContext getJobContextById(String id) {
// 		return idToJobContext.get(id);
// 	}
// 
// 	public static void putJob(String id, Job job, JobContext jobctx) {
// 		synchronized (JobManager.class) {
// 			idToJob.put(id, job);
// 			idToJobContext.put(id, jobctx);
// 		}
// 	}
// 
// 	public static void removeJob(String id) {
// 		synchronized (JobManager.class) {
// 			idToJob.remove(id);
// 			idToJobContext.remove(id);
// 		}
// 	}
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/dao/QueryDAO.java
// public interface QueryDAO {
// 
// 	public void insertQueryInfo(QueryInfo queryInfo);
// 
// 	public List<QueryInfo> findQueryInfoByUsername(String username);
// 
// 	public void insertQueryProgress(QueryProgress queryProgress);
// 
// 	public QueryProgress findQueryProgressById(String id);
// 
// 	public void insertQueryCancel(QueryCancel qc);
// 
// 	public List<QueryCancel> findQueryCancelWithouHost(String host);
// 
// 	public void deleteQueryCancelById(String id);
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/dao/impl/QueryDAOFactory.java
// public final class QueryDAOFactory {
// 
// 	public static QueryDAO queryDao;
// 
// 	public static QueryDAO getInstance() {
// 		if (queryDao == null) {
// 			synchronized (QueryDAOFactory.class) {
// 				if (queryDao == null) {
// 					AbstractApplicationContext cxt = new ClassPathXmlApplicationContext(
// 							"applicationContext.xml");
// 					queryDao = (QueryDAO) cxt.getBean("queryDaoImpl");
// 				}
// 			}
// 		}
// 		return queryDao;
// 	}
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/domain/QueryCancel.java
// public class QueryCancel {
// 	private String id;
// 	private String host;
// 
// 	public QueryCancel() {
// 	}
// 
// 	public QueryCancel(String id, String host) {
// 		this.id = id;
// 		this.host = host;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getHost() {
// 		return host;
// 	}
// 
// 	public void setHost(String host) {
// 		this.host = host;
// 	}
// }


import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.dianping.polestar.jobs.Job;
import com.dianping.polestar.jobs.JobManager;
import com.dianping.polestar.store.mysql.dao.QueryDAO;
import com.dianping.polestar.store.mysql.dao.impl.QueryDAOFactory;
import com.dianping.polestar.store.mysql.domain.QueryCancel;
package com.dianping.polestar;





public class CancelQueryListener implements ServletContextListener {
	private final static Log LOG = LogFactory.getLog(CancelQueryListener.class);

	private final static long CHECK_DB_INTERVAL_IN_MILLISECONDS = 3000L;
	private final QueryDAO queryDao = QueryDAOFactory.getInstance();

	private CancelQueryThread cancelQueryThread;

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		cancelQueryThread = new CancelQueryThread();
		cancelQueryThread.setDaemon(true);
		cancelQueryThread.start();
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		if (cancelQueryThread != null) {
			cancelQueryThread.interrupt();
		}
	}

	class CancelQueryThread extends Thread {

		@Override
		public void run() {
			LOG.info("start to launch CancelQuery Thread");
			List<QueryCancel> queryCancels = null;
			while (true) {
				try {
					queryCancels = queryDao
							.findQueryCancelWithouHost(EnvironmentConstants.LOCAL_HOST_ADDRESS);
					if (queryCancels != null && queryCancels.size() > 0) {
// Path: src/main/java/com/dianping/polestar/jobs/Job.java
// public interface Job {
// 
// 	Integer run() throws Exception;
// 	
// 	void cancel();
// 
// 	boolean isCanceled();
// 
// }
// 
// Path: src/main/java/com/dianping/polestar/jobs/JobManager.java
// public class JobManager {
// 	private final static Map<String, Job> idToJob = new ConcurrentHashMap<String, Job>(
// 			100);
// 	private final static Map<String, JobContext> idToJobContext = new ConcurrentHashMap<String, JobContext>(
// 			100);
// 
// 	public static Job getJobById(String id) {
// 		return idToJob.get(id);
// 	}
// 
// 	public static JobContext getJobContextById(String id) {
// 		return idToJobContext.get(id);
// 	}
// 
// 	public static void putJob(String id, Job job, JobContext jobctx) {
// 		synchronized (JobManager.class) {
// 			idToJob.put(id, job);
// 			idToJobContext.put(id, jobctx);
// 		}
// 	}
// 
// 	public static void removeJob(String id) {
// 		synchronized (JobManager.class) {
// 			idToJob.remove(id);
// 			idToJobContext.remove(id);
// 		}
// 	}
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/dao/QueryDAO.java
// public interface QueryDAO {
// 
// 	public void insertQueryInfo(QueryInfo queryInfo);
// 
// 	public List<QueryInfo> findQueryInfoByUsername(String username);
// 
// 	public void insertQueryProgress(QueryProgress queryProgress);
// 
// 	public QueryProgress findQueryProgressById(String id);
// 
// 	public void insertQueryCancel(QueryCancel qc);
// 
// 	public List<QueryCancel> findQueryCancelWithouHost(String host);
// 
// 	public void deleteQueryCancelById(String id);
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/dao/impl/QueryDAOFactory.java
// public final class QueryDAOFactory {
// 
// 	public static QueryDAO queryDao;
// 
// 	public static QueryDAO getInstance() {
// 		if (queryDao == null) {
// 			synchronized (QueryDAOFactory.class) {
// 				if (queryDao == null) {
// 					AbstractApplicationContext cxt = new ClassPathXmlApplicationContext(
// 							"applicationContext.xml");
// 					queryDao = (QueryDAO) cxt.getBean("queryDaoImpl");
// 				}
// 			}
// 		}
// 		return queryDao;
// 	}
// }
// 
// Path: src/main/java/com/dianping/polestar/store/mysql/domain/QueryCancel.java
// public class QueryCancel {
// 	private String id;
// 	private String host;
// 
// 	public QueryCancel() {
// 	}
// 
// 	public QueryCancel(String id, String host) {
// 		this.id = id;
// 		this.host = host;
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public String getHost() {
// 		return host;
// 	}
// 
// 	public void setHost(String host) {
// 		this.host = host;
// 	}
// }


// Path: src/main/java/com/dianping/polestar/CancelQueryListener.java
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.dianping.polestar.jobs.Job;
import com.dianping.polestar.jobs.JobManager;
import com.dianping.polestar.store.mysql.dao.QueryDAO;
import com.dianping.polestar.store.mysql.dao.impl.QueryDAOFactory;
import com.dianping.polestar.store.mysql.domain.QueryCancel;

package com.dianping.polestar;





public class CancelQueryListener implements ServletContextListener {
	private final static Log LOG = LogFactory.getLog(CancelQueryListener.class);

	private final static long CHECK_DB_INTERVAL_IN_MILLISECONDS = 3000L;
	private final QueryDAO queryDao = QueryDAOFactory.getInstance();

	private CancelQueryThread cancelQueryThread;

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		cancelQueryThread = new CancelQueryThread();
		cancelQueryThread.setDaemon(true);
		cancelQueryThread.start();
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		if (cancelQueryThread != null) {
			cancelQueryThread.interrupt();
		}
	}

	class CancelQueryThread extends Thread {

		@Override
		public void run() {
			LOG.info("start to launch CancelQuery Thread");
			List<QueryCancel> queryCancels = null;
			while (true) {
				try {
					queryCancels = queryDao
							.findQueryCancelWithouHost(EnvironmentConstants.LOCAL_HOST_ADDRESS);
					if (queryCancels != null && queryCancels.size() > 0) {
						for (QueryCancel qc : queryCancels) {