[hibernate-dev] MetadataImpl ctor

Steve Ebersole steve at hibernate.org
Thu Jun 2 16:24:12 EDT 2011


I guess one thing I am interested in is whether you see an issue in this 
style of process with annotations.  On the HBM side of things, this will 
work out beautifully.  Do you foresee any issues with this on the 
annotation side?


On 06/02/2011 02:51 PM, Steve Ebersole wrote:
> Hardy, et al.
>
> I have been working mostly on low-hanging fruit in this metamodel code
> getting a handle on the code y'all wrote.
>
> I wanted to discuss one proposal for change in particular. Currently the
> ctor for MetadataImpl decides whether to process HBM or annotations
> first and then processes all of that type completely, then moves on to
> the other type.
>
>
> What I wanted to propose instead was that we process the incoming data
> more in chunks (for lack of better vocab). Basically the thought is that
> there is a natural order to the things based on the nature of how they
> relate to each other and their potential inter-dependence.
>
> I think psuedo code works well here to illustrate what I propose.
> Currently we do (assuming HBM as precendence):
>
> MetadataImpl(...) {
> processHibernateMappings(...);
> processAnnotations(...);
> }
>
> processHibernateMappings(...) {
> for ( allHibernateMappingFiles ) {
> process( individualHibernateMapping );
> }
> }
>
>
> I understand why we did it this way. Its exactly what the legacy code does.
>
> More what I had in mind though is:
>
> MetadataImpl(...) {
> // auxiliary database objects are independent
> processAuxiliaryDatabaseObjects(...);
>
> // type definitions are independent
> processTypeDefinitions(...);
>
> // filters potentially depend on type definitions
> processFilterDefinitions(...);
>
> // id gen definitions potentially depend on type definitions
> processIdentifierGenerators(...);
>
> ...
> }
>
> processAuxiliaryDatabaseObjects(...) {
> // TODO : not sure "source precedence" means anything other than
> // in regards to entity definitions
> for ( allSources ) {
> selectBinder(...).bindAuxiliaryDatabaseObjects(...);
> }
> }
>
> There are a couple of reasons why it seems better to me to do it this
> way. There are 2 bigs ones imo:
>
> 1) The fact that we know all the things we need to perform each
> processXXX before we do it, which is a general theme in this start up
> redesign. An example of where this is helpful is in type definitions (on
> the hbm side at least). Currently users need to ensure, themselves, that
> all type definitions are added before attempting to add entities, id
> generators, etc that try to reference those types. The proposed approach
> would allow the code to be more user helpful because it would do that
> for them.
>
> 2) Partially a consequence of the first, we can validate as we go.
>

-- 
Steve Ebersole <steve at hibernate.org>
http://hibernate.org



More information about the hibernate-dev mailing list