You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@couchdb.apache.org by Darran White <da...@googlemail.com> on 2010/04/13 09:18:38 UTC

Java Document Object Mapper api

Hi,
I`ve started writing an annotation based couchdb Document Object Mapper
called jBeanbag http://code.google.com/p/jbeanbag/.
The approach I`ve taken is to use 100% annotations so the users domain model
does not have to derive from the api. I`m also trying to make it CouchDB
focused rather
then JSON focused which a few of the other apis seem to be. The aim is to
enable easy mapping to and from CouchDB documents to Java classes and also
provide some infrastructure support
for example @Linked annotation could be above a field meaning the field
should be a linked document and handling conflicts by returning Java objects
of the different versions in an exception.
I`d also like to put in more annotations for other kinds of relationships
like bi-directional.
An example Java annotated class is at the bottom of this mail.

I`m using the ASM library http://asm.ow2.org/

to create a Meta model of the Java classes ,including all the CouchDB
configuration for that class, is then cached in ehcache and can be reused
for serializing to/from the JSON. The JSON parsing I`m using the the Jackson
JSON Streaming/Mapping apis.
ASM helps by making it easy to analyze the class structure in advance ,using
its visitor pattern, as well as giving access to Generics information.

So I`m looking to the community for any CouchDB patterns they keep repeating
in code which could be included in the framework as well as anyone else who
could be interested in contributing to the code base.

Going forward I`d also like to provide wrappers for Groovy to make it a bit
more ,well Groovier and Scala wrappers.

At the moment theres not a released version but I`m hoping to have a 0.01
version soon. But I have done most of the simple conversion to/from JSON for
primitives,arrays,maps,lists,
sets,Objects, Wrapper Objects e.g Integer class,enums and Dates. Currently
it`ll struggle with things like Arrays of Maps or Lists of Lists but that
should be fixed soon. I`m currently working on the HTTP client side of
things.

Thoughts,comments and especially help all appreciated.

regards

Darran

@Document(location="people")
public class Person{
 @Id
 private String id;

 @Revision
 private String revision

//Will be a list of embedded pet objects in the person document
//not really needed as embedded is the default
 @Embedded
 @NotNullable
 private List<Pet> pets;

//List will be parsed and written as linked documents to this class
 @Linked
 private List<Car> cars;

 private String name;//Will be written as name:<value> in document

 @Ignore
 private String dontWriteToDocument; //Won`t be written to the document

......