diff --git a/commons/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java b/commons/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java index 7ff74244c3..858c8a4455 100644 --- a/commons/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java +++ b/commons/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java @@ -40,7 +40,8 @@ @Since("2.0.0") public class Conf extends RapidoidThing { - private static final String CONFIG_NAME = Msc.isPlatform() ? "rapidoid" : "config"; + private static final String CONFIG_NAME = Msc.isMultiAppPlatform() ? "rapidoid" : "config"; + public static final Config ROOT = new ConfigImpl(CONFIG_NAME, true); private static final Map SECTIONS = Coll.autoExpandingMap(new Mapper() { diff --git a/local-docker-build/Dockerfile b/local-docker-build/Dockerfile index 80d282c32e..753ac77f00 100644 --- a/local-docker-build/Dockerfile +++ b/local-docker-build/Dockerfile @@ -18,7 +18,6 @@ COPY entrypoint.sh /opt/ COPY rapidoid.jar $RAPIDOID_JAR RUN set -xe \ - && mkdir /app \ && mkdir -p "$RAPIDOID_TMP" ENTRYPOINT ["/opt/entrypoint.sh"] diff --git a/rapidoid-gui/src/main/java/org/rapidoid/gui/HtmlPage.java b/rapidoid-gui/src/main/java/org/rapidoid/gui/HtmlPage.java index 4f2578b4ea..b56d144d3c 100644 --- a/rapidoid-gui/src/main/java/org/rapidoid/gui/HtmlPage.java +++ b/rapidoid-gui/src/main/java/org/rapidoid/gui/HtmlPage.java @@ -14,9 +14,9 @@ import org.rapidoid.render.Templates; import org.rapidoid.u.U; import org.rapidoid.util.Msc; -import org.rapidoid.writable.WritableUtils; -import org.rapidoid.writable.WritableOutputStream; import org.rapidoid.web.ScreenBean; +import org.rapidoid.writable.WritableOutputStream; +import org.rapidoid.writable.WritableUtils; import java.io.OutputStream; import java.util.List; @@ -47,8 +47,8 @@ @Since("5.0.0") public class HtmlPage extends ScreenBean { - private static volatile String commonJs = Msc.isPlatform() ? "_rapidoid/platform.js" : "application.js"; - private static volatile String commonCss = Msc.isPlatform() ? "_rapidoid/platform.css" : "application.css"; + private static volatile String commonJs = Msc.isMultiAppPlatform() ? "_rapidoid/platform.js" : "application.js"; + private static volatile String commonCss = Msc.isMultiAppPlatform() ? "_rapidoid/platform.css" : "application.css"; private static volatile Template PAGE_TEMPLATE = Templates.load("page.html"); private static volatile Template PAGE_AJAX_TEMPLATE = Templates.load("page-ajax.html"); diff --git a/rapidoid-platform/src/main/java/org/rapidoid/deploy/AppDeployer.java b/rapidoid-platform/src/main/java/org/rapidoid/deploy/AppDeployer.java index 1e71ec7649..899aed2fa5 100644 --- a/rapidoid-platform/src/main/java/org/rapidoid/deploy/AppDeployer.java +++ b/rapidoid-platform/src/main/java/org/rapidoid/deploy/AppDeployer.java @@ -130,6 +130,7 @@ static Processes processes() { public static void bootstrap() { String appJar = Msc.mainAppJar(); + if (U.notEmpty(appJar)) { runIfExists("app", appJar); } diff --git a/rapidoid-platform/src/main/java/org/rapidoid/platform/Main.java b/rapidoid-platform/src/main/java/org/rapidoid/platform/Main.java index 1086185b9e..4fb6755284 100644 --- a/rapidoid-platform/src/main/java/org/rapidoid/platform/Main.java +++ b/rapidoid-platform/src/main/java/org/rapidoid/platform/Main.java @@ -29,6 +29,7 @@ import org.rapidoid.log.Log; import org.rapidoid.performance.BenchmarkCenter; import org.rapidoid.u.U; +import org.rapidoid.util.Msc; @Authors("Nikolche Mihajlovski") @Since("5.1.0") @@ -36,7 +37,7 @@ public class Main extends RapidoidThing { public static void main(String[] args) { // just print basic info if no args were specified - if (U.isEmpty(args)) { + if (U.isEmpty(args) && !Msc.isSingleApp()) { printWelcome(); } else { diff --git a/rapidoid-platform/src/main/java/org/rapidoid/platform/Platform.java b/rapidoid-platform/src/main/java/org/rapidoid/platform/Platform.java index 5f596bc105..c65807d7e5 100644 --- a/rapidoid-platform/src/main/java/org/rapidoid/platform/Platform.java +++ b/rapidoid-platform/src/main/java/org/rapidoid/platform/Platform.java @@ -38,6 +38,7 @@ import org.rapidoid.util.MscOpts; import java.io.File; +import java.util.List; @Authors("Nikolche Mihajlovski") @Since("5.3.0") @@ -52,13 +53,22 @@ static void start(CmdArgs options) { printAdminCenterURL(); - AppDeployer.bootstrap(); + if (Msc.isSingleApp() && !Env.dev()) { + runSingleApp(options); + } else { + AppDeployer.bootstrap(); + } if (!Setup.isAnyRunning()) { On.setup().activate(); } } + private static void runSingleApp(CmdArgs options) { + Log.info("Running in single-app mode"); + App.run(U.arrayOf(String.class, options.options)); + } + private static void printAdminCenterURL() { if (Env.dev()) { long port = Conf.RAPIDOID.entry("port").num().get(); @@ -79,7 +89,14 @@ private static void startPlatformAndProcessOptions(CmdArgs cmdArgs) { App.boot().services(); - for (String appRef : cmdArgs.refs) { + if (U.notEmpty(cmdArgs.refs)) { + U.must(!Msc.isSingleApp(), "Cannot run external applications in single-app mode!"); + processExternalApps(cmdArgs.refs); + } + } + + private static void processExternalApps(List refs) { + for (String appRef : refs) { new File(MscOpts.appsPath()).mkdirs(); AppDownloader.download(appRef, MscOpts.appsPath()); } diff --git a/rapidoid-platform/src/test/app1/config.yml b/rapidoid-platform/src/test/app1/config.yml new file mode 100644 index 0000000000..0a5a1679d8 --- /dev/null +++ b/rapidoid-platform/src/test/app1/config.yml @@ -0,0 +1 @@ +id: single-app1 diff --git a/rapidoid-platform/src/test/java/org/rapidoid/platform/RunInSingleAppMode.java b/rapidoid-platform/src/test/java/org/rapidoid/platform/RunInSingleAppMode.java new file mode 100644 index 0000000000..19accba1d5 --- /dev/null +++ b/rapidoid-platform/src/test/java/org/rapidoid/platform/RunInSingleAppMode.java @@ -0,0 +1,44 @@ +package org.rapidoid.platform; + +/* + * #%L + * rapidoid-platform + * %% + * Copyright (C) 2014 - 2017 Nikolche Mihajlovski and contributors + * %% + * 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 org.rapidoid.RapidoidThing; +import org.rapidoid.annotation.Authors; +import org.rapidoid.annotation.Since; + +import java.io.File; + +@Authors("Nikolche Mihajlovski") +@Since("5.4.6") +public class RunInSingleAppMode extends RapidoidThing { + + private static final String APP_PATH = new File("rapidoid-platform/src/test/app1").getAbsolutePath(); + + private static final String[] ARGS = { + "dev", + "root=" + APP_PATH, + }; + + public static void main(String[] args) { + Main.main(ARGS); + } + +}