public Configuration build(boolean validate) {
   if (validate) {
     validate();
   }
   List<Object> modulesConfig = new LinkedList<Object>();
   for (Builder<?> module : modules) modulesConfig.add(module.create());
   return new Configuration(
       clustering.create(),
       customInterceptors.create(),
       dataContainer.create(),
       deadlockDetection.create(),
       eviction.create(),
       expiration.create(),
       indexing.create(),
       invocationBatching.create(),
       jmxStatistics.create(),
       persistence.create(),
       locking.create(),
       storeAsBinary.create(),
       transaction.create(),
       unsafe.create(),
       versioning.create(),
       sites.create(),
       compatibility.create(),
       modulesConfig,
       classLoader == null ? null : classLoader.get());
 }
 @Override
 public GlobalConfiguration build() {
   validate();
   List<Object> modulesConfig = new LinkedList<Object>();
   for (Builder<?> module : modules) modulesConfig.add(module.create());
   return new GlobalConfiguration(
       asyncListenerExecutor.create(),
       asyncTransportExecutor.create(),
       remoteCommandsExecutor.create(),
       evictionScheduledExecutor.create(),
       replicationQueueScheduledExecutor.create(),
       globalJmxStatistics.create(),
       transport.create(),
       serialization.create(),
       shutdown.create(),
       modulesConfig,
       site.create(),
       cl.get(),
       totalOrderExecutor.create());
 }