> Don't you think that violates the responsibility on the resource principle? If I ain't started it, I shouldn't stop it.

No why? This is exactly what I am saying, I am not start/stopping it, if I am not told to do so by the Service itself. And this is done by the service implementing _Startable_ and _Stopable_. If the service is not implementing these services, I am assuming that the service does either not need to be started or already has been started by the provider of this service. Make perfect sense to me.

> You have a solid use case in mind where you'd hand over lifecycle responsibility to Search, when you start the Service yourself?

The _DefaultIndexManagerFactory_

> I think it would lead to confusing finally blocks.

You need to wrap calls to services either way into finally calls. This has nothing to do with discussion. Unless there is a misunderstanding on what you mean. But the documentation of the service manager says "Any service requested should be released using {@link #releaseService(Class)} when it's not needed anymore." If you want to do this properly, you will need to wrap into finally clauses when using any service requested by the service manager. Mind you also, that from a _#requestService_ point of view, there is no knowing whether you are dealing with a "provided" or discovered service (as there should be none). This is another reason why I think provided services should/could be wrapped into _ServiceWrapper_ as well. I don't see any disadvantages doing so and in fact it unifies the code.