package ilarkesto.di.app; import ilarkesto.base.Sys; import ilarkesto.base.time.DateAndTime; import ilarkesto.cli.ACommand; import ilarkesto.core.logging.Log; import ilarkesto.di.BeanContainer; import ilarkesto.di.BeanProvider; import ilarkesto.di.MultiBeanProvider; import ilarkesto.io.IO; import ilarkesto.logging.DefaultLogDataHandler; import ilarkesto.logging.JavaLogging; import ilarkesto.logging.Log4jLogging; import java.util.Locale; public class ApplicationStarter { private static final Log LOG = Log.get(ApplicationStarter.class); public static <A extends AApplication> A startApplication(Class<A> applicationClass, BeanProvider beanProvider, String... arguments) { Sys.storeStartupTime(); DefaultLogDataHandler.activate(); Log.setDebugEnabled(Sys.isDevelopmentMode()); LOG.info("********************************************************************************"); LOG.info("Starting application:", applicationClass.getName()); logEnvironmentInfo(); LOG.info(" arguments: ", arguments); try { A application = applicationClass.newInstance(); if (beanProvider != null) beanProvider.autowire(application); DefaultLogDataHandler.setLogFileToHomeOrWorkdir(application.getApplicationName()); JavaLogging.redirectToLoggers(); try { Log4jLogging.redirectToLoggers(); } catch (Throwable ex) {} application.setArguments(arguments); application.start(); LOG.info("Application started:", application); LOG.info("********************************************************************************\n"); return application; } catch (Throwable ex) { LOG.fatal("Starting application failed.", ex); throw new RuntimeException(ex); } } public static void logEnvironmentInfo() { String mode = Sys.isDevelopmentMode() ? "DEVELOPMENT" : "PRODUCTION"; LOG.info(" ", mode, "MODE"); LOG.info(" time: ", new DateAndTime(Sys.getStartupTime())); LOG.info(" system user: ", Sys.getUsersName()); LOG.info(" user home: ", Sys.getUsersHomePath()); LOG.info(" work-path: ", IO.getWorkDir()); LOG.info(" temp-path: ", IO.getTempDir()); LOG.info(" locale: ", Locale.getDefault()); LOG.info(" encoding: ", Sys.getFileEncoding()); LOG.info(" java: ", Sys.getJavaHome()); // LOG.info(" java version: ", Sys.getJavaRuntimeVersion()); } public static <A extends AApplication> A startApplication(Class<A> applicationClass, String... arguments) { return startApplication(applicationClass, new MultiBeanProvider(), arguments); } public static void executeCommand(Class<? extends ACommand> commandClass, String... arguments) { BeanContainer beanContainer = new BeanContainer(); beanContainer.put("commandClass", commandClass); startApplication(CommandApplication.class, beanContainer, arguments); } // --- dependencies --- }