From f44cfee8ffc38daecb71c95850a87bb3df6ddf20 Mon Sep 17 00:00:00 2001 From: lutovich Date: Thu, 13 Sep 2018 16:58:16 +0200 Subject: [PATCH] Create LifecycleManagingDatabase only once in server It is then added to the lifecycle which can be started and stopped multiple times. `LifecycleManagingDatabase`creates actual databases in its own lifecycle and is just a wrapper. --- .../org/neo4j/server/AbstractNeoServer.java | 23 ++++++------------- .../org/neo4j/server/DisabledNeoServer.java | 12 ++++------ 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java index 8ab9f3c04a07d..f2c992202cbb3 100644 --- a/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java +++ b/community/server/src/main/java/org/neo4j/server/AbstractNeoServer.java @@ -33,7 +33,7 @@ import java.util.regex.Pattern; import org.neo4j.graphdb.DependencyResolver; -import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory; +import org.neo4j.graphdb.facade.GraphDatabaseFacadeFactory.Dependencies; import org.neo4j.helpers.AdvertisedSocketAddress; import org.neo4j.helpers.ListenSocketAddress; import org.neo4j.helpers.RunCarefully; @@ -114,8 +114,6 @@ public abstract class AbstractNeoServer implements NeoServer }; public static final String NEO4J_IS_STARTING_MESSAGE = "======== Neo4j " + Version.getNeo4jVersion() + " ========"; - private final GraphFactory graphFactory; - private final GraphDatabaseFacadeFactory.Dependencies dependencies; protected final LogProvider logProvider; protected final Log log; @@ -128,7 +126,7 @@ public abstract class AbstractNeoServer implements NeoServer private AdvertisedSocketAddress httpAdvertisedAddress; private AdvertisedSocketAddress httpsAdvertisedAddress; - protected Database database; + protected final Database database; private DependencyResolver dependencyResolver; protected CypherExecutor cypherExecutor; protected WebServer webServer; @@ -148,12 +146,9 @@ public abstract class AbstractNeoServer implements NeoServer protected abstract WebServer createWebServer(); - public AbstractNeoServer( Config config, GraphFactory graphFactory, - GraphDatabaseFacadeFactory.Dependencies dependencies, LogProvider logProvider ) + public AbstractNeoServer( Config config, GraphFactory graphFactory, Dependencies dependencies, LogProvider logProvider ) { this.config = config; - this.graphFactory = graphFactory; - this.dependencies = dependencies; this.logProvider = logProvider; this.log = logProvider.getLog( getClass() ); log.info( NEO4J_IS_STARTING_MESSAGE ); @@ -167,16 +162,16 @@ public AbstractNeoServer( Config config, GraphFactory graphFactory, httpsConnector = findConnector( config, Encryption.TLS ); httpsListenAddress = listenAddressFor( config, httpsConnector ); httpsAdvertisedAddress = advertisedAddressFor( config, httpsConnector ); - } - @Override - public void start() throws ServerStartupException - { database = new LifecycleManagingDatabase( config, graphFactory, dependencies ); life.add( database ); life.add( new ServerDependenciesLifeCycleAdapter() ); life.add( new ServerComponentsLifecycleAdapter() ); + } + @Override + public void start() throws ServerStartupException + { try { life.start(); @@ -353,11 +348,7 @@ protected Pattern[] getUriWhitelist() @Override public void stop() { - // Stop and clear the nested life. - // It needs to be cleared because server can be restarted, for example using a JMX bean. - // See `ServerManagementMBean` and its implementation. life.stop(); - life.clear(); } private void stopWebServer() throws Exception diff --git a/community/server/src/main/java/org/neo4j/server/DisabledNeoServer.java b/community/server/src/main/java/org/neo4j/server/DisabledNeoServer.java index 2908e2ce308df..97bb681a53006 100644 --- a/community/server/src/main/java/org/neo4j/server/DisabledNeoServer.java +++ b/community/server/src/main/java/org/neo4j/server/DisabledNeoServer.java @@ -40,27 +40,23 @@ public class DisabledNeoServer implements NeoServer { - private final GraphFactory graphFactory; - private final Dependencies dependencies; + private final Database db; private final Config config; - private Database db; private final LifeSupport life = new LifeSupport(); public DisabledNeoServer( GraphFactory graphFactory, Dependencies dependencies, Config config, LogProvider logProvider ) { - this.graphFactory = graphFactory; - this.dependencies = dependencies; + this.db = new LifecycleManagingDatabase( config, graphFactory, dependencies ); this.config = config; + + life.add( db ); logProvider.getLog( getClass() ).info( NEO4J_IS_STARTING_MESSAGE ); } @Override public void start() { - db = new LifecycleManagingDatabase( config, graphFactory, dependencies ); - life.add( db ); - try { life.start();