Search code examples
javaherokuneo4jmicronautgraphenedb

Accessing Neo4j/GrapheneDB (Dev free plan) on Heroku from Micronaut Java app fails: Connection to database terminated


currently I'm struggling with Neo4j/GrapheneDB (Dev free plan) on Heroku platform. Launching my app locally via "heroku local" works fine, it connects (Neo4j Java Driver 4) to a Neo4j 3.5.18 (running from Docker image "neo4j:3.5").

My app is built using Micronaut framework, using its Neo4j support. Launching my app on Heroku platform succeeds, I'm using Gradle Heroku plugin for this task.

But accessing the database with business operations (and health checks) fails with exception like this:

INFO  Driver - Direct driver instance 1523082263 created for server address hobby-[...]ldel.dbs.graphenedb.com:24787
WARN  RetryLogic - Transaction failed and will be retried in 1032ms
org.neo4j.driver.exceptions.ServiceUnavailableException: Connection to the database terminated. Please ensure that your database is listening on the correct host and port and that you have compatible encryption settings both on Neo4j server and driver. Note that the default encryption setting has changed in Neo4j 4.0.
 at org.neo4j.driver.internal.util.Futures.blockingGet(Futures.java:143)
 at org.neo4j.driver.internal.InternalSession.beginTransaction(InternalSession.java:163)
 at org.neo4j.driver.internal.InternalSession.lambda$transaction$4(InternalSession.java:147)
 at org.neo4j.driver.internal.retry.ExponentialBackoffRetryLogic.retry(ExponentialBackoffRetryLogic.java:101)
 at org.neo4j.driver.internal.InternalSession.transaction(InternalSession.java:146)
 at org.neo4j.driver.internal.InternalSession.readTransaction(InternalSession.java:112)
 at org.neo4j.driver.internal.InternalSession.readTransaction(InternalSession.java:106)
 at PersonController.logInfoOf(PersonController.java:57)
 at PersonController.<init>(PersonController.java:50)
 at $PersonControllerDefinition.build(Unknown Source)
 at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1814)
 [...]
 at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 at java.base/java.lang.Thread.run(Thread.java:832)
Suppressed: org.neo4j.driver.internal.util.ErrorUtil$InternalExceptionCause: null
 at org.neo4j.driver.internal.util.ErrorUtil.newConnectionTerminatedError(ErrorUtil.java:52)
 at org.neo4j.driver.internal.async.connection.HandshakeHandler.channelInactive(HandshakeHandler.java:81)
 [...]
 at org.neo4j.driver.internal.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
 at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 ... 1 common frames omitted

I'm sure to get login credentials from OS environment variables GRAPHENEDB_BOLT_URL, GRAPHENEDB_BOLT_USER, and GRAPHENEDB_BOLT_PASSWORD injected to the app correctly; I've verified it with some debug log statements:

State changed from starting to up
INFO  io.micronaut.runtime.Micronaut - Startup completed in 2360ms. Server Running: http://localhost:7382
INFO  Application - Neo4j Bolt URIs: [bolt://hobby-[...]ldel.dbs.graphenedb.com:24787]
INFO  Application - Neo4j Bolt encrypted? false
INFO  Application - Neo4j Bolt trust strategy: TRUST_SYSTEM_CA_SIGNED_CERTIFICATES
INFO  Application - Changed trust strategy to: TRUST_ALL_CERTIFICATES
INFO  Application - Env.: GRAPHENEDB_BOLT_URL='bolt://hobby-[...]ldel.dbs.graphenedb.com:24787'
INFO  Application - Env.: GRAPHENEDB_BOLT_USER='app1[...]hdai'
INFO  Application - Env.: GRAPHENEDB_BOLT_PASSWORD of length 31

I've also tried restarting GrapheneDB instance via Heroku plugin website, but with same negative results.

What's going wrong here? Are there any ways to further nail down the root cause?

Thanks

Christian


Solution

  • I had a closer look at this and it seems that you need the driver encryption turned on for the Graphene db instances. This can be configured in application.yml as below:

    neo4j:
        encryption: true
    

    For reference, here is a sample project https://github.com/aldrinm/micronaut-neo4j-heroku