Skip to content

Commit

Permalink
Fixed the configuration-based server setup.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Feb 22, 2017
1 parent bbc5ade commit affd32e
Show file tree
Hide file tree
Showing 10 changed files with 60 additions and 31 deletions.
2 changes: 1 addition & 1 deletion docker-tests/output/admin-service-foo.txt
Expand Up @@ -25,7 +25,7 @@ Exception in thread "main" java.lang.IllegalArgumentException: Unknown service:
at org.rapidoid.setup.AppBootstrap$1.bootstrap(AppBootstrap.java:38) at org.rapidoid.setup.AppBootstrap$1.bootstrap(AppBootstrap.java:38)
at org.rapidoid.setup.ServiceBootstrap.run(ServiceBootstrap.java:39) at org.rapidoid.setup.ServiceBootstrap.run(ServiceBootstrap.java:39)
at org.rapidoid.setup.AppBootstrap.services(AppBootstrap.java:150) at org.rapidoid.setup.AppBootstrap.services(AppBootstrap.java:150)
at org.rapidoid.setup.App.boot(App.java:92) at org.rapidoid.setup.App.boot(App.java:97)
at org.rapidoid.platform.Platform.startPlatformAndProcessArgs(Platform.java:127) at org.rapidoid.platform.Platform.startPlatformAndProcessArgs(Platform.java:127)
at org.rapidoid.platform.Platform.start(Platform.java:63) at org.rapidoid.platform.Platform.start(Platform.java:63)
at org.rapidoid.platform.Main.main(Main.java:45) at org.rapidoid.platform.Main.main(Main.java:45)
2 changes: 1 addition & 1 deletion docker-tests/output/app-service-foo.txt
Expand Up @@ -25,7 +25,7 @@ Exception in thread "main" java.lang.IllegalArgumentException: Unknown service:
at org.rapidoid.setup.AppBootstrap$1.bootstrap(AppBootstrap.java:38) at org.rapidoid.setup.AppBootstrap$1.bootstrap(AppBootstrap.java:38)
at org.rapidoid.setup.ServiceBootstrap.run(ServiceBootstrap.java:39) at org.rapidoid.setup.ServiceBootstrap.run(ServiceBootstrap.java:39)
at org.rapidoid.setup.AppBootstrap.services(AppBootstrap.java:150) at org.rapidoid.setup.AppBootstrap.services(AppBootstrap.java:150)
at org.rapidoid.setup.App.boot(App.java:92) at org.rapidoid.setup.App.boot(App.java:97)
at org.rapidoid.platform.Platform.startPlatformAndProcessArgs(Platform.java:127) at org.rapidoid.platform.Platform.startPlatformAndProcessArgs(Platform.java:127)
at org.rapidoid.platform.Platform.start(Platform.java:63) at org.rapidoid.platform.Platform.start(Platform.java:63)
at org.rapidoid.platform.Main.main(Main.java:45) at org.rapidoid.platform.Main.main(Main.java:45)
2 changes: 1 addition & 1 deletion docker-tests/output/configuration.txt
Expand Up @@ -26,11 +26,11 @@
[PLATFORM] INFO | --------------------------------------------------- [PLATFORM] INFO | ---------------------------------------------------
[APP] INFO | org.rapidoid.config.RapidoidInitializer | Starting Rapidoid v<?>, built on <?> [Dockerized] [Uniform output] [APP] INFO | org.rapidoid.config.RapidoidInitializer | Starting Rapidoid v<?>, built on <?> [Dockerized] [Uniform output]
[APP] INFO | org.rapidoid.config.RapidoidInitializer | System info | os = Linux | java = <?> | process = <?> | max memory = <?> | dir = /opt [APP] INFO | org.rapidoid.config.RapidoidInitializer | System info | os = Linux | java = <?> | process = <?> | max memory = <?> | dir = /opt
[PLATFORM] INFO | Initialized HTTP routes
[APP] INFO | org.rapidoid.env.Env | Setting application root | root = /app | content = [/app/rapidoid.yml] [APP] INFO | org.rapidoid.env.Env | Setting application root | root = /app | content = [/app/rapidoid.yml]
[APP] INFO | org.rapidoid.env.Environment | No profiles were specified, activating 'default' profile [APP] INFO | org.rapidoid.env.Environment | No profiles were specified, activating 'default' profile
[APP] INFO | org.rapidoid.env.Environment | No production/dev/test mode was configured, inferring mode | mode = PRODUCTION [APP] INFO | org.rapidoid.env.Environment | No production/dev/test mode was configured, inferring mode | mode = PRODUCTION
[APP] INFO | org.rapidoid.env.Environment | Automatically activating mode-specific profile | profile = production [APP] INFO | org.rapidoid.env.Environment | Automatically activating mode-specific profile | profile = production
[APP] INFO | org.rapidoid.env.Environment | Initialized environment | mode = PRODUCTION | profiles = [default, production] [APP] INFO | org.rapidoid.env.Environment | Initialized environment | mode = PRODUCTION | profiles = [default, production]
[PLATFORM] INFO | Initialized HTTP routes
[APP] INFO | org.rapidoid.scan.ClasspathUtil | Setting application JAR | appJar = /app/app.jar | exists = false [APP] INFO | org.rapidoid.scan.ClasspathUtil | Setting application JAR | appJar = /app/app.jar | exists = false
[APP] INFO | org.rapidoid.config.ConfigImpl | Loaded configuration | namespace = config | files = [built-in-config.yml, built-in-config-default.yml] [APP] INFO | org.rapidoid.config.ConfigImpl | Loaded configuration | namespace = config | files = [built-in-config.yml, built-in-config-default.yml]
2 changes: 1 addition & 1 deletion docker-tests/output/env-config.txt
Expand Up @@ -27,12 +27,12 @@
[PLATFORM] INFO | --------------------------------------------------- [PLATFORM] INFO | ---------------------------------------------------
[APP] INFO | org.rapidoid.config.RapidoidInitializer | Starting Rapidoid v<?>, built on <?> [Dockerized] [Uniform output] [APP] INFO | org.rapidoid.config.RapidoidInitializer | Starting Rapidoid v<?>, built on <?> [Dockerized] [Uniform output]
[APP] INFO | org.rapidoid.config.RapidoidInitializer | System info | os = Linux | java = <?> | process = <?> | max memory = <?> | dir = /opt [APP] INFO | org.rapidoid.config.RapidoidInitializer | System info | os = Linux | java = <?> | process = <?> | max memory = <?> | dir = /opt
[PLATFORM] INFO | Initialized HTTP routes
[APP] INFO | org.rapidoid.env.Env | Setting application root | root = /app | content = [/app/the-root, /app/my-config.yaml] [APP] INFO | org.rapidoid.env.Env | Setting application root | root = /app | content = [/app/the-root, /app/my-config.yaml]
[APP] INFO | org.rapidoid.config.ConfigBase | Changing configuration filename base | from = config | to = my-config [APP] INFO | org.rapidoid.config.ConfigBase | Changing configuration filename base | from = config | to = my-config
[APP] INFO | org.rapidoid.env.Environment | No profiles were specified, activating 'default' profile [APP] INFO | org.rapidoid.env.Environment | No profiles were specified, activating 'default' profile
[APP] INFO | org.rapidoid.env.Environment | No production/dev/test mode was configured, inferring mode | mode = PRODUCTION [APP] INFO | org.rapidoid.env.Environment | No production/dev/test mode was configured, inferring mode | mode = PRODUCTION
[APP] INFO | org.rapidoid.env.Environment | Automatically activating mode-specific profile | profile = production [APP] INFO | org.rapidoid.env.Environment | Automatically activating mode-specific profile | profile = production
[APP] INFO | org.rapidoid.env.Environment | Initialized environment | mode = PRODUCTION | profiles = [default, production] [APP] INFO | org.rapidoid.env.Environment | Initialized environment | mode = PRODUCTION | profiles = [default, production]
[PLATFORM] INFO | Initialized HTTP routes
[APP] INFO | org.rapidoid.scan.ClasspathUtil | Setting application JAR | appJar = /app/app.jar | exists = false [APP] INFO | org.rapidoid.scan.ClasspathUtil | Setting application JAR | appJar = /app/app.jar | exists = false
[APP] INFO | org.rapidoid.config.ConfigImpl | Loaded configuration | namespace = my-config | files = [built-in-config.yml, built-in-config-default.yml, /app/my-config.yaml] [APP] INFO | org.rapidoid.config.ConfigImpl | Loaded configuration | namespace = my-config | files = [built-in-config.yml, built-in-config-default.yml, /app/my-config.yaml]
20 changes: 14 additions & 6 deletions rapidoid-http-server/src/main/java/org/rapidoid/setup/App.java
Expand Up @@ -60,6 +60,8 @@ public class App extends RapidoidInitializer {
private static volatile boolean restarted; private static volatile boolean restarted;
private static volatile boolean managed; private static volatile boolean managed;


private static volatile AppBootstrap boot;

private static final Set<Class<?>> invoked = Coll.synchronizedSet(); private static final Set<Class<?>> invoked = Coll.synchronizedSet();


static volatile ClassLoader loader = App.class.getClassLoader(); static volatile ClassLoader loader = App.class.getClassLoader();
Expand All @@ -83,14 +85,19 @@ public static AppBootstrap run(String[] args, String... extraArgs) {
return boot(); return boot();
} }


public static AppBootstrap boot() { public synchronized static AppBootstrap boot() {
for (RapidoidModule module : RapidoidModules.getAll()) { if (boot == null) {
module.boot();
boot = new AppBootstrap();

for (RapidoidModule module : RapidoidModules.getAll()) {
module.boot();
}

boot.services();
} }


AppBootstrap bootstrap = new AppBootstrap(); return boot;
bootstrap.services();
return bootstrap;
} }


public static void profiles(String... profiles) { public static void profiles(String... profiles) {
Expand Down Expand Up @@ -207,6 +214,7 @@ public static void resetGlobalState() {
dirty = false; dirty = false;
path = null; path = null;
loader = App.class.getClassLoader(); loader = App.class.getClassLoader();
boot = null;
Setup.initDefaults(); Setup.initDefaults();
AppBootstrap.reset(); AppBootstrap.reset();
invoked.clear(); invoked.clear();
Expand Down
Expand Up @@ -30,7 +30,7 @@
public class DefaultApp extends RapidoidThing { public class DefaultApp extends RapidoidThing {


public static void main(String[] args) { public static void main(String[] args) {
App.run(args).auth(); App.run(args);
} }


} }
Expand Up @@ -25,8 +25,9 @@
import org.rapidoid.http.HttpVerb; import org.rapidoid.http.HttpVerb;
import org.rapidoid.setup.On; import org.rapidoid.setup.On;
import org.rapidoid.setup.OnRoute; import org.rapidoid.setup.OnRoute;
import org.rapidoid.web.handler.APIHandler; import org.rapidoid.u.U;
import org.rapidoid.web.config.bean.APIConfig; import org.rapidoid.web.config.bean.APIConfig;
import org.rapidoid.web.handler.APIHandler;


@Authors("Nikolche Mihajlovski") @Authors("Nikolche Mihajlovski")
@Since("5.3.0") @Since("5.3.0")
Expand All @@ -37,8 +38,14 @@ public APIConfigListener() {
} }


@Override @Override
protected void addHandler(APIConfig api, HttpVerb verb, String uri, OnRoute route) { protected OnRoute addRoute(HttpVerb verb, String uri) {
On.route(verb.name(), uri).json(new APIHandler(api, verb)); verb = U.or(verb, HttpVerb.GET);
return On.route(verb.name(), uri);
}

@Override
protected void addHandler(APIConfig api, String uri, OnRoute route) {
route.json(new APIHandler(api));
} }


} }
Expand Up @@ -24,7 +24,7 @@
import org.rapidoid.annotation.Since; import org.rapidoid.annotation.Since;
import org.rapidoid.http.HttpVerb; import org.rapidoid.http.HttpVerb;
import org.rapidoid.http.MediaType; import org.rapidoid.http.MediaType;
import org.rapidoid.setup.On; import org.rapidoid.setup.App;
import org.rapidoid.setup.OnRoute; import org.rapidoid.setup.OnRoute;
import org.rapidoid.u.U; import org.rapidoid.u.U;
import org.rapidoid.web.config.bean.AbstractRouteConfig; import org.rapidoid.web.config.bean.AbstractRouteConfig;
Expand All @@ -45,7 +45,7 @@ protected void applyEntry(String key, T config) {
String uri; String uri;


if (verbUri.length == 1) { if (verbUri.length == 1) {
verb = HttpVerb.GET; verb = null;
uri = verbUri[0]; uri = verbUri[0];


} else if (verbUri.length == 2) { } else if (verbUri.length == 2) {
Expand All @@ -61,18 +61,25 @@ protected void applyEntry(String key, T config) {


private void addRoute(T config, HttpVerb verb, String uri) { private void addRoute(T config, HttpVerb verb, String uri) {


OnRoute route = On.route(verb.name(), uri); OnRoute route = addRoute(verb, uri);


if (config.contentType != null) route.contentType(MediaType.of(config.contentType)); if (config.contentType != null) route.contentType(MediaType.of(config.contentType));
if (config.roles != null) route.roles(config.roles);
if (config.managed != null) route.managed(config.managed); if (config.managed != null) route.managed(config.managed);
if (config.transaction != null) route.transaction(config.transaction); if (config.transaction != null) route.transaction(config.transaction);

if (config.cacheTTL != null) route.cacheTTL(config.cacheTTL); if (config.cacheTTL != null) route.cacheTTL(config.cacheTTL);
if (config.cacheCapacity != null) route.cacheCapacity(config.cacheCapacity); if (config.cacheCapacity != null) route.cacheCapacity(config.cacheCapacity);


addHandler(config, verb, uri, route); if (config.roles != null) {
route.roles(config.roles);
App.boot().auth();
}

addHandler(config, uri, route);
} }


protected abstract void addHandler(final T config, final HttpVerb verb, final String uri, OnRoute route); protected abstract OnRoute addRoute(HttpVerb verb, String uri);

protected abstract void addHandler(final T config, final String uri, OnRoute route);


} }
Expand Up @@ -23,6 +23,7 @@
import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since; import org.rapidoid.annotation.Since;
import org.rapidoid.http.HttpVerb; import org.rapidoid.http.HttpVerb;
import org.rapidoid.setup.On;
import org.rapidoid.setup.OnRoute; import org.rapidoid.setup.OnRoute;
import org.rapidoid.u.U; import org.rapidoid.u.U;
import org.rapidoid.web.config.bean.PageConfig; import org.rapidoid.web.config.bean.PageConfig;
Expand All @@ -37,19 +38,28 @@ public PagesConfigListener() {
} }


@Override @Override
protected void addHandler(PageConfig page, HttpVerb verb, String uri, OnRoute route) { protected OnRoute addRoute(HttpVerb verb, String uri) {
if (verb == null) {
return On.page(uri);
} else {
U.must(verb == HttpVerb.GET || verb == HttpVerb.POST, "Only GET and POST verbs are supported for pages!");
return On.route(verb.name(), uri);
}
}


U.must(verb == HttpVerb.GET || verb == HttpVerb.POST, "Only GET and POST verbs are supported for pages!"); @Override
protected void addHandler(PageConfig page, String uri, OnRoute route) {


if (page.view != null) route.view(page.view); if (page.view != null) route.view(page.view);
if (page.zone != null) route.zone(page.zone); if (page.zone != null) route.zone(page.zone);


PageHandler handler = new PageHandler(page); PageHandler handler = new PageHandler(page);


if (U.bool(page.mvc)) { // MVC by default
route.mvc(handler); if (Boolean.FALSE.equals(page.mvc)) {
} else {
route.html(handler); route.html(handler);
} else {
route.mvc(handler);
} }
} }


Expand Down
Expand Up @@ -23,7 +23,7 @@
import org.rapidoid.RapidoidThing; import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since; import org.rapidoid.annotation.Since;
import org.rapidoid.http.HttpVerb; import org.rapidoid.http.HttpUtils;
import org.rapidoid.http.Req; import org.rapidoid.http.Req;
import org.rapidoid.http.ReqRespHandler; import org.rapidoid.http.ReqRespHandler;
import org.rapidoid.http.Resp; import org.rapidoid.http.Resp;
Expand All @@ -37,16 +37,13 @@ public class APIHandler extends RapidoidThing implements ReqRespHandler {


private final APIConfig api; private final APIConfig api;


private final HttpVerb verb; public APIHandler(APIConfig api) {

public APIHandler(APIConfig api, HttpVerb verb) {
this.api = api; this.api = api;
this.verb = verb;
} }


@Override @Override
public Object execute(Req req, Resp resp) { public Object execute(Req req, Resp resp) {
if (verb == HttpVerb.GET) { if (HttpUtils.isGetReq(req)) {
return JDBC.query(api.sql); return JDBC.query(api.sql);
} else { } else {
int changes = JDBC.execute(api.sql); int changes = JDBC.execute(api.sql);
Expand Down

0 comments on commit affd32e

Please sign in to comment.