ingo@100: /*
ingo@100:  * Copyright (c) 2010 by Intevation GmbH
ingo@100:  *
ingo@100:  * This program is free software under the LGPL (>=v2.1)
ingo@100:  * Read the file LGPL.txt coming with the software for details
ingo@100:  * or visit http://www.gnu.org/licenses/ if it does not exist.
ingo@100:  */
ingo@100: 
sascha@2: package de.intevation.artifactdatabase;
sascha@2: 
sascha@207: import de.intevation.artifacts.common.utils.Config;
sascha@207: 
sascha@263: import de.intevation.artifactdatabase.rest.HTTPServer;
sascha@19: 
sascha@19: import java.io.File;
sascha@19: 
sascha@19: import java.net.MalformedURLException;
sascha@19: 
sascha@19: import org.apache.log4j.PropertyConfigurator;
sascha@19: 
ingo@83: import org.slf4j.bridge.SLF4JBridgeHandler;
ingo@83: 
sascha@5: /**
sascha@5:  * Starting point of the artifact database.
sascha@5:  *
sascha@77:  * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
sascha@5:  */
sascha@2: public class App
sascha@2: {
sascha@87:     /**
sascha@87:      * The logging is done via Log4j. To configure the logging
sascha@87:      * a file 'log4j.properties' is search in the configuration directory.
sascha@87:      */
sascha@19:     public static final String LOG4J_PROPERTIES =
sascha@19:         "log4j.properties";
sascha@19: 
sascha@87:     /**
sascha@87:      * Trys to load the Log4j configuration from ${config.dir}/log4j.properties.
sascha@87:      */
sascha@19:     public static final void configureLogging() {
sascha@19:         File configDir = Config.getConfigDirectory();
sascha@19:         File propFile = new File(configDir, LOG4J_PROPERTIES);
sascha@19: 
sascha@19:         if (propFile.isFile() && propFile.canRead()) {
sascha@19:             try {
sascha@19:                 PropertyConfigurator.configure(propFile.toURI().toURL());
ingo@83:                 SLF4JBridgeHandler.install();
sascha@19:             }
sascha@19:             catch (MalformedURLException mue) {
sascha@19:                 mue.printStackTrace(System.err);
sascha@19:             }
sascha@19:         }
sascha@19:     }
sascha@19: 
sascha@87:     /**
sascha@87:      * Starts the artifact database.
sascha@87:      * @param args The commandline arguments. Unused.
sascha@87:      */
sascha@2:     public static void main(String[] args) {
sascha@19: 
sascha@19:         configureLogging();
sascha@19: 
sascha@5:         FactoryBootstrap bootstrap = new FactoryBootstrap();
sascha@5: 
sascha@5:         bootstrap.boot();
sascha@13: 
ingo@128:         Backend backend = Backend.getInstance();
sascha@32: 
sascha@32:         ArtifactDatabaseImpl db = new ArtifactDatabaseImpl(
sascha@32:             bootstrap, backend);
sascha@32: 
sascha@30:         DatabaseCleaner cleaner = new DatabaseCleaner(
sascha@305:             bootstrap.getContext(), backend, backend.getConfig());
sascha@30: 
sascha@263:         HTTPServer httpServer = bootstrap.getHTTPServer();
sascha@263: 
ingo@79:         bootstrap = null;
ingo@79: 
sascha@32:         backend.setCleaner(cleaner);
sascha@30: 
sascha@230:         cleaner.setLockedIdsProvider(db);
sascha@13: 
sascha@32:         cleaner.start();
sascha@19: 
sascha@304:         db.start();
sascha@304: 
sascha@263:         httpServer.startAsServer(db);
sascha@2:     }
sascha@2: }
ingo@79: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :