27. REPL
Connect a remote Enkan application
Start, stop, restart a server
Show the middlewares
Change the predicate of a middleware
Show the routes
Show the metrics
Restart components automatically
Compile sources
31. Show the middlewares
enkan> /middleware app list
ANY defaultCharset (enkan.middleware.DefaultCharsetMiddleware@64596fc4)
NONE serviceUnavailable
(enkan.middleware.ServiceUnavailableMiddleware@252e9fc0)
env = {development} stacktrace
(enkan.middleware.devel.StacktraceMiddleware@20ef35b2)
env = {development} traceWeb
(enkan.middleware.devel.TraceWebMiddleware@1b7068c2)
ANY trace (enkan.middleware.TraceMiddleware@34f80327)
ANY contentType (enkan.middleware.ContentTypeMiddleware@65f95ae7)
env = {development} httpStatusCat
(enkan.middleware.devel.HttpStatusCatMiddleware@3ce2b14f)
ANY params (enkan.middleware.ParamsMiddleware@244cf869)
ANY multipartParams (enkan.middleware.MultipartParamsMiddleware@50d936fc)
ANY methodOverride (enkan.middleware.MethodOverrideMiddleware@7f586062)
ANY normalization (enkan.middleware.NormalizationMiddleware@5619ce0f)
ANY nestedParams (enkan.middleware.NestedParamsMiddleware@1555fb15)
ANY cookies (enkan.middleware.CookiesMiddleware@c225195)
ANY session (enkan.middleware.SessionMiddleware@30c56b03)
32. Change the predicate of a middleware
enkan> /middleware app list
ANY defaultCharset (enkan.middleware.DefaultCharsetMiddleware@
NONE serviceUnavailable (enkan.middleware.ServiceUnavailableMi
ANY stacktrace (enkan.middleware.StacktraceMiddleware@545872dd
enkan> /middleware app predicate serviceUnavailable ANY
enkan> /middleware app list
ANY defaultCharset (enkan.middleware.DefaultCharsetMiddleware@
ANY serviceUnavailable (enkan.middleware.ServiceUnavailableMid
ANY stacktrace (enkan.middleware.StacktraceMiddleware@545872dd
現在はすべてのリクエストについて非適用
すべてのリクエストについて有効にする
37. Available components
Undertow / Jetty Web server
HikariCP DataSource
Doma2 O/R Mapper
Flyway Database migration
Freemarker / Thymeleaf HTML Templating
Jackson Bean converter
Metrics Metrics
38. Enkan System
Minimal DI container
EnkanSystem.of(
"doma", new DomaProvider(),
"jackson", new JacksonBeansConverter(),
"flyway", new FlywayMigration(),
"template", new FreemarkerTemplateEngine(),
"metrics", new MetricsComponent(),
"datasource", new HikariCPComponent(
OptionMap.of("uri", "jdbc:h2:mem:test")),
"app", new ApplicationComponent(
"kotowari.example.MyApplicationFactory"),
"http", builder(new UndertowComponent())
.set(UndertowComponent::setPort, Env.getInt("PORT", 3000))
.build()
).relationships(
component("http").using("app"),
component("app").using("datasource", "template", "doma", "jackson",
"metrics"),
component("doma").using("datasource", "flyway"),
component("flyway").using("datasource")
);
39. What's injected to Controller
Field injection
Component
Parameter injection
Parameters (Query string & Post body)
Session
Flash
User principal
Conversation / Conversation state
Request body object