[hibernate-dev] hibernate-osgi JPA bootstrap & classloader
Steve Ebersole
steve at hibernate.org
Tue May 26 22:53:48 EDT 2015
In regards to OsgiClassLoader and dynamically managing the "classpath", any
thoughts on how to handle out single call to OsgiClassLoader#addClassLoader
(from OsgiPersistenceProvider passing
the javax.persistence.spi.PersistenceUnitInfo#getClassLoader we get from
the e-OSGi container)?
I am not sure what all makes up that ClassLoader.
On Tue, May 26, 2015 at 4:49 PM, Steve Ebersole <steve at hibernate.org> wrote:
> I created the following 2 issues to track these improvements:
>
> https://hibernate.atlassian.net/browse/HHH-9818
> https://hibernate.atlassian.net/browse/HHH-9819
>
>
>
> On Tue, May 26, 2015 at 3:57 PM, Steve Ebersole <steve at hibernate.org>
> wrote:
>
>> Awesome, thanks! So I'll investigate BundleListener...
>>
>> Is that the best way to know when TransactionManagers and DataSources
>> come and go too? Or is there a more specific concept for listening to an
>> "OSGi service"?
>>
>> Also, do the containers generally handle "in-flight" requests in regards
>> to TransactionManagers and DataSources on activated/deactivated? I
>> guess this is more a curiosity, since I do not see what we could do if the
>> container does not manage it.
>>
>> On Tue, May 26, 2015 at 3:26 PM, Brett Meyer <brmeyer at redhat.com> wrote:
>>
>>> > I would fully expect hibernate-osgi to not directly use Bootstrap to
>>> build
>>> > an EntityManagerFactoryBuilder. Bootstrap is geared toward users
>>> wanting
>>> > to leverage 2-phase JPA bootstrapping, not our components. I would
>>> have
>>> > expected Enterprise OSGi support to instead directly build (and
>>> possibly
>>> > override) EntityManagerFactoryBuilderImpl. I'll add that as a task for
>>> > post-5.0.
>>>
>>> +1, makes sense. I should have done that to begin with...
>>>
>>> > Because I think that is a first step in being able to better
>>> > manage bundles coming and going. Please correct me if I am wrong.
>>>
>>> At first glance, supporting bundles being activated/deactivated at
>>> runtime may just be limited to OsgiClassLoader and an impl of OSGi's
>>> "BundleListener". HibernateBundleActivator would simply register that
>>> listener during startup (BundleContext#addBundleListener), which would
>>> receive the events. As bundles are added/removed from the runtime, they'd
>>> just be added/removed from OsgiClassLoader#bundles.
>>>
>>> > Also I'd like to start making sure that we fully support (certain)
>>> OSGi services
>>> > being replaced. Especially thinking of TransactionManagers and
>>> DataSources.
>>>
>>> +1
>>>
>>> >
>>> >
>>> > On Tue, May 26, 2015 at 10:44 AM, Brett Meyer <brmeyer at redhat.com>
>>> wrote:
>>> >
>>> > > IIRC:
>>> > >
>>> > > OsgiPersistenceProvider and OsgiSessionFactoryService both need
>>> *some* way
>>> > > to build the OsgiClassLoader and pass it into Hibernate
>>> bootstrapping. For
>>> > > the SF, that's easy: just hand OSGiClassLoaderServiceImpl to
>>> > > BootstrapServiceRegistryBuilder. For EMF, it looks like I mistakenly
>>> > > overrode those Bootstrap methods -- I missed that
>>> PersistenceUnitDescriptor
>>> > > included the CL. So you're probably right -- presumably you could
>>> strip
>>> > > 'em out and somehow use the descriptor, but you might still need the
>>> > > overridden method in HibernatePersistenceProvider so that
>>> > > OsgiPersistenceProvider can give you the OsgiClassLoader to use.
>>> > >
>>> > > > Additionally, this ClassLoader is ultimately just used to build the
>>> > > > ClassLoaderService which hibernate-osgi overrides anyway.
>>> > >
>>> > > Right, assuming you're talking about
>>> > > 'ClassLoaderHelper.overridenClassLoader'. But the intention there
>>> was to
>>> > > remove that whole class ASAP -- that was just a temporary hack for
>>> ORM 4,
>>> > > since CL handling was still really static. But admittedly, I'm a
>>> bit out
>>> > > of touch with ORM 5, so I'm not sure if that's feasible yet.
>>> > >
>>> > > ----- Original Message -----
>>> > > > From: "Steve Ebersole" <steve at hibernate.org>
>>> > > > To: "hibernate-dev" <hibernate-dev at lists.jboss.org>
>>> > > > Sent: Saturday, May 23, 2015 1:49:50 PM
>>> > > > Subject: [hibernate-dev] hibernate-osgi JPA bootstrap & classloader
>>> > > >
>>> > > > Brett,
>>> > > >
>>> > > > As part of HHH-7527 (Enterprise OSGi support) you had changed
>>> > > > the org.hibernate.jpa.boot.spi.Bootstrap contract to basically
>>> overload
>>> > > > each method to additional accept a "providedClassLoader".
>>> > > >
>>> > > > Every one of those methods however, also accepts
>>> > > > a org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor which
>>> exposes 2
>>> > > > ClassLoader already.
>>> > > >
>>> > > > Additionally, this ClassLoader is ultimately just used to build the
>>> > > > ClassLoaderService which hibernate-osgi overrides anyway.
>>> > > >
>>> > > > Just curious if I missed something. Unless I did, it seems to me
>>> that we
>>> > > > really do not need these overloads on Bootstrap to support
>>> Enterprise
>>> > > > OSGi. This dove-tails with a discussion from the Karaf user list
>>> > > > ultimately discussing OsgiClassLoaderService and "holding bundles"
>>> that
>>> > > are
>>> > > > being re-installed or upgraded. Ultimately I am thinking through
>>> ways to
>>> > > > support being able to release OSGI bundle references from the
>>> > > > OsgiClassLoaderService...
>>> > > > _______________________________________________
>>> > > > 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