There is a problem with deploying a BIRT web project when using
Hibernate. Hibernate classes can't be loaded from within the OSGi
framework because they have already been loaded with web classloader.
...this just sounds like a really broken design in BIRT...I can't beleive
they don't support using classes from the sourrounding webapp.
It is possible to solve this issue in several ways:
1) Using JNDI JDBC datasource.
It is necessary to create a separate session factory within OSGi; the
ODA plugin has to contain Hibernate libraries. In my opinion, this is
the worst solution and I skipped it.
Yes.
2) Using JNDI SessionFactory and reflection.
The server has to bind the SessionFactory in JNDI, using
<property name="hibernate.session_factory_name"
value="java:/[ODA_DATASOURCE_NAME]"/>
in the persistence.xml file, for instance.
I have implemented this solution.
hmm...not sure how many binds it to jndi...not sure even if Seam does that?
3) Creating a Session Facade Bean that would execute and analyze a
query
for clients (BIRT OSGi engine)
This solution can be easily implemented, but requires an EJB environment.
hmm...why ? I don't follow this ?
4) Injecting web classloader into OSGi bundles using Adaptor Hooks
(
http://wiki.eclipse.org/index.php/Adaptor_Hooks). I haven't implemented
this method yet, but think that the problem can be solved this way. I
will try it ASAP.
Ok - sounds interesting.
I have committed the org.jboss.tools.birt.core plugin that fixes the
BIRT facet (see
https://bugs.eclipse.org/bugs/show_bug.cgi?id=235206)
and changed the o.j.t.b.oda and o.j.t.b.oda.ui plugins in order to
implement solution #2.
Tested using Ganymede RC2.
Ok, when I get my ganymede updated ill try.
Do we need our Birt facet going forward ? Birt it self accepted the patch, right?
-max