Cool, thanks Neil, will let you know.

Hopefully at this point it just becomes me figuring it out and thanking you
for the support, and not more questions.

I love OSGi, but it is a tad opaque at times. But I learn more all the
time. It certainly has made my use case possible, so I am very happy about
that.



On Fri, Dec 20, 2013 at 2:23 PM, Neil Bartlett <[email protected]> wrote:

> Yes I'm still here... :-)
>
> It sounds like you're doing basically the right thing. If the openjpa
> bundle isn't loading the class then you should first check whether it's
> actually wired to the export from the system bundle, or to somewhere else.
> Assuming you are running the Gogo shell you can get this information by
> typing:
>
>     inspect req osgi.wiring.package <ID>
>
> where <ID> is the bundle ID of the openjpa bundle. This command will list
> all the package requirements of the bundle along with the corresponding
> export that they have been wired to. If you have trouble interpreting the
> output then paste it into a reply to this thread.
>
> Regards
> Neil
>
>
> On Fri, Dec 20, 2013 at 8:59 PM, Keith Hughes <[email protected]
> >wrote:
>
> > Neil,
> >
> > I know this is an old thread by now, but hopefully you will see this.
> >
> > So I am finally trying to make this work. At the time I last sent this I
> > had a deadline to get a production version out so just stuck with Felix
> > 3.x. But now I have time.
> >
> > The way my system starts up is that I start up the JVM with only one of
> my
> > jars. That jar contains a single class which scans a directory for all of
> > the jars in it and creates a classloader with those jars on its
> classpath.
> >
> > I then create an instance of the class that starts the OSGi framework
> from
> > this classloader using newInstance.
> >
> > One of the jars that is put on this classpath for this created
> classloader
> > is the geronimo JTA jar (geronimo-jta_1.1_spec-1.1.1.jar).
> >
> > I then set the framework extra system packages property to include
> >
> > javax.transaction; version=1.0.0, javax.transaction.xa; version=1.0.0,
> > javax.transaction, javax.transaction.xa
> >
> > So now the geronimo JTA classes are on the classloader of my framework.
> >
> > Now I don't see the problem I saw in the first email of this thread with
> > the two dependency chains, now I see that openjpa cannot find things like
> > javax.transaction.Synchronization. So perhaps the dependency problem has
> > gone away merely because I can no longer see the classes at all.
> >
> > I can see it on the framework's classloader, useing
> > framework.loadClass("javax.transaction.Synchronization"). I tried playing
> > with setting the bundle classloader parents, may have to try that again
> to
> > see if I screwed anything up.
> >
> > -Keith
> >
> >
> >
> > On Wed, Nov 21, 2012 at 3:00 AM, Neil Bartlett <[email protected]>
> > wrote:
> >
> > > Yes I'm aware that Karaf does at least start. However just because you
> > > haven't seen the problem doesn't mean it no longer exists.... it can
> > still
> > > occur if you install a particular set of bundles with a bad combination
> > of
> > > imports.
> > >
> > > Since this is a complicated issue and one that does occur from time to
> > > time, I intend to write a page on the OSGi Community Wiki documenting
> the
> > > problem and my proposed solution.
> > >
> > > Neil
> > >
> > > On Wed, Nov 21, 2012 at 9:08 AM, Michiel Vermandel <[email protected]
> > > >wrote:
> > >
> > > > Hi Neil,
> > > >
> > > > Thanks for the explanation.
> > > > I'm not sure how they "fixed" the issue in Karaf, but it contains
> Felix
> > > > 4.0.3 and Aries 1.0... and it starts... :-)
> > > > That is how far I got. I'll now try to get some Aries samples to
> > work...
> > > > Will post back if they run OK on out-of-the-box Karaf.
> > > >
> > > > Thanks,
> > > >
> > > > Michiel
> > > >
> > > >
> > > >
> > > > -----------------
> > > > http://www.codessentials.com - Your essential software, for free!
> > > > Follow us at http://twitter.com/#!/Codessentials
> > > >
> > > >
> > > > ________________________________
> > > >  From: Neil Bartlett <[email protected]>
> > > > To: [email protected]
> > > > Sent: Wednesday, November 21, 2012 8:42 AM
> > > > Subject: Re: Differences between Felix 4.x and 3.x for javax classes
> > > >
> > > > Oh and for the folks who said "just use Karaf".... well, I first
> found
> > > this
> > > > problem myself when helping a customer who was using Karaf. So it can
> > > > definitely happen there as well.
> > > >
> > > > I'm not saying that Karaf is not good, but it's not a magic fix for
> > every
> > > > problem!
> > > >
> > > > Neil
> > > >
> > > > On Wed, Nov 21, 2012 at 7:37 AM, Neil Bartlett <[email protected]
> >
> > > > wrote:
> > > >
> > > > > This unfortunately doesn't even solve the problem fully. Let me
> > > explain,
> > > > > it's a bit complicated.
> > > > >
> > > > > First some background. The javax.transaction and
> javax.transaction.xa
> > > > > packages were added to the JRE back in Java 5 (I think). They had
> > > > > previously only been available as part of J2EE, but they were
> needed
> > in
> > > > the
> > > > > JRE because they started to be referenced from the JDBC library in
> > > > package
> > > > > javax.sql.
> > > > >
> > > > > Unfortunately some absolute MORON decided to only include a subset
> of
> > > the
> > > > > types from those packages in the JRE! For "normal" Java developers
> > this
> > > > > didn't matter too much because they could just put the full
> packages
> > on
> > > > > their classpath and continue working, but in OSGi we have a
> terrible
> > > > > situation because we have a split package: the system bundle is
> > > > exporting a
> > > > > small subset of the package, and you have a proper bundle somewhere
> > > > > exporting the full packages. In the past most people have worked
> > around
> > > > > this by being sure to import the "full" package by versioning their
> > > > > import.... i.e. if you do Import-Package:
> > > > > javax.transaction.xa;version=1.0.0 then you cannot get the subset
> > > package
> > > > > from the system bundle.
> > > > >
> > > > > Now what changed in Felix 4.0 is that the system bundle exports
> > > packages
> > > > > with correct uses-constraints. In particular it exports javax.sql
> > with
> > > a
> > > > > uses-constraint because javax.sql uses javax.transaction.xa... that
> > is,
> > > > it
> > > > > exposes the javax.transaction.xa types through its public
> interfaces.
> > > > This
> > > > > is the absolutely correct and proper thing for Felix to do! However
> > it
> > > > > creates a problem because now any bundle that uses JDBC MUST also
> use
> > > the
> > > > > system-bundle version of the javax.transaction(.xa) packages....
> > which
> > > > are
> > > > > broken. So this is the source of your uses-constraint violation.
> > > > >
> > > > > In my opinion the only way to fix this is to correct the original
> > > mistake
> > > > > made by Sun, and add the missing types back into the system bundle
> > > > > packages. This means taking the full transaction packages (I get
> them
> > > > from
> > > > > the Geronimo transaction spec JAR) and put them on the system
> > classpath
> > > > of
> > > > > my OSGi framework launcher. I also add an additional export of
> > > > > javax.transaction and javax.transaction.xa as version 1.0.0, so the
> > > > system
> > > > > bundle will be exporting both version 0.0.0 and version 1.0.0...
> this
> > > > part
> > > > > can be done with the org.osgi.framework.system.packages.extra
> > property.
> > > > >
> > > > > Neil
> > > > >
> > > > >
> > > > > On Wed, Nov 21, 2012 at 7:17 AM, David Jencks <
> > [email protected]
> > > > >wrote:
> > > > >
> > > > >> The problem with just not exporting any javax.transaction.[xa]
> from
> > > the
> > > > >> framework is that some bits of the java runtime use the classes
> > > > included (I
> > > > >> think UserTransaction, but I don't recall).  So you can get class
> > cast
> > > > >> exceptions.  What the recommended thing to do is something like
> > > > exporting
> > > > >> from the framework
> > > > >>
> > > > >>  javax.transaction; javax.transaction.xa; version=1.1;
> partial=true;
> > > > >> mandatory:=partial, \
> > > > >>
> > > > >>
> > > > >> and then having a corresponding import-package statement with
> > > > >> partial=true in the jta jar.  I thought we had this in geronimo,
> so
> > > I'm
> > > > not
> > > > >> quite sure what's going on since it appears to be missing.
> > > > >>
> > > > >> You may just not run into any of these problems :-)
> > > > >>
> > > > >> david jencks
> > > > >>
> > > > >> On Nov 20, 2012, at 10:53 PM, Michiel Vermandel wrote:
> > > > >>
> > > > >> > Hi,
> > > > >> >
> > > > >> > I do not know what changed between 3.x and 4.x but I ran into
> the
> > > > exact
> > > > >> same issue the other day.
> > > > >> > Richard S. Hall gave a solution/workaround to the issue.
> > > > >> > This is what he posted yesterday (mail of 20/11/12 12.01):
> > > > >> >
> > > > >> > Probably the simplest thing to do is to try to eliminate
> > > > >> > javax.transactions from the system bundle...
> > > > >> >
> > > > >> > To do this, you'll need to copy the
> > > org.osgi.framework.system.packages
> > > > >> > property out of the default.properties file inside the felix.jar
> > > file
> > > > >> > and put it into the conf/config.properties files...the value is
> > > quite
> > > > >> big.
> > > > >> >
> > > > >> > It uses property substitution based on the JVM to set the value,
> > but
> > > > you
> > > > >> > can just pick the value you want and then delete the
> transactions
> > > > >> > package from it.
> > > > >> >
> > > > >> > I tried this approach and it did work.
> > > > >> > Another - also working - alternative is - as Alexey Romanov
> > > proposed -
> > > > >> to use Apache Karaf 2.3.0.
> > > > >> > It has Felix 4.0.3 and Aries 1.0 on board. Integrated and nicely
> > > > >> working out of the box.
> > > > >> >
> > > > >> > I hope you get up and running again with this info.
> > > > >> >
> > > > >> > Regards,
> > > > >> >
> > > > >> > Michiel Vermandel.
> > > > >> >
> > > > >> > -----------------
> > > > >> > http://www.codessentials.com - Your essential software, for
> free!
> > > > >> > Follow us at http://twitter.com/#!/Codessentials
> > > > >> >
> > > > >> >
> > > > >> > ________________________________
> > > > >> > From: Keith Hughes <[email protected]>
> > > > >> > To: [email protected]
> > > > >> > Sent: Wednesday, November 21, 2012 4:53 AM
> > > > >> > Subject: Differences between Felix 4.x and 3.x for javax classes
> > > > >> >
> > > > >> > Hi folks,
> > > > >> >
> > > > >> > My application was using Felix 3.2.2. I am running under
> > openjdk-6.
> > > > >> >
> > > > >> > I tried switching to Felix 4.0.3 and suddenly I was getting the
> > > > message
> > > > >> >
> > > > >> > org.osgi.framework.BundleException: Uses constraint violation.
> > > Unable
> > > > to
> > > > >> > resolve bundle revision org.apache.openjpa [22.0] because it is
> > > > exposed
> > > > >> to
> > > > >> > package 'javax.transaction.xa' from bundle revisions
> > > > >> > org.apache.geronimo.specs.geronimo-jta_1.1_spec [45.0] and
> > > > >> > org.apache.felix.framework [0] via two dependency chains.
> > > > >> >
> > > > >> > Chain 1:
> > > > >> >   org.apache.openjpa [22.0]
> > > > >> >     import:
> > > > >> >
> > > > >>
> > > >
> > >
> >
> (&(osgi.wiring.package=javax.transaction.xa)(version>=1.1.0)(!(version>=1.2.0)))
> > > > >> >      |
> > > > >> >     export: osgi.wiring.package=javax.transaction.xa
> > > > >> >   org.apache.geronimo.specs.geronimo-jta_1.1_spec [45.0]
> > > > >> >
> > > > >> > Chain 2:
> > > > >> >   org.apache.openjpa [22.0]
> > > > >> >     import:
> > > > >> >
> > > > >>
> > > >
> > >
> >
> (&(osgi.wiring.package=javax.persistence.spi)(version>=1.1.0)(!(version>=2.1.0)))
> > > > >> >      |
> > > > >> >     export: osgi.wiring.package=javax.persistence.spi;
> > > uses:=javax.sql
> > > > >> >   com.springsource.javax.persistence [43.0]
> > > > >> >     import: (&(osgi.wiring.package=javax.sql)(version>=0.0.0))
> > > > >> >      |
> > > > >> >     export: osgi.wiring.package=javax.sql;
> > > uses:=javax.transaction.xa
> > > > >> >     export: osgi.wiring.package=javax.transaction.xa
> > > > >> >   org.apache.felix.framework [0]
> > > > >> >
> > > > >> > It appears I am getting javax.transaction from two different
> > bundles
> > > > and
> > > > >> > Felix can't pick.
> > > > >> >
> > > > >> > If I look at bundle 0 if using gogo shell, I see that it is
> > > exporting
> > > > >> > javax.transaction both in Felix 3.2.2 and 4.0.3. But for some
> > reason
> > > > it
> > > > >> > comes up with this clash in 4.0.3. What gives?
> > > > >> >
> > > > >> > I tried changing the org.osgi.framework.bundle.parent property
> > when
> > > I
> > > > >> > started up Felix. I tried all the legal values, boot, app, ext,
> > and
> > > > >> > framework in case that was the issue, but I got the same result
> > > every
> > > > >> time.
> > > > >> >
> > > > >> > So what changed between 3.x and 4.x that I would start seeing
> this
> > > > >> problem?
> > > > >> > Is there some configuration setting I could use to tell Felix to
> > > use a
> > > > >> > bundle supplier that isn't bundle 0?
> > > > >> >
> > > > >> > Thanks,
> > > > >> > -Keith
> > > > >>
> > > > >>
> > > > >>
> > ---------------------------------------------------------------------
> > > > >> To unsubscribe, e-mail: [email protected]
> > > > >> For additional commands, e-mail: [email protected]
> > > > >>
> > > > >>
> > > > >
> > > >
> > >
> >
>

Reply via email to