Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Neo4j plugin for vraptor
Java
Branch: master
Failed to load latest commit information.
src plugin components implementation
.gitignore ignoring IDE files
README.md improving readme
pom.xml bumping neo4j version

README.md

VRaptor Neo4j Plugin

The VRaptor Neo4j plugin aims to bring to VRaptor smooth integration to Neo4j graph database, by providing out of the box transaction control, Neo4j components dependency injection and easy indexing framework access.

How to use

You can enable the Neo4j VRaptor plugin by adding a context-param to your web.xml file:

<context-param>
    <param-name>br.com.caelum.vraptor.packages</param-name>
    <param-value>
        br.com.caelum.vraptor.neo4j
    </param-value>
</context-param>

After this, you'll need to tell VRaptor where is your Neo4j database stored (if you don't do this, VRaptor will assume /tmp/database directory):

<context-param>
    <param-name>br.com.caelum.vraptor.neo4j.database</param-name>
    <param-value>/some/directory</param-value>
</context-param>

Now, VRaptor will enable 3 components:

The Neo4jEmbeddedGraphDatabaseFactory

This ApplicationScoped component is responsible for manage and provide the EmbeddedGraphDatabase instance, so you can receive it in your components by VRaptor's dependency injection, just like:

@Resource
public class PersonController {
    private AbstractGraphDatabase db;

    public PersonController(AbstractGraphDatabase db) {
        this.db = db;
    }

    @Post
    public void save(Person p) {
        Node node = db.createNode();
        // and so on
    }
}

Now, using the EmbeddedGraphDatabase instance is just as simple as declaring it as a constructor argument.

The Neo4jIndexManagerFactory

Similar to the EmbeddedGraphDatabaseFactory, the IndexManagerFactory makes possible to receive by dependency injection the Neo4j Index Manager, with whom you can create new indexes, and search using Neo4j Lucene's integration, for instance.

@Resource
public class PersonController {
    private EmbeddedGraphDatabase db;
    private IndexManager index;

    public PersonController(EmbeddedGraphDatabase db, IndexManager index) {
        this.db = db;
        this.index = index;
    }

    @Get
    public void findByName(String nameToQuery) {
        Index<Node> nameIndex = index.forNodes("nameIndex");
        IndexHits<Node> hits = nameIndex.query("name", nameToQuery)
        // and so on
    }
}

The Neo4jTransactionInterceptor

The TransactionInterceptor takes care of correctly beginning, committing and if necessary, rolling back a Neo4j transaction. So, it is guaranteed that whenever you're creating a Node, the operation will happen inside a transaction. The transaction opens on the beginning of each request and is committed at the end of it. If a validation error or an exception occurs, the transaction is rolled back.

Something went wrong with that request. Please try again.