I want to create a singleton object of a third party caching library (`ThirdPartyKVStore`). But I don't want to reference this class all over the place from where I want to access the cache. To address this, I created a wrapper `CacheManager` which is managing the lifecycle of `ThirdPartyKVStore`. Does it look ok?

    public class CacheManager {
    
         private static ThirdPartyKVStore thirdPartyCache = null;
         private static volatile CacheManager cacheManager = null;
    
         private CacheManager(){
    
         }
    
         public static CacheManager getConnection(CacheConfig cacheConfig) {
           if (cacheManager == null) {
             synchronized (CacheManager.class) {
               if (cacheManager == null) {
                try {
                  thirdPartyCache = new ThirdPartyKVStore(cacheConfig);            
                  cacheManager = new CacheManager();
               } catch (Throwable e) {
                logger.error("Fn=getConnection Msg=Cache_Initialization_Error_Occurred.", e);
              }
            }
          }
         }
        return cacheManager;
        }
    
        public static void closeCacheConnection(){
          if(thirdPartyCache != null){
              thirdPartyCache.shutdown();
            }
        }
    
        public <T> T getCacheData(String key){
          T cachedObject = null;
          String cachedStr = null;
    
          Entry<String> e = thirdPartyCache.get(key);
          if(e != null){
            cachedStr = e.getPayload();
           }
          if (cachedStr != null) {
                 TypeToken<T> typeToken = new TypeToken<T>() {};
                 cachedObject = deserializeStr2POJO(cachedStr, typeToken);
         }
        return cachedObject;
        }
    
    
        public <T> void setCacheData(String key, T t){
            if (thirdPartyCache != null) {
                  try {
                      Entry<String> e = new Entry.Builder<String>(new Gson()
                              .toJson(t))
                              .withVersion(DEFAULT_VERSION)
                              .withApplication(DEFAULT_APP)
                              .build();
                
                      thirdPartyCache.set(key, e, Integer.MAX_VALUE);        
                    } catch (Exception e) {
                  }
              }
         }
    }