diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/ApplicationServer.java b/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/ApplicationServer.java index cce64dfb3..7c04428e5 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/ApplicationServer.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/ApplicationServer.java @@ -18,6 +18,7 @@ import org.genericsystem.kernel.Cache; import org.genericsystem.reactor.HtmlDomNode; import org.genericsystem.reactor.HtmlDomNode.RootHtmlDomNode; +import org.genericsystem.reactor.RootTag; import org.genericsystem.reactor.appserver.WebAppsConfig.SimpleWebAppConfig; import org.genericsystem.reactor.gscomponents.RootTagImpl; @@ -83,6 +84,7 @@ private static class DomNodeVerticle extends AbstractVerticle { private Cache cache; private ServerWebSocket socket; private PersistentApplication application; + private RootTag tagTree; private RootHtmlDomNode rootHtmlDomNode; DomNodeVerticle(Cache cache, ServerWebSocket socket, PersistentApplication application) { @@ -94,7 +96,18 @@ private static class DomNodeVerticle extends AbstractVerticle { @Override public void start(Future startFuture) { GSVertx.vertx().getVertx().executeBlocking(future -> { - RootHtmlDomNode result = cache.safeSupply(() -> application.init(s -> socket.writeFinalTextFrame(s))); + try { + tagTree = (RootTag) application.getApplicationClass().newInstance().initTree(); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException e) { + try { + cache.start(); + tagTree = (RootTag) application.getApplicationClass().getConstructor(Root.class).newInstance(application.getEngine()).initTree(); + cache.flush(); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException | InvocationTargetException | NoSuchMethodException ex) { + throw new IllegalStateException(ex); + } + } + RootHtmlDomNode result = cache.safeSupply(() -> application.init(s -> socket.writeFinalTextFrame(s), tagTree)); future.complete(result); }, res -> { if (res.succeeded()) diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/PersistentApplication.java b/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/PersistentApplication.java index 0a8590fbf..0e1e5b8c4 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/PersistentApplication.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/appserver/PersistentApplication.java @@ -15,7 +15,6 @@ public class PersistentApplication { private final Class htmlAppClass; - private RootTag tagTree; private final Root engine; private final Class modelClass; private final String rootId; @@ -40,17 +39,6 @@ public PersistentApplication(Class htmlAppClass, Class runner.run(getEngine())); log.info("Script has run"); } - try { - tagTree = (RootTag) getApplicationClass().newInstance().initTree(); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException e) { - try { - engine.newCache().start(); - tagTree = (RootTag) getApplicationClass().getConstructor(Root.class).newInstance(engine).initTree(); - engine.getCurrentCache().flush(); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException | InvocationTargetException | NoSuchMethodException ex) { - throw new IllegalStateException(ex); - } - } } public String getRootId() { @@ -77,7 +65,7 @@ public void setIndexHtml(String indexHtml) { this.indexHtml = indexHtml; } - public RootHtmlDomNode init(Sender send) { + public RootHtmlDomNode init(Sender send, RootTag tagTree) { try { return tagTree.init(modelClass.getConstructor(Root.class).newInstance(engine), rootId, send); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {