package act.boot.app; /*- * #%L * ACT Framework * %% * Copyright (C) 2014 - 2017 ActFramework * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import act.Act; import act.conf.AppConfigKey; import act.util.SysProps; import org.osgl.$; import org.osgl.logging.Logger; import org.osgl.util.E; import org.osgl.util.S; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * The entry to start an Act full stack app */ public class RunApp { private static final Logger LOGGER = Act.LOGGER; /** * Start the application. * * ActFramework will scan the package defined by system property `act.scan_package` * * @throws Exception */ public static void start() throws Exception { start(null, null, ""); } public static void start(Class<?> anyController) throws Exception { start(null, null, anyController); } public static void start(String packageName) throws Exception { start(null, null, packageName); } public static void start(String appName, String appVersion, Class<?> anyController) throws Exception { String pkg = anyController.getPackage().getName(); start(appName, appVersion, pkg); } public static void start(String appName, String appVersion, String packageName) throws Exception { long ts = $.ms(); String profile = SysProps.get(AppConfigKey.PROFILE.key()); if (S.blank(profile)) { profile = ""; } else { profile = "using profile[" + profile + "]"; } LOGGER.debug("run fullstack application with package[%s] %s", packageName, profile); //System.setProperty(AppConfigKey.CONTROLLER_PACKAGE.key(), packageName); final String SCAN_PACKAGE = AppConfigKey.SCAN_PACKAGE.key(); if (S.notBlank(packageName)) { System.setProperty(SCAN_PACKAGE, packageName); } FullStackAppBootstrapClassLoader classLoader = new FullStackAppBootstrapClassLoader(RunApp.class.getClassLoader()); Thread.currentThread().setContextClassLoader(classLoader); Class<?> actClass = classLoader.loadClass("act.Act"); Method m = actClass.getDeclaredMethod("startApp", String.class, String.class); try { m.invoke(null, appName, appVersion); } catch (InvocationTargetException e) { Throwable t = e.getCause(); if (t instanceof Exception) { throw (Exception) t; } else { throw E.unexpected(t, "Unknown error captured starting the application"); } } LOGGER.info("it takes %sms to start the app\n", $.ms() - ts); } public static void main(String[] args) throws Exception { start(); } }