[hibernate-dev] Weekly meeting (4/19)

Andersen Max max.andersen at redhat.com
Tue Apr 20 10:53:30 EDT 2010


>> 
>> Noticed this part:
>> 
>> [10:21] <sebersole> the problem with osgi is as soon as you ask anyone hat that means they have zero clue
>> [10:22] <sebersole> "ok you want 'osgi support', how do i do that?  what does that mean"
>> [10:22] <sebersole> and then silence...
>> [10:22] <sebersole> thats been my experience at any rate
>> 
>> So my mails about the subject must have been lost or I was not being clear on the subject ;)
> Which mails?  I just searched my local hibernate-dev store for "osgi"
> and got zero hits.  Perhaps you can point me to them again?

If you want'em, last event I got on it is (there are more but need more time to digg out):

February 5, 2009 on hibernate support:
just in case you missed it from irc.

Here is what toplink/eclipselink used to get their stuff working under osgi.
If not to know the details, then maybe use their testcase as a good starting point
for verification/debugging.

[20:58:09] <|max_at_hibernate|> explanations on what eclipselink had to do
[20:58:10] <|max_at_hibernate|> http://wiki.eclipse.org/EclipseLink/Development/OSGi
[20:58:26] <|max_at_hibernate|> http://wiki.eclipse.org/EclipseLink/Development/OSGi_Proof_of_Concept

I believe those snippets were from an irc chat on hibernate-dev.

Anyway, my message on it haven't changed since then ;)

> 
>> "Hibernate osgi support" for me means: Provide an option to use the classloader of the calling client/SessionFactory creator instead of 
>> current thread context classloader; essentially fix all refs to ResourceHelper.classForName to always use the classloader of the SessionFactory.
> This breaks usage in more traditional classloaders.  The issue is that
> we cannot "always use the classloader of the SessionFactory".  We have
> to either (1) know the type of environment we are running in (which
> afaik is not really possible), or (2) the user must tell us the type of
> classloading environment (what class look up schemes should we use).

Writing SessionFactory is wrong maybe "persistence-unit-config" is better ? i.e.
where the configuration/sessionfactory is built from - we unfortunately don't have
 a *good* place to store this today. it's somewhere between Configuratio and SessionFactory.

> 
> I assume you mean either ReflectHelper or ConfigHelper.  

yes, ReflectHelper was what I meant - typing too fast.

> ConfigHelper
> does not always just look to the TCCL.  It tries a number of
> classloaders.

Yes, from most specific to fallback, provided classloder-> thread context classloader and class.forname
which is what will work in SE/JEE.

>  The problem is that we have to try one or the other
> first.  And ReflectHelper does allow passing in which classloader to
> use.  Of course the caller of it must be able to know.

Yes.

> So lets take an example near and dear to your heart.
> org.hibernate.mapping.PersistentClass#getMappedClass
> 
> How do you propose, *specifically*, that method look to work properly in
> both osgi environments and traditional classloader environments?

The PersistentClass would have to carry the context from where it is created.
Possibly simply a ClassLoader which then can be the proper delegate.

If the classloader is null it falls back to existing behavior.

> Because the only way I see is to use a pluggable delegate for class path
> resource resolution.  And the problem there is the context of this
> delegate (aka how does PersistentClass get access to it?).

It would have been created with it.

I was actually under the impression that some of the classloader changes done in Annotations/EntityManager
were to cover the case in JEE where the classloader at boot/config time isn't properly available to JPA ?
It's basically the same situation we have here - but just for many more cases.

And yes, this is why it will break some API :)

And no, I don't claim to know all the answers to how to fix it -  but I know the problem
and how I had to go through hoops to "fix" it to use hibernate tools in eclipse (basically embed any call to
hibernate with a setThreadContextClassloader call to give it the right context)

There are more tricky things in an osgi environment such as how you find the JDBC connection/classes dynamically
but I believe we got API to handle that pretty well - the first stopgap is to get classloader's made more explicit
and not use ThreadContext class loader first.

/max

> 
>> 
>> That would allow Hibernate to load entities from osgi bundles it does not know about via osgi manifest dependencies.
>> 
>> This possibly also requires adding a set of osgi headers to the manifest but I don't even think we need to go there (nor can we easily do that because not
>> all dependencies we go are available as osgi bundles)
>> 
>> One way to test this is if you can make http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/examples/org.eclipse.persistence.example.jpa.rcp.comics/ 
>> run with Hibernate jars instead of EclipseLink jars.
>> 
>> EclipseLink guys documented some of their work on this here: 
>> http://wiki.eclipse.org/EclipseLink/Development/OSGi
>> http://wiki.eclipse.org/EclipseLink/Development/OSGi_Proof_of_Concept
>> (and others: http://wiki.eclipse.org/Special:Search?search=eclipselink+osgi&go=Go)
>> 
>> The guys working on EnterpriseOSGI would also have to solve this somehow so maybe it is
>> outlined in that area too - I haven't looked deep enough in that yet.
> You mean the spec?  I have looked briefly and all i really saw was a
> bunch of requirements, not any solutions.  Perhaps you mean some other
> source.
> 
>> 
>> /max
>> 
>> 
>> On Apr 19, 2010, at 18:43, Steve Ebersole wrote:
>> 
>>> First meeting.  Went well.  
>>> 
>>> 1) We discussed our experiences with time-boxing in the 3.5 releases.
>>> Generally positive.  Some felt 2 weeks may have been a bit too often.
>>> We will play with time moving forward to find the best balance which may
>>> be an alternation: slow (alphas), fast (betas and crs), slow (past
>>> final).
>>> 
>>> 2) 3.6
>>> 2.a) will require at least JDK 1.5
>>> 2.b) merge annotation code into core module
>>> 2.c) will revist the idea of merging entitymanager into core module
>>> during next meeting.
>>> 2.d) specj use case (eagerly loaded key-many-to-one)
>>> 
>>> 3) Hudson plan
>>> 
>>> 4) Documentation consolidation (core, annotations, jbc, envers,
>>> entitymanager)
>>> 
>>> 5) docs.jboss.org issues.  Archiving release docs versus indexing
>>> engines.  index.html pages.
>>> 
>>> I have attached the log.
>>> 
>>> -- 
>>> Steve Ebersole <steve at hibernate.org>
>>> http://hibernate.org
>>> <meeting-2010-04-19.txt>_______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> 
> 
> 
> -- 
> Steve Ebersole <steve at hibernate.org>
> http://hibernate.org
> 





More information about the hibernate-dev mailing list