When you get a cache from a CacheManager using the getCache(String) method, it will be returned "started", so there is no need to invoke start() on it.
You MUST invoke CacheManager.stop() at node shutdown as that will stop all caches and release all global resources (thread pools, mbean bindings, etc) in a clean way,
If you really want to stop *everything* you also need to stop transactional services, calling
from com.arjuna.ats.arjuna.coordinator package. Otherwise, few threads could be hanging in your app (it's not responsibility of Infinispan to cleanup after TransactionManager).
Ok thanks for the input! I was worried that calling cacheManager.stop() on one node would globally stop the caches / CacheManager in the cluster, thus keeping other nodes from using the caches / CacheManager. I poked around in the source code, and it seems ok (as well as testing this actual scenario). So all's well .