Hi

Am 03.02.2014 um 09:41 schrieb Chetan Mehrotra <[email protected]>:

> Hi,
> 
> For SLING-3264 I was thinking to provide Inventory integration in
> Commons Logs. However the Commons Log bundle starts at level 1 while
> the Inventory bundle starts at Level 5. The log bundle would use the
> ServiceFactory approach to expose the Inventory service and would not
> have required dependency on Inventory API.
> 
> So just wanted to confirm that would it be fine to depend on classes
> from a bundle which starts at later start level or not?

Sure. This is what we are using ServiceFactory and dynamic/delayed import all 
over places. See for example the Configuration Admin binding the Apache Felix 
SCR bundle.

So, what seems to boild down to kind of a best practice is to:

  * use ServiceFactory for optional services
  * use Import-Package with resolution:=optional to have 
      static wiring if possible
  * use DynamicImport-Package to have dynamic wiring
      on-demand

It is just very important to thouroughly test this to not get inadvertend 
ClassNotFoundExceptions, for example if the optional classes appear in the 
method signature of a required class (see the 
ResourceResolverActivator.getFeaures() method which returns Object to work 
around this issue).

Regards
Felix

Reply via email to