@Override
    public void run2() {
      if (pool.getCancelCriterion().isCancelInProgress()) {
        return;
      }
      synchronized (recoveryScheduledLock) {
        recoveryScheduled = false;
      }
      Object[] objects = InternalInstantiator.getInstantiatorsForSerialization();
      if (objects.length == 0) {
        return;
      }
      EventID eventId = InternalInstantiator.generateEventId();
      // Fix for bug:40930
      if (eventId == null) {
        background.schedule(new RecoveryTask(), pingInterval, TimeUnit.MILLISECONDS);
        recoveryScheduled = true;
      } else {
        try {
          RegisterInstantiatorsOp.execute(pool, objects, eventId);
        } catch (CancelException e) {
          throw e;
        } catch (RejectedExecutionException e) {
          // This is probably because we've started to shut down.
          pool.getCancelCriterion().checkCancelInProgress(e);
          throw e; // weird
        } catch (Exception e) {
          pool.getCancelCriterion().checkCancelInProgress(e);

          // If an exception occurred on the server, don't retry
          Throwable cause = e.getCause();
          if (cause instanceof ClassNotFoundException) {
            logger.warn("InstantiatorRecoveryTask - Error ClassNotFoundException: {}",
                cause.getMessage());
          } else {
            logger.warn("InstantiatorRecoveryTask - Error recovering instantiators:",
                e);
          }
        }
      }
    }
A listener which will try to resend the instantiators to all servers if the entire server
distributed system was lost and came back one line. This listener also takes care of sending the
initial list of instantiators to the servers <br>
<br>
TODO - There is a window in which all of the servers could crash and come back up and we would
connect to a new server before realizing that all the servers crashed. To fix this, we would need
to get some kind of birthdate of the server ds we connect and use that to decide if we need to
recover instantiators. As it is, the window is not very large.
geode-core/src/main/java/org/apache/geode/cache/client/internal/InstantiatorRecoveryListener.java