I recently completed a project using RingoJS (http://ringojs.org), a Javascript web framework, and Neo4j. Both platforms were remarkably pleasant to work with. I had been developing with the Play framework (Java) for over a year. That was enjoyable and the type checking is great. With a Javascript web framework I miss the type checking, but it is nice that RingoJS uses one language, JavaScript, for everything– configuration, routing, handlers, controllers and templates (via mustache in this case). It is fun to think in only one space for a change.
I have been using the excellent Querydsl API (http://www.querydsl.com) for SQL queries also for over a year. I have been suffering the least of SQL practitioners with excellent type checking and conditional query construction. Part of my attraction to Querydsl has been how easily it allows one to optimize queries programmatically to get the best performance in a given situation. Actually needing good performance in important situations has been what caused me to look for a next generation database that was talking about the right features. I first heard about Neo4j some time in the last year. The open source license changes where what got me to seriously consider Neo4j. It is important for me to always work with a software stack that does not come with immediate licensing costs before support or high scale features are needed. I think relicensing Neo4j was a great move for increasing adoption and I hope you soon gain many commercial clients that have learned they have been depending on Neo4j for some time and now need more from it :) Working with Neo4j and RingoJS has been fun. The only trouble I had was trying to create enum-like structures in JavaScript whose properties behave like Java final. That proved to be simple, but a novelty because one doesn't typically create shared immutable structures in JavaScript. I created a RingoJS package for Neo4j (release pending) that manages the Neo4j jars files and exposes a config file format for embedding one or many Neo4j databases. Excluding index configuration (if desired) a config file only needs 4 statements. Here is an example: /*** example db.js ***/ export("db", "relTypes"); var {DbContext, RelationshipTypes} = require("neo4j-graphdb"); var db = new DbContext("data/db1"); var relTypes = new RelationshipTypes(["PEOPLE", "PERSON", "PLACES", "PLACE", "LIVES_AT"]); /*** end example ***/ With the above example any RingoJS action can use the database by including the simple statement var {db, relTypes} = require("./db"). The db object exposes one function getDb (or getGraphDb) and you can imagine the rest from there. I will release a RingoJS package for Neo4j soon. Please let me know if you have any questions. If you would like to arrange a demonstration of Neo4j and RingoJS at your local meetup in San Francisco, Orange County or San Diego please let me know. I would love to present this effective and interesting combination and answer more questions. Thanks and kind regards, RR McKinley _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

