[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 15:17:01 EDT 2018


I'm going to try some more changes on the WF side, to see if I can work 
around this problem.  I'll report back on how that goes. :)

On 9/20/18 12:05 PM, Scott Marlow wrote:
> 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