Skip to content

Commit

Permalink
Fluent API to boot the services.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed May 27, 2018
1 parent 1f64742 commit 45b638d
Show file tree
Hide file tree
Showing 7 changed files with 299 additions and 178 deletions.
Expand Up @@ -18,8 +18,9 @@ public static void main(String[] args) {
Log.info("Starting application"); Log.info("Starting application");


App.scan(); // bootstrap beans (controllers, services etc.) App.scan(); // bootstrap beans (controllers, services etc.)
Boot.jpa(); // bootstrap JPA
Boot.auth(App.setup()); // bootstrap Auth Boot.jpa() // bootstrap JPA
.auth(); // bootstrap Auth


On.get("/books").json(() -> JPA.of(Book.class).all()); // get all books On.get("/books").json(() -> JPA.of(Book.class).all()); // get all books


Expand Down
1 change: 1 addition & 0 deletions rapidoid-commons/src/main/resources/rapidoid-classes.txt
Expand Up @@ -187,6 +187,7 @@ org.rapidoid.expire.Expire
org.rapidoid.expire.Expiring org.rapidoid.expire.Expiring
org.rapidoid.goodies.BeansHandler org.rapidoid.goodies.BeansHandler
org.rapidoid.goodies.Boot org.rapidoid.goodies.Boot
org.rapidoid.goodies.Booter
org.rapidoid.goodies.ClasspathHandler org.rapidoid.goodies.ClasspathHandler
org.rapidoid.goodies.ConfigHandler org.rapidoid.goodies.ConfigHandler
org.rapidoid.goodies.DetailsHandler org.rapidoid.goodies.DetailsHandler
Expand Down
Expand Up @@ -44,8 +44,8 @@ public static void main(String[] args) {
// now bootstrap some components, e.g. classpath scanning (beans) // now bootstrap some components, e.g. classpath scanning (beans)
App.scan(); App.scan();


Boot.jmx(App.setup()); Boot.jmx()
Boot.adminCenter(App.setup()); .adminCenter();


// continue with normal setup // continue with normal setup
On.get("/x").json("x"); On.get("/x").json("x");
Expand Down
Expand Up @@ -35,10 +35,10 @@ public class Main extends GUI {
public static void main(String[] args) { public static void main(String[] args) {
App.run(args, "users.admin.password=a"); // demo-only password App.run(args, "users.admin.password=a"); // demo-only password


Boot.jpa(); Boot.jpa()
Boot.auth(App.setup()); .auth()
Boot.entities(App.setup()); .entities()
Boot.overview(App.setup()); .overview();


App.gui() App.gui()
.search(true) .search(true)
Expand Down
Expand Up @@ -30,7 +30,8 @@ public class Main {


public static void main(String[] args) { public static void main(String[] args) {
App.bootstrap(args); App.bootstrap(args);
Boot.auth(App.setup());
Boot.auth();


On.get("/").html((req, resp) -> "this is public!"); On.get("/").html((req, resp) -> "this is public!");


Expand Down
198 changes: 29 additions & 169 deletions rapidoid-web/src/main/java/org/rapidoid/goodies/Boot.java
Expand Up @@ -20,211 +20,71 @@


package org.rapidoid.goodies; package org.rapidoid.goodies;


import org.rapidoid.ModuleBootstrapParams;
import org.rapidoid.RapidoidModules;
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.config.BasicConfig;
import org.rapidoid.gui.GUI;
import org.rapidoid.http.HttpUtils;
import org.rapidoid.insight.Metrics;
import org.rapidoid.jpa.JPA;
import org.rapidoid.security.Role;
import org.rapidoid.setup.App; import org.rapidoid.setup.App;
import org.rapidoid.setup.Setup; import org.rapidoid.setup.Setup;
import org.rapidoid.u.U;
import org.rapidoid.util.Msc;
import org.rapidoid.util.MscOpts;


@Authors("Nikolche Mihajlovski") @Authors("Nikolche Mihajlovski")
@Since("6.0.0") @Since("6.0.0")
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
public class Boot extends RapidoidThing { public class Boot extends RapidoidThing {


public static final JMXGoodies JMX = new JMXGoodies(); public static Booter on(Setup setup) {

return new Booter(setup);
public static final String CENTER = "center";

public static void adminCenter(Setup setup) {
Msc.logSection("Registering Admin Center:");

overview(setup);
entities(setup);
application(setup);
lifecycle(setup);
jmx(setup);
metrics(setup);
auth(setup);
} }


public static void auth(Setup setup) { private static Booter main() {
setup.post(uri("login")) return on(App.setup());
.roles()
.json(new LoginHandler());

setup.get(uri("logout"))
.roles(Role.LOGGED_IN)
.json(new LogoutHandler());
} }


public static void lifecycle(Setup setup) { public static Booter adminCenter() {
setup.page(uri("terminate")) return main().adminCenter();
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Terminate / Restart")
.mvc(new TerminateHandler());
} }


public static void overview(Setup setup) { public static Booter auth() {
setup.page(uri("")) return main().auth();
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Overview")
.mvc(new OverviewHandler());
} }


public static void application(Setup setup) { public static Booter lifecycle() {
setup.page(uri("routes")) return main().lifecycle();
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("Routes")
.mvc(new RoutesHandler());

setup.page(uri("config"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("Configuration")
.mvc(new ConfigHandler());

setup.page(uri("beans"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("Application", "Beans")
.mvc(new BeansHandler());

setup.get(uri("classpath"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("Application", "Classpath")
.mvc(new ClasspathHandler());
} }


public static void metrics(Setup setup) { public static Booter overview() {
Metrics.bootstrap(); return main().overview();

setup.page(uri("metrics"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("Metrics")
.mvc(new GraphsHandler());

setup.get(uri("graphs/{id:.*}"))
.roles(Role.ADMINISTRATOR)
.json(new GraphDataHandler());
} }


public static void jmx(Setup setup) { public static Booter application() {
setup.page(uri("jmx/mempool")) return main().application();
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Memory pool")
.mvc(JMX.memoryPool());

setup.page(uri("jmx/threads"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "JVM Threads")
.mvc(JMX.threads());

setup.page(uri("jmx/os"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Operating system")
.mvc(JMX.os());

setup.page(uri("jmx/gc"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Garbage collection")
.mvc(JMX.gc());

setup.page(uri("jmx/memory"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Memory")
.mvc(JMX.memory());

setup.page(uri("jmx/runtime"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Runtime")
.mvc(JMX.runtime());

setup.page(uri("jmx/classes"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Classes")
.mvc(JMX.classes());

setup.page(uri("jmx/compilation"))
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Compilation")
.mvc(JMX.compilation());
} }


public static void entities(Setup setup) { public static Booter metrics() {
setup.page(uri("entities")) return main().metrics();
.roles(Role.ADMINISTRATOR)
.zone(CENTER)
.menu("System", "Entities")
.mvc(new EntitiesHandler());

if (MscOpts.hasJPA()) {
for (Class<?> type : JPA.getEntityJavaTypes()) {
String uri = GUI.typeUri(type);

BasicConfig zone = HttpUtils.zone(setup.custom(), setup.zone());
String contextPath = zone.entry("home").or(uri(""));

X.scaffold(type)
.baseUri(Msc.uri(contextPath, uri))
.roles(Role.ADMINISTRATOR)
.on(setup);
}
}
} }


public static void oauth(Setup setup) { public static Booter jmx() {
ModuleBootstrapParams params = new ModuleBootstrapParams().setup(setup); return main().jmx();
RapidoidModules.get("OAuth").bootstrap(params);
} }


public static void openapi(Setup setup) { public static Booter entities() {
ModuleBootstrapParams params = new ModuleBootstrapParams().setup(setup); return main().entities();
RapidoidModules.get("OpenAPI").bootstrap(params);
} }


public static void jpa(String... packages) { public static Booter oauth() {
if (U.isEmpty(packages)) packages = App.path(); return main().oauth();

JPA.bootstrap(packages);
} }


public static void all() { public static Booter openapi() {
Setup setup = App.setup(); return main().openapi();

}
jpa();
auth(setup);
oauth(setup);
openapi(setup);


adminCenter(setup); public static Booter jpa(String... packages) {
return main().jpa(packages);
} }


private static String uri(String path) { public static Booter all() {
return Msc.specialUri(path); return main().all();
} }


} }

0 comments on commit 45b638d

Please sign in to comment.