You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/03/31 16:22:38 UTC

[04/18] ignite git commit: IGNITE-4564: All setters on public configuration now return "this" instance to allow convenient chaining. This closes #1449.

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/configuration/FileSystemConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/FileSystemConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/FileSystemConfiguration.java
index 1a8d576..75e9f7d 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/FileSystemConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/FileSystemConfiguration.java
@@ -249,9 +249,12 @@ public class FileSystemConfiguration {
      * Sets IGFS instance name.
      *
      * @param name IGFS instance name.
+     * @return {@code this} for chaining.
      */
-    public void setName(String name) {
+    public FileSystemConfiguration setName(String name) {
         this.name = name;
+
+        return this;
     }
 
     /**
@@ -275,9 +278,12 @@ public class FileSystemConfiguration {
      * </ul>
      *
      * @param metaCacheCfg Cache configuration object.
+     * @return {@code this} for chaining.
      */
-    public void setMetaCacheConfiguration(CacheConfiguration metaCacheCfg) {
+    public FileSystemConfiguration setMetaCacheConfiguration(CacheConfiguration metaCacheCfg) {
         this.metaCacheCfg = metaCacheCfg;
+
+        return this;
     }
 
     /**
@@ -301,9 +307,12 @@ public class FileSystemConfiguration {
      * </ul>
      *
      * @param dataCacheCfg Cache configuration object.
+     * @return {@code this} for chaining.
      */
-    public void setDataCacheConfiguration(CacheConfiguration dataCacheCfg) {
+    public FileSystemConfiguration setDataCacheConfiguration(CacheConfiguration dataCacheCfg) {
         this.dataCacheCfg = dataCacheCfg;
+
+        return this;
     }
 
     /**
@@ -319,11 +328,14 @@ public class FileSystemConfiguration {
      * Sets file's data block size.
      *
      * @param blockSize File's data block size (bytes) or {@code 0} to reset default value.
+     * @return {@code this} for chaining.
      */
-    public void setBlockSize(int blockSize) {
+    public FileSystemConfiguration setBlockSize(int blockSize) {
         A.ensure(blockSize >= 0, "blockSize >= 0");
 
         this.blockSize = blockSize == 0 ? DFLT_BLOCK_SIZE : blockSize;
+
+        return this;
     }
 
     /**
@@ -339,11 +351,14 @@ public class FileSystemConfiguration {
      * Sets the number of pre-fetched blocks if specific file's chunk is requested.
      *
      * @param prefetchBlocks New number of pre-fetched blocks.
+     * @return {@code this} for chaining.
      */
-    public void setPrefetchBlocks(int prefetchBlocks) {
+    public FileSystemConfiguration setPrefetchBlocks(int prefetchBlocks) {
         A.ensure(prefetchBlocks >= 0, "prefetchBlocks >= 0");
 
         this.prefetchBlocks = prefetchBlocks;
+
+        return this;
     }
 
     /**
@@ -381,11 +396,14 @@ public class FileSystemConfiguration {
      * <b>NOTE:</b> Integration with Hadoop is available only in {@code In-Memory Accelerator For Hadoop} edition.
      *
      * @param seqReadsBeforePrefetch Amount of sequential block reads before prefetch is triggered.
+     * @return {@code this} for chaining.
      */
-    public void setSequentialReadsBeforePrefetch(int seqReadsBeforePrefetch) {
+    public FileSystemConfiguration setSequentialReadsBeforePrefetch(int seqReadsBeforePrefetch) {
         A.ensure(seqReadsBeforePrefetch >= 0, "seqReadsBeforePrefetch >= 0");
 
         this.seqReadsBeforePrefetch = seqReadsBeforePrefetch;
+
+        return this;
     }
 
     /**
@@ -401,11 +419,14 @@ public class FileSystemConfiguration {
      * Sets read/write buffers size for {@code IGFS} stream operations (bytes).
      *
      * @param bufSize Read/write buffers size for stream operations (bytes) or {@code 0} to reset default value.
+     * @return {@code this} for chaining.
      */
-    public void setStreamBufferSize(int bufSize) {
+    public FileSystemConfiguration setStreamBufferSize(int bufSize) {
         A.ensure(bufSize >= 0, "bufSize >= 0");
 
         this.bufSize = bufSize == 0 ? DFLT_BUF_SIZE : bufSize;
+
+        return this;
     }
 
     /**
@@ -421,9 +442,12 @@ public class FileSystemConfiguration {
      * Sets number of file blocks collected on local node before sending batch to remote node.
      *
      * @param perNodeBatchSize Per node buffer size.
+     * @return {@code this} for chaining.
      */
-    public void setPerNodeBatchSize(int perNodeBatchSize) {
+    public FileSystemConfiguration setPerNodeBatchSize(int perNodeBatchSize) {
         this.perNodeBatchSize = perNodeBatchSize;
+
+        return this;
     }
 
     /**
@@ -439,9 +463,12 @@ public class FileSystemConfiguration {
      * Sets number of file block batches that can be concurrently sent to remote node.
      *
      * @param perNodeParallelBatchCnt Per node parallel load operations.
+     * @return {@code this} for chaining.
      */
-    public void setPerNodeParallelBatchCount(int perNodeParallelBatchCnt) {
+    public FileSystemConfiguration setPerNodeParallelBatchCount(int perNodeParallelBatchCnt) {
         this.perNodeParallelBatchCnt = perNodeParallelBatchCnt;
+
+        return this;
     }
 
     /**
@@ -463,9 +490,12 @@ public class FileSystemConfiguration {
      * Hadoop Accelerator</b>.
      *
      * @param ipcEndpointCfg IPC endpoint configuration.
+     * @return {@code this} for chaining.
      */
-    public void setIpcEndpointConfiguration(@Nullable IgfsIpcEndpointConfiguration ipcEndpointCfg) {
+    public FileSystemConfiguration setIpcEndpointConfiguration(@Nullable IgfsIpcEndpointConfiguration ipcEndpointCfg) {
         this.ipcEndpointCfg = ipcEndpointCfg;
+
+        return this;
     }
 
     /**
@@ -488,9 +518,12 @@ public class FileSystemConfiguration {
      * Hadoop Accelerator</b>.
      *
      * @param ipcEndpointEnabled IPC endpoint enabled flag.
+     * @return {@code this} for chaining.
      */
-    public void setIpcEndpointEnabled(boolean ipcEndpointEnabled) {
+    public FileSystemConfiguration setIpcEndpointEnabled(boolean ipcEndpointEnabled) {
         this.ipcEndpointEnabled = ipcEndpointEnabled;
+
+        return this;
     }
 
     /**
@@ -509,9 +542,12 @@ public class FileSystemConfiguration {
      * Sets management endpoint port.
      *
      * @param mgmtPort port number or {@code -1} to disable management endpoint.
+     * @return {@code this} for chaining.
      */
-    public void setManagementPort(int mgmtPort) {
+    public FileSystemConfiguration setManagementPort(int mgmtPort) {
         this.mgmtPort = mgmtPort;
+
+        return this;
     }
 
     /**
@@ -534,9 +570,12 @@ public class FileSystemConfiguration {
      * for pass-through, write-through, and read-through purposes.
      *
      * @param dfltMode {@code IGFS} mode.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultMode(IgfsMode dfltMode) {
+    public FileSystemConfiguration setDefaultMode(IgfsMode dfltMode) {
         this.dfltMode = dfltMode;
+
+        return this;
     }
 
     /**
@@ -554,9 +593,12 @@ public class FileSystemConfiguration {
      * and read-through purposes.
      *
      * @param fileSystem Secondary file system.
+     * @return {@code this} for chaining.
      */
-    public void setSecondaryFileSystem(IgfsSecondaryFileSystem fileSystem) {
+    public FileSystemConfiguration setSecondaryFileSystem(IgfsSecondaryFileSystem fileSystem) {
         secondaryFs = fileSystem;
+
+        return this;
     }
 
     /**
@@ -587,9 +629,12 @@ public class FileSystemConfiguration {
      * {@link #getDefaultMode()} is used.
      *
      * @param pathModes Map of paths to {@code IGFS} modes.
+     * @return {@code this} for chaining.
      */
-    public void setPathModes(Map<String, IgfsMode> pathModes) {
+    public FileSystemConfiguration setPathModes(Map<String, IgfsMode> pathModes) {
         this.pathModes = pathModes;
+
+        return this;
     }
 
     /**
@@ -605,15 +650,19 @@ public class FileSystemConfiguration {
      * Sets length of file chunk to transmit before throttling is delayed.
      *
      * @param fragmentizerThrottlingBlockLen Block length in bytes.
+     * @return {@code this} for chaining.
      */
-    public void setFragmentizerThrottlingBlockLength(long fragmentizerThrottlingBlockLen) {
+    public FileSystemConfiguration setFragmentizerThrottlingBlockLength(long fragmentizerThrottlingBlockLen) {
         this.fragmentizerThrottlingBlockLen = fragmentizerThrottlingBlockLen;
+
+        return this;
     }
 
     /**
      * Gets throttle delay for fragmentizer.
      *
      * @return Throttle delay in milliseconds.
+     * @return {@code this} for chaining.
      */
     public long getFragmentizerThrottlingDelay() {
         return fragmentizerThrottlingDelay;
@@ -624,14 +673,17 @@ public class FileSystemConfiguration {
      *
      * @param fragmentizerThrottlingDelay Delay in milliseconds.
      */
-    public void setFragmentizerThrottlingDelay(long fragmentizerThrottlingDelay) {
+    public FileSystemConfiguration setFragmentizerThrottlingDelay(long fragmentizerThrottlingDelay) {
         this.fragmentizerThrottlingDelay = fragmentizerThrottlingDelay;
+
+        return this;
     }
 
     /**
      * Gets number of files that can be processed by fragmentizer concurrently.
      *
      * @return Number of files to process concurrently.
+     * @return {@code this} for chaining.
      */
     public int getFragmentizerConcurrentFiles() {
         return fragmentizerConcurrentFiles;
@@ -641,9 +693,12 @@ public class FileSystemConfiguration {
      * Sets number of files to process concurrently by fragmentizer.
      *
      * @param fragmentizerConcurrentFiles Number of files to process concurrently.
+     * @return {@code this} for chaining.
      */
-    public void setFragmentizerConcurrentFiles(int fragmentizerConcurrentFiles) {
+    public FileSystemConfiguration setFragmentizerConcurrentFiles(int fragmentizerConcurrentFiles) {
         this.fragmentizerConcurrentFiles = fragmentizerConcurrentFiles;
+
+        return this;
     }
 
     /**
@@ -672,10 +727,13 @@ public class FileSystemConfiguration {
      * @see #getFragmentizerLocalWritesRatio()
      *
      * @deprecated Parameter is no longer used.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setFragmentizerLocalWritesRatio(float fragmentizerLocWritesRatio) {
+    public FileSystemConfiguration setFragmentizerLocalWritesRatio(float fragmentizerLocWritesRatio) {
         this.fragmentizerLocWritesRatio = fragmentizerLocWritesRatio;
+
+        return this;
     }
 
     /**
@@ -692,9 +750,12 @@ public class FileSystemConfiguration {
      * Sets property indicating whether fragmentizer is enabled.
      *
      * @param fragmentizerEnabled {@code True} if fragmentizer is enabled.
+     * @return {@code this} for chaining.
      */
-    public void setFragmentizerEnabled(boolean fragmentizerEnabled) {
+    public FileSystemConfiguration setFragmentizerEnabled(boolean fragmentizerEnabled) {
         this.fragmentizerEnabled = fragmentizerEnabled;
+
+        return this;
     }
 
     /**
@@ -710,9 +771,12 @@ public class FileSystemConfiguration {
      * Set maximum space in bytes available in data cache.
      *
      * @param maxSpace Maximum space available in data cache.
+     * @return {@code this} for chaining.
      */
-    public void setMaxSpaceSize(long maxSpace) {
+    public FileSystemConfiguration setMaxSpaceSize(long maxSpace) {
         this.maxSpace = maxSpace;
+
+        return this;
     }
 
     /**
@@ -731,10 +795,13 @@ public class FileSystemConfiguration {
      *
      * @param trashPurgeTimeout Maximum timeout awaiting for trash purging in case data cache oversize is detected.
      * @deprecated Not used any more.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setTrashPurgeTimeout(long trashPurgeTimeout) {
+    public FileSystemConfiguration setTrashPurgeTimeout(long trashPurgeTimeout) {
         this.trashPurgeTimeout = trashPurgeTimeout;
+
+        return this;
     }
 
     /**
@@ -756,10 +823,13 @@ public class FileSystemConfiguration {
      *
      * @param dualModePutExec Dual mode put operations executor service.
      * @deprecated Not used any more.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setDualModePutExecutorService(ExecutorService dualModePutExec) {
+    public FileSystemConfiguration setDualModePutExecutorService(ExecutorService dualModePutExec) {
         this.dualModePutExec = dualModePutExec;
+
+        return this;
     }
 
     /**
@@ -778,10 +848,13 @@ public class FileSystemConfiguration {
      *
      * @param dualModePutExecShutdown Dual mode put operations executor service shutdown flag.
      * @deprecated Not used any more.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setDualModePutExecutorServiceShutdown(boolean dualModePutExecShutdown) {
+    public FileSystemConfiguration setDualModePutExecutorServiceShutdown(boolean dualModePutExecShutdown) {
         this.dualModePutExecShutdown = dualModePutExecShutdown;
+
+        return this;
     }
 
     /**
@@ -805,10 +878,13 @@ public class FileSystemConfiguration {
      *
      * @param dualModeMaxPendingPutsSize Maximum amount of data in pending put operations.
      * @deprecated Not used any more.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setDualModeMaxPendingPutsSize(long dualModeMaxPendingPutsSize) {
+    public FileSystemConfiguration setDualModeMaxPendingPutsSize(long dualModeMaxPendingPutsSize) {
         this.dualModeMaxPendingPutsSize = dualModeMaxPendingPutsSize;
+
+        return this;
     }
 
     /**
@@ -846,9 +922,12 @@ public class FileSystemConfiguration {
      * See {@link #getMaximumTaskRangeLength()} for more details.
      *
      * @param maxTaskRangeLen Set maximum default range size of a file being split during IGFS task execution.
+     * @return {@code this} for chaining.
      */
-    public void setMaximumTaskRangeLength(long maxTaskRangeLen) {
+    public FileSystemConfiguration setMaximumTaskRangeLength(long maxTaskRangeLen) {
         this.maxTaskRangeLen = maxTaskRangeLen;
+
+        return this;
     }
 
     /**
@@ -880,9 +959,12 @@ public class FileSystemConfiguration {
      * See {@link #isInitializeDefaultPathModes()} for more information.
      *
      * @param initDfltPathModes Whether to initialize default path modes.
+     * @return {@code this} for chaining.
      */
-    public void setInitializeDefaultPathModes(boolean initDfltPathModes) {
+    public FileSystemConfiguration setInitializeDefaultPathModes(boolean initDfltPathModes) {
         this.initDfltPathModes = initDfltPathModes;
+
+        return this;
     }
 
     /**
@@ -919,9 +1001,12 @@ public class FileSystemConfiguration {
      * See {@link #isColocateMetadata()} for more information.
      *
      * @param colocateMeta Whether metadata co-location is enabled.
+     * @return {@code this} for chaining.
      */
-    public void setColocateMetadata(boolean colocateMeta) {
+    public FileSystemConfiguration setColocateMetadata(boolean colocateMeta) {
         this.colocateMeta = colocateMeta;
+
+        return this;
     }
 
     /**
@@ -956,9 +1041,12 @@ public class FileSystemConfiguration {
      * See {@link #isColocateMetadata()} for more information.
      *
      * @param relaxedConsistency Whether to use relaxed consistency optimization.
+     * @return {@code this} for chaining.
      */
-    public void setRelaxedConsistency(boolean relaxedConsistency) {
+    public FileSystemConfiguration setRelaxedConsistency(boolean relaxedConsistency) {
         this.relaxedConsistency = relaxedConsistency;
+
+        return this;
     }
 
     /**
@@ -982,9 +1070,12 @@ public class FileSystemConfiguration {
      * Set {@link #isUpdateFileLengthOnFlush()} for more information.
      *
      * @param updateFileLenOnFlush Whether to update file length on flush.
+     * @return {@code this} for chaining.
      */
-    public void setUpdateFileLengthOnFlush(boolean updateFileLenOnFlush) {
+    public FileSystemConfiguration setUpdateFileLengthOnFlush(boolean updateFileLenOnFlush) {
         this.updateFileLenOnFlush = updateFileLenOnFlush;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
index 6443a67..8d8e96c 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
@@ -92,9 +92,12 @@ public class HadoopConfiguration {
      * Sets max number of local tasks that may be executed in parallel.
      *
      * @param maxParallelTasks Max number of local tasks that may be executed in parallel.
+     * @return {@code this} for chaining.
      */
-    public void setMaxParallelTasks(int maxParallelTasks) {
+    public HadoopConfiguration setMaxParallelTasks(int maxParallelTasks) {
         this.maxParallelTasks = maxParallelTasks;
+
+        return this;
     }
 
     /**
@@ -110,9 +113,12 @@ public class HadoopConfiguration {
      * Sets max task queue size.
      *
      * @param maxTaskQueueSize Max task queue size.
+     * @return {@code this} for chaining.
      */
-    public void setMaxTaskQueueSize(int maxTaskQueueSize) {
+    public HadoopConfiguration setMaxTaskQueueSize(int maxTaskQueueSize) {
         this.maxTaskQueueSize = maxTaskQueueSize;
+
+        return this;
     }
 
     /**
@@ -128,9 +134,12 @@ public class HadoopConfiguration {
      * Sets finished job info time-to-live.
      *
      * @param finishedJobInfoTtl Finished job info time-to-live.
+     * @return {@code this} for chaining.
      */
-    public void setFinishedJobInfoTtl(long finishedJobInfoTtl) {
+    public HadoopConfiguration setFinishedJobInfoTtl(long finishedJobInfoTtl) {
         this.finishedJobInfoTtl = finishedJobInfoTtl;
+
+        return this;
     }
 
     /**
@@ -149,10 +158,14 @@ public class HadoopConfiguration {
      *
      * @param extExecution {@code True} if tasks should be executed in an external process.
      * @see #isExternalExecution()
+     * @return {@code this} for chaining.
      */
     // TODO: IGNITE-404: Uncomment when fixed.
-//    public void setExternalExecution(boolean extExecution) {
+//
+//    public HadoopConfiguration setExternalExecution(boolean extExecution) {
 //        this.extExecution = extExecution;
+//
+//        return this;
 //    }
 
     /**
@@ -170,9 +183,12 @@ public class HadoopConfiguration {
      * configuration and current grid topology.
      *
      * @param planner Map-reduce planner.
+     * @return {@code this} for chaining.
      */
-    public void setMapReducePlanner(HadoopMapReducePlanner planner) {
+    public HadoopConfiguration setMapReducePlanner(HadoopMapReducePlanner planner) {
         this.planner = planner;
+
+        return this;
     }
 
     /**
@@ -199,9 +215,12 @@ public class HadoopConfiguration {
      * Set native library names. See {@link #getNativeLibraryNames()} for more information.
      *
      * @param libNames Native library names.
+     * @return {@code this} for chaining.
      */
-    public void setNativeLibraryNames(@Nullable String... libNames) {
+    public HadoopConfiguration setNativeLibraryNames(@Nullable String... libNames) {
         this.libNames = libNames;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/configuration/NearCacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/NearCacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/NearCacheConfiguration.java
index 3c59bd6..7c948dc 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/NearCacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/NearCacheConfiguration.java
@@ -17,7 +17,11 @@
 
 package org.apache.ignite.configuration;
 
+import javax.cache.configuration.Factory;
 import javax.cache.configuration.MutableConfiguration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.integration.CacheLoader;
+import javax.cache.integration.CacheWriter;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.eviction.EvictionPolicy;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -108,6 +112,52 @@ public class NearCacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     }
 
     /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setTypes(Class<K> keyType, Class<V> valueType) {
+        return (CacheConfiguration<K, V>)super.setTypes(keyType, valueType);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setCacheLoaderFactory(Factory<? extends CacheLoader<K, V>> factory) {
+        return (CacheConfiguration<K, V>)super.setCacheLoaderFactory(factory);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setCacheWriterFactory(
+        Factory<? extends CacheWriter<? super K, ? super V>> factory) {
+        return (CacheConfiguration<K, V>)super.setCacheWriterFactory(factory);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setExpiryPolicyFactory(Factory<? extends ExpiryPolicy> factory) {
+        return (CacheConfiguration<K, V>)super.setExpiryPolicyFactory(factory);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setReadThrough(boolean isReadThrough) {
+        return (CacheConfiguration<K, V>)super.setReadThrough(isReadThrough);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setWriteThrough(boolean isWriteThrough) {
+        return (CacheConfiguration<K, V>)super.setWriteThrough(isWriteThrough);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setStoreByValue(boolean isStoreByValue) {
+        return (CacheConfiguration<K, V>)super.setStoreByValue(isStoreByValue);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setStatisticsEnabled(boolean enabled) {
+        return (CacheConfiguration<K, V>)super.setStatisticsEnabled(enabled);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheConfiguration<K, V> setManagementEnabled(boolean enabled) {
+        return (CacheConfiguration<K, V>)super.setManagementEnabled(enabled);
+    }
+
+    /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(NearCacheConfiguration.class, this, super.toString());
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
index 440e00a..0063afc 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/TransactionConfiguration.java
@@ -113,10 +113,13 @@ public class TransactionConfiguration implements Serializable {
      * @param txSerEnabled Flag to enable/disable serializable cache transactions.
 
      * @deprecated This method has no effect, {@link TransactionIsolation#SERIALIZABLE} isolation is always enabled.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setTxSerializableEnabled(boolean txSerEnabled) {
+    public TransactionConfiguration setTxSerializableEnabled(boolean txSerEnabled) {
         this.txSerEnabled = txSerEnabled;
+
+        return this;
     }
 
     /**
@@ -134,9 +137,12 @@ public class TransactionConfiguration implements Serializable {
      * Sets default transaction concurrency.
      *
      * @param dfltConcurrency Default cache transaction concurrency.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultTxConcurrency(TransactionConcurrency dfltConcurrency) {
+    public TransactionConfiguration setDefaultTxConcurrency(TransactionConcurrency dfltConcurrency) {
         this.dfltConcurrency = dfltConcurrency;
+
+        return this;
     }
 
     /**
@@ -154,9 +160,12 @@ public class TransactionConfiguration implements Serializable {
      * Sets default transaction isolation.
      *
      * @param dfltIsolation Default cache transaction isolation.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultTxIsolation(TransactionIsolation dfltIsolation) {
+    public TransactionConfiguration setDefaultTxIsolation(TransactionIsolation dfltIsolation) {
         this.dfltIsolation = dfltIsolation;
+
+        return this;
     }
 
     /**
@@ -174,9 +183,12 @@ public class TransactionConfiguration implements Serializable {
      * #DFLT_TRANSACTION_TIMEOUT}.
      *
      * @param dfltTxTimeout Default transaction timeout.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultTxTimeout(long dfltTxTimeout) {
+    public TransactionConfiguration setDefaultTxTimeout(long dfltTxTimeout) {
         this.dfltTxTimeout = dfltTxTimeout;
+
+        return this;
     }
 
     /**
@@ -196,9 +208,12 @@ public class TransactionConfiguration implements Serializable {
      *
      * @param pessimisticTxLogSize Pessimistic transactions log size.
      * @see #getPessimisticTxLogSize()
+     * @return {@code this} for chaining.
      */
-    public void setPessimisticTxLogSize(int pessimisticTxLogSize) {
+    public TransactionConfiguration setPessimisticTxLogSize(int pessimisticTxLogSize) {
         this.pessimisticTxLogSize = pessimisticTxLogSize;
+
+        return this;
     }
 
     /**
@@ -217,9 +232,12 @@ public class TransactionConfiguration implements Serializable {
      *
      * @param pessimisticTxLogLinger Pessimistic log cleanup delay.
      * @see #getPessimisticTxLogLinger()
+     * @return {@code this} for chaining.
      */
-    public void setPessimisticTxLogLinger(int pessimisticTxLogLinger) {
+    public TransactionConfiguration setPessimisticTxLogLinger(int pessimisticTxLogLinger) {
         this.pessimisticTxLogLinger = pessimisticTxLogLinger;
+
+        return this;
     }
 
     /**
@@ -239,10 +257,13 @@ public class TransactionConfiguration implements Serializable {
      * @param tmLookupClsName Name of class implementing GridCacheTmLookup interface that is used to
      *      receive JTA transaction manager.
      * @deprecated Use {@link #setTxManagerFactory(Factory)} instead.
+     * @return {@code this} for chaining.
      */
     @Deprecated
-    public void setTxManagerLookupClassName(String tmLookupClsName) {
+    public TransactionConfiguration setTxManagerLookupClassName(String tmLookupClsName) {
         this.tmLookupClsName = tmLookupClsName;
+
+        return this;
     }
 
     /**
@@ -286,9 +307,12 @@ public class TransactionConfiguration implements Serializable {
      * @param factory Transaction manager factory.
      * @param <T> Instance of {@code javax.transaction.TransactionManager}.
      * @see #setUseJtaSynchronization(boolean)
+     * @return {@code this} for chaining.
      */
-    public <T> void setTxManagerFactory(Factory<T> factory) {
+    public <T> TransactionConfiguration setTxManagerFactory(Factory<T> factory) {
         txManagerFactory = factory;
+
+        return this;
     }
 
     /**
@@ -309,8 +333,11 @@ public class TransactionConfiguration implements Serializable {
      * @param useJtaSync Whether to use JTA {@code javax.transaction.Synchronization}
      *      instead of {@code javax.transaction.xa.XAResource}.
      * @see #setTxManagerFactory(Factory)
+     * @return {@code this} for chaining.
      */
-    public void setUseJtaSynchronization(boolean useJtaSync) {
+    public TransactionConfiguration setUseJtaSynchronization(boolean useJtaSync) {
         this.useJtaSync = useJtaSync;
+
+        return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/igfs/IgfsGroupDataBlocksKeyMapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsGroupDataBlocksKeyMapper.java b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsGroupDataBlocksKeyMapper.java
index 09143d4..7019c57 100644
--- a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsGroupDataBlocksKeyMapper.java
+++ b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsGroupDataBlocksKeyMapper.java
@@ -124,9 +124,12 @@ public class IgfsGroupDataBlocksKeyMapper extends GridCacheDefaultAffinityKeyMap
      * Set group size. See {@link #getGroupSize()} for more information.
      *
      * @param grpSize Group size.
+     * @return {@code this} for chaining.
      */
-    public void setGroupSize(int grpSize) {
+    public IgfsGroupDataBlocksKeyMapper setGroupSize(int grpSize) {
         this.grpSize = grpSize;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/igfs/IgfsIpcEndpointConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsIpcEndpointConfiguration.java b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsIpcEndpointConfiguration.java
index 1c68d0f..b79f68e 100644
--- a/modules/core/src/main/java/org/apache/ignite/igfs/IgfsIpcEndpointConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/igfs/IgfsIpcEndpointConfiguration.java
@@ -113,9 +113,12 @@ public class IgfsIpcEndpointConfiguration {
      * Defaults to {@link #DFLT_TYPE}.
      *
      * @param type Endpoint type.
+     * @return {@code this} for chaining.
      */
-    public void setType(IgfsIpcEndpointType type) {
+    public IgfsIpcEndpointConfiguration setType(IgfsIpcEndpointType type) {
         this.type = type;
+
+        return this;
     }
 
     /**
@@ -147,9 +150,12 @@ public class IgfsIpcEndpointConfiguration {
      * Defaults to {@link #DFLT_HOST}.
      *
      * @param host Host.
+     * @return {@code this} for chaining.
      */
-    public void setHost(String host) {
+    public IgfsIpcEndpointConfiguration setHost(String host) {
         this.host = host;
+
+        return this;
     }
 
     /**
@@ -179,9 +185,12 @@ public class IgfsIpcEndpointConfiguration {
      * Defaults to {@link #DFLT_PORT}.
      *
      * @param port Port.
+     * @return {@code this} for chaining.
      */
-    public void setPort(int port) {
+    public IgfsIpcEndpointConfiguration setPort(int port) {
         this.port = port;
+
+        return this;
     }
 
     /**
@@ -205,9 +214,12 @@ public class IgfsIpcEndpointConfiguration {
      * Defaults to {@link #DFLT_MEM_SIZE}.
      *
      * @param memSize Shared memory size.
+     * @return {@code this} for chaining.
      */
-    public void setMemorySize(int memSize) {
+    public IgfsIpcEndpointConfiguration setMemorySize(int memSize) {
         this.memSize = memSize;
+
+        return this;
     }
 
     /**
@@ -237,9 +249,12 @@ public class IgfsIpcEndpointConfiguration {
      * Defaults to {@link #DFLT_TOKEN_DIR_PATH}.
      *
      * @param tokenDirPath Directory where shared memory tokens are stored.
+     * @return {@code this} for chaining.
      */
-    public void setTokenDirectoryPath(String tokenDirPath) {
+    public IgfsIpcEndpointConfiguration setTokenDirectoryPath(String tokenDirPath) {
         this.tokenDirPath = tokenDirPath;
+
+        return this;
     }
 
     /**
@@ -259,9 +274,12 @@ public class IgfsIpcEndpointConfiguration {
      * See {@link #getThreadCount()} for more information.
      *
      * @param threadCnt Number of threads used by this endpoint to process incoming requests.
+     * @return {@code this} for chaining.
      */
-    public void setThreadCount(int threadCnt) {
+    public IgfsIpcEndpointConfiguration setThreadCount(int threadCnt) {
         this.threadCnt = threadCnt;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java
index cac1bb3..a54f882 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java
@@ -234,18 +234,24 @@ public class GridClientConfiguration {
      * Sets list of servers this client should connect to.
      *
      * @param srvs List of servers.
+     * @return {@code this} for chaining.
      */
-    public void setServers(Collection<String> srvs) {
+    public GridClientConfiguration setServers(Collection<String> srvs) {
         this.srvs = srvs != null ? srvs : Collections.<String>emptySet();
+
+        return this;
     }
 
     /**
      * Sets list of routers this client should connect to.
      *
      * @param routers List of routers.
+     * @return {@code this} for chaining.
      */
-    public void setRouters(Collection<String> routers) {
+    public GridClientConfiguration setRouters(Collection<String> routers) {
         this.routers = routers != null ? routers : Collections.<String>emptySet();
+
+        return this;
     }
 
     /**
@@ -264,9 +270,12 @@ public class GridClientConfiguration {
      *
      * @param proto Protocol type.
      * @see GridClientProtocol
+     * @return {@code this} for chaining.
      */
-    public void setProtocol(GridClientProtocol proto) {
+    public GridClientConfiguration setProtocol(GridClientProtocol proto) {
         this.proto = proto;
+
+        return this;
     }
 
     /**
@@ -296,18 +305,24 @@ public class GridClientConfiguration {
      * Sets whether {@code TCP_NODELAY} flag should be set on underlying socket connections.
      *
      * @param tcpNoDelay {@code True} if flag should be set.
+     * @return {@code this} for chaining.
      */
-    public void setTcpNoDelay(boolean tcpNoDelay) {
+    public GridClientConfiguration setTcpNoDelay(boolean tcpNoDelay) {
         this.tcpNoDelay = tcpNoDelay;
+
+        return this;
     }
 
     /**
      * Sets timeout for socket connect operation.
      *
      * @param connectTimeout Connect timeout in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setConnectTimeout(int connectTimeout) {
+    public GridClientConfiguration setConnectTimeout(int connectTimeout) {
         this.connectTimeout = connectTimeout;
+
+        return this;
     }
 
     /**
@@ -325,9 +340,12 @@ public class GridClientConfiguration {
      * Sets SSL context factory that will be used for creation of secure connections.
      *
      * @param sslCtxFactory Context factory.
+     * @return {@code this} for chaining.
      */
-    public void setSslContextFactory(GridSslContextFactory sslCtxFactory) {
+    public GridClientConfiguration setSslContextFactory(GridSslContextFactory sslCtxFactory) {
         this.sslCtxFactory = sslCtxFactory;
+
+        return this;
     }
 
     /**
@@ -345,9 +363,12 @@ public class GridClientConfiguration {
      * Sets default compute balancer.
      *
      * @param balancer Balancer to use.
+     * @return {@code this} for chaining.
      */
-    public void setBalancer(GridClientLoadBalancer balancer) {
+    public GridClientConfiguration setBalancer(GridClientLoadBalancer balancer) {
         this.balancer = balancer;
+
+        return this;
     }
 
     /**
@@ -363,9 +384,12 @@ public class GridClientConfiguration {
      * Sets client credentials provider used in authentication process.
      *
      * @param credProvider Client credentials provider.
+     * @return {@code this} for chaining.
      */
-    public void setSecurityCredentialsProvider(SecurityCredentialsProvider credProvider) {
+    public GridClientConfiguration setSecurityCredentialsProvider(SecurityCredentialsProvider credProvider) {
         this.credProvider = credProvider;
+
+        return this;
     }
 
     /**
@@ -381,12 +405,15 @@ public class GridClientConfiguration {
      * Sets data configurations.
      *
      * @param dataCfgs Data configurations.
+     * @return {@code this} for chaining.
      */
-    public void setDataConfigurations(Collection<? extends GridClientDataConfiguration> dataCfgs) {
+    public GridClientConfiguration setDataConfigurations(Collection<? extends GridClientDataConfiguration> dataCfgs) {
         this.dataCfgs = U.newHashMap(dataCfgs.size());
 
         for (GridClientDataConfiguration dataCfg : dataCfgs)
             this.dataCfgs.put(dataCfg.getName(), new GridClientDataConfiguration(dataCfg));
+
+        return this;
     }
 
     /**
@@ -403,9 +430,12 @@ public class GridClientConfiguration {
      * Sets flag indicating whether node and cache metrics should be cached by client.
      *
      * @param enableMetricsCache {@code True} if cache should be enabled.
+     * @return {@code this} for chaining.
      */
-    public void setEnableMetricsCache(boolean enableMetricsCache) {
+    public GridClientConfiguration setEnableMetricsCache(boolean enableMetricsCache) {
         this.enableMetricsCache = enableMetricsCache;
+
+        return this;
     }
 
     /**
@@ -430,9 +460,12 @@ public class GridClientConfiguration {
      * Sets flag indicating whether node attributes should be cached by client.
      *
      * @param enableAttrsCache {@code True} if cache should be enabled.
+     * @return {@code this} for chaining.
      */
-    public void setEnableAttributesCache(boolean enableAttrsCache) {
+    public GridClientConfiguration setEnableAttributesCache(boolean enableAttrsCache) {
         this.enableAttrsCache = enableAttrsCache;
+
+        return this;
     }
 
     /**
@@ -457,9 +490,12 @@ public class GridClientConfiguration {
      * Sets flag indicating whether node metrics should be fetched by client automatically.
      *
      * @param autoFetchMetrics {@code True} if metrics should be fetched.
+     * @return {@code this} for chaining.
      */
-    public void setAutoFetchMetrics(boolean autoFetchMetrics) {
+    public GridClientConfiguration setAutoFetchMetrics(boolean autoFetchMetrics) {
         this.autoFetchMetrics = autoFetchMetrics;
+
+        return this;
     }
 
     /**
@@ -483,9 +519,12 @@ public class GridClientConfiguration {
      * Sets flag indicating whether node attributes should be fetched by client automatically.
      *
      * @param autoFetchAttrs {@code True} if attributes should be fetched.
+     * @return {@code this} for chaining.
      */
-    public void setAutoFetchAttributes(boolean autoFetchAttrs) {
+    public GridClientConfiguration setAutoFetchAttributes(boolean autoFetchAttrs) {
         this.autoFetchAttrs = autoFetchAttrs;
+
+        return this;
     }
 
     /**
@@ -516,9 +555,12 @@ public class GridClientConfiguration {
      * will be refreshed every {@code topRefreshFreq} milliseconds.
      *
      * @param topRefreshFreq Topology refresh frequency in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setTopologyRefreshFrequency(long topRefreshFreq) {
+    public GridClientConfiguration setTopologyRefreshFrequency(long topRefreshFreq) {
         this.topRefreshFreq = topRefreshFreq;
+
+        return this;
     }
 
     /**
@@ -535,9 +577,12 @@ public class GridClientConfiguration {
      * Sets maximum time in milliseconds which connection can be idle before it is closed by client.
      *
      * @param maxConnIdleTime Maximum time of connection idleness in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setMaxConnectionIdleTime(long maxConnIdleTime) {
+    public GridClientConfiguration setMaxConnectionIdleTime(long maxConnIdleTime) {
         this.maxConnIdleTime = maxConnIdleTime;
+
+        return this;
     }
 
     /**
@@ -557,9 +602,12 @@ public class GridClientConfiguration {
      * Sets ping interval in milliseconds.
      *
      * @param pingInterval Ping interval in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setPingInterval(long pingInterval) {
+    public GridClientConfiguration setPingInterval(long pingInterval) {
         this.pingInterval = pingInterval;
+
+        return this;
     }
 
     /**
@@ -580,9 +628,12 @@ public class GridClientConfiguration {
      * Sets ping timeout in milliseconds.
      *
      * @param pingTimeout Ping interval in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setPingTimeout(long pingTimeout) {
+    public GridClientConfiguration setPingTimeout(long pingTimeout) {
         this.pingTimeout = pingTimeout;
+
+        return this;
     }
 
     /**
@@ -603,9 +654,12 @@ public class GridClientConfiguration {
      * Sets executor service.
      *
      * @param executor Executor service to use in client.
+     * @return {@code this} for chaining.
      */
-    public void setExecutorService(ExecutorService executor) {
+    public GridClientConfiguration setExecutorService(ExecutorService executor) {
         this.executor = executor;
+
+        return this;
     }
 
     /**
@@ -628,9 +682,12 @@ public class GridClientConfiguration {
      * Sets the marshaller to use for communication.
      *
      * @param marshaller A marshaller to use.
+     * @return {@code this} for chaining.
      */
-    public void setMarshaller(GridClientMarshaller marshaller) {
+    public GridClientConfiguration setMarshaller(GridClientMarshaller marshaller) {
         this.marshaller = marshaller;
+
+        return this;
     }
 
     /**
@@ -836,9 +893,12 @@ public class GridClientConfiguration {
      * Set the daemon flag value. Communication threads will be created as daemons if this flag is set.
      *
      * @param daemon Daemon flag.
+     * @return {@code this} for chaining.
      */
-    public void setDaemon(boolean daemon) {
+    public GridClientConfiguration setDaemon(boolean daemon) {
         this.daemon = daemon;
+
+        return this;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientDataConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientDataConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientDataConfiguration.java
index 322bccd..9a52554 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientDataConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientDataConfiguration.java
@@ -65,9 +65,12 @@ public class GridClientDataConfiguration {
      * Sets grid cache name for this configuration.
      *
      * @param name Cache name.
+     * @return {@code this} for chaining.
      */
-    public void setName(String name) {
+    public GridClientDataConfiguration setName(String name) {
         this.name = name;
+
+        return this;
     }
 
     /**
@@ -93,9 +96,12 @@ public class GridClientDataConfiguration {
      * work with remote partitioned caches.
      *
      * @param affinity Client data affinity.
+     * @return {@code this} for chaining.
      */
-    public void setAffinity(GridClientDataAffinity affinity) {
+    public GridClientDataConfiguration setAffinity(GridClientDataAffinity affinity) {
         this.affinity = affinity;
+
+        return this;
     }
 
     /**
@@ -112,8 +118,11 @@ public class GridClientDataConfiguration {
      * Sets balancer for pinned mode for this configuration.
      *
      * @param balancer Balancer that will be used in pinned mode.
+     * @return {@code this} for chaining.
      */
-    public void setBalancer(GridClientLoadBalancer balancer) {
+    public GridClientDataConfiguration setBalancer(GridClientLoadBalancer balancer) {
         this.balancer = balancer;
+
+        return this;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientPartitionAffinity.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientPartitionAffinity.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientPartitionAffinity.java
index 53a49c6..21f4abe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientPartitionAffinity.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientPartitionAffinity.java
@@ -143,9 +143,12 @@ public class GridClientPartitionAffinity implements GridClientDataAffinity, Grid
      * Sets total number of partitions.
      *
      * @param parts Total number of partitions.
+     * @return {@code this} for chaining.
      */
-    public void setPartitions(int parts) {
+    public GridClientPartitionAffinity setPartitions(int parts) {
         this.parts = parts;
+
+        return this;
     }
 
     /**
@@ -175,9 +178,12 @@ public class GridClientPartitionAffinity implements GridClientDataAffinity, Grid
      * repartitioning.
      *
      * @param hashIdRslvr Hash ID resolver.
+     * @return {@code this} for chaining.
      */
-    public void setHashIdResolver(HashIdResolver hashIdRslvr) {
+    public GridClientPartitionAffinity setHashIdResolver(HashIdResolver hashIdRslvr) {
         this.hashIdRslvr = hashIdRslvr;
+
+        return this;
     }
 
     /**
@@ -201,9 +207,12 @@ public class GridClientPartitionAffinity implements GridClientDataAffinity, Grid
      * Note that {@code excludeNeighbors} parameter is ignored if {@code backupFilter} is set.
      *
      * @param backupFilter Optional backup filter.
+     * @return {@code this} for chaining.
      */
-    public void setBackupFilter(GridClientPredicate<UUID> backupFilter) {
+    public GridClientPartitionAffinity setBackupFilter(GridClientPredicate<UUID> backupFilter) {
         this.backupFilter = backupFilter;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/client/balancer/GridClientBalancerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/balancer/GridClientBalancerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/client/balancer/GridClientBalancerAdapter.java
index 3eb7e1d..75d4163 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/balancer/GridClientBalancerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/balancer/GridClientBalancerAdapter.java
@@ -58,9 +58,12 @@ public abstract class GridClientBalancerAdapter implements GridClientLoadBalance
      * Sets prefer direct nodes.
      *
      * @param preferDirectNodes Prefer direct nodes.
+     * @return {@code this} for chaining.
      */
-    public void setPreferDirectNodes(boolean preferDirectNodes) {
+    public GridClientBalancerAdapter setPreferDirectNodes(boolean preferDirectNodes) {
         this.preferDirectNodes = preferDirectNodes;
+
+        return this;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/client/router/GridTcpRouterConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/router/GridTcpRouterConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/client/router/GridTcpRouterConfiguration.java
index 191f4ac..e37ffea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/router/GridTcpRouterConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/router/GridTcpRouterConfiguration.java
@@ -207,18 +207,24 @@ public class GridTcpRouterConfiguration {
      * Sets host for router.
      *
      * @param host Host.
+     * @return {@code this} for chaining.
      */
-    public void setHost(String host) {
+    public GridTcpRouterConfiguration setHost(String host) {
         this.host = host;
+
+        return this;
     }
 
     /**
      * Sets port for router.
      *
      * @param port Port.
+     * @return {@code this} for chaining.
      */
-    public void setPort(int port) {
+    public GridTcpRouterConfiguration setPort(int port) {
         this.port = port;
+
+        return this;
     }
 
     /**
@@ -228,11 +234,14 @@ public class GridTcpRouterConfiguration {
      *
      * @param portRange Port range.
      * @see #DFLT_PORT_RANGE
+     * @return {@code this} for chaining.
      */
-    public void setPortRange(int portRange) {
+    public GridTcpRouterConfiguration setPortRange(int portRange) {
         A.ensure(portRange >= 0, "portRange >= 0");
 
         this.portRange = portRange;
+
+        return this;
     }
 
     /**
@@ -240,18 +249,24 @@ public class GridTcpRouterConfiguration {
      * for accepted client connections.
      *
      * @param noDelay No delay.
+     * @return {@code this} for chaining.
      */
-    public void setNoDelay(boolean noDelay) {
+    public GridTcpRouterConfiguration setNoDelay(boolean noDelay) {
         this.noDelay = noDelay;
+
+        return this;
     }
 
     /**
      * Sets idle timeout.
      *
      * @param idleTimeout Idle timeout in milliseconds.
+     * @return {@code this} for chaining.
      */
-    public void setIdleTimeout(long idleTimeout) {
+    public GridTcpRouterConfiguration setIdleTimeout(long idleTimeout) {
         this.idleTimeout = idleTimeout;
+
+        return this;
     }
 
     /**
@@ -259,9 +274,12 @@ public class GridTcpRouterConfiguration {
      * a valid SSL certificate which validity will be verified with trust manager.
      *
      * @param sslClientAuth Ssl client auth.
+     * @return {@code this} for chaining.
      */
-    public void setSslClientAuth(boolean sslClientAuth) {
+    public GridTcpRouterConfiguration setSslClientAuth(boolean sslClientAuth) {
         this.sslClientAuth = sslClientAuth;
+
+        return this;
     }
 
     /**
@@ -269,36 +287,48 @@ public class GridTcpRouterConfiguration {
      * of both rest binary server and out coming connections.
      *
      * @param sslCtxFactory Ssl context factory.
+     * @return {@code this} for chaining.
      */
-    public void setSslContextFactory(GridSslContextFactory sslCtxFactory) {
+    public GridTcpRouterConfiguration setSslContextFactory(GridSslContextFactory sslCtxFactory) {
         this.sslCtxFactory = sslCtxFactory;
+
+        return this;
     }
 
     /**
      * Sets list of server addresses where router's embedded client should connect.
      *
      * @param srvrs List of servers.
+     * @return {@code this} for chaining.
      */
-    public void setServers(Collection<String> srvrs) {
+    public GridTcpRouterConfiguration setServers(Collection<String> srvrs) {
         this.srvrs = srvrs;
+
+        return this;
     }
 
     /**
      * Sets logger for the router instance.
      *
      * @param log Logger.
+     * @return {@code this} for chaining.
      */
-    public void setLogger(IgniteLogger log) {
+    public GridTcpRouterConfiguration setLogger(IgniteLogger log) {
         this.log = log;
+
+        return this;
     }
 
     /**
      * Sets credentials provider for grid access.
      *
      * @param credsProvider Credentials provider.
+     * @return {@code this} for chaining.
      */
-    public void setSecurityCredentialsProvider(SecurityCredentialsProvider credsProvider) {
+    public GridTcpRouterConfiguration setSecurityCredentialsProvider(SecurityCredentialsProvider credsProvider) {
         this.credsProvider = credsProvider;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcSqlFieldsQuery.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcSqlFieldsQuery.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcSqlFieldsQuery.java
index 19dedf6..3d4eaba 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcSqlFieldsQuery.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcSqlFieldsQuery.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.jdbc2;
 
+import java.util.concurrent.TimeUnit;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 
 /**
@@ -45,4 +46,60 @@ public final class JdbcSqlFieldsQuery extends SqlFieldsQuery {
     public boolean isQuery() {
         return isQry;
     }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setSql(String sql) {
+        super.setSql(sql);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setArgs(Object... args) {
+        super.setArgs(args);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setTimeout(int timeout, TimeUnit timeUnit) {
+        super.setTimeout(timeout, timeUnit);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setCollocated(boolean collocated) {
+        super.setCollocated(collocated);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setEnforceJoinOrder(boolean enforceJoinOrder) {
+        super.setEnforceJoinOrder(enforceJoinOrder);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setDistributedJoins(boolean distributedJoins) {
+        super.setDistributedJoins(distributedJoins);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setPageSize(int pageSize) {
+        super.setPageSize(pageSize);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public JdbcSqlFieldsQuery setLocal(boolean loc) {
+        super.setLocal(loc);
+
+        return this;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index a7d38a7..966fa8e 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -120,6 +120,7 @@ import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.lifecycle.LifecycleAware;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerUtils;
+import org.apache.ignite.mxbean.IgniteMBeanAware;
 import org.apache.ignite.spi.IgniteNodeValidationResult;
 import org.apache.ignite.spi.discovery.DiscoveryDataBag;
 import org.apache.ignite.spi.discovery.DiscoveryDataBag.GridDiscoveryData;
@@ -3560,15 +3561,15 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     /**
      * Registers MBean for cache components.
      *
-     * @param o Cache component.
+     * @param obj Cache component.
      * @param cacheName Cache name.
      * @param near Near flag.
      * @throws IgniteCheckedException If registration failed.
      */
     @SuppressWarnings("unchecked")
-    private void registerMbean(Object o, @Nullable String cacheName, boolean near)
+    private void registerMbean(Object obj, @Nullable String cacheName, boolean near)
         throws IgniteCheckedException {
-        assert o != null;
+        assert obj != null;
 
         MBeanServer srvr = ctx.config().getMBeanServer();
 
@@ -3578,14 +3579,16 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
         cacheName = near ? cacheName + "-near" : cacheName;
 
-        for (Class<?> itf : o.getClass().getInterfaces()) {
+        final Object mbeanImpl = (obj instanceof IgniteMBeanAware) ? ((IgniteMBeanAware)obj).getMBean() : obj;
+
+        for (Class<?> itf : mbeanImpl.getClass().getInterfaces()) {
             if (itf.getName().endsWith("MBean") || itf.getName().endsWith("MXBean")) {
                 try {
-                    U.registerCacheMBean(srvr, ctx.igniteInstanceName(), cacheName, o.getClass().getName(), o,
+                    U.registerCacheMBean(srvr, ctx.igniteInstanceName(), cacheName, obj.getClass().getName(), mbeanImpl,
                         (Class<Object>)itf);
                 }
                 catch (JMException e) {
-                    throw new IgniteCheckedException("Failed to register MBean for component: " + o, e);
+                    throw new IgniteCheckedException("Failed to register MBean for component: " + obj, e);
                 }
 
                 break;
@@ -3611,16 +3614,24 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
         cacheName = near ? cacheName + "-near" : cacheName;
 
-        for (Class<?> itf : o.getClass().getInterfaces()) {
-            if (itf.getName().endsWith("MBean") || itf.getName().endsWith("MXBean")) {
-                try {
-                    srvr.unregisterMBean(U.makeCacheMBeanName(ctx.igniteInstanceName(), cacheName, o.getClass().getName()));
-                }
-                catch (JMException e) {
-                    U.error(log, "Failed to unregister MBean for component: " + o, e);
+        boolean needToUnregister = o instanceof IgniteMBeanAware;
+
+        if (!needToUnregister) {
+            for (Class<?> itf : o.getClass().getInterfaces()) {
+                if (itf.getName().endsWith("MBean") || itf.getName().endsWith("MXBean")) {
+                    needToUnregister = true;
+
+                    break;
                 }
+            }
+        }
 
-                break;
+        if (needToUnregister) {
+            try {
+                srvr.unregisterMBean(U.makeCacheMBeanName(ctx.igniteInstanceName(), cacheName, o.getClass().getName()));
+            }
+            catch (JMException e) {
+                U.error(log, "Failed to unregister MBean for component: " + o, e);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
index 8448733..a5d793d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.platform.dotnet;
 
+import java.util.List;
 import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.PlatformConfigurationEx;
 import org.apache.ignite.internal.processors.platform.cache.PlatformCacheExtension;
@@ -25,6 +26,7 @@ import org.apache.ignite.internal.processors.platform.entityframework.PlatformDo
 import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
 import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
 import org.apache.ignite.internal.processors.platform.websession.PlatformDotNetSessionCacheExtension;
+import org.apache.ignite.platform.dotnet.PlatformDotNetBinaryConfiguration;
 import org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration;
 import org.jetbrains.annotations.Nullable;
 
@@ -98,11 +100,28 @@ public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration i
         return logger;
     }
 
+    /** {@inheritDoc} */
+    @Override public PlatformDotNetConfigurationEx setBinaryConfiguration(PlatformDotNetBinaryConfiguration binaryCfg) {
+        super.setBinaryConfiguration(binaryCfg);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public PlatformDotNetConfigurationEx setAssemblies(List<String> assemblies) {
+        super.setAssemblies(assemblies);
+
+        return this;
+    }
+
     /**
      * @param warnings Warnings.
+     * @return {@code this} for chaining.
      */
-    public void warnings(Collection<String> warnings) {
+    public PlatformDotNetConfigurationEx warnings(Collection<String> warnings) {
         this.warnings = warnings;
+
+        return this;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
index b2926e3..5f73f79 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
@@ -62,7 +62,6 @@ import org.apache.ignite.plugin.platform.PlatformPluginConfigurationClosure;
 import org.apache.ignite.plugin.platform.PlatformPluginConfigurationClosureFactory;
 import org.apache.ignite.spi.communication.CommunicationSpi;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
-import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpiMBean;
 import org.apache.ignite.spi.discovery.DiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -1014,7 +1013,7 @@ public class PlatformConfigurationUtils {
 
         if (comm instanceof TcpCommunicationSpi) {
             w.writeBoolean(true);
-            TcpCommunicationSpiMBean tcp = (TcpCommunicationSpiMBean) comm;
+            TcpCommunicationSpi tcp = (TcpCommunicationSpi) comm;
 
             w.writeInt(tcp.getAckSendThreshold());
             w.writeLong(tcp.getConnectTimeout());

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
index 6d57864..e61e8dc 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
@@ -124,18 +124,24 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
      * Sets whether marshaller should require {@link Serializable} interface or not.
      *
      * @param requireSer Whether to require {@link Serializable}.
+     * @return {@code this} for chaining.
      */
-    public void setRequireSerializable(boolean requireSer) {
+    public OptimizedMarshaller setRequireSerializable(boolean requireSer) {
         this.requireSer = requireSer;
+
+        return this;
     }
 
     /**
      * Sets ID mapper.
      *
      * @param mapper ID mapper.
+     * @return {@code this} for chaining.
      */
-    public void setIdMapper(OptimizedMarshallerIdMapper mapper) {
+    public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) {
         this.mapper = mapper;
+
+        return this;
     }
 
     /**
@@ -152,9 +158,12 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
      * different threads which will lead to more frequent context switching.
      *
      * @param poolSize Streams pool size. If {@code 0}, pool is not used.
+     * @return {@code this} for chaining.
      */
-    public void setPoolSize(int poolSize) {
+    public OptimizedMarshaller setPoolSize(int poolSize) {
         OptimizedObjectStreamRegistry.poolSize(poolSize);
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMBeanAware.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMBeanAware.java b/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMBeanAware.java
new file mode 100644
index 0000000..ef917b5
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/IgniteMBeanAware.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.mxbean;
+
+/**
+ * MBean-aware interface.
+ */
+public interface IgniteMBeanAware {
+    /**
+     * @return MBean for this object.
+     */
+    Object getMBean();
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.java
index f9f457d..f51a41d 100644
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.java
+++ b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetAffinityFunction.java
@@ -64,9 +64,12 @@ public class PlatformDotNetAffinityFunction implements AffinityFunction, Externa
      * Sets .NET type name.
      *
      * @param typName .NET type name.
+     * @return {@code this} for chaining.
      */
-    public void setTypeName(String typName) {
+    public PlatformDotNetAffinityFunction setTypeName(String typName) {
         this.typName = typName;
+
+        return this;
     }
 
     /**
@@ -82,9 +85,12 @@ public class PlatformDotNetAffinityFunction implements AffinityFunction, Externa
      * Set properties.
      *
      * @param props Properties.
+     * @return {@code this} for chaining.
      */
-    public void setProperties(Map<String, ?> props) {
+    public PlatformDotNetAffinityFunction setProperties(Map<String, ?> props) {
         this.props = props;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.java
index 7c5da2f..876a58c 100644
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryConfiguration.java
@@ -81,9 +81,13 @@ public class PlatformDotNetBinaryConfiguration {
 
     /**
      * @param typesCfg New type cfgs.
+     * @return {@code this} for chaining.
      */
-    public void setTypesConfiguration(Collection<PlatformDotNetBinaryTypeConfiguration> typesCfg) {
+    public PlatformDotNetBinaryConfiguration setTypesConfiguration(
+        Collection<PlatformDotNetBinaryTypeConfiguration> typesCfg) {
         this.typesCfg = typesCfg;
+
+        return this;
     }
 
     /**
@@ -95,9 +99,12 @@ public class PlatformDotNetBinaryConfiguration {
 
     /**
      * @param types New types.
+     * @return {@code this} for chaining.
      */
-    public void setTypes(Collection<String> types) {
+    public PlatformDotNetBinaryConfiguration setTypes(Collection<String> types) {
         this.types = types;
+
+        return this;
     }
 
     /**
@@ -109,9 +116,12 @@ public class PlatformDotNetBinaryConfiguration {
 
     /**
      * @param dfltNameMapper New default name mapper.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultNameMapper(String dfltNameMapper) {
+    public PlatformDotNetBinaryConfiguration setDefaultNameMapper(String dfltNameMapper) {
         this.dfltNameMapper = dfltNameMapper;
+
+        return this;
     }
 
     /**
@@ -123,9 +133,12 @@ public class PlatformDotNetBinaryConfiguration {
 
     /**
      * @param dfltIdMapper New default id mapper.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultIdMapper(String dfltIdMapper) {
+    public PlatformDotNetBinaryConfiguration setDefaultIdMapper(String dfltIdMapper) {
         this.dfltIdMapper = dfltIdMapper;
+
+        return this;
     }
 
     /**
@@ -137,9 +150,12 @@ public class PlatformDotNetBinaryConfiguration {
 
     /**
      * @param dfltSerializer New default serializer.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultSerializer(String dfltSerializer) {
+    public PlatformDotNetBinaryConfiguration setDefaultSerializer(String dfltSerializer) {
         this.dfltSerializer = dfltSerializer;
+
+        return this;
     }
 
     /**
@@ -158,9 +174,12 @@ public class PlatformDotNetBinaryConfiguration {
      * {@link PlatformDotNetBinaryTypeConfiguration#setKeepDeserialized(Boolean)}.
      *
      * @param keepDeserialized Keep deserialized flag.
+     * @return {@code this} for chaining.
      */
-    public void setDefaultKeepDeserialized(boolean keepDeserialized) {
+    public PlatformDotNetBinaryConfiguration setDefaultKeepDeserialized(boolean keepDeserialized) {
         this.dfltKeepDeserialized = keepDeserialized;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.java
index cae5760..1949f71 100644
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetBinaryTypeConfiguration.java
@@ -75,9 +75,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
 
     /**
      * @param typeName New type name.
+     * @return {@code this} for chaining.
      */
-    public void setTypeName(String typeName) {
+    public PlatformDotNetBinaryTypeConfiguration setTypeName(String typeName) {
         this.typeName = typeName;
+
+        return this;
     }
 
     /**
@@ -89,9 +92,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
 
     /**
      * @param nameMapper New name mapper.
+     * @return {@code this} for chaining.
      */
-    public void setNameMapper(String nameMapper) {
+    public PlatformDotNetBinaryTypeConfiguration setNameMapper(String nameMapper) {
         this.nameMapper = nameMapper;
+
+        return this;
     }
 
     /**
@@ -103,9 +109,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
 
     /**
      * @param idMapper New id mapper.
+     * @return {@code this} for chaining.
      */
-    public void setIdMapper(String idMapper) {
+    public PlatformDotNetBinaryTypeConfiguration setIdMapper(String idMapper) {
         this.idMapper = idMapper;
+
+        return this;
     }
 
     /**
@@ -117,9 +126,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
 
     /**
      * @param serializer New serializer.
+     * @return {@code this} for chaining.
      */
-    public void setSerializer(String serializer) {
+    public PlatformDotNetBinaryTypeConfiguration setSerializer(String serializer) {
         this.serializer = serializer;
+
+        return this;
     }
 
     /**
@@ -131,9 +143,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
 
     /**
      * @param affinityKeyFieldName Affinity key field name.
+     * @return {@code this} for chaining.
      */
-    public void setAffinityKeyFieldName(String affinityKeyFieldName) {
+    public PlatformDotNetBinaryTypeConfiguration setAffinityKeyFieldName(String affinityKeyFieldName) {
         this.affinityKeyFieldName = affinityKeyFieldName;
+
+        return this;
     }
 
     /**
@@ -163,9 +178,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
      * {@link PlatformDotNetBinaryConfiguration#isDefaultKeepDeserialized()} will be used.
      *
      * @param keepDeserialized Keep deserialized flag.
+     * @return {@code this} for chaining.
      */
-    public void setKeepDeserialized(@Nullable Boolean keepDeserialized) {
+    public PlatformDotNetBinaryTypeConfiguration setKeepDeserialized(@Nullable Boolean keepDeserialized) {
         this.keepDeserialized = keepDeserialized;
+
+        return this;
     }
 
     /**
@@ -181,9 +199,12 @@ public class PlatformDotNetBinaryTypeConfiguration {
      * Sets whether this is enum type.
      *
      * @param isEnum {@code True} if enum.
+     * @return {@code this} for chaining.
      */
-    public void setEnum(boolean isEnum) {
+    public PlatformDotNetBinaryTypeConfiguration setEnum(boolean isEnum) {
         this.isEnum = isEnum;
+
+        return this;
     }
 
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
index d31ab95..1c058c1 100644
--- a/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
@@ -62,9 +62,12 @@ public class PlatformDotNetConfiguration implements PlatformConfiguration {
 
     /**
      * @param binaryCfg Configuration.
+     * @return {@code this} for chaining.
      */
-    public void setBinaryConfiguration(PlatformDotNetBinaryConfiguration binaryCfg) {
+    public PlatformDotNetConfiguration setBinaryConfiguration(PlatformDotNetBinaryConfiguration binaryCfg) {
         this.binaryCfg = binaryCfg;
+
+        return this;
     }
 
     /**
@@ -77,9 +80,12 @@ public class PlatformDotNetConfiguration implements PlatformConfiguration {
     /**
      *
      * @param assemblies Assemblies.
+     * @return {@code this} for chaining.
      */
-    public void setAssemblies(List<String> assemblies) {
+    public PlatformDotNetConfiguration setAssemblies(List<String> assemblies) {
         this.assemblies = assemblies;
+
+        return this;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java b/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java
index 6698dd4..0589b79 100644
--- a/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/services/ServiceConfiguration.java
@@ -94,9 +94,12 @@ public class ServiceConfiguration implements Serializable {
      * This parameter is mandatory when deploying a service.
      *
      * @param name Service name.
+     * @return {@code this} for chaining.
      */
-    public void setName(String name) {
+    public ServiceConfiguration setName(String name) {
         this.name = name;
+
+        return this;
     }
 
     /**
@@ -116,9 +119,12 @@ public class ServiceConfiguration implements Serializable {
      * This parameter is mandatory when deploying a service.
      *
      * @param svc Service instance.
+     * @return {@code this} for chaining.
      */
-    public void setService(Service svc) {
+    public ServiceConfiguration setService(Service svc) {
         this.svc = svc;
+
+        return this;
     }
 
     /**
@@ -138,9 +144,12 @@ public class ServiceConfiguration implements Serializable {
      * At least one of {@code getTotalCount()} or {@link #getMaxPerNodeCount()} values must be positive.
      *
      * @param totalCnt Total number of deployed service instances in the cluster, {@code 0} for unlimited.
+     * @return {@code this} for chaining.
      */
-    public void setTotalCount(int totalCnt) {
+    public ServiceConfiguration setTotalCount(int totalCnt) {
         this.totalCnt = totalCnt;
+
+        return this;
     }
 
     /**
@@ -160,9 +169,12 @@ public class ServiceConfiguration implements Serializable {
      * At least one of {@code getMaxPerNodeCount()} or {@link #getTotalCount()} values must be positive.
      *
      * @param maxPerNodeCnt Maximum number of deployed service instances on each node, {@code 0} for unlimited.
+     * @return {@code this} for chaining.
      */
-    public void setMaxPerNodeCount(int maxPerNodeCnt) {
+    public ServiceConfiguration setMaxPerNodeCount(int maxPerNodeCnt) {
         this.maxPerNodeCnt = maxPerNodeCnt;
+
+        return this;
     }
 
     /**
@@ -182,9 +194,12 @@ public class ServiceConfiguration implements Serializable {
      * This parameter is optional and is set only when deploying service based on key-affinity.
      *
      * @param cacheName Cache name, possibly {@code null}.
+     * @return {@code this} for chaining.
      */
-    public void setCacheName(String cacheName) {
+    public ServiceConfiguration setCacheName(String cacheName) {
         this.cacheName = cacheName;
+
+        return this;
     }
 
     /**
@@ -204,9 +219,12 @@ public class ServiceConfiguration implements Serializable {
      * This parameter is optional and is set only when deploying service based on key-affinity.
      *
      * @param affKey Affinity key, possibly {@code null}.
+     * @return {@code this} for chaining.
      */
-    public void setAffinityKey(Object affKey) {
+    public ServiceConfiguration setAffinityKey(Object affKey) {
         this.affKey = affKey;
+
+        return this;
     }
 
     /**
@@ -228,9 +246,12 @@ public class ServiceConfiguration implements Serializable {
      * nodes in the grid, based on configuration.
      *
      * @param nodeFilter Node filter used to filter nodes on which the service will be deployed, possibly {@code null}.
+     * @return {@code this} for chaining.
      */
-    public void setNodeFilter(IgnitePredicate<ClusterNode> nodeFilter) {
+    public ServiceConfiguration setNodeFilter(IgnitePredicate<ClusterNode> nodeFilter) {
         this.nodeFilter = nodeFilter;
+
+        return this;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
index ab14a57..d1219f7 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
@@ -18,10 +18,8 @@
 package org.apache.ignite.spi;
 
 import java.io.Serializable;
-import java.text.DateFormat;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -43,7 +41,6 @@ import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener;
 import org.apache.ignite.internal.processors.timeout.GridSpiTimeoutObject;
 import org.apache.ignite.internal.util.IgniteExceptionRegistry;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -65,7 +62,7 @@ import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
 /**
  * This class provides convenient adapter for SPI implementations.
  */
-public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagementMBean {
+public abstract class IgniteSpiAdapter implements IgniteSpi {
     /** */
     private ObjectName spiMBean;
 
@@ -142,31 +139,6 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
         return startedFlag.get();
     }
 
-    /** {@inheritDoc} */
-    @Override public final String getStartTimestampFormatted() {
-        return DateFormat.getDateTimeInstance().format(new Date(startTstamp));
-    }
-
-    /** {@inheritDoc} */
-    @Override public final String getUpTimeFormatted() {
-        return X.timeSpan2HMSM(getUpTime());
-    }
-
-    /** {@inheritDoc} */
-    @Override public final long getStartTimestamp() {
-        return startTstamp;
-    }
-
-    /** {@inheritDoc} */
-    @Override public final long getUpTime() {
-        return startTstamp == 0 ? 0 : U.currentTimeMillis() - startTstamp;
-    }
-
-    /** {@inheritDoc} */
-    @Override public UUID getLocalNodeId() {
-        return ignite.cluster().localNode().id();
-    }
-
     /**
      * @return Local node.
      */
@@ -180,11 +152,6 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
     }
 
     /** {@inheritDoc} */
-    @Override public final String getIgniteHome() {
-        return ignite.configuration().getIgniteHome();
-    }
-
-    /** {@inheritDoc} */
     @Override public String getName() {
         return name;
     }
@@ -193,10 +160,13 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
      * Sets SPI name.
      *
      * @param name SPI name.
+     * @return {@code this} for chaining.
      */
     @IgniteSpiConfiguration(optional = true)
-    public void setName(String name) {
+    public IgniteSpiAdapter setName(String name) {
         this.name = name;
+
+        return this;
     }
 
     /** {@inheritDoc} */
@@ -351,7 +321,15 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
      * @return Uniformly formatted message for SPI start.
      */
     protected final String startInfo() {
-        return "SPI started ok [startMs=" + getUpTime() + ", spiMBean=" + spiMBean + ']';
+        return "SPI started ok [startMs=" + startTstamp + ", spiMBean=" + spiMBean + ']';
+    }
+
+    /**
+     * Gets SPI startup time.
+     * @return Time in millis.
+     */
+    final long getStartTstamp() {
+        return startTstamp;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/cfc88028/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
new file mode 100644
index 0000000..8035333
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.X;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+/**
+ * This class provides convenient adapter for MBean implementations.
+ */
+public class IgniteSpiMBeanAdapter implements IgniteSpiManagementMBean {
+    /** */
+    protected IgniteSpiAdapter spiAdapter;
+
+    /**
+     * Constructor
+     *
+     * @param spiAdapter Spi implementation.
+     */
+    public IgniteSpiMBeanAdapter(IgniteSpiAdapter spiAdapter) {
+        this.spiAdapter = spiAdapter;
+    }
+
+    /** {@inheritDoc} */
+    @Override public final String getStartTimestampFormatted() {
+        return DateFormat.getDateTimeInstance().format(new Date(spiAdapter.getStartTstamp()));
+    }
+
+    /** {@inheritDoc} */
+    @Override public final String getUpTimeFormatted() {
+        return X.timeSpan2HMSM(getUpTime());
+    }
+
+    /** {@inheritDoc} */
+    @Override public final long getStartTimestamp() {
+        return spiAdapter.getStartTstamp();
+    }
+
+    /** {@inheritDoc} */
+    @Override public final long getUpTime() {
+        final long startTstamp = spiAdapter.getStartTstamp();
+
+        return startTstamp == 0 ? 0 : U.currentTimeMillis() - startTstamp;
+    }
+
+    /** {@inheritDoc} */
+    @Override public UUID getLocalNodeId() {
+        return spiAdapter.ignite.cluster().localNode().id();
+    }
+
+    /** {@inheritDoc} */
+    @Override public final String getIgniteHome() {
+        return spiAdapter.ignite.configuration().getIgniteHome();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getName() {
+        return spiAdapter.getName();
+    }
+}