docs: protected void deactivate(ComponentContext context) {
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          // Block the progress of deactivate so that session manager is able to access the cache until it finishes stopping applications.
          // The approach of blocking is copied from DatabaseStoreService as a temporary workaround. It would be nice to have a better solution here.
          final long MAX_WAIT = TimeUnit.SECONDS.toNanos(10);
          for (long start = System.nanoTime(); !completedPassivation && System.nanoTime() - start < MAX_WAIT; )
              try {
                  TimeUnit.MILLISECONDS.sleep(100); // sleep 1/10th of a second
              } catch (InterruptedException e) {
              }
  
          if (cachingProvider != null) {
              if (trace && tc.isDebugEnabled())
                  CacheHashMap.tcInvoke(tcCachingProvider, "close");
  
              AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
                  cachingProvider.close();
                  return null;
              });
  
              if (trace && tc.isDebugEnabled())
                  CacheHashMap.tcReturn(tcCachingProvider, "close");
  
              cachingProvider = null;
              cacheManager = null;
          }
      }