I went for the proposed intermediary step to avoid breaking the API of
SchemaManagementTool and its delegates. If you have a way for not
breaking the API or think breaking it is alright, then +1 for doing
the ProperSolution™ in 5.1.
What would it comprise, changing the delegate methods such as
doCreate() to expect a single parameter object providing all the
required info? Target could be a part of this, just an enum probably,
based on wich delegates would do their thing. If it's that, I can try
and help out with it.
Regarding the release schedule, I'd personally be fine with pushing it
a bit back, but then I don't know whether there are any other hard
timelines to be met.
2016-01-19 16:25 GMT+01:00 Steve Ebersole <steve(a)hibernate.org>:
I'd like to get this work into 5.1. But, as much as possible,
I'd like to
get the ProperSolution in place rather than just a StepInTheRightDirection.
If we need to push this date 2-4 weeks I am ok with that. That would help
us coordinate with Infinispan 8.2 schedule (iiuc) for hibernate-infinispan,
not to mention I still have to review the work Vlad has done on the docs
again as well as polish the load-by-multi-id API[1].
[1] Sanne still waiting on your feedback to the open question of internal
routing of those calls.
On Tue, Jan 19, 2016 at 8:41 AM Gunnar Morling <gunnar(a)hibernate.org> wrote:
>
> Hi Steve,
>
> As discussed on IRC, I tried plugging in my own SchemaManagementTool
> and delegates and letting them do the initialization work required for
> OGM.
>
> I am hitting a wall though when it comes to the usage in the
> SchemaExport controller: As it's invoking doCreate() and doDrop()
> right in the constructor with a "fake" target for delegating the SQL
> statements, I am bitten by the fact that SchemaExport is instantiated
> twice in SessionFactoryImpl (once for create, once for drop at
> shutdown), so I see to invocations to doCreate() and doDrop(). Also I
> am lacking the knowledge of what's passed as Target for the controller
> invocation.
>
> So I went ahead and changed SchemaExport to invoke SchemaCreator and
> -Dropper only in execute(), passing them actual Target implementations
> as it's done in SchemaUpdate, too. It's not yet what you described as
> the ultimate goal (not looping back to Target), but IMO it's a step
> into the right direction, not the least making things consistent
> between SchemaExport and SchemaUpdate and also leaving APIs largely
> unchanged for the time being. With that I should be able to do it on
> the OGM side as you suggested, essentially ignoring the
> Target/Exporter stuff.
>
> I've filed ORM PR
https://github.com/hibernate/hibernate-orm/pull/1231
> for the change. Let me know what you think.
>
> Cheers,
>
> --Gunnar
>
>
> 2016-01-14 15:51 GMT+01:00 Steve Ebersole <steve(a)hibernate.org>:
> > I am not sure I am a big fan of The String->Object change specifically.
> > In
> > theory it sounds great. But there is a major premise in schema tooling
> > around the idea of the actions being reduce-able to Strings. That's
> > important not just for SQL, but for the idea of writing to a file as
> > well.
> > It also affects the whole concept of Exporter/Exportable.
> >
> > The ultimate design goal here is to unify schema creation and dropping
> > across native and JPA requirements. I just simply have not had the time
> > to
> > work on that. This would all happen "behind" SchemaManagementTool
and
> > friends. SchemaExport, etc are actually just controllers responsible
> > for
> > coordinating the calls into the SchemaManagementTool delegates. The
> > main
> > problem at the moment IMO is that Target gets passed into these
> > SchemaManagementTool delegates. Ideally, and certainly this would fit
> > with
> > your case, I think we want SchemaManagementTool or its delegates to
> > handle
> > interpreting the "arguments". This was part of the intent of
developing
> > the "CommandLineArgs" stuff that is used inside SchemaExport, etc
now;
> > the
> > idea was to encapsulate the settings each tool needs to operate and
> > isolate
> > the process of building/interpreting those args.
> >
> > The next step I wanted to look at there was to morph CommandLineArgs
> > into a
> > more generic "parameter object" for initializing the actual
> > SchemaManagementTool delegates.
> >
> > The idea is that the more we can push into SchemaManagementTool and its
> > delegates the more pluggable this entire process becomes. Ultimately,
> > as I
> > mentioned above, I just do not think it is feasible for ORM and OGM to
> > share all of these implementation contracts. Forcing a switch from
> > String
> > (the DDL) arguments to some amorphic Object reinforces that in my mind.
> > But that would not stop OGM from completely swapping
> > SchemaManagementTool
> > and its delegates and simply not using Target, Exporters, etc.
> >
> >
> > On Thu, Jan 14, 2016 at 7:44 AM Gunnar Morling <gunnar(a)hibernate.org>
> > wrote:
> >
> >> Hi Steve,
> >>
> >> One thing useful to have for OGM would be a generalization of the
> >> hbm2ddl tooling so we can re-use it for managing NoSQL databases. Not
> >> all of them are "schemaless", e.g. Cassandra works with a fixed
> >> schema, and while MongoDB largely is schemaless, we still want to
> >> create stuff like indexes in the database.
> >>
> >> I took a look and found that SchemaManagementTool as a pluggable
> >> service already goes halfway into that direction. The issue with it is
> >> that I cannot replace the list of exporters used by SchemaExport nor
> >> the list of tool targets used by SchemaUpdate. Having a pluggable
> >> service allowing me to customize that with an OGM-specific
> >> implementation should do the trick.
> >>
> >> As per some comments in the code, SchemaExport seems to be in some
> >> intermediary state, where the ops are not executed directly through
> >> the targets passed to SchemaCreator/Dropper but are read into String
> >> arrays which are then passed on to separate exporters. I suppose part
> >> of that work should be to consolidate this and basically follow the
> >> same approach as used in SchemaUpdate?
> >>
> >> Another facet is that for some OGM grid dialects we'd need another
> >> representation of commands than Strings, as not all the backends have
> >> a DDL but expect API invocations for that purpose. For that it'd be
> >> required to change Target#accept(String) into accept(Object) so we can
> >> pass some kind of command object. File exports would only work in a
> >> limited fashion, but we could live with that. Schema creation/dropping
> >> bound to the SF lifecycle is what I am after here.
> >>
> >> I'd be willing to work on this once we agree on the general approach.
> >>
> >> Any thoughts?
> >>
> >> Thanks,
> >>
> >> --Gunnar
> >>
> >>
> >>
> >> 2016-01-13 14:10 GMT+01:00 Guillaume Smet <guillaume.smet(a)gmail.com>:
> >> > On Tue, Jan 12, 2016 at 6:40 PM, Steve Ebersole
<steve(a)hibernate.org>
> >> wrote:
> >> >
> >> >> If you clean up the conflicts I can look for 5.1
> >> >>
> >> >
> >> > Done!
> >> >
> >> > --
> >> > Guillaume
> >> > _______________________________________________
> >> > hibernate-dev mailing list
> >> > hibernate-dev(a)lists.jboss.org
> >> >
https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>
> > _______________________________________________
> > hibernate-dev mailing list
> > hibernate-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/hibernate-dev