I would like to combine Neo4j 2.1.3 and Grails 2.4.2, it is advisable to use the neo4j GORM plugin or use Spring4Data-Neo4j.
I already tried to break through the neo4j plugin documentation: 2.0.0-M02 and an example posted on Stefan Armbrusters blog.
I would like to use a REST style join with an NEO4J database instance. The database instance is running on localhost, I can query it using the web interface.
I am looking for a working configuration of both products, so that I can really learn a little about using neo4j and graphs.
After much trial and error, I turned on the Grails configuration, which should work, given the hints I found in the documentation and example. Alas, this is not.
I posted my Grails configuration below.
It is really difficult to determine which configuration parameters are actually needed for a particular connection option (built-in, remaining, etc.). The examples and documentation seem inconsistent. For instance. the BuildConfig.groovy example 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 just declare my experience as a newbie in the field of neo4j and grails - the current state of the documents / examples regarding this driver makes it quite complicated and unappealing for "give it just a quick try and see if this is really cool stuff."
The Grails configuration below is the result of several hours of trial and error - most likely it contains unnecessary parameters (JDBC driver parameter?) I need a JDBC URL if I use the "rest" connection option. the correct way to configure a REST connection or now I need to use a specific JDBC URL) - sorry for the mess.
If I run 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 eg // 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 your help!