Question

I've built a new project using Spring data graph for Neo4J. I'm using Maven.

Everything works fine with embedded database, but when I'm trying to set a database on remote server using REST I'm getting:

    java.lang.ClassNotFoundException: org.springframework.data.neo4j.rest.SpringRestGraphDatabase

I saw a post from about one year ago, but with no solution - at least not one that works for me... In this post they referred aspectJ which indeed I use.

Is anyone familiar with this? does anyone have a working configuration example?

I really tried a L-O-T of different configurations, based on different posts in different forums and guides. This is my last one - I'll just specify that I also have other POMs and all of them are grouped by a parent POM (this is a bug project).

This is the bean definition:

        <!-- Neo4j configuration (creates Neo4jTemplate) -->
        <datagraph:config graphDatabaseService="neo4JRestGraphDatabase" />

           <!-- With this uncommented - it works great -->
        <!--datagraph:config storeDirectory="data/graph.db" /-->

And this is the project's POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.vo.insight</groupId>
    <artifactId>content-insights-model-processed</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>content-insights-model-processed</name>
    <url>http://maven.apache.org</url>

    <parent>
        <artifactId>content-insights-parent</artifactId>
        <groupId>com.vo.insight</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../content-insights-parent/pom.xml</relativePath>
    </parent>


    <properties>
        <neo4j-rest-graphdb.version>2.0.0-M06</neo4j-rest-graphdb.version>
        <neo4j.version>1.8.M06</neo4j.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.vo.insight</groupId>
            <artifactId>content-insights-common</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- Neo4J -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-neo4j</artifactId>
            <version>3.0.0.BUILD-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.neo4j</groupId>
                    <artifactId>neo4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-rest-graphdb</artifactId>
            <version>${neo4j-rest-graphdb.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.neo4j</groupId>
                    <artifactId>neo4j-kernel</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.neo4j</groupId>
                    <artifactId>neo4j-lucene-index</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.neo4j.app</groupId>
            <artifactId>neo4j-server</artifactId>
            <version>${neo4j.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>log4j-over-slf4j</artifactId>
                </exclusion>

                <exclusion>
                    <groupId>org.neo4j</groupId>
                    <artifactId>neo4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-server</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-jaxrs</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-mapper-asl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>de.huxhorn.lilith</groupId>
                    <artifactId>de.huxhorn.lilith.3rdparty.rrd4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jersey.contribs</groupId>
                    <artifactId>jersey-multipart</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.main</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.fileinstall</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Do not remove this although we are not using Hibernate! this is needed 
            for Neo4J -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.1.4.RELEASE</version>
        </dependency>

        <!-- Cassandra Client -->
        <dependency>
            <groupId>me.prettyprint</groupId>
            <artifactId>hector-core</artifactId>
        </dependency>
        <dependency>
            <groupId>me.prettyprint</groupId>
            <artifactId>hector-object-mapper</artifactId>
            <version>3.0-04</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cassandra</groupId>
            <artifactId>cassandra-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
    </dependencies>

    <build>
    </build>
    <!-- this profile is for ci build mode. to activate it use -Pci flag -->
    <profiles>
        <profile>
            <id>ci</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>aspectj-maven-plugin</artifactId>
                        <version>1.0</version>
                        <configuration>
                            <outxml>true</outxml>
                            <aspectLibraries>
                                <aspectLibrary>
                                    <groupId>org.springframework</groupId>
                                    <artifactId>spring-aspects</artifactId>
                                </aspectLibrary>
                                <aspectLibrary>
                                    <groupId>org.springframework.data</groupId>
                                    <artifactId>spring-data-neo4j</artifactId>
                                </aspectLibrary>
                            </aspectLibraries>
                            <source>1.6</source>
                            <target>1.6</target>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>compile</goal>
                                    <goal>test-compile</goal>
                                </goals>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjrt</artifactId>
                            </dependency>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjtools</artifactId>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

Thanks for your help!

Carmel

Was it helpful?

Solution 3

Eventualy, the problem was the definition of my neo4JRestGraphDatabase (which unfortunately I haven't pasted here...).

It was:

<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.RestGraphDatabase">
        <constructor-arg value="http://localhost:7474/db/data/" />
    </bean>

Instead of:

<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
        <constructor-arg value="http://localhost:7474/db/data/" />
    </bean>

Now I have 'Connection Refused' problem, but this is another issue.

Regarding the dependencies, the dependencies that geceo mentioned above are indeed enough.

Thanks for anyone that tried to help!

Carmel

OTHER TIPS

I think you don't want to use "org.neo4j" dependencies if you use Spring Data. I'm not an expert but my current project works with only these:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-neo4j</artifactId>
    <version>${org.springframework.data-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-neo4j-rest</artifactId>
    <version>${org.springframework.data-version}</version>
</dependency>

I think you need to include the org.springframework.data.spring-data-neo4j-rest artifact, not just the org.neo4j.neo4j-rest-graph-db.

Also, you're mixing versions pretty freely

  • spring-data-neo4j 3.0 snapshot
  • neo4j-rest-graphdb 2.0 milestone
  • neo4j 1.8 milestone (you sure you don't mean to use 2.0 M6 here also?)
  • a long list of exclusions
  • explicit dependencies on spring-security-web 3.1.4 and spring-orm

I don't know the relevant dependencies and compatibilities for SDN 3, and there isn't necessarily anything wrong with mixing it up a bit, but if you get ClassNotFoundException or NoClassDefFoundError with a pom like that, you may want to look at your dependency tree, for instance by running mvn dependency:tree -Dverbose in your project root, to see if there are conflicting versions causing some dependencies to be silently excluded.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top