Skip to content

Commit dae4445

Browse files
committed
feature: support multiple application on single server
- kotlin idiom + doc - fix #3645
1 parent 92cbe68 commit dae4445

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

docs/asciidoc/routing.adoc

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,11 +1364,11 @@ Done {love}!
13641364

13651365
=== Multiple routers
13661366

1367-
This model let you `run` multiple applications independently on single server. Each application
1367+
This model let you `run` multiple applications on single server instance. Each application
13681368
works like a standalone application, they don't share any kind of services.
13691369

13701370
.Multiple routers
1371-
[source, java]
1371+
[source, java,role="primary"]
13721372
----
13731373
public class Foo extends Jooby {
13741374
{
@@ -1393,6 +1393,17 @@ public class MultiApp {
13931393
}
13941394
----
13951395

1396+
.Kotlin
1397+
[source, kotlin,role="secondary"]
1398+
----
1399+
1400+
import io.jooby.kt.Kooby.runApp
1401+
1402+
fun main(args: Array<String>) {
1403+
runApp(args, ::Foo, ::Bar)
1404+
}
1405+
----
1406+
13961407
You write your application as always and them you deploy them using the `runApp` method.
13971408

13981409
[IMPORTANT]

modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ import io.jooby.Route
2121
import io.jooby.RouteSet
2222
import io.jooby.Router
2323
import io.jooby.RouterOption
24+
import io.jooby.Server
2425
import io.jooby.ServerOptions
2526
import io.jooby.ServiceRegistry
2627
import io.jooby.Value
2728
import io.jooby.ValueNode
2829
import io.jooby.handler.Cors
30+
import java.util.function.Supplier
2931
import kotlin.reflect.KClass
3032
import kotlin.reflect.KProperty
3133
import kotlinx.coroutines.CoroutineStart
@@ -353,6 +355,27 @@ fun <T : Jooby> runApp(args: Array<String>, mode: ExecutionMode, provider: () ->
353355
Jooby.runApp(args, mode, provider)
354356
}
355357

358+
fun <T : Jooby> runApp(args: Array<String>, vararg provider: () -> T) {
359+
runApp(args, Server.loadServer(), ExecutionMode.DEFAULT, *provider)
360+
}
361+
362+
fun <T : Jooby> runApp(args: Array<String>, mode: ExecutionMode, vararg provider: () -> T) {
363+
runApp(args, Server.loadServer(), mode, *provider)
364+
}
365+
366+
fun <T : Jooby> runApp(args: Array<String>, server: Server, vararg provider: () -> T) {
367+
runApp(args, server, ExecutionMode.DEFAULT, *provider)
368+
}
369+
370+
fun <T : Jooby> runApp(
371+
args: Array<String>,
372+
server: Server,
373+
mode: ExecutionMode,
374+
vararg provider: () -> T,
375+
) {
376+
Jooby.runApp(args, server, mode, provider.map { Supplier<Jooby> { it.invoke() } }.toList())
377+
}
378+
356379
internal fun configurePackage(value: Any) {
357380
val appname = value::class.java.name
358381
val start = appname.indexOf(".").let { if (it == -1) 0 else it + 1 }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
6+
import examples.multiapp.BarApp
7+
import examples.multiapp.FooApp
8+
import io.jooby.ExecutionMode
9+
import io.jooby.kt.runApp
10+
import io.jooby.netty.NettyServer
11+
12+
fun main(args: Array<String>) {
13+
runApp(args, NettyServer(), ExecutionMode.DEFAULT, ::BarApp, ::FooApp)
14+
15+
runApp(args, NettyServer(), ::BarApp, ::FooApp)
16+
17+
runApp(args, ::BarApp, ::FooApp)
18+
}

0 commit comments

Comments
 (0)