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] >> >> >

