@SuppressWarnings("unchecked")
  public void validate() {
    for (Builder<?> validatable :
        asList(
            clustering,
            customInterceptors,
            dataContainer,
            deadlockDetection,
            eviction,
            expiration,
            indexing,
            invocationBatching,
            jmxStatistics,
            persistence,
            locking,
            storeAsBinary,
            transaction,
            versioning,
            unsafe,
            sites,
            compatibility)) {
      validatable.validate();
    }
    for (Builder<?> m : modules) {
      m.validate();
    }

    // TODO validate that a transport is set if a singleton store is set
  }
 @SuppressWarnings("unchecked")
 public void validate() {
   for (AbstractGlobalConfigurationBuilder<?> validatable :
       asList(
           asyncListenerExecutor,
           asyncTransportExecutor,
           remoteCommandsExecutor,
           evictionScheduledExecutor,
           replicationQueueScheduledExecutor,
           globalJmxStatistics,
           transport,
           serialization,
           shutdown,
           site,
           totalOrderExecutor)) {
     validatable.validate();
   }
   for (Builder<?> m : modules) {
     m.validate();
   }
 }