Reputation: 3244
I just recently stumbled upon the fact that Declarative Services in OSGi can set the configuration of a component to required so that the component receives it upon activation, removing the gap between component activation and configuration. I also realized with this that you can receive configuration updates via the modified
-method.
It seems to me like this functionality is quite similar to that provided by implementing the ManagedService
interface and publishing that as one of the "services" you provide.
It seems like I could completely ignore ManagedService
& just use the DS configuration injection.
Is one of these techniques preferred over the other or are there other trade-offs that I'm not seeing?
Upvotes: 13
Views: 3491
Reputation: 23948
Yes, you can completely ignore ManagedService
and ManagedServiceFactory
and just use Declarative Services components. And yes I would recommend this approach.
Just think of this as different levels of abstraction. MS/MSF is the low-level API for config admin, and it is available even when you don't have a DS bundle running. The advantage of this is you can write configurable services without having a dependency on DS, which may be desirable for certain "system level" components.
However, if you are happy to depend on DS, e.g. for "application level" components, then using DS's built-in integration with config admin will make your life a lot easier.
Upvotes: 14
Reputation: 937
couple of examples of building declarative services factories:
1) via config admin : carrot-osgi-scr-factory-cm
2) via component factory : carrot-osgi-scr-factory-ds
take a look on tests for use cases;
Upvotes: 0