[hibernate-dev] Is there a way to have ServiceContributor per SessionFactory/EMF instead of per application classloader?

Scott Marlow smarlow at redhat.com
Thu Sep 20 12:05:53 EDT 2018


Is https://gist.github.com/scottmarlow/63241549820243923aab16e664c3c6c3 
closer to what we need?

On 9/19/18 3:47 PM, Steve Ebersole wrote:
> StandardServiceRegistry`No, it's not.
> 
> Each call to `registry.getService( RegionFactory.class )` in your test 
> returns the same `RegionFactory` - by design.
> 
> By default each SF bootstrap uses a unique StandardServiceRegistry which 
> is what the ServiceContributor contributes services to.  In terms of 
> your test, it would be like creating a second `StandardServiceRegistry` 
> and asking that for the second RegionFactory
> 
> 
> 
> On Wed, Sep 19, 2018 at 11:12 AM Scott Marlow <smarlow at redhat.com 
> <mailto:smarlow at redhat.com>> wrote:
> 
>     Please look at
>     https://github.com/scottmarlow/hibernate-orm/tree/ServiceContributorTest
> 
>     and let me know if this is a valid test.  I added a test that calls
>     registry.getService( RegionFactory.class ) twice and fails if the
>     RegionFactoryInitiator doesn't get called twice.
> 
>     Is that the same as creating two separate SFs and expecting the
>     RegionFactoryInitiator to be called twice?
> 
> 
>     On 9/19/18 9:52 AM, Scott Marlow wrote:
>      >
>      >
>      > On 9/19/18 9:22 AM, Steve Ebersole wrote:
>      >> Ohhh... Sorry I misunderstood.  I thought you were asking about
>     ways
>      >> to have the contributor only apply to one of the PUs...
>      >>
>      >> I'm surprised it isn't applied to each actually.  I'd consider
>     that a
>      >> bug.  Can you put together a test?
>      >
>      > Yes, I will work on a test.
>      >
>      >>
>      >>
>      >> On Wed, Sep 19, 2018, 8:12 AM Scott Marlow <smarlow at redhat.com
>     <mailto:smarlow at redhat.com>
>      >> <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>> wrote:
>      >>
>      >>
>      >>
>      >>     On 9/19/18 5:41 AM, Gunnar Morling wrote:
>      >>      > Would SessionFactoryServiceContributor [1] be of use to
>     you? It
>      >>     lets you
>      >>      > add services to the SF-scoped service registry; not sure
>     whether
>      >>     that
>      >>      > suits your requirements or no.
>      >>
>      >>     Thanks, I will give that a try.  We currently use
>      >>     RegionFactoryInitiator
>      >>     and update the configuration settings passed via
>      >>     RegionFactoryInitiator#resolveRegionFactory(Map
>     configurationValues,
>      >>     ServiceRegistryImplementor).  I wonder if that is possible with
>      >>     SessionFactoryServiceContributor?
>      >>
>      >>      >
>      >>      > --Gunnar
>      >>      >
>      >>      > [1]
>      >>      >
>      >>
>      >>
>     https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/service/spi/SessionFactoryServiceContributor.java
> 
>      >>
>      >>      >
>      >>      > Am Di., 18. Sep. 2018 um 21:00 Uhr schrieb Scott Marlow
>      >>      > <smarlow at redhat.com <mailto:smarlow at redhat.com>
>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>
>      >>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>
>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>>>:
>      >>      >  >
>      >>      >  >
>      >>      >  > On 9/14/18 6:14 PM, Steve Ebersole wrote:
>      >>      >  > > Doing so would require a programatic call while
>     bootstrapping
>      >>      >  > > Hibernate.  The ServiceContributors are applied during
>      >>      >  > >
>      >>    
>     `org.hibernate.boot.registry.StandardServiceRegistryBuilder#build`
>      >>      >  > > processing.  So we'd need a call to register a
>      >>     ServiceContributor with
>      >>      >  > > the StandardServiceRegistryBuilder.
>      >>      >  > >
>      >>      >  > > Of course that also means you'd have to have access
>     to the
>      >>      >  > > StandardServiceRegistryBuilder
>      >>      >  >
>      >>      >  > I don't have a way to add a programatic call while
>      >>     bootstrapping "not
>      >>      >  > JPA container".
>      >>      >  >
>      >>      >  > >
>      >>      >  > > On Fri, Sep 14, 2018 at 9:27 PM Scott Marlow
>      >>     <smarlow at redhat.com <mailto:smarlow at redhat.com>
>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>
>      >>      > <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>
>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>>
>      >>      >  > > <mailto:smarlow at redhat.com
>     <mailto:smarlow at redhat.com> <mailto:smarlow at redhat.com
>     <mailto:smarlow at redhat.com>>
>      >>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>
>     <mailto:smarlow at redhat.com <mailto:smarlow at redhat.com>>>>> wrote:
>      >>      >  > >
>      >>      >  > >     I'm deploying an application with two
>     persistence units
>      >>      > however, the
>      >>      >  > >     ServiceContributor
>      >>     contribute(StandardServiceRegistryBuilder)
>      >>      > [1] is
>      >>      >  > >     only being called once, instead of per
>      >>     SessionFactory/EMF (or so it
>      >>      >  > >     seems).
>      >>      >  > >
>      >>      >  > >     Is there a way to have the
>      >>      >  > >     contribute(StandardServiceRegistryBuilder) be
>      >>      >  > >     called per SessionFactory/EMF instead?
>      >>      >  > >
>      >>      >  > >     Scott
>      >>      >  > >
>      >>      >  > >     [1]
>      >>      >  > >
>      >>      >
>      >>
>      >>
>     https://github.com/wildfly/wildfly/blob/master/jpa/hibernate5_3/src/main/java/org/jboss/as/jpa/hibernate5/service/ServiceContributorImpl.java#L28
> 
>      >>
>      >>      >  > >     _______________________________________________
>      >>      >  > >     hibernate-dev mailing list
>      >>      >  > > hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>
>      >>      > <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>>
>      >>      > <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>
>      >>      > <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>>>
>      >>      >  > > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>      >>      >  > >
>      >>      >  > _______________________________________________
>      >>      >  > hibernate-dev mailing list
>      >>      >  > hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>
>      >>     <mailto:hibernate-dev at lists.jboss.org
>     <mailto:hibernate-dev at lists.jboss.org>>>
>      >>      >  > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>      >>
> 


More information about the hibernate-dev mailing list