Would it make sense to let _BridgeProvider_ extend _Service_ and look the providers up via the _ServiceManager_? This way you get the discovery for free. What we have to solve is how we can change the _ServiceManager_ to allow multiple services/providers per service role (that's a todo anyways).

Another benefit here is that all _ServiceLoader_ related code is located in the _ServiceManager_. I am speaking here with my OSGi glasses on. Depending on how serious we get, we cannot/should not load any services via the ServiceLoader. Instead we should use OSGi mechanisms for that (eg. blueprint). If we have all _ServiceLoader_ code in our default _ServiceManager_ one could imagine an _OsgiServiceManager_ further down the street which resolves services via an OSGi service reference.