0
votes

I am trying to use neo4j embedded server in HA mode with spring data neo4j.I am getting error of class loading. i have put all the jars. I am trying to use neo4j embedded server in HA mode with spring data neo4j.I am getting error of class loading. i have put all the jars.

    Running Grails application
        | Error 2014-10-18 17:27:46,878 [localhost-startStop-1] ERROR spring.GrailsRuntimeConfigurator - [RuntimeConfiguration] Unable to perform post initialization config: file:./grails-app/conf/spring/resources.xml
        Message: org.neo4j.kernel.HighlyAvailableGraphDatabase
        Line | Method
        ->> 366 | run in java.net.URLClassLoader$1

        | 355 | run in ''
        | 354 | findClass in java.net.URLClassLoader
        | 425 | loadClass in java.lang.ClassLoader
        | 262 | run . . . in java.util.concurrent.FutureTask
        | 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
        | 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker

    and my xml configuration is

        <?xml version="1.0" encoding="UTF-8"?>
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
        xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/data/neo4j
        http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">

        <context:component-scan base-package="neo4j"></context:component-scan>
        <bean id="haDatabase" class="org.neo4j.kernel.HighlyAvailableGraphDatabase"
            destroy-method="shutdown">
            <constructor-arg index="0" value="target/db" />
            <constructor-arg index="1">
                <map>
                    <entry key="ha.server_id" value="1" />
                    <entry key="ha.server" value="localhost:6001" />
                    <entry key="ha.coordinators" value="localhost:2181,localhost:2182,localhost:2183" />
                </map>
            </constructor-arg>
        </bean>
        <neo4j:config graphDatabaseService="haDatabase"  base-package="neo4j"/>
        <bean id="config"
            class="org.springframework.data.neo4j.config.DataGraphNamespaceHandlerTests$Config" />
         <neo4j:repositories base-package="neo4jRepository" />

and i have dependencies are
compile "org.springframework.data:spring-data-neo4j:3.2.0.RELEASE"
compile "org.neo4j:neo4j-enterprise:2.1.5"
compile "org.neo4j:neo4j-ha:2.1.5"
compile "org.neo4j:neo4j-cluster:jar:2.0.0"
2

2 Answers

2
votes

Due to an API change in Neo4j 1.9 you cannot instantiate HighlyAvailableGraphDatabase directly. Instead you should use HighlyAvailableGraphdatabaseFactory. Please see one of my gists showing how you can use it: https://gist.github.com/sarmbruster/6222698

0
votes

This example may also help you with the java code. (Neo4j 2.1.2)

https://github.com/Jotschi/neo4j-ha-example

snippet:

    GraphDatabaseBuilder builder = new HighlyAvailableGraphDatabaseFactory().newHighlyAvailableDatabaseBuilder(DB_LOCATION);

    builder.setConfig(ClusterSettings.server_id, SERVER_ID);
    builder.setConfig(HaSettings.ha_server, "localhost:6001");
    builder.setConfig(HaSettings.slave_only, Settings.FALSE);
    builder.setConfig(ClusterSettings.cluster_server, "localhost:5001");
    builder.setConfig(ClusterSettings.initial_hosts, "localhost:5001,localhost:5002");

    graphDb = builder.newGraphDatabase();