OK, great command. Thanks. So when I used inspect I saw that it wasn't wiring to javax.transaction anywhere, though it was wiring to javax.sql from the framework bundle. I upgraded openjpa to 2.3.0 wondering if perhaps they had fixed something in there, same problem. So I looked at the import on the bundle itself and it was asking for javax.transaction 1.1.0, though I had declared it 1.0.0 when I added it to extra packages. I fixed that and everything worked.
Wow, this whole javax stuff is annoying. I wish Sun had made the right decisions. Thanks for your help Neil, I much appreciate it! On Fri, Dec 20, 2013 at 3:28 PM, Keith Hughes <[email protected]>wrote: > 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] >> > > > >> >> > > > >> >> > > > > >> > > > >> > > >> > >> > >

