incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Karl Wettin <ka...@apache.org>
Subject [ANN] New java bindings
Date Sun, 05 Jul 2009 23:46:50 GMT
Hi forum,

I've implemented a new Java bindings library with a consumer API  
similar to BDB JE, but without some of the limitations in the latter.

Except for beeing faster than any of the binding I've tried it also  
features normalization of aggregated entities, and "abortable  
sessions" with a limited set of features similar to those one can find  
in transactions: begin, commit and rollbacks but with conflict caveats.

http://kodapan.se/foo/couchdb-entitystore
http://kodapan.se/foo/couchdb-entitystore.tar.gz

The tarball contains a large and complex demo application with lots of  
data in XML-format, thus the file size.

Here is smaller example also available on the webpage:

public class Service {

   private EntityStore store;

   private PrimaryIndex<Long, Artist> artists;
   private PrimaryIndex<Long, Album> albums;
   private PrimaryIndex<Long, Track> tracks;

   public Service() {
     store = new EntityStore();
     store.open("localhost", 5984);

     artists = store.getPrimaryIndex(Long.class, Artist.class);
     albums = store.getPrimaryIndex(Long.class, Album.class);
     tracks = store.getPrimaryIndex(Long.class, Track.class);
   }

   public static void main(String[] args) throws Exception {
     Service service = new Service();

     Artist artist = new Artist();
     // create a graph
     service.artists.put(artist);

     Artist artist2 = service.get(artist.getId());
     assertFalse(artist == artist2);
     assertEquals(artist, artist2);
   }

}


@Entity
public class Artist {

   @PrimaryKey
   private Long id;

   private String name;

   @Normalized(paths={"name", "tracks.title"})
   private List<Album> albums;

   // getters and setters...
}

@Entity
public class Album {

   @PrimaryKey
   private Long id;

   private String name;

   @Normalized(paths={"name", "artist.name"})
   private List<Track> tracks;

   @Normalized(paths={"name"})
   private Artist mainArtist;

   // getters and setters...
}

@Entity
public class Track {

   @PrimaryKey
   private Long id;

   private String title;

   @Normalized(path={"name"});
   private Artist artist;

   private int length;

   private int discNumber;

   // getters and setters...

}




       karl

Mime
View raw message