Wednesday, October 20, 2010

Spring Data and Neo4j

A serious obstacle for the adoption of alternative ('nosql') databases such as graph databases today is the limited support in middleware for multiple database backends.

In the Neo4j team, we've seen this over and over with community members and customers: while few developers LOVE relational databases, the support in popular middleware and development environments for using an RDBMS is just better and more mature than anything out there for the nosql alternatives.

Well, we think nosql databases deserve to be first-class members in modern software development. So we set out to change that by joining up with VMware's SpringSource to build truly great support for graph databases and other nosql stores into Spring -- the dominant middleware for the JVM platform.

Announcing the Neo4j Spring Data collaboration

Today, here at the annual Spring conference SpringOne 2GX in Chicago, SpringSource is showing for the first time the work they have been doing together with the Neo4j team around Spring Data.

Spring Data is a project to provide convenient support from the Spring framework for non-relational databases. In his keynote today, Rod Johnson, CEO of SpringSource and SVP of Middleware at VMware, introduced Spring Data and demonstrated how the Neo4j graph database is used in Spring Data!

Here's a copy of the deck (well, the Spring Data and Neo4j part of the deck) that Rod used in the keynote. It's brief (10 slides) but it does a good job of introducing the basics of what Spring Data is and what it means for developers wanting to use for example Neo4j in a Spring environment.

What is Neo4j Spring Data?

The work we've been doing with SpringSource/VMware is split into two projects:

  • Datastore Graph, which provides an annotation-driven POJO-graph mapping library. It is to Neo4j what Hibernate is to an RDBMS.
  • The Neo4j Roo Add-On, which provides a plugin that enables users to easily build Roo applications that are backed by Neo4j.

While these projects are not considered GA quite yet, the Datastore Graph project is rapidly maturing and is already being used in a commercial context. Both Datastore Graph and the Roo Add-On are expected to reach 1.0 before the end of the year.

How do I get started?

The projects are developed in the open on public git repositories with regularly pushed maven builds. So it's easy to get your hands on this software.

For detailed instructions, please check out Neo4j and SpringOne on our wiki. It will quickly get you up and running with either one of these two projects.

4 comments:

Anonymous said...

Always good to provide more API access to middleware, but ...

The example in the slide presentation is not that great an example to illustrate the differences between relational and nosql approaches, as the example is a very straightforward relational implementation -- furthermore, the relational implementation shown was flawed !

Chiradip Mandal said...

Hi Guys,

I was experimenting with neo4j for some time now and am excited about neo4j presence in spring data. I was trying to see how springdata-neo4j fits into one of my products. I failed to use it properly. Then I tried to see whether the spring-data neo4j examples work fine. They worked fine but failed with my modification. Let me tell you what was my modification. In the WorldRepositoryTest.java, I added another test Method like this


@Test
public void criticalTest() {
assertNotNull(galaxy);
assertFalse(0 == galaxy.countWorlds());
}

and expected the the worlds created elsewhere in other method should be available here too. Even with clearDatabase() method commented out I always get this test failing. In real world we need the NodeEntity (worlds are node entities) to be persisted and available. How do I get that? Am I missing something here? How do I persist a NodeEntity, I am surely not talking about JPA persistence in this context. Please help.

Chiradip Mandal

Michael Hunger said...

Chiradip, Spring Testing infrastructure rolls back transactions after the tests so the DB is always as it was before any of the tests started, you have to populate/setup the db yourself

Jael Zela said...

Hi
I'm new in Neo4j and currently I'm working in a project with Neo4j Spatial.
I want to know if Spring Data works with Neo4j Spatial