Skip to content

Commit

Permalink
Refactored the platform/application start-up.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Feb 8, 2017
1 parent cb149a3 commit 4b20576
Show file tree
Hide file tree
Showing 9 changed files with 94 additions and 29 deletions.
1 change: 1 addition & 0 deletions rapidoid-commons/src/main/resources/rapidoid-classes.txt
Expand Up @@ -712,6 +712,7 @@ org.rapidoid.setup.OnChanges
org.rapidoid.setup.OnError
org.rapidoid.setup.OnRoute
org.rapidoid.setup.PojoHandlersSetup
org.rapidoid.setup.PreApp
org.rapidoid.setup.ProxyConfigListener
org.rapidoid.setup.ReloadUtil
org.rapidoid.setup.ServiceActivator
Expand Down
15 changes: 2 additions & 13 deletions rapidoid-http-server/src/main/java/org/rapidoid/setup/App.java
Expand Up @@ -26,7 +26,6 @@
import org.rapidoid.collection.Coll;
import org.rapidoid.commons.Arr;
import org.rapidoid.config.Conf;
import org.rapidoid.config.ConfigHelp;
import org.rapidoid.config.RapidoidInitializer;
import org.rapidoid.data.JSON;
import org.rapidoid.env.Env;
Expand Down Expand Up @@ -62,20 +61,10 @@ public class App extends RapidoidInitializer {

static volatile ClassLoader loader = App.class.getClassLoader();

public static void args(String[] args, String... extraArgs) {
args = Arr.concat(extraArgs, args);

ConfigHelp.processHelp(args);

Env.setArgs(args);

AppVerification.selfVerify(args);
}

public static AppBootstrap bootstrap(String[] args, String... extraArgs) {
args = Arr.concat(extraArgs, args);

args(args);
PreApp.args(args);

scan();

Expand All @@ -85,7 +74,7 @@ public static AppBootstrap bootstrap(String[] args, String... extraArgs) {
public static AppBootstrap run(String[] args, String... extraArgs) {
args = Arr.concat(extraArgs, args);

args(args);
PreApp.args(args);
// no implicit classpath scanning here

return boot();
Expand Down
44 changes: 44 additions & 0 deletions rapidoid-http-server/src/main/java/org/rapidoid/setup/PreApp.java
@@ -0,0 +1,44 @@
package org.rapidoid.setup;

/*
* #%L
* rapidoid-http-server
* %%
* 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 org.rapidoid.commons.Arr;
import org.rapidoid.config.ConfigHelp;
import org.rapidoid.env.Env;

@Authors("Nikolche Mihajlovski")
@Since("5.3.0")
public class PreApp extends RapidoidThing {

public static void args(String[] args, String... extraArgs) {
args = Arr.concat(extraArgs, args);

ConfigHelp.processHelp(args);

Env.setArgs(args);

AppVerification.selfVerify(args);
}

}
Expand Up @@ -49,7 +49,7 @@ public void testDefault() throws Exception {
public void testAppSetup() throws Exception {
Env.reset();

App.args(new String[0], "profiles=mysql", "mode=production");
App.run(new String[0], "profiles=mysql", "mode=production");
Conf.ROOT.set("id", "rpd123");
ClasspathUtil.appJar("/a/b.jar");

Expand Down
Expand Up @@ -21,6 +21,7 @@
*/

import org.apache.commons.logging.LogFactory;
import org.apache.maven.cli.MavenCli;
import org.apache.maven.plugin.AbstractMojo;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.junit.Test;
Expand Down Expand Up @@ -53,6 +54,7 @@ public void classesShouldExtendRapidoidThing() {
|| OutputStream.class.isAssignableFrom(clazz)
|| Map.class.isAssignableFrom(clazz)
|| AbstractMojo.class.isAssignableFrom(clazz)
|| MavenCli.class.isAssignableFrom(clazz)
|| LogFactory.class.isAssignableFrom(clazz)
|| Thread.class.isAssignableFrom(clazz), "" + cls);
}
Expand Down
Expand Up @@ -20,6 +20,7 @@
* #L%
*/

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.http.HTTP;
Expand All @@ -32,7 +33,7 @@

@Authors("Nikolche Mihajlovski")
@Since("5.3.0")
public class AppDownloader {
public class AppDownloader extends RapidoidThing {

private static final String REPOSITORY_NAME = "[-\\w]+";
private static final String GITHUB_REPO_ZIP = "https://github.com/%s/%s/archive/master.zip";
Expand Down
Expand Up @@ -21,6 +21,7 @@
*/

import org.apache.maven.cli.MavenCli;
import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.io.IO;
Expand All @@ -32,17 +33,17 @@

@Authors("Nikolche Mihajlovski")
@Since("5.3.0")
public class MavenUtil {
public class MavenUtil extends RapidoidThing {

public static void findAndBuildAndDeploy(String location) {
List<String> locations = IO.find("pom.xml").files().in(location).recursive().getLocations();

if (!locations.isEmpty()) {
for (String basedir : locations) {
buildAndDeploy(basedir, "/data/.m2/repository", U.list("-e", "-X", "clean", "org.rapidoid:deploy:jar"), true);
buildAndDeploy(basedir, "/data/.m2/repository", U.list("-e", "-X", "clean", "org.rapidoid:build:jar"), true);
}
} else {
Log.warn("Didn't find any pom.xml file!");
Log.warn("Didn't find any pom.xml file!", "location", location);
}
}

Expand Down
29 changes: 18 additions & 11 deletions rapidoid-platform/src/main/java/org/rapidoid/platform/Platform.java
Expand Up @@ -50,12 +50,11 @@ static void start(String[] args, @SuppressWarnings("unused") boolean defaults) {

Log.options().prefix("[PLATFORM] ");
Log.options().inferCaller(false);
Log.options().showThread(false);

Msc.setPlatform(true);

args = filterPlatformSpecificArgs(args);

App.run(args);
startPlatformAndProcessArgs(args);

AppDeployer.bootstrap();

Expand All @@ -70,21 +69,29 @@ static void start(String[] args, @SuppressWarnings("unused") boolean defaults) {
openInBrowser();
}

private static String[] filterPlatformSpecificArgs(String[] args) {
List<String> remainingArgs = U.list();
private static void startPlatformAndProcessArgs(String[] args) {
List<String> normalArgs = U.list();
List<String> appRefs = U.list();

separateArgs(args, normalArgs, appRefs);

App.run(U.arrayOf(String.class, normalArgs));

for (String appRef : appRefs) {
AppDownloader.download(appRef, "/apps");
MavenUtil.findAndBuildAndDeploy("/apps");
}
}

private static void separateArgs(String[] args, List<String> normalArgs, List<String> appRefs) {
for (String arg : args) {
if (arg.startsWith("@")) {
String appRef = arg.substring(1);
AppDownloader.download(appRef, "/app");
MavenUtil.findAndBuildAndDeploy("/app");

appRefs.add(appRef);
} else {
remainingArgs.add(arg);
normalArgs.add(arg);
}
}

return remainingArgs.toArray(new String[remainingArgs.size()]);
}

private static void openInBrowser() {
Expand Down
@@ -1,5 +1,25 @@
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.junit.Test;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
Expand Down

0 comments on commit 4b20576

Please sign in to comment.