Cheat Sheet

Cheat Sheet

Injecting a Managed Bean

@Inject private IceCreamService iceCream;

Disambiguating Injection Points for Managed Beans

@Inject @Chocolate private IceCreamService iceCream;

Selecting Beans at Run-Time

@Inject @Any private Instance<IceCreamService> anyIceCream; public void printFlavours() { for (IceCreamService iceCream : anyIceCream) { System.out.println(iceCream.getFlavour()); } }

Injecting an OSGi Service

@Inject @OsgiService private IceCreamService iceCream;

Disambiguating OSGi Services

@Inject @OsgiService(filter = "(&(flavour=chocolate)(lactose=false))") private IceCreamService iceCream;

Selecting OSGi Services at Run-Time

@Inject @OsgiService(dynamic = true) private Instance<IceCreamService> iceCreamServices;

A filter member may be added to the @OsgiService annotation to narrow down the set of matching OSGi services.

Instance<T> implements Iterable<T>, so to iterate over all matching services, simply write:

for (IceCreamService iceCreamService : iceCreamServices) { // ... }

Publishing a Bean as OSGi Service with singleton scope

@OsgiServiceProvider public class ChocolateService implements IceCreamService { }

By default, the service bean has CDI scope @SingletonScoped and the corresponding OSGi service is published with singleton scope. The @SingletonScoped annotation is optional.

Publishing a Bean as OSGi Service with bundle scope

Since Pax CDI 0.9.0

@OsgiServiceProvider @BundleScoped public class ChocolateService implements IceCreamService { }

Publishing a Bean as OSGi Service with prototype scope

Since Pax CDI 0.9.0

@OsgiServiceProvider @PrototypeScoped public class ChocolateService implements IceCreamService { }

Prototype scope is only supported when running on OSGi 6.0 or higher.

Setting OSGi Service Properties

@OsgiServiceProvider @Properties({ @Property(name = "flavour", value = "chocolate"), @Property(name = "lactose", value = "false") }) public class ChocolateService implements IceCreamService { }

Publishing an OSGi Service with Explicit Interfaces

@OsgiServiceProvider(classes = {ChocolateService.class, IceCreamService.class}) public class ChocolateService implements IceCreamService { }