[hibernate-dev] [OGM] Metamodel

Davide D'Alto daltodavide at gmail.com
Tue May 7 05:05:13 EDT 2013


Thanks for all the information,
I think I have a clearer idea now.

I'll start to write some code and see what happens :)

Davide




On Fri, May 3, 2013 at 2:13 PM, Emmanuel Bernard <emmanuel at hibernate.org>wrote:

> Hello Davide,
>
> Technically most of the knowledge is in
> https://hibernate.atlassian.net/browse/OGM-208 but it's definitely quite
> blurry for a new comer ;)
>
> Let me try and summarize it for you. With that you'll be able to better
> grasp the comments in OGM-208
>
> ## Goals
>
> We want a metadata facility as a way to pass mapping and configuration
> from the developer to the grid dialect /
> datastore provider. I will call these options. The facility should:
> - be expressible via annotations
> - be expressible via a programmatic API
> - be as type-safe as possible but not too hard to add configuration
>   options
>
> This project is essentially smart plumbing so the "clients" of this API
> are the developers on one hand and the Datastore providers on the other
> hand.
>
> ## What to reuse
>
> We will most likely use Jandex to read annotations to benefit from the
> ORM and WildFly work esp wrt indexing.
>
> ## Scopes: overriding and refining options
>
> Each option might be:
> - global, per entity, per property (with optional overridability from
>   one to the other)
> - global, specific to a session, specific to an operation (e.g. query)
>
> On top of that options can be polled together by functional affinities
> like key/value generic options, Infinispan specific options, document
> store options etc.
>
> ## Programmatic API
>
> The programmatic API can be used to define mapping options as well as
> session or even operation options. It should be type-safe and will
> likely look like Hibernate Search's approach more or less.
>
> This is more or less what is in the branch. Check out the
> package-info.java for some more information.
>
> ## Annotation
>
> We need a way to convert an annotation into calls to the programmatic
> API (semantically speaking at least). Something like an (meta)annotation
> based conversion:
>
>     @ToInternalModel(UnsafeConverter.class)
>     @interface Unsafe {
>         boolean value() default true;
>         static class UnsafeConverter implements
> Convert<Unsafe,MongoDBMappingInternalModelGenerator> {
>             void call(Unsafe annotation,
> MongoDBMappingInternalModelGenerator generator) {
>                 return generator.unsafe(annotation.value());
>             }
>         }
>     }
>
> This is todo
>
> ## Reading API
>
> Datastore providers and GridDialect implementations should be able to
> read back these options.
>
> This is more or less what you can see in the last few code lines of my
> OGM-207 comment of 27/Jul/12 6:33 PM.
> The seed of it is the MappingService API on the branch but it looks all
> untypesafe and wrong :) Let's call it unfinished.
>
> ## Expressing options in a type-safe way
>
> If you look at OGM-207's comment of 27/Jul/12 6:33 PM, you will wee an
> example of NamedQuery and Quorum options and the infrastructure needed.
>
> It shows how to uniquely identify an option and how to model options
> like quorum that are identified by their name and options like named
> queries that are identified by their name + a key (the query name in
> this case).
>
> It's available in options.Iteration2's class.
>
> ## Tests
>
> Tests are available in org.hibernate.ogm.test.mapping.
>
> ## Examples of options
>
> You can imagine the following examples of options:
>
> - quorum: express the R/W quorum (globally, per entity, per collection,
> per session) ; useful for dynamo based systems
> - WriteConcern: express the write concern options for MongoDB (globally,
>   per entity, per collection)
> - Whether or not store association information in the main document or
>   in a separate document (see MongoDB IN_ENTITY etc. We could have this
>   option on a per collection basis and not a global setting.
> - all datastore specific options whether they are global or relate to
>   one entity or one property
>
> I hope I have been clearer, fire the questions away.
>
> Emmanuel
>
> PS: JIRA no longer has a way to link to comments?
>
> On Wed 2013-05-01  9:41, Davide D'Alto wrote:
> > Hi,
> > I've started to work on the metamodel. I've look at the branch that
> > emmanuel created and I've rebased it to the latest master fixing all
> > checkstyle violations: https://github.com/DavideD/hibernate-ogm/tree/208
> >
> > The problem is that I don't have a clear idea how the metamodel is
> supposed
> > to work, what could be a good test case to start with?
> >
> > Thanks,
> > Davide
> > _______________________________________________
> > hibernate-dev mailing list
> > hibernate-dev at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list