Package org.springframework.data.hadoop.server

Source Code of org.springframework.data.hadoop.server.SpringDataServer

package org.springframework.data.hadoop.server;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.hadoop.jetty.BatchAdminServer;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;

public class SpringDataServer {

  private static final Log log = LogFactory.getLog(SpringDataServer.class);

  public static void main(String[] args) throws Exception {
   
    SpringDataServerOptions options = new  SpringDataServerOptions();
    CmdLineParser parser = new CmdLineParser(options);
    try {
      parser.parseArgument(args);
    } catch (CmdLineException e) {
      log.error(e.getMessage());
      parser.printUsage(System.err);
      System.exit(-1);
    }

    log.info("Running SpringDataServer");
       
    ExecutorService executorService = Executors.newFixedThreadPool(4, new CustomizableThreadFactory("server-"));
    List<Callable<Void>> tasks = new ArrayList<Callable<Void>>();
    if (options.getAppConfig() != null) {
      tasks.add(createIntegrationCallable(options));
    } else if (options.isBatchAdmin() == true ) {
      tasks.add(createAdminCallable());
    } else {
      parser.printUsage(System.err);
    }
    executorService.invokeAll(tasks);
   
   
  }

  private static void launchDatabase() throws SQLException {
    new ClassPathXmlApplicationContext(
        "/META-INF/spring/batch/override/datasource-context.xml",
        "/META-INF/spring/batch/initialize/initialize-batch-schema-context.xml",
        "/META-INF/spring/batch/initialize/initialize-product-table-context.xml",
        "/META-INF/spring/batch/initialize/initialize-product-export-table-context.xml"
      );
  }

  /**
   *
   */
  private static Callable<Void> createIntegrationCallable(final SpringDataServerOptions options) {
    log.info("Running Spring Integration Application in config dir [" + options.getAppConfig() + "]");
    Callable<Void> siCallable = new Callable<Void>() {

      @Override
      public Void call() throws Exception {
        String appContextFile = "/" + options.getAppConfig() + "/application-context.xml";
        log.info("Loading context " + appContextFile);
        AbstractApplicationContext context = new ClassPathXmlApplicationContext(appContextFile);
        context.registerShutdownHook();
        return null;
      }
     
    };
    return siCallable;
  }

  /**
   *
   */
  private static Callable<Void> createAdminCallable() {
    log.info("Running Spring Batch Admin");
    Callable<Void> adminCallable = new Callable<Void>() {
      @Override
      public Void call() throws Exception {
       
        try {
          log.info("Creating embedded database, initializing Spring Batch Admin schema, initializing product table data");
          launchDatabase();
        } catch (SQLException e) {
          log.error("Could not launch H2 database");
          log.error(e);
          System.exit(-1);
        }
       
        log.info("Creating Spring Batch Admin embedded web container.");       
        BatchAdminServer adminServer = new BatchAdminServer();
        adminServer.start();
        return null;
      }
    };
    return adminCallable;
  }

}
TOP

Related Classes of org.springframework.data.hadoop.server.SpringDataServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.