Hi Martin, If you use the static weaving with SPI Fly it should be of very low impact. It will basically create you a modified bundle that works in OSGi. It has a dependency the SPI Fly static bundle, but you should be able to merge those classes in...
Cheers, David On 8 September 2012 20:01, Martin Lichtin <[email protected]> wrote: > Hi David > > Thanks! I actually came across SPI-Fly before posting, but it seemed like > a "big thing" to introduce at the current situation with my project. > > What I would like in the short term is to inline the library (2 artifacts) > and "fix" some of the classes, ie. provide my own code for them. > I think it can be achieved with > > <Embed-Dependency>scope=compile|runtime;artifactId=a1|a2;inline=true;inline=!**/SP.class;inline=!**/RP*.class</Embed-Dependency> > > However, the instruction > > inline=!**/SP.class;inline=!**/RP*.class > > to exclude a total of four classes does not work quite right. > I also tried > > inline=!**/SP.class|**/RP*.class > > without any luck. > > Martin > > > > -------- Original Message -------- > Subject: Re: How to make java.util.ServiceLoader work? > From: David Bosschaert <[email protected]> > To: [email protected], Martin Lichtin <[email protected]> > Date: 9/7/2012 4:42 PM > >> Hi Martin, >> >> You may want to take a look at the SPI Fly component in Apache Aries: >> http://aries.apache.org/modules/spi-fly.html - this allows you to do >> this relatively easily. >> Additionally, the OSGi Enterprise Spec 5 chapter 133 covers this [1]. >> >> Cheers, >> >> David >> >> [1] www.osgi.org/Download/Release5 >> >> On 7 September 2012 14:50, Martin Lichtin <[email protected]> wrote: >>> >>> Hi >>> >>> From an OSGi bundle I need to call a library that itself uses >>> ServiceLoader to lookup/load a service provider class. >>> >>> This does not seem to work, however. >>> java.util.ServiceLoader.load(x.api.z) returns no providers. >>> >>> I embedded the library, so both file META-INF/services/x.api.z and class >>> x.spi.z are part of my bundle JAR. >>> I thought this would be enough to get ServiceLoader to work, but no :-( >>> >>> Any ideas? >>> >>> >>> I already tried >>> >>> ClassLoader thread = >>> Thread.currentThread().getContextClassLoader(); >>> >>> Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); >>> <call-library> >>> Thread.currentThread().setContextClassLoader(thread); >>> >>> >>> in case TCCL would be the problem, but that didn't help. >>> >>> Martin > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

