tim@132: package de.intevation.gnv.geobackend.base.query; tim@132: tim@132: import org.apache.log4j.Logger; tim@132: tim@132: /** tim@132: * @author Tim Englich tim@132: * tim@132: */ tim@132: public class QueryExecutorFactory { sascha@541: sascha@541: public static final String QUERY_EXECUTOR_FACTORY = "query.executor.factory"; sascha@885: tim@132: /** tim@132: * the logger, used to log exceptions and additonaly information tim@132: */ tim@132: private static Logger log = Logger.getLogger(QueryExecutorFactory.class); tim@132: sascha@885: tim@132: /** tim@132: * The singleton Instance of this Factory. tim@132: */ tim@132: private static QueryExecutorFactory instance = null; tim@132: tim@132: /** tim@132: * Basic-Constructor of this Class tim@132: */ sascha@541: public QueryExecutorFactory() { tim@132: super(); tim@132: } tim@132: tim@132: /** tim@132: * This Method provides an singleton Instance of this Class. tim@132: * @return an singleton Instance of this Class tim@132: */ sascha@541: public static synchronized QueryExecutorFactory getInstance(){ sascha@541: if (instance == null) { sascha@541: String className = System.getProperty(QUERY_EXECUTOR_FACTORY); sascha@541: if (className != null) { sascha@541: try { sascha@541: Class clazz = Class.forName(className); sascha@542: final QueryExecutorFactory factory = sascha@542: (QueryExecutorFactory)clazz.newInstance(); sascha@542: Runtime.getRuntime().addShutdownHook(new Thread() { tim@884: @Override sascha@542: public void run() { sascha@542: factory.shutdown(); sascha@542: } sascha@542: }); sascha@542: return instance = factory; sascha@541: } sascha@541: catch (ClassNotFoundException cnfe) { sascha@541: log.error(cnfe); sascha@541: } sascha@541: catch (InstantiationException ie) { sascha@541: log.error(ie); sascha@541: } sascha@541: catch(IllegalAccessException iae) { sascha@541: log.error(iae); sascha@541: } sascha@541: catch (ClassCastException cce) { sascha@541: log.error(cce); sascha@541: } sascha@541: } sascha@541: tim@132: instance = new QueryExecutorFactory(); tim@132: } tim@132: return instance; tim@132: } sascha@542: sascha@542: public void shutdown() { sascha@542: } sascha@885: tim@132: /** tim@132: * Getting the QueryExecutor tim@132: * @return the QueryExecutor tim@132: */ tim@132: public QueryExecutor getQueryExecutor(){ tim@132: return new DefaultQueryExceutor(); tim@132: } tim@132: }