/** {@inheritDoc} */
  @Override
  protected GridConfiguration getConfiguration(String gridName) throws Exception {
    GridConfiguration cfg = super.getConfiguration(gridName);

    GridTcpDiscoverySpi disco = new GridTcpDiscoverySpi();

    disco.setMaxMissedHeartbeats(Integer.MAX_VALUE);
    disco.setIpFinder(IP_FINDER);

    cfg.setDiscoverySpi(disco);

    if (gridName.endsWith("1")) cfg.setCacheConfiguration(); // Empty cache configuration.
    else {
      assert gridName.endsWith("2");

      GridCacheConfiguration cacheCfg = defaultCacheConfiguration();

      cacheCfg.setCacheMode(PARTITIONED);
      cacheCfg.setBackups(1);

      cfg.setCacheConfiguration(cacheCfg);
    }

    return cfg;
  }
  /** @return Cache configuration. */
  private GridCacheConfiguration cacheConfiguration() {
    GridCacheConfiguration cfg = new GridCacheConfiguration();

    cfg.setBackups(backups);

    cfg.setCacheMode(GridCacheMode.PARTITIONED);

    cfg.setDistributionMode(GridCacheDistributionMode.PARTITIONED_ONLY);

    cfg.setAffinity(new GridCachePartitionFairAffinity(parts));

    return cfg;
  }
  /** {@inheritDoc} */
  @Override
  protected GridConfiguration getConfiguration(String gridName) throws Exception {
    GridConfiguration cfg = super.getConfiguration(gridName);

    GridCacheConfiguration cache = new GridCacheConfiguration();

    cache.setName(DATA_CACHE_NAME);

    cfg.setCacheConfiguration(cache);

    GridTcpDiscoverySpi disco = new GridTcpDiscoverySpi();

    disco.setIpFinder(IP_FINDER);

    cfg.setDiscoverySpi(disco);

    return cfg;
  }
  /** {@inheritDoc} */
  @Override
  protected GridConfiguration getConfiguration(String gridName) throws Exception {
    GridConfiguration cfg = super.getConfiguration(gridName);

    GridTcpDiscoverySpi discoSpi = new GridTcpDiscoverySpi();
    discoSpi.setIpFinder(ipFinder);

    cfg.setDiscoverySpi(discoSpi);

    cfg.setCommunicationSpi(new CommunicationSpi());
    cfg.setMarshaller(new GridOptimizedMarshaller(false));

    GridCacheConfiguration ccfg = defaultCacheConfiguration();

    ccfg.setCacheMode(PARTITIONED);

    cfg.setCacheConfiguration(ccfg);

    return cfg;
  }
  /** {@inheritDoc} */
  @Override
  protected GridConfiguration getConfiguration() throws Exception {
    GridConfiguration c = super.getConfiguration();

    GridTcpDiscoverySpi disco = new GridTcpDiscoverySpi();

    disco.setIpFinder(new GridTcpDiscoveryVmIpFinder(true));

    c.setDiscoverySpi(disco);

    GridCacheConfiguration cc = defaultCacheConfiguration();

    cc.setCacheMode(LOCAL);
    cc.setTxSerializableEnabled(true);

    cc.setDefaultTxTimeout(50);

    c.setCacheConfiguration(cc);

    c.setNetworkTimeout(1000);

    return c;
  }
  /**
   * @param cacheName Cache name.
   * @return Cache configuration.
   * @throws Exception In case of error.
   */
  private GridCacheConfiguration cacheConfiguration(@Nullable String cacheName) throws Exception {
    GridCacheConfiguration cfg = defaultCacheConfiguration();

    cfg.setAtomicityMode(TRANSACTIONAL);
    cfg.setDistributionMode(NEAR_PARTITIONED);

    if (cacheName == null) cfg.setCacheMode(LOCAL);
    else if (PARTITIONED_CACHE_NAME.equals(cacheName)) {
      cfg.setCacheMode(PARTITIONED);

      cfg.setBackups(0);
    } else cfg.setCacheMode(REPLICATED);

    cfg.setName(cacheName);

    cfg.setWriteSynchronizationMode(
        REPLICATED_ASYNC_CACHE_NAME.equals(cacheName) ? FULL_ASYNC : FULL_SYNC);

    return cfg;
  }
  /** {@inheritDoc} */
  @Override
  protected GridConfiguration getConfiguration(String gridName) throws Exception {
    GridConfiguration cfg = super.getConfiguration(gridName);

    if (cache) {
      GridCacheConfiguration cacheCfg = defaultCacheConfiguration();

      cacheCfg.setCacheMode(PARTITIONED);
      cacheCfg.setBackups(1);
      cacheCfg.setDistributionMode(nearOnly ? NEAR_ONLY : NEAR_PARTITIONED);
      cacheCfg.setPreloadMode(SYNC);
      cacheCfg.setAtomicityMode(TRANSACTIONAL);

      cfg.setCacheConfiguration(cacheCfg);
    }

    GridTcpDiscoverySpi discoSpi = new GridTcpDiscoverySpi();

    discoSpi.setIpFinder(IP_FINDER);

    cfg.setDiscoverySpi(discoSpi);

    return cfg;
  }