[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:29:27 EDT 2018
On 9/20/18 3:17 PM, Scott Marlow wrote:
> 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. :)
I tried overriding the ServiceRegistryImplementor#initiateService(Map
configurationValues, ServiceRegistryImplementor registry) +
getFallback(Map configurationValues, ServiceRegistryImplementor
registry) methods to check if perhaps those get called for all
persistence units, but no. So, we still need to create a reproducer for
Hibernate ORM.
>
> 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