Experience using Java-based frameworks for RDF-to-POJO (and vice versa) mapping

I know there have been several similar discussions on this topic, but my idea was to try to gather not just pure references to relevant projects, but the real-world EXPERIENCE using different state-of-the-art Java libraries for RDF to POJO mapping and manipulating those data. So, I'm asking you: what was your experience using and developing with following frameworks (please update the list if something is missing)?

I think important factor should be that the project is still under development, so I didn't include a project which has the last commit over one year old. Also, good documentation should be taken into account.

I have been working on something very similar for Groovy (which is essentially Java):

http://code.google.com/p/semanticwebpogos/

Essentially this binds POGO's to a Jena model. Some of the things it covers include:

  1. binding properties in a class to more than one term in a vocabulary
  2. binding at event change time (using a meta class with a property change listener), then enabling a developer to operate both on the object and the underlying RDF model.
  3. Providing a framework and convention to enable more advanced binding i.e when a domain class does not align naturally with vocabulary.
  4. Association with other RDF POGO's

Aside from the binding mechanisms, it also includes persistence (CRUD) operations based on a jdbc driver for SPARQL:

http://code.google.com/p/jdbc4sparql/

What it definitely doesn't do is reverse engineer an ontology into a class package, something I would approach with caution, but might be a approach you would consider adding to your list (see Jastor below)

http://jastor.sourceforge.net/

We use Alibaba in the OpenSahara framework. We only use it as a mapping from Triples to Pojo's, which is easy with annotations, e.g.:

@iri("os:class/NamedEntity")
public interface NamedEntity extends Labeled {
    @iri("os:prop/namedEntity/dateCreated")
    XMLGregorianCalendar getDateCreated();

    @iri("os:prop/namedEntity/dateCreated")
    void setDateCreated(XMLGregorianCalendar date);

    @iri("os:prop/namedEntity/lookup")
    Set<String> getLookupNames();

    @iri("os:prop/namedEntity/lookup")
    void setLookupNames(Set<String> text);
}

Issues: data in the triple store must conform to the annotations, or you will get RuntimeExceptions (e.g. if the value is declared as being a date, but is not, or if there are multiple values, but the mapping is to just one element).