You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Rick McGuire <ri...@gmail.com> on 2009/11/02 17:38:56 UTC
xbeans and OSGi
I've been wrestling with some build problems involving xbeans and
bundles since the middle of last week, and I've finally gotten the
specific error I was working on to go away. I'm not entirely happy with
what I needed to do to fix this, so I think this needs a little
discussion. First, some specifics on what I've found.
1) The problem. This problem was showing up when trying to build the
system-database plugin. It was starting the connector-deployer-1_6
plugin and getting a NullPointerException inside the xmlbeans runtime
after calling getEnvironment() on the ConnectorDocument class. This was
happening because the xmlbeans runtime was unable to locate the type
information for the environment property of the document.
2) The cause. This situation was occurring because the
ConnectorDocument class uses property types defined in the
geronimo-system-builder module. At first, I thought this was due to
some missing imports for the org.osgi.geronimo.deployment.xbeans.impl
and org.osgi.geronimo.deployment.javabean.xbeans.impl packages. I spent
a couple days trying to get these imports correctly defined, but adding
these did not clear up the NullPointerException on the getEnvironment()
call.
3) Finally, after poking around in xmlbeans a little, I figured out the
issue was not the implementation classes, but rather the .xsb files.
The directories where these are contained also needed to be exported by
the defining bundles and also imported by the using bundles.
Item 3 is where the problems come in. Because of the way xmlbeans
generates the type information, there are lots of packages that need to
be exported and imported to make things work. Importing was fairly
easy, since the bnd tool allows wildcards. Importing is another matter
entirely. Since the referencing bundles don't contain any code
references to these packages, the bnd tool is unable to generate this
directly. Any since there are a lot of directories involved that have
very cryptic names, it really doesn't look practical to hand generate
each of these either.
A solution that did work is to use Require-Bundle to have all of these
packages get imported by the using bundle at runtime. I'm not terribly
happy with having to resort to this, but bnd doesn't have a capability
of doing the static equivalent of a Require-Bundle when generating the
manifest. The combination of export all of those packages and using
Require-Bundle finally made the NullPointerException go away.
In the course of fixing this, I also added a couple of enhancements to
the car-maven-plugin to allow the manifest to be augmented by additional
Import-Package and Require-Bundle information. This looks like it is
going to be additional metadata that we'll require in some of these
dynamic classloading situations.
I'll update the wiki with the workarounds I've found for this problem
once we're comfortable with the approach needed to fix this.
Rick
Re: xbeans and OSGi
Posted by Ivan <xh...@gmail.com>.
Thanks, Rick, I got this issue too while trying to remove the classloader
plugins :-)
I guess that only those *-builder will need to import those xmlbeans
gernated classes, shall we use a tool to scan and generate the whole package
list, then add them to those pom files.
I remembered that long ago, there is a discussion about removing xmlbeans
from Geronimo, and use jaxb to parse and generate the plan file, Maybe we
could do it in 3.0.
2009/11/3 Rick McGuire <ri...@gmail.com>
> I've been wrestling with some build problems involving xbeans and bundles
> since the middle of last week, and I've finally gotten the specific error I
> was working on to go away. I'm not entirely happy with what I needed to do
> to fix this, so I think this needs a little discussion. First, some
> specifics on what I've found.
>
> 1) The problem. This problem was showing up when trying to build the
> system-database plugin. It was starting the connector-deployer-1_6 plugin
> and getting a NullPointerException inside the xmlbeans runtime after calling
> getEnvironment() on the ConnectorDocument class. This was happening because
> the xmlbeans runtime was unable to locate the type information for the
> environment property of the document.
>
> 2) The cause. This situation was occurring because the ConnectorDocument
> class uses property types defined in the geronimo-system-builder module. At
> first, I thought this was due to some missing imports for the
> org.osgi.geronimo.deployment.xbeans.impl and
> org.osgi.geronimo.deployment.javabean.xbeans.impl packages. I spent a
> couple days trying to get these imports correctly defined, but adding these
> did not clear up the NullPointerException on the getEnvironment() call.
> 3) Finally, after poking around in xmlbeans a little, I figured out the
> issue was not the implementation classes, but rather the .xsb files. The
> directories where these are contained also needed to be exported by the
> defining bundles and also imported by the using bundles.
> Item 3 is where the problems come in. Because of the way xmlbeans
> generates the type information, there are lots of packages that need to be
> exported and imported to make things work. Importing was fairly easy, since
> the bnd tool allows wildcards. Importing is another matter entirely. Since
> the referencing bundles don't contain any code references to these packages,
> the bnd tool is unable to generate this directly. Any since there are a lot
> of directories involved that have very cryptic names, it really doesn't look
> practical to hand generate each of these either.
>
> A solution that did work is to use Require-Bundle to have all of these
> packages get imported by the using bundle at runtime. I'm not terribly
> happy with having to resort to this, but bnd doesn't have a capability of
> doing the static equivalent of a Require-Bundle when generating the
> manifest. The combination of export all of those packages and using
> Require-Bundle finally made the NullPointerException go away.
>
> In the course of fixing this, I also added a couple of enhancements to the
> car-maven-plugin to allow the manifest to be augmented by additional
> Import-Package and Require-Bundle information. This looks like it is going
> to be additional metadata that we'll require in some of these dynamic
> classloading situations.
>
> I'll update the wiki with the workarounds I've found for this problem once
> we're comfortable with the approach needed to fix this.
>
> Rick
>
--
Ivan