In an application we're developing I have a common interface for data provider components to implement, and I'm hooking these providers up as services.
One of my colleagues suggested it might be better to just create one service that can keep track of these implementations (how many are available currently, and perhaps make them available to other parts of the codebase via getters), and we could register/deregister them using the implementation bundle's activators.
While this could generally work, this is (almost) exactly what's provided by the service layer in the first place, and to me, it feels like we're duplicating functionality.
What do you think?
Your use case is one of the primary OSGi use cases for the service registry. The service registry was primarily intended for this kind of applications where you need to share instances between uncoupled modules.
Using the service registry you get:
The primary purpose of OSGi has always been independent modules that contribute services for others to use, e.g. the blackboard programming model. This provides a very elegant peer-to-peer decoupled programming model. The whole class loading wars have always overshadowed this aspect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With