in search of a working neo4j and grails configuration

5

I'd like to combine Neo4j 2.1.3 and Grails 2.4.2, preferably using the neo4j GORM plugin or using Spring4Data-Neo4j.

I already tried to dig myself through the neo4j:2.0.0-M02 plugin documentation and the example hosted at Stefan Armbrusters blog.

I'd like to use the REST style connection to the NEO4J database instance. The database instance is running on localhost, I can query it using the web interface.

I'm looking for a working configuration of both products, so that I can actually do some exploring of using neo4j and graphs.

After much trial and error I tinkled together a Grails configuration that should be working, given the hints I found in the documentation and example. Alas - it doesn't.

I posted my Grails configuration further below.

It's really difficult to figure out which configuration options are currently actually needed for a specific connection variant (embedded, rest, etc) - examples and documentation seem not to fit to each other. E.g. the example BuildConfig.groovy does not include the neo4j GORM plugin, because the corresponding line is commented out:

// compile ":neo4j:2.0.0-M02"

Note: I do not want to whine and complain - I'm just stating my experience as a beginner in the neo4j and grails domain - the current state of the docs/examples regarding this driver does it make rather hard and unattractive to "give it just a quick try and see if this is really some cool stuff".

The Grails configuration given below is the result of several hours of trial and error - quite probably containing unnecessary options (JDBC-driver setting?, do I need a JDBC url if I use the connection variant "rest". Is this still the right way to configure a REST-style connection or do I now have to use a specific JDBC URL)- sorry for the mess.

If I start the Grails application I get the following error:

Loading Grails 2.4.2
|Configuring classpathSep 14, 2014 5:23:55 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

.
|Environment set to development
.................................
|Packaging Grails application
.................................
|Running Grails application
Sep 14, 2014 5:24:11 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:12 PM org.restlet.ext.httpclient.HttpClientHelper stop
INFO: Stopping the HTTP client
Sep 14, 2014 5:24:13 PM org.restlet.ext.httpclient.HttpClientHelper start
INFO: Starting the Apache HTTP client
Error |
2014-09-14 17:24:13,065 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jTransactionManager': Cannot resolve reference to bean 'neo4jDatastore' while setting bean property 'datastore'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jDatastore': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.sql.SQLException: Commit called on auto-committed connection
Message: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jTransactionManager': Cannot resolve reference to bean 'neo4jDatastore' while setting bean property 'datastore'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jDatastore': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.sql.SQLException: Commit called on auto-committed connection
    Line | Method
->>  262 | run       in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread
Caused by BeanCreationException: Error creating bean with name 'neo4jTransactionManager': Cannot resolve reference to bean 'neo4jDatastore' while setting bean property 'datastore'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'neo4jDatastore': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.sql.SQLException: Commit called on auto-committed connection
->>  262 | run       in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread
Caused by BeanCreationException: Error creating bean with name 'neo4jDatastore': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.sql.SQLException: Commit called on auto-committed connection
->>  262 | run       in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread
Caused by RuntimeException: java.sql.SQLException: Commit called on auto-committed connection
->>  100 | commit    in org.grails.datastore.gorm.neo4j.engine.JdbcCypherEngine
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|     91 | setupIndexing in org.grails.datastore.gorm.neo4j.Neo4jDatastore
|     67 | afterPropertiesSet in     ''
|     50 | getObject in org.grails.datastore.gorm.neo4j.bean.factory.Neo4jDatastoreFactoryBean
|    262 | run . . . in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread
Caused by SQLException: Commit called on auto-committed connection
->>  200 | commit    in org.neo4j.jdbc.internal.Neo4jConnection
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|     97 | commit    in org.grails.datastore.gorm.neo4j.engine.JdbcCypherEngine
|     91 | setupIndexing in org.grails.datastore.gorm.neo4j.Neo4jDatastore
|     67 | afterPropertiesSet in     ''
|     50 | getObject in org.grails.datastore.gorm.neo4j.bean.factory.Neo4jDatastoreFactoryBean
|    262 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run . . . in java.lang.Thread
Error |
Forked Grails VM exited with error

BuildConfig.groovy ----------------------------------------------------

grails.servlet.version = "3.0" // Change depending on target container compliance (2.5 or 3.0)
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.work.dir = "target/work"
grails.project.target.level = 1.6
grails.project.source.level = 1.6
//grails.project.war.file = "target/${appName}-${appVersion}.war"

grails.project.fork = [
    // configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
    //  compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],

    // configure settings for the test-app JVM, uses the daemon by default
    test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
    // configure settings for the run-app JVM
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the run-war JVM
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the Console UI JVM
    console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]

grails.project.dependency.resolver = "maven" // or ivy
grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {

        excludes 'xml-apis', 'netty', 'stax-api', 'slf4j-jdk14','log4j-over-slf4j', 'logback-classic'

        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility

    repositories {
        inherits true // Whether to inherit repository definitions from plugins

        grailsPlugins()
        grailsHome()
        mavenLocal()
        grailsCentral()
        mavenCentral()
        // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
        //mavenRepo "http://repository.codehaus.org"
        //mavenRepo "http://download.java.net/maven/2/"
        //mavenRepo "http://repository.jboss.com/maven2/"
        // mavenRepo   "http://repo2.maven.org/maven2/"

        mavenRepo 'http://m2.neo4j.org/content/repositories/releases/'

    }

    neo4jVersion="2.1.3"

    dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
        // runtime 'mysql:mysql-connector-java:5.1.29'
        // runtime 'org.postgresql:postgresql:9.3-1101-jdbc41'


        // test "org.grails:grails-datastore-test-support:1.0-grails-2.4"

        compile("org.neo4j:neo4j-community:$neo4jVersion")


        // add graphviz capabilities
        compile(group:"org.neo4j", name:"neo4j-graphviz", version: neo4jVersion)
        runtime (group:"org.neo4j", name:"neo4j-shell", version: neo4jVersion)

        // uncomment following line if type=rest is used in DataSource.groovy
        // runtime "org.neo4j:neo4j-rest-graphdb:1.9"
        runtime "org.neo4j:neo4j-rest-graphdb:2.0.1"

    }

    plugins {
        // plugins for the build system only
        build ":tomcat:7.0.54"

        // plugins for the compile step
        compile ":scaffolding:2.1.2"
        // compile ':cache:1.1.7'
        compile ":asset-pipeline:1.8.11"

        // plugins needed at runtime but not for compilation
        // runtime ":hibernate4:4.3.5.4" // or ":hibernate:3.6.10.16"
        // runtime ":database-migration:1.4.0"
        runtime ":jquery:1.11.1"

        compile ":neo4j:2.0.0-M02"


        // Uncomment these to enable additional asset-pipeline capabilities
        //compile ":sass-asset-pipeline:1.7.4"
        //compile ":less-asset-pipeline:1.7.0"
        //compile ":coffee-asset-pipeline:1.7.0"
        //compile ":handlebars-asset-pipeline:1.3.0.3"
    }
}

DataSource.groovy ---------------------------------------------

dataSource {
    pooled = true
    // jmxExport = true
    // driverClassName = "org.h2.Driver"
    driverClassName = "org.neo4j.jdbc.Driver"
    // username = "sa"
    // password = ""
    url = 'jdbc:neo4j://localhost:7474'
}


hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
//    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
}


neo4j {
    // url = "jdbc:neo4j:instance:dummy"
    // type = "rest"
    type="rest"
    location = "http://localhost:7474/db/data/"
    //url = "jdbc:neo4j://localhost:7474"
    // url = 'jdbc:neo4j:instance://localhost:7474'
}

Thanks in advance for any help!

grails
neo4j
asked on Stack Overflow Sep 18, 2014 by Bernd H • edited Mar 26, 2015 by dustmachine

1 Answer

0

I'm using Grails 2.3.9, but I gave up on this and ended up writing a service using an instance of HttpBuilder to interact with its REST API interface. Happy to share some source.

answered on Stack Overflow Sep 4, 2015 by jerryb

User contributions licensed under CC BY-SA 3.0