>>>>> Michael Elbaz <[email protected]>:

> Hello i use vertx (wraping as a bundle) inside karaf i'm facing a
> problem because vertx-auth-common use SPI mecanism internally to load
> some classes
> (https://github.com/eclipse-vertx/vertx-auth/blob/4.5.6/vertx-auth-common/src/main/resources/META-INF/services/io.vertx.ext.auth.HashingAlgorithm)
> internally is use ServiceLoader.load but during runtime the classes
> are not found is probably related to TCCL, i was trying apache aries
> Spy Fly stuff with no success how i need to do this working thanks

FWIW SPI-fly and SPI is something I've used, but it is a place where
I've never been quite clear about why and how it works.

One place I use it is with my Liquibase karaf feature
 
https://github.com/steinarb/liquibase-karaf-feature?tab=readme-ov-file#using-liquibase-from-osgi-bundles

Requiring services only needs to be done once for each karaf instance
(i.e. once for each Java VM running), I think...? Maybe...?

The requirements haven't been consistent across the applications using
liquibase even though they are very similar..

Another place I've used it is when using the TwelveMonkeys Image
manipulation library, which plugs into the SPI-based ImageIO support of
the Java runtime.

Here I used a DS (Declarative Services) component to load TwelveMonkeys
and catch the TwelveMonkeys services and register them with ImageIO.
 
https://github.com/steinarb/oldalbum/blob/master/oldalbum.backend.imageio/pom.xml#L115
 
https://github.com/steinarb/oldalbum/blob/master/oldalbum.backend.imageio/src/main/java/no/priv/bang/oldalbum/backend/imageio/ImageioSpiRegistration.java#L17

After this (in my own head: clever) trick, the ImageIO API of the runtime
works as it would outside of OSGi, but with the TwelveMonkeys plugins in
place of the default image manipulation code.

So, not really help, but at least two working examples of the use of
SPI-fly... :-)


- Steinar

Reply via email to