@@ -87,6 +87,7 @@ public class Jooby implements Router, Registry {
8787
8888 private static Jooby owner ;
8989 private static ExecutionMode BOOT_EXECUTION_MODE = ExecutionMode .DEFAULT ;
90+ private static Server BOOT_SERVER ;
9091
9192 private RouterImpl router ;
9293
@@ -132,6 +133,14 @@ public Jooby() {
132133 startingCallbacks = new ArrayList <>();
133134 readyCallbacks = new ArrayList <>();
134135 lateExtensions = new ArrayList <>();
136+ server = BOOT_SERVER ;
137+ if (server != null ) {
138+ router .setOutputFactory (server .getOutputFactory ());
139+ } else {
140+ // NOTE: fallback to default, this is required for direct instance creation of class
141+ // app bootstrap always ensures server instance.
142+ router .setOutputFactory (BufferedOutputFactory .create ());
143+ }
135144 } else {
136145 copyState (owner , this );
137146 }
@@ -857,12 +866,6 @@ public BufferedOutputFactory getOutputFactory() {
857866 return router .getOutputFactory ();
858867 }
859868
860- @ NonNull @ Override
861- public Jooby setOutputFactory (@ NonNull BufferedOutputFactory outputFactory ) {
862- router .setOutputFactory (outputFactory );
863- return this ;
864- }
865-
866869 @ NonNull @ Override
867870 public Jooby setHiddenMethod (@ NonNull Function <Context , Optional <String >> provider ) {
868871 router .setHiddenMethod (provider );
@@ -1210,8 +1213,7 @@ public static void runApp(
12101213 var apps = new ArrayList <Jooby >();
12111214 var targetServer = server .getLoggerOff ().isEmpty () ? server : MutedServer .mute (server );
12121215 for (var factory : provider ) {
1213- var app = createApp (executionMode , factory );
1214- app .server = targetServer ;
1216+ var app = createApp (server , executionMode , factory );
12151217 /*
12161218 When running a single app instance, there is no issue with server options, when multiple
12171219 apps set options a warning will be printed
@@ -1248,7 +1250,9 @@ public static void runApp(
12481250 * @return Application.
12491251 */
12501252 public static Jooby createApp (
1251- @ NonNull ExecutionMode executionMode , @ NonNull Supplier <Jooby > provider ) {
1253+ @ NonNull Server server ,
1254+ @ NonNull ExecutionMode executionMode ,
1255+ @ NonNull Supplier <Jooby > provider ) {
12521256 configurePackage (provider .getClass ().getPackage ());
12531257 /* Find application.env: */
12541258 String logfile =
@@ -1261,7 +1265,8 @@ public static Jooby createApp(
12611265
12621266 Jooby app ;
12631267 try {
1264- BOOT_EXECUTION_MODE = executionMode ;
1268+ Jooby .BOOT_SERVER = server ;
1269+ Jooby .BOOT_EXECUTION_MODE = executionMode ;
12651270 app = provider .get ();
12661271 } catch (Throwable t ) {
12671272 LoggerFactory .getLogger (Jooby .class )
@@ -1271,7 +1276,8 @@ public static Jooby createApp(
12711276 ? (StartupException ) t
12721277 : new StartupException ("Application initialization resulted in exception" , t );
12731278 } finally {
1274- BOOT_EXECUTION_MODE = ExecutionMode .DEFAULT ;
1279+ Jooby .BOOT_EXECUTION_MODE = executionMode ;
1280+ Jooby .BOOT_SERVER = null ;
12751281 }
12761282
12771283 return app ;
@@ -1426,5 +1432,6 @@ private static void copyState(Jooby source, Jooby dest) {
14261432 dest .readyCallbacks = source .readyCallbacks ;
14271433 dest .startingCallbacks = source .startingCallbacks ;
14281434 dest .stopCallbacks = source .stopCallbacks ;
1435+ dest .server = source .server ;
14291436 }
14301437}
0 commit comments