@Override
  public void deregisterCacheEntryListener(
      CacheEntryListenerConfiguration<K, V> cacheEntryListenerConfiguration) {
    if (cacheEntryListenerConfiguration == null) {
      throw new NullPointerException("CacheEntryListenerConfiguration can't be null");
    }
    final String regId = removeListenerLocally(cacheEntryListenerConfiguration);
    if (regId == null) {
      return;
    }

    ClientListenerService listenerService = clientContext.getListenerService();
    boolean isDeregistered =
        listenerService.stopListening(
            regId,
            new ListenerRemoveCodec() {
              @Override
              public ClientMessage encodeRequest(String realRegistrationId) {
                return CacheRemoveEntryListenerCodec.encodeRequest(
                    nameWithPrefix, realRegistrationId);
              }

              @Override
              public boolean decodeResponse(ClientMessage clientMessage) {
                return CacheRemoveEntryListenerCodec.decodeResponse(clientMessage).response;
              }
            });

    if (isDeregistered) {
      cacheConfig.removeCacheEntryListenerConfiguration(cacheEntryListenerConfiguration);
      // REMOVE ON OTHERS TOO
      updateCacheListenerConfigOnOtherNodes(cacheEntryListenerConfiguration, false);
    } else {
      addListenerLocally(regId, cacheEntryListenerConfiguration);
    }
  }
 private void deregisterAllCacheEntryListener(Collection<String> listenerRegistrations) {
   ClientListenerService listenerService = clientContext.getListenerService();
   for (String regId : listenerRegistrations) {
     listenerService.deregisterListener(regId);
   }
 }