[hibernate-dev] Master

Steve Ebersole steve at hibernate.org
Fri Apr 15 11:10:57 EDT 2016


That's not the intent.  Users do deal with Session or StatelessSession.
SharedSessionContract simply exists as a convenience for us to make sure
Session and StatelessSession implement some of the same signatures.

Now, if you are talking about the *Implementor forms those are the same as
any of the other *Implementor interfaces used throughout Hibernate.  They
extend the public API with additional capabilities needed internally.  A
user would never directly use a SharedSessionContract, a
SharedSessionContract Implementor, a SessionImplementor, etc.

I am asking this question because it has an impact on integrations (which
is expected, it's an SPI) not users

On Fri, Apr 15, 2016, 9:46 AM Sanne Grinovero <sanne at hibernate.org> wrote:

> Do you have a practical need for SharedSessionContract and
> SharedSessionContractImplementor to exist within the internal
> contracts of ORM?
>
> As a general rule, I don't mind having implementations which implement
> multiple interfaces.
>
> Assuming you need these as a convenience for internal helpers, then
> I'd propose to treat these as internal interfaces rather than APIs or
> SPIs. For example, have users deal just with "Session" and
> "StatelessSession" and not need learning (nor bothering) with more
> stuff.
>
> my 2 cents.. not a strong opinion.
> Sanne
>
>
> On 15 April 2016 at 15:30, Steve Ebersole <steve at hibernate.org> wrote:
> > So here is what I ended up doing, with one questionable decision which
> I'll
> > highlight below.
> >
> > First, the existing situation...  We have Session and StatelessSession
> which
> > are largely independent contracts.  There is a "shared" bit that is
> > represented by an interface SharedSessionContract.  There is also a
> > SessionImplementor contract.  Now previously a SessionImplementor could
> be a
> > Session or a StatelessSession; very poorly named.
> >
> > SessionImplementor is poorly named.  Following the normal *Implementor
> > naming convention we follow every else in the code base a
> SessionImplementor
> > ought to be the internal contract for a Session.  But that's not what it
> is
> > today.  Really SessionImplementor as it exists today is the *Implementor
> for
> > SharedSessionContract.  So I normalized this.  I created a
> > SharedSessionContractImplementor contract that extends
> > SharedSessionContract.  SessionImplementor then extends
> > SharedSessionContractImplementor.  However this is the "questionable"
> part
> > because that means changing an awful lot of SPI methods to accept/return
> > SharedSessionContractImplementor as opposed to SessionImplementor.
> >
> > So in terms of API, we have:  SharedSessionContract <- (Session &
> > StatelessSession)
> > In terms of SPI, we have: SharedSessionContractImplementor <-
> > (SessionImplementor & StatelessSessionImplementor)
> >
> > As far as Query object creation, SharedSessionContract also fulfills the
> > role of (extends) the QueryProducer contract which defines a unified set
> of
> > methods that cover the JPA cases without having to implement
> EntityManager.
> > ATM QueryProducer covers HQL/JPQL and Native (SQL) queries.  For 5.2 It
> will
> > still have to deal with procedure/function calls.  Eventually in 6.0 it
> will
> > have to deal with criteria queries as well.
> >
> > Gunnar to your specific question about naming, yes.  I had already
> started
> > on that path actually.  So in terms of API contracts we have:
> >
> > org.hibernate.query.Query
> > org.hibernate.query.NativeQuery extends org.hibernate.query.Query
> >
> > Additionally I left org.hibernate.Query and org.hibernate.SQLQuery as I
> > can't remove them in a 5.2 release.  However I have deprecated them as
> > scheduled them for removal in 6.0.  This follows the typical "shadow"
> > approach we have followed before for deprecating APIs.
> > org.hibernate.query.Query extends the deprecated org.hibernate.Query and
> > org.hibernate.query.NativeQuery extends the deprecated
> > org.hibernate.SQLQuery.  That allows existing code to continue to work
> with
> > deprecation warnings.  Users can chose to migrate to the new contracts in
> > moving to 5.2 or at least know that is a task in upgrading to 6.0.
> >
> > I'd love some votes on the
> > SessionImplementor/SharedSessionContractImplementor point above.  There
> are
> > other, less disruptive ways to do that; I just think this is the most
> > correct way.  Some other options include more fully distinguishing
> between a
> > "stateful" and a "stateless" Session - then SessionImplementor term fits
> > better as we'd have StatefulSessionImplementor and
> > StatelessSessionImplementor variants.  I really dislike the phrases
> stateful
> > and stateless here though.  Anyway, let me know what y'all think.
> >
> > On Wed, Apr 13, 2016 at 1:54 AM Gunnar Morling <gunnar at hibernate.org>
> wrote:
> >>
> >> 2016-04-13 0:48 GMT+02:00 Steve Ebersole <steve at hibernate.org>:
> >>>
> >>> Another question as I work through Query...
> >>>
> >>> Currently both Session and StatelessSession inherit the same query
> >>> creation
> >>> methods (returning org.hibernate.Query) via SharedSessionContract
> (which
> >>> is
> >>> the common base type between them).  There is therefore an inherent
> >>> difficulty in having org.hibernate.Query extend from the JPA
> >>> javax.persistence.Query/TypedQuery when we only want Session to be an
> >>> EntityManager, not StatelessSession.
> >>>
> >>> The simplest solution is to:
> >>>
> >>>    1. Leave org.hibernate.Query as a "legacy Hibernate query contract"
> >>> and
> >>>
> >>>
> >>>       move all of the existing SharedSessionContract query creation
> >>> methods
> >>>       returning org.hibernate.Query directly to StatelessSession
> >>>
> >>>       2. develop a new org.hibernate.query.Query (prefacing 6.0) that
> >>>
> >>>
> >>>       provides some of the "legacy Hibernate query contract" and
> extends
> >>> from
> >>>       javax.persistence.Query.  Directly on Session we'd write new
> >>> methods with
> >>>       the same name and args but returning this
> >>> org.hibernate.query.Query.
> >>>
> >>> This would give us 2 distinct Query hierarchies and allow the
> underlying
> >>> goal of Session extending EntityManager, but not StatelessSession.  We
> >>> could also flip these based on the knowledge that Session is more
> widely
> >>> used (less disruptive).
> >>>
> >>> In other words we'd go from both Session and StatelessSession returning
> >>> org.hibernate.Query via inheriting from SharedSessionContract:
> >>>
> >>> public interface SharedSessionContract {
> >>>     ...
> >>>      org.hibernate.Query createQuery(String hql);
> >>> }
> >>>
> >>>
> >>> to each Session and StatelessSession implementing different methods
> >>> altogether:
> >>>
> >>> public interface StatelessSession {
> >>>     ...
> >>>      org.hibernate.Query createQuery(String hql);
> >>> }
> >>>
> >>> public interface Session {
> >>>     ...
> >>>      org.hibernate.query.Query createQuery(String hql);
> >>> }
> >>>
> >>>
> >>> Unifying these returns across Session and StatelessSession would
> require
> >>> StatelessSession also being an EntityManager.  I had decided against
> that
> >>> for the same reasons that StatelessSession is distinct from Session.
> >>
> >>
> >> Why would it require StatelessSession to extend EntityManager? Both,
> >> StatelessSession and Session could define the same method, also if not
> being
> >> part of the same hierarchy.
> >>
> >> I'm concerned about the two Query types with the same simple name, users
> >> may be easily confused which one to import.
> >>
> >>> Maybe a hybrid approach would be to break the query creation methods
> out
> >>> of
> >>> SharedSessionContract into a new targeted interface named QueryProducer
> >>> which both Session and StatelessSession would implement.  That would
> >>> allow
> >>> unifying the query creation return to something that implements JPA
> Query
> >>> contract too, but the source (Session/StatelessSession via
> QueryProducer)
> >>> would not necessarily need to implement EntityManager.
> >>>
> >>>
> >>> I think the QueryProducer route is probably the best option in terms of
> >>> allowing the consolidation but still allowing users to upgrade easily.
> >>>
> >>> Thoughts?  Other options?  Hopefully I explained it well enough :)
> >>
> >>
> >> Something related; If you are touching these bits, could you rename
> >> createSQLQuery() into createNativeQuery() and SQLQuery into NativeQuery?
> >> That'd give a much better experience for users of Hibernate OGM which
> >> otherwise wonder how SQL queries relate to their chosen NoSQL store.
> >> createNativeQuery() makes that smoother.
> >>
> >>> On Tue, Apr 12, 2016 at 1:29 PM Steve Ebersole <steve at hibernate.org>
> >>> wrote:
> >>>
> >>> > Just a quick update on my progress.  I pretty much have
> >>> > Session/EntityManager and SessionFactory/EntiytManagerFactory sorted
> >>> > out as
> >>> > well as bootstrapping.
> >>> >
> >>> > I am currently working through the different Query hierarchies.
> >>> >
> >>> > Looking at what is left, I hope to be done with all of this by
> Thursday
> >>> >
> >>> > On Fri, Apr 8, 2016, 9:38 AM Sanne Grinovero <sanne at hibernate.org>
> >>> > wrote:
> >>> >
> >>> >> On 8 April 2016 at 15:04, Scott Marlow <smarlow at redhat.com> wrote:
> >>> >> > I'm curious if Search/OGM master branches would likely align with
> >>> >> > 5.2?
> >>> >> > Or some other branch?
> >>> >>
> >>> >> Good question, time for an update on these.
> >>> >>
> >>> >> We'll certainly have a version of Search compatible, at some point.
> >>> >> Not sure though about which version that shall be as we want to be
> >>> >> feature complete with our Elasticsearch work, and that will take a
> >>> >> couple more months at least so we'll see a bit longer than usual gap
> >>> >> between stable releases.
> >>> >>
> >>> >> Generally speaking we need at least a minor release for OGM or
> Search
> >>> >> to happen to upgrade the minor of ORM.
> >>> >> Since we didn't release yet, Search is still building with ORM 5.0.x
> >>> >> as a target.. we can then decide if we should skip ORM 5.1 and jump
> to
> >>> >> 5.2 when we'll be closer to the 5.6.0.Final release (of Search). As
> >>> >> far as I know only some test helpers broke though, so while I
> couldn't
> >>> >> test it all on both versions 5.0 and 5.1 of ORM, I think that they
> are
> >>> >> compatible at runtime and we also expect to be compatible with ORM
> >>> >> 5.2.
> >>> >>
> >>> >> With OGM we're now in candidate release phase for a ORM 5.0
> compatible
> >>> >> version so not really thinking to bump it to ORM 5.1 yet.
> >>> >>
> >>> >> OGM tends to release less frequently, so in this case it is possible
> >>> >> that we might want to skip ORM 5.1 and go on 5.2 already to catch
> up,
> >>> >> but we can work on aiming a specific version if and when need
> arises.
> >>> >>
> >>> >> If you need any of these aligned let us know?
> >>> >>
> >>> >> Thanks,
> >>> >> Sanne
> >>> >>
> >>> >> >
> >>> >> > On 04/07/2016 11:34 AM, Steve Ebersole wrote:
> >>> >> >> As a follow up to this...
> >>> >> >>
> >>> >> >> Sanne had a great suggestion on HipChat.  What about turning all
> >>> >> >> this
> >>> >> work
> >>> >> >> (sans SQM, etc) into a 5.2 as an "end of line for 5.0.  The idea
> >>> >> >> would
> >>> >> be
> >>> >> >> 5.2 would include:
> >>> >> >>
> >>> >> >>     1. Move to Java 8
> >>> >> >>     2. Consolidation of hibernate-entitymanager into
> hibernate-core
> >>> >> >>     3. Deprecations, lots of deprecations :)
> >>> >> >>
> >>> >> >>
> >>> >> >> The idea is that then we could start 6.0 off "clean" by removing
> >>> >> >> all
> >>> >> the
> >>> >> >> deprecations and layering in SQM work.
> >>> >> >>
> >>> >> >>
> >>> >> >>
> >>> >> >> On Thu, Apr 7, 2016 at 10:01 AM Vlad Mihalcea
> >>> >> >> <mihalcea.vlad at gmail.com
> >>> >> >
> >>> >> >> wrote:
> >>> >> >>
> >>> >> >>> Hi,
> >>> >> >>>
> >>> >> >>> Until the merge is done, I'll take a break integrating the PRs
> >>> >> >>> that
> >>> >> are
> >>> >> >>> also relevant to the master branch.
> >>> >> >>>
> >>> >> >>> Vlad
> >>> >> >>>
> >>> >> >>> On Thu, Apr 7, 2016 at 5:57 PM, Steve Ebersole
> >>> >> >>> <steve at hibernate.org>
> >>> >> >>> wrote:
> >>> >> >>>
> >>> >> >>>> I agree that would be best.  If everyone agrees to stop pushing
> >>> >> >>>> to
> >>> >> master
> >>> >> >>>> for the time being to allow me to finish this consolidation
> then
> >>> >> >>>> I
> >>> >> can not
> >>> >> >>>> rush it as much
> >>> >> >>>>
> >>> >> >>>> On Wed, Apr 6, 2016 at 4:48 PM Chris Cranford
> >>> >> >>>> <crancran at gmail.com>
> >>> >> wrote:
> >>> >> >>>>
> >>> >> >>>>> I have to concur with Sanne, a hold on master pushes until
> this
> >>> >> merge of
> >>> >> >>>>> artifacts is complete makes the most sense from an all around
> >>> >> logistics
> >>> >> >>>>> perspective.
> >>> >> >>>>>
> >>> >> >>>>> On Wed, Apr 6, 2016 at 4:04 PM, Sanne Grinovero <
> >>> >> sanne at hibernate.org>
> >>> >> >>>>> wrote:
> >>> >> >>>>>
> >>> >> >>>>>> Sounds reasonable. Do you think it will be unstable, i.e.
> >>> >> >>>>>> should we
> >>> >> >>>>>> temporarily disable complaint emails from Jenkins, or even
> the
> >>> >> >>>>>> full
> >>> >> >>>>>> build tasks?
> >>> >> >>>>>>
> >>> >> >>>>>> Also, this implies that any future backport becomes similarly
> >>> >> harder,
> >>> >> >>>>>> so you could also simply ask others to hold pushing on
> master,
> >>> >> >>>>>> then
> >>> >> >>>>>> have people forward-port when it's done.. it's the same
> really
> >>> >> >>>>>> but
> >>> >> >>>>>> that's why I mention it: as the complexity is interchangeable
> >>> >> >>>>>> it's
> >>> >> a
> >>> >> >>>>>> fair request, with the difference you have:
> >>> >> >>>>>>   - others help you port the other patches forward rather
> than
> >>> >> doing it
> >>> >> >>>>> all
> >>> >> >>>>>> alone
> >>> >> >>>>>>   - the authors of the original patch doing it, that should
> >>> >> >>>>>> make
> >>> >> it a
> >>> >> >>>> bit
> >>> >> >>>>>> simpler
> >>> >> >>>>>>
> >>> >> >>>>>>
> >>> >> >>>>>>
> >>> >> >>>>>> On 6 April 2016 at 17:15, Steve Ebersole <
> steve at hibernate.org>
> >>> >> wrote:
> >>> >> >>>>>>> Obviously consolidating hibernate-entitymanager into
> >>> >> hibernate-core
> >>> >> >>>> is
> >>> >> >>>>> a
> >>> >> >>>>>>> fairly big effort.  And I am getting concerned about the
> >>> >> continuing
> >>> >> >>>>>> pushes
> >>> >> >>>>>>> to master in the meantime, many of which I know touch on
> code
> >>> >> >>>>>>> I
> >>> >> have
> >>> >> >>>>>>> changed.  My concern is obviously getting done all this
> >>> >> refactoring
> >>> >> >>>>> work
> >>> >> >>>>>>> and then having to sift through all of the changes that have
> >>> >> >>>>>>> been
> >>> >> >>>>> pushed
> >>> >> >>>>>> in
> >>> >> >>>>>>> the interim and attempting to work out the proper
> integration
> >>> >> >>>> strategy.
> >>> >> >>>>>>>
> >>> >> >>>>>>> Long story short... I am contemplating pushing to master
> >>> >> >>>>>>> sooner
> >>> >> >>>> rather
> >>> >> >>>>>> than
> >>> >> >>>>>>> later even though my refactoring may not be completely
> >>> >> >>>>>>> finished,
> >>> >> >>>>>> especially
> >>> >> >>>>>>> as we get towards the end of the week.
> >>> >> >>>>>>> _______________________________________________
> >>> >> >>>>>>> hibernate-dev mailing list
> >>> >> >>>>>>> hibernate-dev at lists.jboss.org
> >>> >> >>>>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> >>>>>> _______________________________________________
> >>> >> >>>>>> hibernate-dev mailing list
> >>> >> >>>>>> hibernate-dev at lists.jboss.org
> >>> >> >>>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> >>>>>>
> >>> >> >>>>> _______________________________________________
> >>> >> >>>>> hibernate-dev mailing list
> >>> >> >>>>> hibernate-dev at lists.jboss.org
> >>> >> >>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> >>>>>
> >>> >> >>>> _______________________________________________
> >>> >> >>>> hibernate-dev mailing list
> >>> >> >>>> hibernate-dev at lists.jboss.org
> >>> >> >>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> >>>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >> _______________________________________________
> >>> >> >> hibernate-dev mailing list
> >>> >> >> hibernate-dev at lists.jboss.org
> >>> >> >> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> >>
> >>> >> > _______________________________________________
> >>> >> > hibernate-dev mailing list
> >>> >> > hibernate-dev at lists.jboss.org
> >>> >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >> _______________________________________________
> >>> >> hibernate-dev mailing list
> >>> >> hibernate-dev at lists.jboss.org
> >>> >> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> >>> >>
> >>> >
> >>> _______________________________________________
> >>> 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