Skip to content

Commit

Permalink
Create LifecycleManagingDatabase only once in server
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
lutovich committed Sep 18, 2018
1 parent 98fd23e commit f44cfee
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 24 deletions.
Expand Up @@ -33,7 +33,7 @@
import java.util.regex.Pattern; import java.util.regex.Pattern;


import org.neo4j.graphdb.DependencyResolver; 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.AdvertisedSocketAddress;
import org.neo4j.helpers.ListenSocketAddress; import org.neo4j.helpers.ListenSocketAddress;
import org.neo4j.helpers.RunCarefully; import org.neo4j.helpers.RunCarefully;
Expand Down Expand Up @@ -114,8 +114,6 @@ public abstract class AbstractNeoServer implements NeoServer
}; };
public static final String NEO4J_IS_STARTING_MESSAGE = "======== Neo4j " + Version.getNeo4jVersion() + " ========"; 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 LogProvider logProvider;
protected final Log log; protected final Log log;


Expand All @@ -128,7 +126,7 @@ public abstract class AbstractNeoServer implements NeoServer
private AdvertisedSocketAddress httpAdvertisedAddress; private AdvertisedSocketAddress httpAdvertisedAddress;
private AdvertisedSocketAddress httpsAdvertisedAddress; private AdvertisedSocketAddress httpsAdvertisedAddress;


protected Database database; protected final Database database;
private DependencyResolver dependencyResolver; private DependencyResolver dependencyResolver;
protected CypherExecutor cypherExecutor; protected CypherExecutor cypherExecutor;
protected WebServer webServer; protected WebServer webServer;
Expand All @@ -148,12 +146,9 @@ public abstract class AbstractNeoServer implements NeoServer


protected abstract WebServer createWebServer(); protected abstract WebServer createWebServer();


public AbstractNeoServer( Config config, GraphFactory graphFactory, public AbstractNeoServer( Config config, GraphFactory graphFactory, Dependencies dependencies, LogProvider logProvider )
GraphDatabaseFacadeFactory.Dependencies dependencies, LogProvider logProvider )
{ {
this.config = config; this.config = config;
this.graphFactory = graphFactory;
this.dependencies = dependencies;
this.logProvider = logProvider; this.logProvider = logProvider;
this.log = logProvider.getLog( getClass() ); this.log = logProvider.getLog( getClass() );
log.info( NEO4J_IS_STARTING_MESSAGE ); log.info( NEO4J_IS_STARTING_MESSAGE );
Expand All @@ -167,16 +162,16 @@ public AbstractNeoServer( Config config, GraphFactory graphFactory,
httpsConnector = findConnector( config, Encryption.TLS ); httpsConnector = findConnector( config, Encryption.TLS );
httpsListenAddress = listenAddressFor( config, httpsConnector ); httpsListenAddress = listenAddressFor( config, httpsConnector );
httpsAdvertisedAddress = advertisedAddressFor( config, httpsConnector ); httpsAdvertisedAddress = advertisedAddressFor( config, httpsConnector );
}


@Override
public void start() throws ServerStartupException
{
database = new LifecycleManagingDatabase( config, graphFactory, dependencies ); database = new LifecycleManagingDatabase( config, graphFactory, dependencies );
life.add( database ); life.add( database );
life.add( new ServerDependenciesLifeCycleAdapter() ); life.add( new ServerDependenciesLifeCycleAdapter() );
life.add( new ServerComponentsLifecycleAdapter() ); life.add( new ServerComponentsLifecycleAdapter() );
}


@Override
public void start() throws ServerStartupException
{
try try
{ {
life.start(); life.start();
Expand Down Expand Up @@ -353,11 +348,7 @@ protected Pattern[] getUriWhitelist()
@Override @Override
public void stop() 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.stop();
life.clear();
} }


private void stopWebServer() throws Exception private void stopWebServer() throws Exception
Expand Down
Expand Up @@ -40,27 +40,23 @@


public class DisabledNeoServer implements NeoServer public class DisabledNeoServer implements NeoServer
{ {
private final GraphFactory graphFactory; private final Database db;
private final Dependencies dependencies;
private final Config config; private final Config config;


private Database db;
private final LifeSupport life = new LifeSupport(); private final LifeSupport life = new LifeSupport();


public DisabledNeoServer( GraphFactory graphFactory, Dependencies dependencies, Config config, LogProvider logProvider ) public DisabledNeoServer( GraphFactory graphFactory, Dependencies dependencies, Config config, LogProvider logProvider )
{ {
this.graphFactory = graphFactory; this.db = new LifecycleManagingDatabase( config, graphFactory, dependencies );
this.dependencies = dependencies;
this.config = config; this.config = config;

life.add( db );
logProvider.getLog( getClass() ).info( NEO4J_IS_STARTING_MESSAGE ); logProvider.getLog( getClass() ).info( NEO4J_IS_STARTING_MESSAGE );
} }


@Override @Override
public void start() public void start()
{ {
db = new LifecycleManagingDatabase( config, graphFactory, dependencies );
life.add( db );

try try
{ {
life.start(); life.start();
Expand Down

0 comments on commit f44cfee

Please sign in to comment.