Hi, I just wanted to share the news around the next version of the Spring Data Neo4j project with you.
First of all - the library will be renamed to Spring Data Neo4j and the next release will be version 2.0 due to the many breaking changes and new approaches. The new github repository can be found at http://github.com/springsource/spring-data-neo4j the old one will stay around for a while (as there are some forks and watchers) and point to the new one. We plan to release a milestone around the end of the week and the release candidate in time for Spring One. We've gotten a lot of feedback and some contribution to the library - thank you all for that. >From the feedback we've seen that many people are not comfortable using full >blown AspectJ to handle their mapping. So we've decided to expand the approach - the AspectJ mapping will be available as separate library but the main Spring Data Neo4j project will use a mapping that is more in line with the other Spring Data projects using the mapping facilities from Spring Data Commons. The project will be split into separate parts: * spring-data-neo4j - contains all the core code, annotations, template, repository support and Spring Data Commons Mapping based persistence * spring-data-neo4j-aspects - contains the aspects for the field interception and the Active Record like method introduction as separate mixin * spring-data-neo4j-cross-store - contains additional handling for JPA (and other) cross store implementations * spring-data-neo4j-rest - will use the neo4j-java-rest-binding and provide a thin integration layer for Spring Data Neo4j Some features that we're currently discussing / are going to address: * provide complete object-graph persistence based on spring-data-commons mapping * direct-field access mapping (using AJ) will probably limited to tx-scope * remove current lifecycle handling in favor to an explict detach operation that uses one of the strategies outlined below * examples will be included in the library and always up to date * REST Batch Mode * extensive documentation updates * a version of the cineasts tutorial to work against REST server * address open jira issues like multiple same type relationships, traversal results, serialization, type-identifier-indirection * much more Planned: * Cypher DSL + Query-DSL support * derived finder support I'm still discussing a important issue for the mapping - namely loading strategies. So far I have about 5-6 ways to think about none of which I think is the best fit, so getting input on this would be great too. #1 static declarations on @RelatedTo* annotations (like in JPA) -> don't like b/c of context ignorance #2 dynamic programatic fetching within the session context (by navigating the required relationships) #3 use-case specific fetch-groups, declarative (w/ annotations) + use-case/fetch-group name as context when loading (would be also possible with repository annotations) #4 use-case specific fetch groups that are "auto-learned" by the infrastructure when the user navigates relationshiops manually and then are stored as meta information so that at the next fetch with that use-case pre-fetches the data #5 declare/define fetch-groups as cypher-queries or traversals (which might also be the "metadata" for #4) #6 have a use-case specific version of the domain objects that just contain the subgraph that the use-case is interested in and no outgoing relationships elsewhere (aka. DDD aggregate) then the infrastructure can fetch this whole subgraph and return it, with the projection abilities the entities can still be projected to other types (and the fetch-group-subgraph could probably used within the domain model to define mapping-contexts/boundaries (DDD again). Paradox of choice as always. I'd prefer either something like 5 as the advanced version or #6 as type safe explicit one. But probably something simpler for the start would be more sensible. Looking forward to your feedback for this roadmap and any helpful input you can provide. Thanks Michael _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user