Showing results for 
Search instead for 
Did you mean: 

Head's Up! Site migration is underway. Phase 2: migrate recent content

How do I configure OGM with an embedded database that I can connect to remotely?

Node Link

In older versions of Spring-Data-Neo4j it was possible to configure an embedded database, but enable remote access to it via the Neo4j-shell. This was done by using a GraphDatabaseFactory to construct a preconfigured GraphDatabaseService:

GraphDatabaseService newEmbeddedGraphDatabase(String dbDir) {
    db = factory.newEmbeddedDatabaseBuilder(dbDir)
        .setConfig(ShellSettings.remote_shell_enabled, "true")
        .setConfig(ShellSettings.remote_shell_port, "5555")

and then wire that as a dependency when initialising the spring beans:

beans {
    trueDbGraphDatabaseFactory(OurGraphDatabaseFactory, graphDatabaseFactory)
    graphDatabaseService(GraphDatabaseService, db) { bean ->
        bean.factoryBean = "ourGraphDatabaseFactory"
        bean.factoryMethod = "newEmbeddedGraphDatabase"
        bean.destroyMethod = "shutdown"

I'm trying to work out how to achieve this in the new OGM project. Is it possible?

If I configure OGM using:

SessionFactory newSessionFactory() {
    def configuration = new Configuration()
    new SessionFactory(configuration, "")

How do I inject my own instance of a GraphDatabaseService into the EmbeddedDriver? (There is a constructor to EmdeddedDriver that takes one, but it's not clear which constructor OGM is using).


You can configure a bolt connector for your embedded database if you have the dependencies setup.
Basically the same connector settings as in neo4j.conf

@michael.hunger Neo4j 2.3.x doesn't support bolt yet; but maybe I can use do the same thing with the web connector perhaps?


You are on the right track. You can instantiate and pre-configure a GraphDatabaseService and handle it over to the embedded driver.

GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory()
	// do your configuration	
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService);
SessionFactory sessionFactory = new SessionFactory(driver, "package");

@gerrit.meier It doesn't look like the SessionFactory() in OGM version 2.1.6 has a constructer that takes a database. :(. Maybe that was added in a later version. (I'm still on Neo4j 2.3.x so I can't move to the latest OGM yet).

Yes, sorry, this is only available in Neo4j-OGM 3.0+ and I have no solution for you in this case that I would recommend.