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!
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.
User contributions licensed under CC BY-SA 3.0