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/04/14 15:08:40 UTC

[01/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Repository: ignite
Updated Branches:
  refs/heads/ignite-4938 [created] c89cc392f


http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml b/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
index 9b76344..f6d5bab 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
@@ -53,7 +53,7 @@
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="clientMode" value="true"/>
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-primary.xml b/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
index 0268cff..c1c41b4 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
@@ -55,7 +55,7 @@
         <property name="gridName" value="test-IGFS-cli"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml b/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
index f4f794f..bd4b215 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
@@ -53,7 +53,7 @@
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="clientMode" value="true"/>
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
index ff4ccea..bc07c04 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
@@ -70,6 +70,7 @@ import org.apache.ignite.igfs.IgfsIpcEndpointConfiguration;
 import org.apache.ignite.igfs.IgfsIpcEndpointType;
 import org.apache.ignite.igfs.IgfsMode;
 import org.apache.ignite.igfs.IgfsPath;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.igfs.IgfsCommonAbstractTest;
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
@@ -77,7 +78,6 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
index 48d624d..4fa73b5 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
@@ -27,7 +27,7 @@ import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
index 8974116..b385738 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
@@ -37,8 +37,8 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -76,7 +76,7 @@ public abstract class AbstractH2CompareQueryTest extends GridCommonAbstractTest
 
         c.setDiscoverySpi(disco);
 
-        c.setMarshaller(new OptimizedMarshaller(true));
+        c.setMarshaller(new BinaryMarshaller());
 
         c.setCacheConfiguration(cacheConfigurations());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java b/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
index 91d0c0b..bbc9762 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
@@ -34,7 +34,7 @@ import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 
 /**
  * SQL query stress test.

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml
index c680314..248578d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml
@@ -25,7 +25,7 @@
         <property name="connectorConfiguration"><null/></property>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller" />
+            <bean class="OptimizedMarshaller" />
         </property>
 
         <property name="discoverySpi">

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
index 390a528..a7bfc58 100644
--- a/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
+++ b/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
@@ -19,10 +19,10 @@ package org.apache.ignite.internal;
 
 import org.apache.ignite.IgniteSpringBean;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
----------------------------------------------------------------------
diff --git a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
index 53848fe..e504fe7 100644
--- a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
+++ b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
@@ -42,7 +42,7 @@
             Configure optimized marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <!--
                     For better performance set this property to true in case
                     all marshalled classes implement java.io.Serializable.

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-offheap-config.xml b/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
index 86e9656..5f30e86 100644
--- a/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
@@ -29,7 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-onheap-config.xml b/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
index 65f51b9..4638651 100644
--- a/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
@@ -29,7 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/yardstick/config/ignite-int-max-values-swap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-swap-config.xml b/modules/yardstick/config/ignite-int-max-values-swap-config.xml
index edb15d3..b19e097 100644
--- a/modules/yardstick/config/ignite-int-max-values-swap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-swap-config.xml
@@ -29,7 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/yardstick/config/ignite-jdbc-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-jdbc-config.xml b/modules/yardstick/config/ignite-jdbc-config.xml
index 9428858..b944a6b 100644
--- a/modules/yardstick/config/ignite-jdbc-config.xml
+++ b/modules/yardstick/config/ignite-jdbc-config.xml
@@ -33,7 +33,7 @@
         <property name="localHost" value="127.0.0.1"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>


[11/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 2

Posted by ag...@apache.org.
IGNITE-4938 De-pub of OptimizedMarshaller - take 2


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7942d585
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7942d585
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7942d585

Branch: refs/heads/ignite-4938
Commit: 7942d585fde3fd11964f479b0442caa2ba0459d1
Parents: a3686db
Author: Alexander Paschenko <al...@gmail.com>
Authored: Tue Apr 11 19:10:37 2017 +0300
Committer: Alexander Paschenko <al...@gmail.com>
Committed: Tue Apr 11 19:10:37 2017 +0300

----------------------------------------------------------------------
 modules/core/src/test/config/igfs-loopback.xml  | 15 ++-------
 modules/core/src/test/config/igfs-shmem.xml     | 15 ++-------
 .../src/test/config/spring-start-nodes-attr.xml |  4 +--
 .../core/src/test/config/spring-start-nodes.xml |  4 +--
 .../IgniteExternalizableAbstractTest.java       | 15 +++------
 .../apache/ignite/igfs/IgfsPathSelfTest.java    |  8 +++--
 .../internal/GridLifecycleAwareSelfTest.java    |  4 +--
 .../managers/GridManagerStopSelfTest.java       |  4 +--
 .../cache/GridCacheEntryMemorySizeSelfTest.java |  3 +-
 ...ridCacheStoreManagerDeserializationTest.java |  4 +--
 .../cache/GridCacheVersionSelfTest.java         |  7 ++---
 .../IgniteCacheCreatePutMultiNodeSelfTest.java  |  7 ++---
 .../distributed/IgniteCacheCreatePutTest.java   |  7 ++---
 .../near/GridCacheNearTxForceKeyTest.java       |  4 +--
 .../igfs/IgfsAbstractBaseSelfTest.java          | 11 -------
 .../processors/igfs/IgfsFileInfoSelfTest.java   |  9 ++++--
 .../IgfsPrimaryOptimziedMarshallerSelfTest.java | 28 -----------------
 ...ent2ClassLoadersOptimizedMarshallerTest.java | 31 ------------------
 ...mentClassLoadingOptimizedMarshallerTest.java | 31 ------------------
 .../GridMarshallerPerformanceTest.java          | 13 ++++----
 .../IgniteMessagingWithClientTest.java          |  4 +--
 ...pClientDiscoveryMarshallerCheckSelfTest.java |  4 +--
 .../TcpDiscoveryMarshallerCheckSelfTest.java    |  4 +--
 .../testframework/junits/GridAbstractTest.java  | 33 ++++++++++++++++++++
 .../junits/IgniteTestResources.java             |  6 +---
 .../ignite/testsuites/IgniteIgfsTestSuite.java  |  3 --
 .../testsuites/IgniteKernalSelfTestSuite.java   |  4 ---
 .../webapp/META-INF/ignite-webapp-config.xml    | 15 ++-------
 .../test/config/hadoop-fs-open-test/grid-0.xml  |  3 +-
 .../test/config/hadoop-fs-open-test/grid-1.xml  |  3 +-
 .../test/config/hadoop-fs-open-test/grid-2.xml  |  3 +-
 .../test/config/igfs-cli-config-dual-async.xml  |  3 +-
 .../test/config/igfs-cli-config-dual-sync.xml   |  3 +-
 .../src/test/config/igfs-cli-config-primary.xml |  3 +-
 .../src/test/config/igfs-cli-config-proxy.xml   |  3 +-
 .../IgniteHadoopFileSystemAbstractSelfTest.java |  4 +--
 .../cache/IgniteCacheNoClassQuerySelfTest.java  |  4 +--
 .../FetchingQueryCursorStressTest.java          |  4 +--
 .../GridSpringBeanSerializationSelfTest.java    | 15 +++++----
 .../webapp2/META-INF/ignite-webapp-config.xml   | 15 ++-------
 .../ignite-int-max-values-offheap-config.xml    |  4 +--
 .../ignite-int-max-values-onheap-config.xml     |  4 +--
 .../ignite-int-max-values-swap-config.xml       |  4 +--
 modules/yardstick/config/ignite-jdbc-config.xml |  4 +--
 44 files changed, 115 insertions(+), 261 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/config/igfs-loopback.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/igfs-loopback.xml b/modules/core/src/test/config/igfs-loopback.xml
index 7ec5f10..e6c36c2 100644
--- a/modules/core/src/test/config/igfs-loopback.xml
+++ b/modules/core/src/test/config/igfs-loopback.xml
@@ -54,21 +54,10 @@
     -->
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <!--
-            Configure optimized marshaller.
+            Configure binary marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <!--
-                    For better performance set this property to true in case
-                    all marshalled classes implement java.io.Serializable.
-                    Default value is true.
-
-                    Note, that it is recommended to implement java.io.Externalizable
-                    instead of java.io.Serializable for smaller network footprint
-                    and even better performance.
-                -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="fileSystemConfiguration">

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/config/igfs-shmem.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/igfs-shmem.xml b/modules/core/src/test/config/igfs-shmem.xml
index f6b1790..e5f52bb 100644
--- a/modules/core/src/test/config/igfs-shmem.xml
+++ b/modules/core/src/test/config/igfs-shmem.xml
@@ -54,21 +54,10 @@
     -->
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <!--
-            Configure optimized marshaller.
+            Configure binary marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <!--
-                    For better performance set this property to true in case
-                    all marshalled classes implement java.io.Serializable.
-                    Default value is true.
-
-                    Note, that it is recommended to implement java.io.Externalizable
-                    instead of java.io.Serializable for smaller network footprint
-                    and even better performance.
-                -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="fileSystemConfiguration">

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/config/spring-start-nodes-attr.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/spring-start-nodes-attr.xml b/modules/core/src/test/config/spring-start-nodes-attr.xml
index b329973..09cd934 100644
--- a/modules/core/src/test/config/spring-start-nodes-attr.xml
+++ b/modules/core/src/test/config/spring-start-nodes-attr.xml
@@ -37,9 +37,7 @@
         <property name="connectorConfiguration"><null/></property>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="discoverySpi">

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/config/spring-start-nodes.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/spring-start-nodes.xml b/modules/core/src/test/config/spring-start-nodes.xml
index 9b2ee94..5de58f0 100644
--- a/modules/core/src/test/config/spring-start-nodes.xml
+++ b/modules/core/src/test/config/spring-start-nodes.xml
@@ -31,9 +31,7 @@
         <property name="connectorConfiguration"><null/></property>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="discoverySpi">

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
index bfb8326..361d80f 100644
--- a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
@@ -19,10 +19,8 @@ package org.apache.ignite;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.MarshallerContext;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
@@ -30,21 +28,16 @@ import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
  * Base externalizable test class.
  */
 public class IgniteExternalizableAbstractTest extends GridCommonAbstractTest {
-    /** */
-    private static final MarshallerContext CTX = new MarshallerContextTestImpl();
-
     /**
      * @return Marshallers.
      */
-    protected List<Marshaller> getMarshallers() {
+    protected List<Marshaller> getMarshallers() throws IgniteCheckedException {
         List<Marshaller> marshallers = new ArrayList<>();
 
-        OptimizedMarshaller opt = new OptimizedMarshaller();
-
-        opt.setContext(CTX);
+        BinaryMarshaller bin = createStandaloneBinaryMarshaller();
 
         marshallers.add(new JdkMarshaller());
-        marshallers.add(opt);
+        marshallers.add(bin);
 
         return marshallers;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java b/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
index 110ea30..8e25054 100644
--- a/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
@@ -24,7 +24,6 @@ import java.net.URI;
 import java.util.Arrays;
 import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -35,7 +34,12 @@ import org.jetbrains.annotations.Nullable;
  */
 public class IgfsPathSelfTest extends GridCommonAbstractTest {
     /** Marshaller to test {@link Externalizable} interface. */
-    private final Marshaller marshaller = new OptimizedMarshaller();
+    private final Marshaller marshaller;
+
+    /** Ctor. */
+    public IgfsPathSelfTest() throws IgniteCheckedException {
+        marshaller = createStandaloneBinaryMarshaller();
+    }
 
     /**
      * Test public methods of igfs path.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
index 7b80f6a..3815c3b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
@@ -23,8 +23,8 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.ConnectorMessageInterceptor;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.client.ssl.GridSslContextFactory;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.lifecycle.LifecycleAware;
 import org.apache.ignite.lifecycle.LifecycleBean;
 import org.apache.ignite.lifecycle.LifecycleEventType;
@@ -105,7 +105,7 @@ public class GridLifecycleAwareSelfTest extends GridAbstractLifecycleAwareSelfTe
 
     /**
      */
-    private static class TestMarshaller extends OptimizedMarshaller implements LifecycleAware {
+    private static class TestMarshaller extends BinaryMarshaller implements LifecycleAware {
         /** */
         private final TestLifecycleAware lifecycleAware = new TestLifecycleAware(null);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
index 27b7825..55aefb3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.managers;
 
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.managers.checkpoint.GridCheckpointManager;
 import org.apache.ignite.internal.managers.collision.GridCollisionManager;
 import org.apache.ignite.internal.managers.communication.GridIoManager;
@@ -27,7 +28,6 @@ import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
 import org.apache.ignite.internal.managers.failover.GridFailoverManager;
 import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager;
 import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.pool.PoolProcessor;
 import org.apache.ignite.internal.processors.resource.GridResourceProcessor;
 import org.apache.ignite.resources.LoggerResource;
@@ -126,7 +126,7 @@ public class GridManagerStopSelfTest extends GridCommonAbstractTest {
         injectLogger(spi);
 
         ctx.config().setCommunicationSpi(spi);
-        ctx.config().setMarshaller(new OptimizedMarshaller());
+        ctx.config().setMarshaller(new BinaryMarshaller());
 
         GridIoManager mgr = new GridIoManager(ctx);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
index c086c35..556f66c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
@@ -28,7 +28,6 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -134,7 +133,7 @@ public class GridCacheEntryMemorySizeSelfTest extends GridCommonAbstractTest {
      * @return
      */
     protected Marshaller createMarshaller() throws IgniteCheckedException {
-        Marshaller marsh = new OptimizedMarshaller();
+        Marshaller marsh = createStandaloneBinaryMarshaller();
 
         marsh.setContext(new MarshallerContext() {
             @Override public boolean registerClassName(byte platformId, int typeId, String clsName) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
index da1a395..39414f8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
@@ -35,10 +35,10 @@ import org.apache.ignite.cache.store.CacheStoreAdapter;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.extras.GridCacheObsoleteEntryExtras;
 import org.apache.ignite.internal.processors.cache.store.CacheLocalStore;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -97,7 +97,7 @@ public class GridCacheStoreManagerDeserializationTest extends GridCommonAbstract
         if (igniteInstanceName != null && igniteInstanceName.toLowerCase().startsWith("binary"))
             c.setMarshaller(new BinaryMarshaller());
         else
-            c.setMarshaller(new OptimizedMarshaller());
+            c.setMarshaller(new JdkMarshaller());
 
         TcpDiscoverySpi disco = new TcpDiscoverySpi();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
index 45db0bb..b4223e5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
@@ -18,10 +18,9 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
@@ -81,9 +80,7 @@ public class GridCacheVersionSelfTest extends GridCommonAbstractTest {
         GridCacheVersion ver = version(1, 1);
         GridCacheVersionEx verEx = new GridCacheVersionEx(2, 2, 0, 0, ver);
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller(false);
-
-        marsh.setContext(new MarshallerContextTestImpl());
+        Marshaller marsh = createStandaloneBinaryMarshaller();
 
         byte[] verBytes = marsh.marshal(ver);
         byte[] verExBytes = marsh.marshal(verEx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
index 3b7fa4f..23fc941 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
@@ -29,7 +29,7 @@ import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -55,10 +55,7 @@ public class IgniteCacheCreatePutMultiNodeSelfTest extends GridCommonAbstractTes
 
         cfg.setDiscoverySpi(discoSpi);
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-        marsh.setRequireSerializable(false);
-
-        cfg.setMarshaller(marsh);
+        cfg.setMarshaller(new BinaryMarshaller());
 
         return cfg;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
index 42d6a12..9847209 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
@@ -26,7 +26,7 @@ import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
@@ -67,10 +67,7 @@ public class IgniteCacheCreatePutTest extends GridCommonAbstractTest {
 
         cfg.setDiscoverySpi(discoSpi);
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-        marsh.setRequireSerializable(false);
-
-        cfg.setMarshaller(marsh);
+        cfg.setMarshaller(new BinaryMarshaller());
 
         CacheConfiguration ccfg = new CacheConfiguration();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
index e4624d5..4372bff 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
@@ -22,7 +22,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -72,7 +72,7 @@ public class GridCacheNearTxForceKeyTest extends GridCommonAbstractTest {
         Ignite ignite1 = startGrid(1);
 
         // This key should become primary for ignite1.
-        final Integer key = ignite0.configuration().getMarshaller() instanceof OptimizedMarshaller ? 2 : 7;
+        final Integer key = ignite0.configuration().getMarshaller() instanceof BinaryMarshaller ? 7 : 2;
 
         assertNull(cache.getAndPut(key, key));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
index 8886f57..45628a2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
@@ -47,7 +47,6 @@ import org.apache.ignite.igfs.secondary.IgfsSecondaryFileSystem;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteKernal;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
 import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
@@ -241,13 +240,6 @@ public abstract class IgfsAbstractBaseSelfTest extends IgfsCommonAbstractTest {
     }
 
     /**
-     * @return Use optimized marshaller flag.
-     */
-    protected boolean useOptimizedMarshaller() {
-        return false;
-    }
-
-    /**
      * @return Whether append is supported.
      */
     protected boolean appendSupported() {
@@ -413,9 +405,6 @@ public abstract class IgfsAbstractBaseSelfTest extends IgfsCommonAbstractTest {
 
         IgniteConfiguration cfg = new IgniteConfiguration();
 
-        if (useOptimizedMarshaller())
-            cfg.setMarshaller(new OptimizedMarshaller());
-
         cfg.setIgniteInstanceName(igniteInstanceName);
 
         TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
index 435ff15..a81bba5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
@@ -21,7 +21,6 @@ import java.io.Externalizable;
 import java.util.Random;
 import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
@@ -32,7 +31,13 @@ import org.jetbrains.annotations.Nullable;
  */
 public class IgfsFileInfoSelfTest extends IgfsCommonAbstractTest {
     /** Marshaller to test {@link Externalizable} interface. */
-    private final Marshaller marshaller = new OptimizedMarshaller();
+    private final Marshaller marshaller;
+
+    /** Ctor. */
+    public IgfsFileInfoSelfTest() throws IgniteCheckedException {
+        marshaller = createStandaloneBinaryMarshaller();
+    }
+
 
     /**
      * Test node info serialization.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsPrimaryOptimziedMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsPrimaryOptimziedMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsPrimaryOptimziedMarshallerSelfTest.java
deleted file mode 100644
index e4ad1f4..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsPrimaryOptimziedMarshallerSelfTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.internal.processors.igfs;
-
-/**
- * Tests for PRIMARY mode with optimized marshaller.
- */
-public class IgfsPrimaryOptimziedMarshallerSelfTest extends IgfsPrimarySelfTest {
-    /** {@inheritDoc} */
-    @Override protected boolean useOptimizedMarshaller() {
-        return true;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
deleted file mode 100644
index b0cdf1f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.internal.processors.service;
-
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
-import org.apache.ignite.marshaller.Marshaller;
-
-/**
- * Tests that not all nodes in cluster need user's service definition (only nodes according to filter).
- */
-public class IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest
-    extends IgniteServiceDeployment2ClassLoadersDefaultMarshallerTest{
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller() {
-        return new OptimizedMarshaller(false);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
deleted file mode 100644
index d021517..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.internal.processors.service;
-
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
-import org.apache.ignite.marshaller.Marshaller;
-
-/**
- * Tests that not all nodes in cluster need user's service definition (only nodes according to filter).
- */
-public class IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest
-    extends IgniteServiceDeploymentClassLoadingDefaultMarshallerTest {
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller() {
-        return new OptimizedMarshaller(false);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
index 3148bc0..da22f4c 100644
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
@@ -35,7 +35,11 @@ import com.esotericsoftware.kryo.KryoSerializable;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
+import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.lang.GridTuple;
 import org.apache.ignite.internal.util.typedef.CI1;
 import org.apache.ignite.internal.util.typedef.CIX1;
@@ -44,6 +48,7 @@ import org.apache.ignite.internal.util.typedef.COX;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.lang.IgniteOutClosure;
+import org.apache.ignite.logger.NullLogger;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**
@@ -115,11 +120,7 @@ public class GridMarshallerPerformanceTest extends GridCommonAbstractTest {
     public void testGridMarshaller() throws Exception {
         final GridTuple<byte[]> tuple = new GridTuple<>();
 
-        // Test marshaller context.
-        final MarshallerContext marshCtx = new MarshallerContextTestImpl();
-
-        final OptimizedMarshaller marsh = new OptimizedMarshaller();
-        marsh.setContext(marshCtx);
+        final BinaryMarshaller marsh = createStandaloneBinaryMarshaller();
 
         IgniteInClosure<TestObject> writer = new CIX1<TestObject>() {
             @Override public void applyx(TestObject obj) throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java b/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
index ddf0149..b96728f 100644
--- a/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
@@ -27,7 +27,7 @@ import org.apache.ignite.IgniteMessaging;
 import org.apache.ignite.cluster.ClusterGroup;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiPredicate;
 import org.apache.ignite.resources.IgniteInstanceResource;
@@ -54,7 +54,7 @@ public class IgniteMessagingWithClientTest extends GridCommonAbstractTest implem
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 
-        cfg.setMarshaller(new OptimizedMarshaller(false));
+        cfg.setMarshaller(new BinaryMarshaller());
 
         if (igniteInstanceName.equals(getTestIgniteInstanceName(2))) {
             cfg.setClientMode(true);

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
index 541b3a2..1a88b11 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
@@ -19,7 +19,7 @@ package org.apache.ignite.spi.discovery.tcp;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -42,7 +42,7 @@ public class TcpClientDiscoveryMarshallerCheckSelfTest extends GridCommonAbstrac
         else {
             cfg.setClientMode(true);
 
-            cfg.setMarshaller(new OptimizedMarshaller());
+            cfg.setMarshaller(new BinaryMarshaller());
         }
 
         cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder));

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
index 0a66872..696225c 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
@@ -19,7 +19,7 @@ package org.apache.ignite.spi.discovery.tcp;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -54,7 +54,7 @@ public class TcpDiscoveryMarshallerCheckSelfTest extends GridCommonAbstractTest
         if (flag)
             cfg.setMarshaller(new JdkMarshaller());
         else
-            cfg.setMarshaller(sameMarsh ? new JdkMarshaller() : new OptimizedMarshaller());
+            cfg.setMarshaller(sameMarsh ? new JdkMarshaller() : new BinaryMarshaller());
 
         // Flip flag.
         flag = !flag;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index bfdf635..90c48d5 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -63,6 +63,8 @@ import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.IgniteKernal;
 import org.apache.ignite.internal.IgnitionEx;
+import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
+import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryEnumCache;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -70,6 +72,7 @@ import org.apache.ignite.internal.processors.resource.GridSpringResourceContext;
 import org.apache.ignite.internal.util.GridClassLoaderCache;
 import org.apache.ignite.internal.util.GridTestClockTimer;
 import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.G;
@@ -78,7 +81,9 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteCallable;
 import org.apache.ignite.lang.IgniteClosure;
+import org.apache.ignite.logger.NullLogger;
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.marshaller.MarshallerExclusions;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.resources.IgniteInstanceResource;
@@ -1366,6 +1371,34 @@ public abstract class GridAbstractTest extends TestCase {
     }
 
     /**
+     * Create instance of {@link BinaryMarshaller} suitable for use
+     * without starting a grid upon an empty {@link IgniteConfiguration}.
+     * @return Binary marshaller.
+     * @throws IgniteCheckedException if failed.
+     */
+    protected BinaryMarshaller createStandaloneBinaryMarshaller() throws IgniteCheckedException {
+        return createStandaloneBinaryMarshaller(new IgniteConfiguration());
+    }
+
+    /**
+     * Create instance of {@link BinaryMarshaller} suitable for use
+     * without starting a grid upon given {@link IgniteConfiguration}.
+     * @return Binary marshaller.
+     * @throws IgniteCheckedException if failed.
+     */
+    protected BinaryMarshaller createStandaloneBinaryMarshaller(IgniteConfiguration cfg) throws IgniteCheckedException {
+        BinaryMarshaller marsh = new BinaryMarshaller();
+
+        BinaryContext ctx = new BinaryContext(BinaryCachingMetadataHandler.create(), cfg, new NullLogger());
+
+        marsh.setContext(new MarshallerContextTestImpl());
+
+        IgniteUtils.invoke(BinaryMarshaller.class, marsh, "setBinaryContext", ctx, cfg);
+
+        return marsh;
+    }
+
+    /**
      * @return Generated unique test Ignite instance name.
      */
     public String getTestIgniteInstanceName() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
index 7017e00..2c7d597 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
@@ -30,7 +30,6 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
 import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.resource.GridResourceProcessor;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -244,7 +243,7 @@ public class IgniteTestResources {
         Marshaller marsh;
 
         if (marshallerName == null)
-            marsh = new OptimizedMarshaller();
+            marsh = new BinaryMarshaller();
         else {
             try {
                 Class<? extends Marshaller> cls = (Class<? extends Marshaller>)Class.forName(marshallerName);
@@ -257,9 +256,6 @@ public class IgniteTestResources {
             }
         }
 
-        if (marsh instanceof OptimizedMarshaller)
-            ((OptimizedMarshaller)marsh).setRequireSerializable(false);
-
         marsh.setContext(new MarshallerContextTestImpl());
 
         if (marsh instanceof BinaryMarshaller) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
index 76ed440..c2ed4ff 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
@@ -50,7 +50,6 @@ import org.apache.ignite.internal.processors.igfs.IgfsPrimaryMultiNodeSelfTest;
 import org.apache.ignite.internal.processors.igfs.IgfsOneClientNodeTest;
 import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOffheapTieredSelfTest;
 import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOffheapValuesSelfTest;
-import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOptimziedMarshallerSelfTest;
 import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencyClientSelfTest;
 import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencyMultiNodeSelfTest;
 import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencySelfTest;
@@ -93,8 +92,6 @@ public class IgniteIgfsTestSuite extends TestSuite {
         suite.addTest(new TestSuite(IgfsPrimaryRelaxedConsistencySelfTest.class));
         suite.addTest(new TestSuite(IgfsPrimaryRelaxedConsistencyMultiNodeSelfTest.class));
 
-        suite.addTest(new TestSuite(IgfsPrimaryOptimziedMarshallerSelfTest.class));
-
         suite.addTest(new TestSuite(IgfsPrimaryOffheapTieredSelfTest.class));
         suite.addTest(new TestSuite(IgfsPrimaryOffheapValuesSelfTest.class));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
index cd1be7b..c582e6f 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
@@ -62,10 +62,8 @@ import org.apache.ignite.internal.processors.service.GridServiceReassignmentSelf
 import org.apache.ignite.internal.processors.service.GridServiceSerializationSelfTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceDeployment2ClassLoadersDefaultMarshallerTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceDeployment2ClassLoadersJdkMarshallerTest;
-import org.apache.ignite.internal.processors.service.IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceDeploymentClassLoadingDefaultMarshallerTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceDeploymentClassLoadingJdkMarshallerTest;
-import org.apache.ignite.internal.processors.service.IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceDynamicCachesSelfTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceProxyTimeoutInitializedTest;
 import org.apache.ignite.internal.processors.service.IgniteServiceReassignmentTest;
@@ -148,10 +146,8 @@ public class IgniteKernalSelfTestSuite extends TestSuite {
         suite.addTestSuite(ServiceThreadPoolSelfTest.class);
 
         suite.addTestSuite(IgniteServiceDeploymentClassLoadingDefaultMarshallerTest.class);
-        suite.addTestSuite(IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.class);
         suite.addTestSuite(IgniteServiceDeploymentClassLoadingJdkMarshallerTest.class);
         suite.addTestSuite(IgniteServiceDeployment2ClassLoadersDefaultMarshallerTest.class);
-        suite.addTestSuite(IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.class);
         suite.addTestSuite(IgniteServiceDeployment2ClassLoadersJdkMarshallerTest.class);
 
         return suite;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
index cb781e0..fbaca50 100644
--- a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
+++ b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
@@ -48,21 +48,10 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <!--
-            Configure optimized marshaller.
+            Configure binary marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <!--
-                    For better performance set this property to true in case
-                    all marshalled classes implement java.io.Serializable.
-                    Default value is true.
-
-                    Note, that it is recommended to implement java.io.Externalizable
-                    instead of java.io.Serializable for smaller network footprint
-                    and even better performance.
-                -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!-- Set to local host address just for examples. -->

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
index 03cf945..291433c 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
@@ -54,8 +54,7 @@
         <property name="gridName" value="IGFS-cli-0"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
index a6022fa..e20bc38 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
@@ -54,8 +54,7 @@
         <property name="gridName" value="IGFS-cli-1"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
index 6cfcf57..ad56227 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
@@ -54,8 +54,7 @@
         <property name="gridName" value="IGFS-cli-2"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml b/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
index 488d8d9..5cefc3d 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
@@ -55,8 +55,7 @@
         <property name="gridName" value="test-IGFS-cli"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml b/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
index f6d5bab..243de7e 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
@@ -53,8 +53,7 @@
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="clientMode" value="true"/>
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-primary.xml b/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
index c1c41b4..46914b2 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-primary.xml
@@ -55,8 +55,7 @@
         <property name="gridName" value="test-IGFS-cli"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml b/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
index bd4b215..d7c7f00 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
@@ -53,8 +53,7 @@
     <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="clientMode" value="true"/>
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
index bc07c04..79a7830 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
@@ -70,7 +70,7 @@ import org.apache.ignite.igfs.IgfsIpcEndpointConfiguration;
 import org.apache.ignite.igfs.IgfsIpcEndpointType;
 import org.apache.ignite.igfs.IgfsMode;
 import org.apache.ignite.igfs.IgfsPath;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.igfs.IgfsCommonAbstractTest;
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
@@ -358,7 +358,7 @@ public abstract class IgniteHadoopFileSystemAbstractSelfTest extends IgfsCommonA
         discoSpi.setIpFinder(IP_FINDER);
 
         cfg.setIgniteInstanceName(igniteInstanceName);
-        cfg.setMarshaller(new OptimizedMarshaller());
+        cfg.setMarshaller(new BinaryMarshaller());
         cfg.setDiscoverySpi(discoSpi);
         cfg.setFileSystemConfiguration(igfsConfiguration(igniteInstanceName));
         cfg.setIncludeEventTypes(EVT_TASK_FAILED, EVT_TASK_FINISHED, EVT_JOB_MAPPED);

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
index 4fa73b5..e0148b3 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
@@ -27,7 +27,7 @@ import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -70,7 +70,7 @@ public class IgniteCacheNoClassQuerySelfTest extends GridCommonAbstractTest {
 
         CacheConfiguration cc = defaultCacheConfiguration();
 
-        c.setMarshaller(new OptimizedMarshaller());
+        c.setMarshaller(new BinaryMarshaller());
 
         cc.setName("cache");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java b/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
index bbc9762..8a73a8e 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
@@ -34,7 +34,7 @@ import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 
 /**
  * SQL query stress test.
@@ -158,7 +158,7 @@ public class FetchingQueryCursorStressTest {
 
         ccfg.setName(CACHE_NAME);
         ccfg.setIndexedTypes(Integer.class, Person.class);
-        cfg.setMarshaller(new OptimizedMarshaller());
+        cfg.setMarshaller(new BinaryMarshaller());
 
         cfg.setCacheConfiguration(ccfg);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
index a7bfc58..6f7d27a 100644
--- a/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
+++ b/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
@@ -18,11 +18,10 @@
 package org.apache.ignite.internal;
 
 import org.apache.ignite.IgniteSpringBean;
+import org.apache.ignite.configuration.BinaryConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -36,7 +35,7 @@ public class GridSpringBeanSerializationSelfTest extends GridCommonAbstractTest
     private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
 
     /** Marshaller. */
-    private static final Marshaller MARSHALLER = new OptimizedMarshaller();
+    private Marshaller marsh;
 
     /** Attribute key. */
     private static final String ATTR_KEY = "checkAttr";
@@ -46,11 +45,13 @@ public class GridSpringBeanSerializationSelfTest extends GridCommonAbstractTest
 
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
-        MARSHALLER.setContext(new MarshallerContextTestImpl());
+        IgniteConfiguration cfg = config();
+
+        marsh = createStandaloneBinaryMarshaller(cfg);
 
         bean = new IgniteSpringBean();
 
-        bean.setConfiguration(config());
+        bean.setConfiguration(cfg);
 
         bean.afterPropertiesSet();
     }
@@ -73,6 +74,8 @@ public class GridSpringBeanSerializationSelfTest extends GridCommonAbstractTest
 
         cfg.setIgniteInstanceName(getTestIgniteInstanceName());
 
+        cfg.setBinaryConfiguration(new BinaryConfiguration());
+
         return cfg;
     }
 
@@ -87,7 +90,7 @@ public class GridSpringBeanSerializationSelfTest extends GridCommonAbstractTest
     public void testSerialization() throws Exception {
         assert bean != null;
 
-        IgniteSpringBean bean0 = MARSHALLER.unmarshal(MARSHALLER.marshal(bean), null);
+        IgniteSpringBean bean0 = marsh.unmarshal(marsh.marshal(bean), null);
 
         assert bean0 != null;
         assert bean0.log() != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
----------------------------------------------------------------------
diff --git a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
index e504fe7..9710ac2 100644
--- a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
+++ b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
@@ -39,21 +39,10 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <!--
-            Configure optimized marshaller.
+            Configure binary marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <!--
-                    For better performance set this property to true in case
-                    all marshalled classes implement java.io.Serializable.
-                    Default value is true.
-
-                    Note, that it is recommended to implement java.io.Externalizable
-                    instead of java.io.Serializable for smaller network footprint
-                    and even better performance.
-                -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!-- Set to local host address just for examples. -->

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-offheap-config.xml b/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
index 5f30e86..45f3802 100644
--- a/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-offheap-config.xml
@@ -29,9 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
 <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-onheap-config.xml b/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
index 4638651..127a62c 100644
--- a/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
@@ -29,9 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
 <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/yardstick/config/ignite-int-max-values-swap-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-int-max-values-swap-config.xml b/modules/yardstick/config/ignite-int-max-values-swap-config.xml
index b19e097..74c8a06 100644
--- a/modules/yardstick/config/ignite-int-max-values-swap-config.xml
+++ b/modules/yardstick/config/ignite-int-max-values-swap-config.xml
@@ -29,9 +29,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
 <!--

http://git-wip-us.apache.org/repos/asf/ignite/blob/7942d585/modules/yardstick/config/ignite-jdbc-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-jdbc-config.xml b/modules/yardstick/config/ignite-jdbc-config.xml
index b944a6b..a279d46 100644
--- a/modules/yardstick/config/ignite-jdbc-config.xml
+++ b/modules/yardstick/config/ignite-jdbc-config.xml
@@ -33,9 +33,7 @@
         <property name="localHost" value="127.0.0.1"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="discoverySpi">


[13/14] ignite git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/ignite into ignite-4938

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 446b9a5,1216db8..0c8a26d
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@@ -23,8 -23,8 +23,9 @@@ import java.util.Iterator
  import java.util.Map;
  import java.util.Properties;
  import javax.net.ssl.HostnameVerifier;
 +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.lang.IgnitePredicate;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.jetbrains.annotations.Nullable;
  
  /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 74b4dcd,c991319..6ab5393
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@@ -97,8 -100,6 +100,7 @@@ import org.apache.ignite.internal.manag
  import org.apache.ignite.internal.managers.failover.GridFailoverManager;
  import org.apache.ignite.internal.managers.indexing.GridIndexingManager;
  import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager;
- import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager;
 +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.internal.processors.GridProcessor;
  import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor;
  import org.apache.ignite.internal.processors.cache.GridCacheAdapter;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index 9227b82,f339253..da46496
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@@ -17,33 -17,6 +17,34 @@@
  
  package org.apache.ignite.internal.binary;
  
 +import java.io.File;
 +import java.io.IOException;
 +import java.lang.reflect.Field;
 +import java.math.BigDecimal;
 +import java.net.URISyntaxException;
 +import java.net.URL;
 +import java.net.URLClassLoader;
 +import java.sql.Time;
 +import java.sql.Timestamp;
 +import java.util.ArrayList;
 +import java.util.Collection;
 +import java.util.Collections;
 +import java.util.Date;
 +import java.util.Enumeration;
 +import java.util.HashMap;
 +import java.util.HashSet;
++import java.util.Iterator;
 +import java.util.LinkedHashMap;
 +import java.util.LinkedHashSet;
 +import java.util.LinkedList;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.TreeMap;
 +import java.util.TreeSet;
 +import java.util.UUID;
 +import java.util.concurrent.ConcurrentMap;
 +import java.util.jar.JarEntry;
 +import java.util.jar.JarFile;
  import org.apache.ignite.IgniteCheckedException;
  import org.apache.ignite.IgniteException;
  import org.apache.ignite.IgniteLogger;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
index 257b34c,75f1807..22948f7
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
@@@ -24,9 -24,9 +24,10 @@@ import org.apache.ignite.IgniteCheckedE
  import org.apache.ignite.IgniteException;
  import org.apache.ignite.internal.MarshallerContextImpl;
  import org.apache.ignite.internal.client.marshaller.GridClientMarshaller;
 +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
  import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.plugin.PluginProvider;
  import org.jetbrains.annotations.Nullable;
  

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
index 1545444,bc8220f..8865b2d
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
@@@ -26,11 -26,12 +26,12 @@@ import java.util.List
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipInputStream;
  import java.util.zip.ZipOutputStream;
 -
  import org.apache.ignite.IgniteCheckedException;
  import org.apache.ignite.internal.client.marshaller.GridClientMarshaller;
 +import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
  import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.plugin.PluginProvider;
  import org.jetbrains.annotations.Nullable;
  

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
index e34e8cc,4c0ce17..ccd9946
--- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
@@@ -45,8 -45,8 +45,9 @@@ import java.util.Map
  import java.util.Properties;
  import java.util.UUID;
  import java.util.concurrent.ConcurrentMap;
+ 
  import org.apache.ignite.internal.util.GridUnsafe;
 +import org.apache.ignite.internal.util.SerializableTransient;
  import org.apache.ignite.internal.util.typedef.internal.U;
  import org.apache.ignite.lang.IgniteProductVersion;
  import org.apache.ignite.marshaller.MarshallerContext;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
index 3ab27ac,8ffeacd..e62c171
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
@@@ -19,8 -19,10 +19,9 @@@ package org.apache.ignite.marshaller
  
  import java.io.InputStream;
  import java.io.OutputStream;
 -
  import org.apache.ignite.IgniteBinary;
  import org.apache.ignite.IgniteCheckedException;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.jetbrains.annotations.Nullable;
  
  /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
index 6759c40,8c27841..997c9f1
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
@@@ -21,8 -21,8 +21,9 @@@ import java.io.InputStream
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.OutputStream;
 +import org.apache.ignite.IgniteBinary;
  import org.apache.ignite.IgniteCheckedException;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.internal.util.io.GridByteArrayInputStream;
  import org.apache.ignite.internal.util.io.GridByteArrayOutputStream;
  import org.apache.ignite.internal.util.typedef.internal.S;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
index 1b2ed1b,9ee8d69..8000738
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
@@@ -30,9 -30,9 +30,10 @@@ import org.apache.ignite.cache.CacheMod
  import org.apache.ignite.configuration.CacheConfiguration;
  import org.apache.ignite.configuration.IgniteConfiguration;
  import org.apache.ignite.internal.IgniteInternalFuture;
 +import org.apache.ignite.internal.binary.BinaryMarshaller;
  import org.apache.ignite.internal.util.typedef.F;
  import org.apache.ignite.internal.util.typedef.T2;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
  import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
  import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
index 9847209,40440e0..9d10fd0
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
@@@ -26,8 -26,8 +26,9 @@@ import org.apache.ignite.cache.CacheAto
  import org.apache.ignite.configuration.CacheConfiguration;
  import org.apache.ignite.configuration.IgniteConfiguration;
  import org.apache.ignite.internal.IgniteInternalFuture;
 +import org.apache.ignite.internal.binary.BinaryMarshaller;
  import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
  import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
  import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
index a81bba5,47af49b..13a0dd8
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
@@@ -24,8 -21,13 +24,9 @@@ import org.apache.ignite.IgniteCheckedE
  import org.apache.ignite.lang.IgniteUuid;
  import org.apache.ignite.marshaller.Marshaller;
  import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.jetbrains.annotations.Nullable;
  
 -import java.io.Externalizable;
 -import java.util.Random;
 -import java.util.concurrent.Callable;
 -
  /**
   * {@link IgfsEntryInfo} test case.
   */

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
index 549385f,1d08c48..61c575c
--- a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
@@@ -85,27 -83,10 +83,10 @@@ public class ConfigVariations 
      );
  
      /** */
-     private static final ConfigParameter<Object> ONHEAP_TIERED_MEMORY_PARAM =
-         Parameters.parameter("setMemoryMode", CacheMemoryMode.ONHEAP_TIERED);
- 
-     /** */
-     private static final ConfigParameter<Object> OFFHEAP_TIERED_MEMORY_PARAM =
-         Parameters.parameter("setMemoryMode", CacheMemoryMode.OFFHEAP_TIERED);
- 
-     /** */
-     private static final ConfigParameter<Object> OFFHEAP_VALUES_MEMORY_PARAM =
-         Parameters.parameter("setMemoryMode", CacheMemoryMode.OFFHEAP_VALUES);
- 
-     /** */
-     private static final ConfigParameter<Object> OFFHEAP_ENABLED =
-         Parameters.parameter("setOffHeapMaxMemory", 10 * 1024 * 1024L);
- 
-     /** */
      @SuppressWarnings("unchecked")
      private static final ConfigParameter<IgniteConfiguration>[][] BASIC_IGNITE_SET = new ConfigParameter[][] {
 -        Parameters.objectParameters("setMarshaller", Parameters.factory(BinaryMarshaller.class), optimizedMarshallerFactory()),
 +        Parameters.objectParameters("setMarshaller", Parameters.factory(BinaryMarshaller.class), binaryMarshallerFactory()),
          Parameters.booleanParameters("setPeerClassLoadingEnabled"),
-         Parameters.objectParameters("setSwapSpaceSpi", Parameters.factory(GridTestSwapSpaceSpi.class)),
      };
  
      /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
index 1101c90,f2d1556..170bb33
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
@@@ -36,15 -33,10 +32,9 @@@ import org.apache.ignite.internal.proce
  import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryDataStreamerMultithreadedSelfTest;
  import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryMultiNodeSelfTest;
  import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryMultithreadedSelfTest;
- import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheMemoryModeBinarySelfTest;
- import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheOffHeapTieredAtomicBinarySelfTest;
- import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheOffHeapTieredEvictionAtomicBinarySelfTest;
- import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheOffHeapTieredEvictionBinarySelfTest;
- import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheOffHeapTieredBinarySelfTest;
  import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesNearPartitionedByteArrayValuesSelfTest;
  import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesPartitionedOnlyByteArrayValuesSelfTest;
- import org.apache.ignite.internal.processors.cache.expiry.IgniteCacheAtomicLocalOffheapExpiryPolicyTest;
  import org.apache.ignite.internal.processors.datastreamer.DataStreamProcessorSelfTest;
 -import org.apache.ignite.testframework.config.GridTestProperties;
  
  /**
   * Cache suite with binary marshaller.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
index c2ed4ff,7efc7de..c73ed3e
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
@@@ -48,8 -46,7 +46,6 @@@ import org.apache.ignite.internal.proce
  import org.apache.ignite.internal.processors.igfs.IgfsModesSelfTest;
  import org.apache.ignite.internal.processors.igfs.IgfsPrimaryMultiNodeSelfTest;
  import org.apache.ignite.internal.processors.igfs.IgfsOneClientNodeTest;
- import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOffheapTieredSelfTest;
- import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOffheapValuesSelfTest;
 -import org.apache.ignite.internal.processors.igfs.IgfsPrimaryOptimziedMarshallerSelfTest;
  import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencyClientSelfTest;
  import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencyMultiNodeSelfTest;
  import org.apache.ignite.internal.processors.igfs.IgfsPrimaryRelaxedConsistencySelfTest;
@@@ -92,9 -89,8 +88,6 @@@ public class IgniteIgfsTestSuite extend
          suite.addTest(new TestSuite(IgfsPrimaryRelaxedConsistencySelfTest.class));
          suite.addTest(new TestSuite(IgfsPrimaryRelaxedConsistencyMultiNodeSelfTest.class));
  
-         suite.addTest(new TestSuite(IgfsPrimaryOffheapTieredSelfTest.class));
-         suite.addTest(new TestSuite(IgfsPrimaryOffheapValuesSelfTest.class));
 -        suite.addTest(new TestSuite(IgfsPrimaryOptimziedMarshallerSelfTest.class));
--
          suite.addTest(new TestSuite(IgfsDualSyncSelfTest.class));
          suite.addTest(new TestSuite(IgfsDualAsyncSelfTest.class));
  

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
index b385738,ec83687..a562342
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
@@@ -37,8 -37,8 +37,9 @@@ import org.apache.ignite.cache.CacheWri
  import org.apache.ignite.cache.query.SqlFieldsQuery;
  import org.apache.ignite.configuration.CacheConfiguration;
  import org.apache.ignite.configuration.IgniteConfiguration;
 +import org.apache.ignite.internal.binary.BinaryMarshaller;
  import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
  import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
  import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
  import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@@ -76,10 -73,8 +74,8 @@@ public abstract class AbstractH2Compare
  
          c.setDiscoverySpi(disco);
  
 -        c.setMarshaller(new OptimizedMarshaller(true));
 +        c.setMarshaller(new BinaryMarshaller());
  
-         c.setCacheConfiguration(cacheConfigurations());
- 
          return c;
      }
  

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/c89cc392/modules/yardstick/config/ignite-int-max-values-onheap-config.xml
----------------------------------------------------------------------


[09/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
IGNITE-4938 De-pub of OptimizedMarshaller - take 1


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/faa8681a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/faa8681a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/faa8681a

Branch: refs/heads/ignite-4938
Commit: faa8681ab35e2332a7b16210492468495eb9518e
Parents: 5c48260
Author: Alexander Paschenko <al...@gmail.com>
Authored: Mon Apr 10 19:47:17 2017 +0300
Committer: Alexander Paschenko <al...@gmail.com>
Committed: Mon Apr 10 19:47:18 2017 +0300

----------------------------------------------------------------------
 examples/config/filesystem/example-igfs.xml     |    5 +-
 .../MemcacheRestExampleNodeStartup.java         |    7 -
 .../optimized/OptimizedMarshallerAopTest.java   |    1 +
 modules/clients/src/test/config/jdbc-config.xml |    6 -
 .../apache/ignite/IgniteSystemProperties.java   |    2 +-
 .../apache/ignite/internal/IgniteKernal.java    |    2 +-
 .../internal/binary/BinaryClassDescriptor.java  |    2 +-
 .../ignite/internal/binary/BinaryContext.java   |   59 +-
 .../GridClientOptimizedMarshaller.java          |    2 +-
 .../GridClientZipOptimizedMarshaller.java       |    3 +-
 .../optimized/OptimizedClassDescriptor.java     | 1141 +++++++++
 .../optimized/OptimizedFieldType.java           |   50 +
 .../optimized/OptimizedMarshaller.java          |  313 +++
 .../optimized/OptimizedMarshallerIdMapper.java  |   33 +
 .../optimized/OptimizedMarshallerUtils.java     |  551 +++++
 .../optimized/OptimizedObjectInputStream.java   | 1231 ++++++++++
 .../optimized/OptimizedObjectOutputStream.java  |  875 +++++++
 .../OptimizedObjectStreamRegistry.java          |  244 ++
 .../marshaller/optimized/package-info.java      |   22 +
 .../apache/ignite/marshaller/Marshaller.java    |    2 -
 .../ignite/marshaller/jdk/JdkMarshaller.java    |    4 +-
 .../optimized/OptimizedClassDescriptor.java     | 1141 ---------
 .../optimized/OptimizedFieldType.java           |   50 -
 .../optimized/OptimizedMarshaller.java          |  313 ---
 .../optimized/OptimizedMarshallerIdMapper.java  |   33 -
 .../optimized/OptimizedMarshallerUtils.java     |  551 -----
 .../optimized/OptimizedObjectInputStream.java   | 1231 ----------
 .../optimized/OptimizedObjectOutputStream.java  |  875 -------
 .../OptimizedObjectStreamRegistry.java          |  244 --
 .../marshaller/optimized/package-info.java      |   22 -
 .../resources/META-INF/classnames.properties    |    2 +-
 modules/core/src/test/config/example-cache.xml  |    5 +-
 modules/core/src/test/config/igfs-loopback.xml  |    2 +-
 modules/core/src/test/config/igfs-shmem.xml     |    2 +-
 .../src/test/config/spring-start-nodes-attr.xml |    2 +-
 .../core/src/test/config/spring-start-nodes.xml |    2 +-
 .../config/websession/example-cache-base.xml    |    5 +-
 .../IgniteExternalizableAbstractTest.java       |    2 +-
 ...dbcPojoStoreOptimizedMarshallerSelfTest.java |   31 -
 ...ptimizedMarshallerWithSqlEscapeSelfTest.java |   28 -
 .../apache/ignite/igfs/IgfsPathSelfTest.java    |    2 +-
 .../internal/GridLifecycleAwareSelfTest.java    |    2 +-
 .../managers/GridManagerStopSelfTest.java       |    2 +-
 .../GridDiscoveryManagerAttributesSelfTest.java |    4 +-
 .../OptimizedMarshallerEnumSelfTest.java        |   87 +
 .../OptimizedMarshallerNodeFailoverTest.java    |  357 +++
 .../OptimizedMarshallerPooledSelfTest.java      |   44 +
 .../optimized/OptimizedMarshallerSelfTest.java  |  283 +++
 ...arshallerSerialPersistentFieldsSelfTest.java |  114 +
 .../optimized/OptimizedMarshallerTest.java      |  790 +++++++
 .../OptimizedObjectStreamSelfTest.java          | 2157 ++++++++++++++++++
 .../TestTcpDiscoveryIpFinderAdapter.java        |   43 +
 .../marshaller/optimized/package-info.java      |   22 +
 .../CacheStartupInDeploymentModesTest.java      |   38 -
 .../cache/GridCacheEntryMemorySizeSelfTest.java |    2 +-
 ...ridCacheStoreManagerDeserializationTest.java |    2 +-
 .../cache/GridCacheVersionSelfTest.java         |    2 +-
 .../distributed/CacheAffinityEarlyTest.java     |    7 +-
 .../CacheGetFutureHangsSelfTest.java            |    7 +-
 .../IgniteCacheCreatePutMultiNodeSelfTest.java  |    2 +-
 .../distributed/IgniteCacheCreatePutTest.java   |    2 +-
 .../near/GridCacheNearTxForceKeyTest.java       |    2 +-
 .../CacheEntryProcessorNonSerializableTest.java |    4 +-
 .../igfs/IgfsAbstractBaseSelfTest.java          |    2 +-
 .../processors/igfs/IgfsFileInfoSelfTest.java   |    9 +-
 .../service/ClosureServiceClientsNodesTest.java |    4 +-
 ...ent2ClassLoadersOptimizedMarshallerTest.java |    2 +-
 ...mentClassLoadingOptimizedMarshallerTest.java |    2 +-
 ...namicProxySerializationMultiJvmSelfTest.java |   14 -
 .../GridMarshallerPerformanceTest.java          |   10 +-
 .../OptimizedMarshallerEnumSelfTest.java        |   87 -
 .../OptimizedMarshallerNodeFailoverTest.java    |  357 ---
 .../OptimizedMarshallerPooledSelfTest.java      |   44 -
 .../optimized/OptimizedMarshallerSelfTest.java  |  283 ---
 ...arshallerSerialPersistentFieldsSelfTest.java |  114 -
 .../optimized/OptimizedMarshallerTest.java      |  790 -------
 .../OptimizedObjectStreamSelfTest.java          | 2157 ------------------
 .../TestTcpDiscoveryIpFinderAdapter.java        |   43 -
 .../marshaller/optimized/package-info.java      |   22 -
 .../IgniteMessagingWithClientTest.java          |    2 +-
 ...pClientDiscoveryMarshallerCheckSelfTest.java |    2 +-
 .../TcpDiscoveryMarshallerCheckSelfTest.java    |    2 +-
 .../configvariations/ConfigVariations.java      |   15 +-
 .../junits/IgniteTestResources.java             |    4 +-
 .../testsuites/IgniteBinaryBasicTestSuite.java  |   14 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java |    6 +-
 ...teBasicConfigVariationsFullApiTestSuite.java |    2 +-
 .../IgniteMarshallerSelfTestSuite.java          |   14 +-
 ...essagingConfigVariationFullApiTestSuite.java |    2 +-
 ...ServiceConfigVariationsFullApiTestSuite.java |    2 +-
 .../webapp/META-INF/ignite-webapp-config.xml    |    2 +-
 .../test/config/hadoop-fs-open-test/grid-0.xml  |    2 +-
 .../test/config/hadoop-fs-open-test/grid-1.xml  |    2 +-
 .../test/config/hadoop-fs-open-test/grid-2.xml  |    2 +-
 .../test/config/igfs-cli-config-dual-async.xml  |    2 +-
 .../test/config/igfs-cli-config-dual-sync.xml   |    2 +-
 .../src/test/config/igfs-cli-config-primary.xml |    2 +-
 .../src/test/config/igfs-cli-config-proxy.xml   |    2 +-
 .../IgniteHadoopFileSystemAbstractSelfTest.java |    2 +-
 .../cache/IgniteCacheNoClassQuerySelfTest.java  |    2 +-
 .../h2/sql/AbstractH2CompareQueryTest.java      |    4 +-
 .../FetchingQueryCursorStressTest.java          |    2 +-
 .../Config/marshaller-invalid.xml               |    2 +-
 .../GridSpringBeanSerializationSelfTest.java    |    2 +-
 .../webapp2/META-INF/ignite-webapp-config.xml   |    2 +-
 .../ignite-int-max-values-offheap-config.xml    |    2 +-
 .../ignite-int-max-values-onheap-config.xml     |    2 +-
 .../ignite-int-max-values-swap-config.xml       |    2 +-
 modules/yardstick/config/ignite-jdbc-config.xml |    2 +-
 109 files changed, 8483 insertions(+), 8633 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/examples/config/filesystem/example-igfs.xml
----------------------------------------------------------------------
diff --git a/examples/config/filesystem/example-igfs.xml b/examples/config/filesystem/example-igfs.xml
index 2236821..9e45450 100644
--- a/examples/config/filesystem/example-igfs.xml
+++ b/examples/config/filesystem/example-igfs.xml
@@ -51,10 +51,7 @@
     -->
     <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
-                <!-- Set to false to allow non-serializable objects in examples, default is true. -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <property name="fileSystemConfiguration">

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/examples/src/main/java/org/apache/ignite/examples/misc/client/memcache/MemcacheRestExampleNodeStartup.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/misc/client/memcache/MemcacheRestExampleNodeStartup.java b/examples/src/main/java/org/apache/ignite/examples/misc/client/memcache/MemcacheRestExampleNodeStartup.java
index 3c835be..439e042 100644
--- a/examples/src/main/java/org/apache/ignite/examples/misc/client/memcache/MemcacheRestExampleNodeStartup.java
+++ b/examples/src/main/java/org/apache/ignite/examples/misc/client/memcache/MemcacheRestExampleNodeStartup.java
@@ -23,7 +23,6 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 
@@ -64,12 +63,6 @@ public class MemcacheRestExampleNodeStartup {
 
         cfg.setConnectorConfiguration(new ConnectorConfiguration());
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-
-        marsh.setRequireSerializable(false);
-
-        cfg.setMarshaller(marsh);
-
         CacheConfiguration cacheCfg = new CacheConfiguration();
 
         cacheCfg.setAtomicityMode(TRANSACTIONAL);

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/aop/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerAopTest.java
----------------------------------------------------------------------
diff --git a/modules/aop/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerAopTest.java b/modules/aop/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerAopTest.java
index 7985fb2..428d8e0 100644
--- a/modules/aop/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerAopTest.java
+++ b/modules/aop/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerAopTest.java
@@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.compute.gridify.Gridify;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.events.Event;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.lang.IgnitePredicate;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/clients/src/test/config/jdbc-config.xml
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/config/jdbc-config.xml b/modules/clients/src/test/config/jdbc-config.xml
index 27d2617..b05fe64 100644
--- a/modules/clients/src/test/config/jdbc-config.xml
+++ b/modules/clients/src/test/config/jdbc-config.xml
@@ -31,12 +31,6 @@
 
         <property name="localHost" value="127.0.0.1"/>
 
-        <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
-                <property name="requireSerializable" value="false"/>
-            </bean>
-        </property>
-
         <property name="discoverySpi">
             <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                 <property name="ipFinder">

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 3c73bd5..446b9a5 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -23,8 +23,8 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 import javax.net.ssl.HostnameVerifier;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.lang.IgnitePredicate;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.jetbrains.annotations.Nullable;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 6705393..74b4dcd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -98,6 +98,7 @@ import org.apache.ignite.internal.managers.failover.GridFailoverManager;
 import org.apache.ignite.internal.managers.indexing.GridIndexingManager;
 import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager;
 import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.GridProcessor;
 import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
@@ -167,7 +168,6 @@ import org.apache.ignite.lifecycle.LifecycleAware;
 import org.apache.ignite.lifecycle.LifecycleBean;
 import org.apache.ignite.lifecycle.LifecycleEventType;
 import org.apache.ignite.marshaller.MarshallerExclusions;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.mxbean.ClusterLocalNodeMetricsMXBean;
 import org.apache.ignite.mxbean.IgniteMXBean;
 import org.apache.ignite.mxbean.StripedExecutorMXBean;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 92e4874..adbbc04 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -40,6 +40,7 @@ import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryReflectiveSerializer;
 import org.apache.ignite.binary.BinarySerializer;
 import org.apache.ignite.binary.Binarylizable;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.CacheObjectImpl;
 import org.apache.ignite.internal.processors.query.QueryUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
@@ -48,7 +49,6 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerExclusions;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.internal.processors.query.QueryUtils.isGeometryClass;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index d918aa3..9227b82 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@ -17,6 +17,33 @@
 
 package org.apache.ignite.internal.binary;
 
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -24,10 +51,10 @@ import org.apache.ignite.binary.BinaryArrayIdentityResolver;
 import org.apache.ignite.binary.BinaryBasicIdMapper;
 import org.apache.ignite.binary.BinaryBasicNameMapper;
 import org.apache.ignite.binary.BinaryIdMapper;
+import org.apache.ignite.binary.BinaryIdentityResolver;
 import org.apache.ignite.binary.BinaryInvalidTypeException;
 import org.apache.ignite.binary.BinaryNameMapper;
 import org.apache.ignite.binary.BinaryObjectException;
-import org.apache.ignite.binary.BinaryIdentityResolver;
 import org.apache.ignite.binary.BinaryReflectiveSerializer;
 import org.apache.ignite.binary.BinarySerializer;
 import org.apache.ignite.binary.BinaryType;
@@ -38,6 +65,7 @@ import org.apache.ignite.cache.affinity.AffinityKeyMapped;
 import org.apache.ignite.configuration.BinaryConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.igfs.IgfsPath;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.binary.BinaryMetadataKey;
 import org.apache.ignite.internal.processors.closure.GridClosureProcessor;
 import org.apache.ignite.internal.processors.datastructures.CollocatedQueueItemKey;
@@ -89,38 +117,9 @@ import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.MarshallerUtils;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
 import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
index 6a4b5e8..257b34c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
@@ -24,9 +24,9 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.MarshallerContextImpl;
 import org.apache.ignite.internal.client.marshaller.GridClientMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.plugin.PluginProvider;
 import org.jetbrains.annotations.Nullable;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
index b709634..1545444 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
@@ -26,12 +26,11 @@ import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
-
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.client.marshaller.GridClientMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.plugin.PluginProvider;
 import org.jetbrains.annotations.Nullable;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
new file mode 100644
index 0000000..e34e8cc
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
@@ -0,0 +1,1141 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.SerializableTransient;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgniteProductVersion;
+import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.MarshallerExclusions;
+import org.apache.ignite.marshaller.MarshallerUtils;
+
+import static java.lang.reflect.Modifier.isFinal;
+import static java.lang.reflect.Modifier.isPrivate;
+import static java.lang.reflect.Modifier.isStatic;
+import static java.lang.reflect.Modifier.isTransient;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BYTE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BYTE_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CHAR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CHAR_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CLS;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DATE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ENUM;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.EXTERNALIZABLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.FLOAT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.FLOAT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_MAP;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET_MAP_OFF;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.INT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.INT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_MAP;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_SET;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_LIST;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LONG;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LONG_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.OBJ_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.PROPS;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.PROXY;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SERIALIZABLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SHORT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SHORT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.STR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.UUID;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.computeSerialVersionUid;
+
+/**
+ * Class descriptor.
+ */
+class OptimizedClassDescriptor {
+    /** Class. */
+    private final Class<?> cls;
+
+    /** Context. */
+    private final MarshallerContext ctx;
+
+    /** */
+    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
+
+    /** ID mapper. */
+    private final OptimizedMarshallerIdMapper mapper;
+
+    /** Class name. */
+    private final String name;
+
+    /** Type ID. */
+    private final int typeId;
+
+    /** Short ID. */
+    private final short checksum;
+
+    /** Class type. */
+    private int type;
+
+    /** Primitive flag. */
+    private boolean isPrimitive;
+
+    /** Enum flag. */
+    private boolean isEnum;
+
+    /** Serializable flag. */
+    private boolean isSerial;
+
+    /** Excluded flag. */
+    private boolean excluded;
+
+    /** {@code True} if descriptor is for {@link Class}. */
+    private boolean isCls;
+
+    /** Enumeration values. */
+    private Object[] enumVals;
+
+    /** Constructor. */
+    private Constructor<?> constructor;
+
+    /** Fields. */
+    private Fields fields;
+
+    /** {@code writeObject} methods. */
+    private List<Method> writeObjMtds;
+
+    /** {@code writeReplace} method. */
+    private Method writeReplaceMtd;
+
+    /** {@code readObject} methods. */
+    private List<Method> readObjMtds;
+
+    /** {@code readResolve} method. */
+    private Method readResolveMtd;
+
+    /** Defaults field offset. */
+    private long dfltsFieldOff;
+
+    /** Load factor field offset. */
+    private long loadFactorFieldOff;
+
+    /** Access order field offset. */
+    private long accessOrderFieldOff;
+
+    /** Proxy interfaces. */
+    private Class<?>[] proxyIntfs;
+
+    /** Method returns serializable transient fields. */
+    private Method serTransMtd;
+
+    /**
+     * Creates descriptor for class.
+     *
+     * @param typeId Type ID.
+     * @param clsMap Class descriptors by class map.
+     * @param cls Class.
+     * @param ctx Context.
+     * @param mapper ID mapper.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    OptimizedClassDescriptor(Class<?> cls,
+        int typeId,
+        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+        MarshallerContext ctx,
+        OptimizedMarshallerIdMapper mapper)
+        throws IOException {
+        this.cls = cls;
+        this.typeId = typeId;
+        this.clsMap = clsMap;
+        this.ctx = ctx;
+        this.mapper = mapper;
+
+        name = cls.getName();
+
+        excluded = MarshallerExclusions.isExcluded(cls);
+
+        if (!excluded) {
+            Class<?> parent;
+
+            if (cls == byte.class || cls == Byte.class) {
+                type = BYTE;
+
+                isPrimitive = true;
+            }
+            else if (cls == short.class || cls == Short.class) {
+                type = SHORT;
+
+                isPrimitive = true;
+            }
+            else if (cls == int.class || cls == Integer.class) {
+                type = INT;
+
+                isPrimitive = true;
+            }
+            else if (cls == long.class || cls == Long.class) {
+                type = LONG;
+
+                isPrimitive = true;
+            }
+            else if (cls == float.class || cls == Float.class) {
+                type = FLOAT;
+
+                isPrimitive = true;
+            }
+            else if (cls == double.class || cls == Double.class) {
+                type = DOUBLE;
+
+                isPrimitive = true;
+            }
+            else if (cls == char.class || cls == Character.class) {
+                type = CHAR;
+
+                isPrimitive = true;
+            }
+            else if (cls == boolean.class || cls == Boolean.class) {
+                type = BOOLEAN;
+
+                isPrimitive = true;
+            }
+            else if (cls == byte[].class)
+                type = BYTE_ARR;
+            else if (cls == short[].class)
+                type = SHORT_ARR;
+            else if (cls == int[].class)
+                type = INT_ARR;
+            else if (cls == long[].class)
+                type = LONG_ARR;
+            else if (cls == float[].class)
+                type = FLOAT_ARR;
+            else if (cls == double[].class)
+                type = DOUBLE_ARR;
+            else if (cls == char[].class)
+                type = CHAR_ARR;
+            else if (cls == boolean[].class)
+                type = BOOLEAN_ARR;
+            else if (cls.isArray())
+                type = OBJ_ARR;
+            else if (cls == String.class)
+                type = STR;
+            else if (cls.isEnum()) {
+                type = ENUM;
+
+                isEnum = true;
+                enumVals = cls.getEnumConstants();
+            }
+            // Support for enum constants, based on anonymous children classes.
+            else if ((parent = cls.getSuperclass()) != null && parent.isEnum()) {
+                type = ENUM;
+
+                isEnum = true;
+                enumVals = parent.getEnumConstants();
+            }
+            else if (cls == UUID.class)
+                type = UUID;
+            else if (cls == Properties.class) {
+                type = PROPS;
+
+                try {
+                    dfltsFieldOff = GridUnsafe.objectFieldOffset(Properties.class.getDeclaredField("defaults"));
+                }
+                catch (NoSuchFieldException e) {
+                    throw new IOException(e);
+                }
+            }
+            else if (cls == ArrayList.class)
+                type = ARRAY_LIST;
+            else if (cls == HashMap.class) {
+                type = HASH_MAP;
+
+                try {
+                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
+                }
+                catch (NoSuchFieldException e) {
+                    throw new IOException(e);
+                }
+            }
+            else if (cls == HashSet.class) {
+                type = HASH_SET;
+
+                try {
+                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
+                }
+                catch (NoSuchFieldException e) {
+                    throw new IOException(e);
+                }
+            }
+            else if (cls == LinkedList.class)
+                type = LINKED_LIST;
+            else if (cls == LinkedHashMap.class) {
+                type = LINKED_HASH_MAP;
+
+                try {
+                    loadFactorFieldOff =
+                        GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
+                    accessOrderFieldOff =
+                        GridUnsafe.objectFieldOffset(LinkedHashMap.class.getDeclaredField("accessOrder"));
+                }
+                catch (NoSuchFieldException e) {
+                    throw new IOException(e);
+                }
+            }
+            else if (cls == LinkedHashSet.class) {
+                type = LINKED_HASH_SET;
+
+                try {
+                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
+                }
+                catch (NoSuchFieldException e) {
+                    throw new IOException(e);
+                }
+            }
+            else if (cls == Date.class)
+                type = DATE;
+            else if (cls == Class.class) {
+                type = CLS;
+
+                isCls = true;
+            }
+            else if (Proxy.class.isAssignableFrom(cls)) {
+                type = PROXY;
+
+                proxyIntfs = cls.getInterfaces();
+            }
+            else {
+                Class<?> c = cls;
+
+                while ((writeReplaceMtd == null || readResolveMtd == null) && c != null && !c.equals(Object.class)) {
+                    if (writeReplaceMtd == null) {
+                        try {
+                            writeReplaceMtd = c.getDeclaredMethod("writeReplace");
+
+                            if (!isStatic(writeReplaceMtd.getModifiers()) &&
+                                !(isPrivate(writeReplaceMtd.getModifiers()) && c != cls) &&
+                                writeReplaceMtd.getReturnType().equals(Object.class))
+                                writeReplaceMtd.setAccessible(true);
+                            else
+                                // Set method back to null if it has incorrect signature.
+                                writeReplaceMtd = null;
+                        }
+                        catch (NoSuchMethodException ignored) {
+                            // No-op.
+                        }
+                    }
+
+                    if (readResolveMtd == null) {
+                        try {
+                            readResolveMtd = c.getDeclaredMethod("readResolve");
+
+                            if (!isStatic(readResolveMtd.getModifiers()) &&
+                                !(isPrivate(readResolveMtd.getModifiers()) && c != cls) &&
+                                readResolveMtd.getReturnType().equals(Object.class))
+                                readResolveMtd.setAccessible(true);
+                            else
+                                // Set method back to null if it has incorrect signature.
+                                readResolveMtd = null;
+                        }
+                        catch (NoSuchMethodException ignored) {
+                            // No-op.
+                        }
+                    }
+
+                    c = c.getSuperclass();
+                }
+
+                if (Externalizable.class.isAssignableFrom(cls)) {
+                    type = EXTERNALIZABLE;
+
+                    try {
+                        constructor = !Modifier.isStatic(cls.getModifiers()) && cls.getDeclaringClass() != null ?
+                            cls.getDeclaredConstructor(cls.getDeclaringClass()) :
+                            cls.getDeclaredConstructor();
+
+                        constructor.setAccessible(true);
+                    }
+                    catch (NoSuchMethodException e) {
+                        throw new IOException("Externalizable class doesn't have default constructor: " + cls, e);
+                    }
+                }
+                else {
+                    type = SERIALIZABLE;
+
+                    isSerial = Serializable.class.isAssignableFrom(cls);
+
+                    writeObjMtds = new ArrayList<>();
+                    readObjMtds = new ArrayList<>();
+                    List<ClassFields> fields = new ArrayList<>();
+
+                    for (c = cls; c != null && !c.equals(Object.class); c = c.getSuperclass()) {
+                        Method mtd;
+
+                        try {
+                            mtd = c.getDeclaredMethod("writeObject", ObjectOutputStream.class);
+
+                            int mod = mtd.getModifiers();
+
+                            if (!isStatic(mod) && isPrivate(mod) && mtd.getReturnType() == Void.TYPE)
+                                mtd.setAccessible(true);
+                            else
+                                // Set method back to null if it has incorrect signature.
+                                mtd = null;
+                        }
+                        catch (NoSuchMethodException ignored) {
+                            mtd = null;
+                        }
+
+                        writeObjMtds.add(mtd);
+
+                        try {
+                            mtd = c.getDeclaredMethod("readObject", ObjectInputStream.class);
+
+                            int mod = mtd.getModifiers();
+
+                            if (!isStatic(mod) && isPrivate(mod) && mtd.getReturnType() == Void.TYPE)
+                                mtd.setAccessible(true);
+                            else
+                                // Set method back to null if it has incorrect signature.
+                                mtd = null;
+                        }
+                        catch (NoSuchMethodException ignored) {
+                            mtd = null;
+                        }
+
+                        readObjMtds.add(mtd);
+
+                        final SerializableTransient serTransAn = c.getAnnotation(SerializableTransient.class);
+
+                        // Custom serialization policy for transient fields.
+                        if (serTransAn != null) {
+                            try {
+                                serTransMtd = c.getDeclaredMethod(serTransAn.methodName(), cls, IgniteProductVersion.class);
+
+                                int mod = serTransMtd.getModifiers();
+
+                                if (isStatic(mod) && isPrivate(mod)
+                                    && serTransMtd.getReturnType() == String[].class)
+                                    serTransMtd.setAccessible(true);
+                                else
+                                    // Set method back to null if it has incorrect signature.
+                                    serTransMtd = null;
+                            }
+                            catch (NoSuchMethodException ignored) {
+                                serTransMtd = null;
+                            }
+                        }
+
+                        Field[] clsFields0 = c.getDeclaredFields();
+
+                        Map<String, Field> fieldNames = new HashMap<>();
+
+                        for (Field f : clsFields0)
+                            fieldNames.put(f.getName(), f);
+
+                        List<FieldInfo> clsFields = new ArrayList<>(clsFields0.length);
+
+                        boolean hasSerialPersistentFields  = false;
+
+                        try {
+                            Field serFieldsDesc = c.getDeclaredField("serialPersistentFields");
+
+                            int mod = serFieldsDesc.getModifiers();
+
+                            if (serFieldsDesc.getType() == ObjectStreamField[].class &&
+                                isPrivate(mod) && isStatic(mod) && isFinal(mod)) {
+                                hasSerialPersistentFields = true;
+
+                                serFieldsDesc.setAccessible(true);
+
+                                ObjectStreamField[] serFields = (ObjectStreamField[]) serFieldsDesc.get(null);
+
+                                for (int i = 0; i < serFields.length; i++) {
+                                    ObjectStreamField serField = serFields[i];
+
+                                    FieldInfo fieldInfo;
+
+                                    if (!fieldNames.containsKey(serField.getName())) {
+                                        fieldInfo = new FieldInfo(null,
+                                            serField.getName(),
+                                            -1,
+                                            fieldType(serField.getType()));
+                                    }
+                                    else {
+                                        Field f = fieldNames.get(serField.getName());
+
+                                        fieldInfo = new FieldInfo(f,
+                                            serField.getName(),
+                                            GridUnsafe.objectFieldOffset(f),
+                                            fieldType(serField.getType()));
+                                    }
+
+                                    clsFields.add(fieldInfo);
+                                }
+                            }
+                        }
+                        catch (NoSuchFieldException ignored) {
+                            // No-op.
+                        }
+                        catch (IllegalAccessException e) {
+                            throw new IOException("Failed to get value of 'serialPersistentFields' field in class: " +
+                                cls.getName(), e);
+                        }
+
+                        if (!hasSerialPersistentFields) {
+                            for (int i = 0; i < clsFields0.length; i++) {
+                                Field f = clsFields0[i];
+
+                                int mod = f.getModifiers();
+
+                                if (!isStatic(mod) && !isTransient(mod)) {
+                                    FieldInfo fieldInfo = new FieldInfo(f, f.getName(),
+                                        GridUnsafe.objectFieldOffset(f), fieldType(f.getType()));
+
+                                    clsFields.add(fieldInfo);
+                                }
+                            }
+                        }
+
+                        Collections.sort(clsFields, new Comparator<FieldInfo>() {
+                            @Override public int compare(FieldInfo t1, FieldInfo t2) {
+                                return t1.name().compareTo(t2.name());
+                            }
+                        });
+
+                        fields.add(new ClassFields(clsFields));
+                    }
+
+                    Collections.reverse(writeObjMtds);
+                    Collections.reverse(readObjMtds);
+                    Collections.reverse(fields);
+
+                    this.fields = new Fields(fields);
+                }
+            }
+        }
+
+        checksum = computeSerialVersionUid(cls, fields != null ? fields.ownFields() : null);
+    }
+
+    /**
+     * @return Excluded flag.
+     */
+    boolean excluded() {
+        return excluded;
+    }
+
+    /**
+     * @return Class.
+     */
+    Class<?> describedClass() {
+        return cls;
+    }
+
+    /**
+     * @return Primitive flag.
+     */
+    boolean isPrimitive() {
+        return isPrimitive;
+    }
+
+    /**
+     * @return Enum flag.
+     */
+    boolean isEnum() {
+        return isEnum;
+    }
+
+    /**
+     * @return {@code True} if descriptor is for {@link Class}.
+     */
+    boolean isClass() {
+        return isCls;
+    }
+
+    /**
+     * @return {@code True} if descriptor is for {@link Proxy}.
+     */
+    boolean isProxy() {
+        return type == PROXY;
+    }
+
+    /**
+     * Replaces object.
+     *
+     * @param obj Object.
+     * @return Replaced object or {@code null} if there is no {@code writeReplace} method.
+     * @throws IOException In case of error.
+     */
+    Object replace(Object obj) throws IOException {
+        if (writeReplaceMtd != null) {
+            try {
+                return writeReplaceMtd.invoke(obj);
+            }
+            catch (IllegalAccessException | InvocationTargetException e) {
+                throw new IOException(e);
+            }
+        }
+
+        return obj;
+    }
+
+    /**
+     * Writes object to stream.
+     *
+     * @param out Output stream.
+     * @param obj Object.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    void write(OptimizedObjectOutputStream out, Object obj) throws IOException {
+        out.write(type);
+
+        switch (type) {
+            case BYTE:
+                out.writeByte((Byte)obj);
+
+                break;
+
+            case SHORT:
+                out.writeShort((Short)obj);
+
+                break;
+
+            case INT:
+                out.writeInt((Integer)obj);
+
+                break;
+
+            case LONG:
+                out.writeLong((Long)obj);
+
+                break;
+
+            case FLOAT:
+                out.writeFloat((Float)obj);
+
+                break;
+
+            case DOUBLE:
+                out.writeDouble((Double)obj);
+
+                break;
+
+            case CHAR:
+                out.writeChar((Character)obj);
+
+                break;
+
+            case BOOLEAN:
+                out.writeBoolean((Boolean)obj);
+
+                break;
+
+            case BYTE_ARR:
+                out.writeByteArray((byte[])obj);
+
+                break;
+
+            case SHORT_ARR:
+                out.writeShortArray((short[])obj);
+
+                break;
+
+            case INT_ARR:
+                out.writeIntArray((int[])obj);
+
+                break;
+
+            case LONG_ARR:
+                out.writeLongArray((long[])obj);
+
+                break;
+
+            case FLOAT_ARR:
+                out.writeFloatArray((float[])obj);
+
+                break;
+
+            case DOUBLE_ARR:
+                out.writeDoubleArray((double[])obj);
+
+                break;
+
+            case CHAR_ARR:
+                out.writeCharArray((char[])obj);
+
+                break;
+
+            case BOOLEAN_ARR:
+                out.writeBooleanArray((boolean[])obj);
+
+                break;
+
+            case OBJ_ARR:
+                OptimizedClassDescriptor compDesc = classDescriptor(clsMap,
+                    obj.getClass().getComponentType(),
+                    ctx,
+                    mapper);
+
+                compDesc.writeTypeData(out);
+
+                out.writeArray((Object[])obj);
+
+                break;
+
+            case STR:
+                out.writeString((String)obj);
+
+                break;
+
+            case UUID:
+                out.writeUuid((UUID)obj);
+
+                break;
+
+            case PROPS:
+                out.writeProperties((Properties)obj, dfltsFieldOff);
+
+                break;
+
+            case ARRAY_LIST:
+                out.writeArrayList((ArrayList<?>)obj);
+
+                break;
+
+            case HASH_MAP:
+                out.writeHashMap((HashMap<?, ?>)obj, loadFactorFieldOff, false);
+
+                break;
+
+            case HASH_SET:
+                out.writeHashSet((HashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
+
+                break;
+
+            case LINKED_LIST:
+                out.writeLinkedList((LinkedList<?>)obj);
+
+                break;
+
+            case LINKED_HASH_MAP:
+                out.writeLinkedHashMap((LinkedHashMap<?, ?>)obj, loadFactorFieldOff, accessOrderFieldOff, false);
+
+                break;
+
+            case LINKED_HASH_SET:
+                out.writeLinkedHashSet((LinkedHashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
+
+                break;
+
+            case DATE:
+                out.writeDate((Date)obj);
+
+                break;
+
+            case CLS:
+                OptimizedClassDescriptor clsDesc = classDescriptor(clsMap, (Class<?>)obj, ctx, mapper);
+
+                clsDesc.writeTypeData(out);
+
+                break;
+
+            case PROXY:
+                out.writeInt(proxyIntfs.length);
+
+                for (Class<?> intf : proxyIntfs) {
+                    OptimizedClassDescriptor intfDesc = classDescriptor(clsMap, intf, ctx, mapper);
+
+                    intfDesc.writeTypeData(out);
+                }
+
+                InvocationHandler ih = Proxy.getInvocationHandler(obj);
+
+                assert ih != null;
+
+                out.writeObject(ih);
+
+                break;
+
+            case ENUM:
+                writeTypeData(out);
+
+                out.writeInt(((Enum)obj).ordinal());
+
+                break;
+
+            case EXTERNALIZABLE:
+                writeTypeData(out);
+
+                out.writeShort(checksum);
+                out.writeExternalizable(obj);
+
+                break;
+
+            case SERIALIZABLE:
+                if (out.requireSerializable() && !isSerial)
+                    throw new NotSerializableException("Must implement java.io.Serializable or " +
+                        "set OptimizedMarshaller.setRequireSerializable() to false " +
+                        "(note that performance may degrade if object is not Serializable): " + name);
+
+                writeTypeData(out);
+
+                out.writeShort(checksum);
+                out.writeSerializable(obj, writeObjMtds, serializableFields(obj.getClass(), obj, null));
+
+                break;
+
+            default:
+                throw new IllegalStateException("Invalid class type: " + type);
+        }
+    }
+
+    /**
+     * Gets list of serializable fields. If {@link #serTransMtd} method
+     * returns list of transient fields, they will be added to other fields.
+     * Transient fields that are not included in that list will be normally
+     * ignored.
+     *
+     * @param cls Class.
+     * @param obj Object.
+     * @param ver Job sender version.
+     * @return Serializable fields.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    private Fields serializableFields(Class<?> cls, Object obj, IgniteProductVersion ver) {
+        if (serTransMtd == null)
+            return fields;
+
+        try {
+            final String[] transFields = (String[])serTransMtd.invoke(cls, obj, ver);
+
+            if (transFields == null || transFields.length == 0)
+                return fields;
+
+            List<FieldInfo> clsFields = new ArrayList<>();
+
+            clsFields.addAll(fields.fields.get(0).fields);
+
+            for (int i = 0; i < transFields.length; i++) {
+                final String fieldName = transFields[i];
+
+                final Field f = cls.getDeclaredField(fieldName);
+
+                FieldInfo fieldInfo = new FieldInfo(f, f.getName(),
+                    GridUnsafe.objectFieldOffset(f), fieldType(f.getType()));
+
+                clsFields.add(fieldInfo);
+            }
+
+            Collections.sort(clsFields, new Comparator<FieldInfo>() {
+                @Override public int compare(FieldInfo t1, FieldInfo t2) {
+                    return t1.name().compareTo(t2.name());
+                }
+            });
+
+            List<ClassFields> fields = new ArrayList<>();
+
+            fields.add(new ClassFields(clsFields));
+
+            return new Fields(fields);
+        }
+        catch (Exception ignored) {
+            return fields;
+        }
+    }
+
+    /**
+     * @param out Output stream.
+     * @throws IOException In case of error.
+     */
+    void writeTypeData(OptimizedObjectOutputStream out) throws IOException {
+        out.writeInt(typeId);
+
+        if (typeId == 0)
+            out.writeUTF(name);
+    }
+
+    /**
+     * Reads object from stream.
+     *
+     * @param in Input stream.
+     * @return Object.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    Object read(OptimizedObjectInputStream in) throws ClassNotFoundException, IOException {
+        switch (type) {
+            case ENUM:
+                return enumVals[in.readInt()];
+
+            case EXTERNALIZABLE:
+                verifyChecksum(in.readShort());
+
+                return in.readExternalizable(constructor, readResolveMtd);
+
+            case SERIALIZABLE:
+                verifyChecksum(in.readShort());
+
+                // If no serialize method, then unmarshal as usual.
+                if (serTransMtd != null)
+                    return in.readSerializable(cls, readObjMtds, readResolveMtd,
+                        serializableFields(cls, null, MarshallerUtils.jobSenderVersion()));
+                else
+                    return in.readSerializable(cls, readObjMtds, readResolveMtd, fields);
+
+            default:
+                assert false : "Unexpected type: " + type;
+
+                return null;
+        }
+    }
+
+    /**
+     * @param checksum Checksum.
+     * @throws ClassNotFoundException If checksum is wrong.
+     * @throws IOException In case of error.
+     */
+    private void verifyChecksum(short checksum) throws ClassNotFoundException, IOException {
+        if (checksum != this.checksum)
+            throw new ClassNotFoundException("Optimized stream class checksum mismatch " +
+                "(is same version of marshalled class present on all nodes?) " +
+                "[expected=" + this.checksum + ", actual=" + checksum + ", cls=" + cls + ']');
+    }
+
+    /**
+     * @param cls Class.
+     * @return Type.
+     */
+    @SuppressWarnings("IfMayBeConditional")
+    private OptimizedFieldType fieldType(Class<?> cls) {
+        OptimizedFieldType type;
+
+        if (cls == byte.class)
+            type = OptimizedFieldType.BYTE;
+        else if (cls == short.class)
+            type = OptimizedFieldType.SHORT;
+        else if (cls == int.class)
+            type = OptimizedFieldType.INT;
+        else if (cls == long.class)
+            type = OptimizedFieldType.LONG;
+        else if (cls == float.class)
+            type = OptimizedFieldType.FLOAT;
+        else if (cls == double.class)
+            type = OptimizedFieldType.DOUBLE;
+        else if (cls == char.class)
+            type = OptimizedFieldType.CHAR;
+        else if (cls == boolean.class)
+            type = OptimizedFieldType.BOOLEAN;
+        else
+            type = OptimizedFieldType.OTHER;
+
+        return type;
+    }
+
+    /**
+     * Information about one field.
+     */
+    @SuppressWarnings("PackageVisibleInnerClass")
+    static class FieldInfo {
+        /** Field. */
+        private final Field field;
+
+        /** Field offset. */
+        private final long fieldOffs;
+
+        /** Field type. */
+        private final OptimizedFieldType fieldType;
+
+        /** Field name. */
+        private final String fieldName;
+
+        /**
+         * @param field Field.
+         * @param name Field name.
+         * @param offset Field offset.
+         * @param type Grid optimized field type.
+         */
+        FieldInfo(Field field, String name, long offset, OptimizedFieldType type) {
+            this.field = field;
+            fieldOffs = offset;
+            fieldType = type;
+            fieldName = name;
+        }
+
+        /**
+         * @return Returns field.
+         */
+        Field field() {
+            return field;
+        }
+
+        /**
+         * @return Offset.
+         */
+        long offset() {
+            return fieldOffs;
+        }
+
+        /**
+         * @return Type.
+         */
+        OptimizedFieldType type() {
+            return fieldType;
+        }
+
+        /**
+         * @return Name.
+         */
+        String name() {
+            return fieldName;
+        }
+    }
+
+    /**
+     * Information about one class.
+     */
+    static class ClassFields {
+        /** Fields. */
+        private final List<FieldInfo> fields;
+
+        private final Map<String, Integer> nameToIndex;
+
+        /**
+         * @param fields Field infos.
+         */
+        ClassFields(List<FieldInfo> fields) {
+            this.fields = fields;
+
+            nameToIndex = U.newHashMap(fields.size());
+
+            for (int i = 0; i < fields.size(); ++i)
+                nameToIndex.put(fields.get(i).name(), i);
+        }
+
+        /**
+         * @return Class fields.
+         */
+        List<FieldInfo> fields() {
+            return fields;
+        }
+
+        /**
+         * @return Fields count.
+         */
+        int size() {
+            return fields.size();
+        }
+
+        /**
+         * @param i Field's index.
+         * @return FieldInfo.
+         */
+        FieldInfo get(int i) {
+            return fields.get(i);
+        }
+
+        /**
+         * @param name Field's name.
+         * @return Field's index.
+         */
+        int getIndex(String name) {
+            assert nameToIndex.containsKey(name);
+
+            return nameToIndex.get(name);
+        }
+    }
+
+    /**
+     * Encapsulates data about class fields.
+     */
+    @SuppressWarnings("PackageVisibleInnerClass")
+    static class Fields {
+        /** Fields. */
+        private final List<ClassFields> fields;
+
+        /** Own fields (excluding inherited). */
+        private final List<Field> ownFields;
+
+        /**
+         * Creates new instance.
+         *
+         * @param fields Fields.
+         */
+        Fields(List<ClassFields> fields) {
+            this.fields = fields;
+
+            if (fields.isEmpty())
+                ownFields = null;
+            else {
+                ownFields = new ArrayList<>(fields.size());
+
+                for (FieldInfo f : fields.get(fields.size() - 1).fields()) {
+                    if (f.field() != null)
+                        ownFields.add(f.field);
+                }
+            }
+        }
+
+        /**
+         * Returns class's own fields (excluding inherited).
+         *
+         * @return List of fields or {@code null} if fields list is empty.
+         */
+        List<Field> ownFields() {
+            return ownFields;
+        }
+
+        /**
+         * Returns field types and their offsets.
+         *
+         * @param i hierarchy level where 0 corresponds to top level.
+         * @return list of pairs where first value is field type and second value is its offset.
+         */
+        ClassFields fields(int i) {
+            return fields.get(i);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
new file mode 100644
index 0000000..39cad13
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
@@ -0,0 +1,50 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+/**
+ * Field type used to calculate {@code Unsafe} offsets into objects.
+ */
+enum OptimizedFieldType {
+    /** */
+    BYTE,
+
+    /** */
+    SHORT,
+
+    /** */
+    INT,
+
+    /** */
+    LONG,
+
+    /** */
+    FLOAT,
+
+    /** */
+    DOUBLE,
+
+    /** */
+    CHAR,
+
+    /** */
+    BOOLEAN,
+
+    /** */
+    OTHER
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
new file mode 100644
index 0000000..f69c6dc
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
@@ -0,0 +1,313 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller;
+import org.jetbrains.annotations.Nullable;
+import org.jsr166.ConcurrentHashMap8;
+import sun.misc.Unsafe;
+
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
+
+/**
+ * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}.
+ * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller},
+ * which is based on standard {@link ObjectOutputStream}, this marshaller does not
+ * enforce that all serialized objects implement {@link Serializable} interface. It is also
+ * about 20 times faster as it removes lots of serialization overhead that exists in
+ * default JDK implementation.
+ * <p>
+ * {@code OptimizedMarshaller} is tested only on Java HotSpot VM on other VMs
+ * it could yield unexpected results. It is the default marshaller on Java HotSpot VMs
+ * and will be used if no other marshaller was explicitly configured.
+ * <p>
+ * <h1 class="header">Configuration</h1>
+ * <h2 class="header">Mandatory</h2>
+ * This marshaller has no mandatory configuration parameters.
+ * <h2 class="header">Java Example</h2>
+ * <pre name="code" class="java">
+ * OptimizedMarshaller marshaller = new OptimizedMarshaller();
+ *
+ * // Enforce Serializable interface.
+ * marshaller.setRequireSerializable(true);
+ *
+ * IgniteConfiguration cfg = new IgniteConfiguration();
+ *
+ * // Override marshaller.
+ * cfg.setMarshaller(marshaller);
+ *
+ * // Starts grid.
+ * G.start(cfg);
+ * </pre>
+ * <h2 class="header">Spring Example</h2>
+ * GridOptimizedMarshaller can be configured from Spring XML configuration file:
+ * <pre name="code" class="xml">
+ * &lt;bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"&gt;
+ *     ...
+ *     &lt;property name="marshaller"&gt;
+ *         &lt;bean class="OptimizedMarshaller"&gt;
+ *             &lt;property name="requireSerializable"&gt;true&lt;/property&gt;
+ *         &lt;/bean&gt;
+ *     &lt;/property&gt;
+ *     ...
+ * &lt;/bean&gt;
+ * </pre>
+ * <p>
+ * <img src="http://ignite.apache.org/images/spring-small.png">
+ * <br>
+ * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
+ */
+public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
+    /** Use default {@code serialVersionUID} for {@link Serializable} classes. */
+    public static final boolean USE_DFLT_SUID =
+        IgniteSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, false);
+
+    /** Default class loader. */
+    private final ClassLoader dfltClsLdr = getClass().getClassLoader();
+
+    /** Whether or not to require an object to be serializable in order to be marshalled. */
+    private boolean requireSer = true;
+
+    /** ID mapper. */
+    private OptimizedMarshallerIdMapper mapper;
+
+    /** Class descriptors by class. */
+    private final ConcurrentMap<Class, OptimizedClassDescriptor> clsMap = new ConcurrentHashMap8<>();
+
+    /**
+     * Creates new marshaller will all defaults.
+     *
+     * @throws IgniteException If this marshaller is not supported on the current JVM.
+     */
+    public OptimizedMarshaller() {
+        if (!available())
+            throw new IgniteException("Using OptimizedMarshaller on unsupported JVM version (some of " +
+                "JVM-private APIs required for the marshaller to work are missing).");
+    }
+
+    /**
+     * Creates new marshaller providing whether it should
+     * require {@link Serializable} interface or not.
+     *
+     * @param requireSer Whether to require {@link Serializable}.
+     */
+    public OptimizedMarshaller(boolean requireSer) {
+        this.requireSer = requireSer;
+    }
+
+    /**
+     * Sets whether marshaller should require {@link Serializable} interface or not.
+     *
+     * @param requireSer Whether to require {@link Serializable}.
+     * @return {@code this} for chaining.
+     */
+    public OptimizedMarshaller setRequireSerializable(boolean requireSer) {
+        this.requireSer = requireSer;
+
+        return this;
+    }
+
+    /**
+     * Sets ID mapper.
+     *
+     * @param mapper ID mapper.
+     * @return {@code this} for chaining.
+     */
+    public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) {
+        this.mapper = mapper;
+
+        return this;
+    }
+
+    /**
+     * Specifies size of cached object streams used by marshaller. Object streams are cached for
+     * performance reason to avoid costly recreation for every serialization routine. If {@code 0} (default),
+     * pool is not used and each thread has its own cached object stream which it keeps reusing.
+     * <p>
+     * Since each stream has an internal buffer, creating a stream for each thread can lead to
+     * high memory consumption if many large messages are marshalled or unmarshalled concurrently.
+     * Consider using pool in this case. This will limit number of streams that can be created and,
+     * therefore, decrease memory consumption.
+     * <p>
+     * NOTE: Using streams pool can decrease performance since streams will be shared between
+     * 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 OptimizedMarshaller setPoolSize(int poolSize) {
+        OptimizedObjectStreamRegistry.poolSize(poolSize);
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException {
+        assert out != null;
+
+        OptimizedObjectOutputStream objOut = null;
+
+        try {
+            objOut = OptimizedObjectStreamRegistry.out();
+
+            objOut.context(clsMap, ctx, mapper, requireSer);
+
+            objOut.out().outputStream(out);
+
+            objOut.writeObject(obj);
+        }
+        catch (IOException e) {
+            throw new IgniteCheckedException("Failed to serialize object: " + obj, e);
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeOut(objOut);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException {
+        OptimizedObjectOutputStream objOut = null;
+
+        try {
+            objOut = OptimizedObjectStreamRegistry.out();
+
+            objOut.context(clsMap, ctx, mapper, requireSer);
+
+            objOut.writeObject(obj);
+
+            return objOut.out().array();
+        }
+        catch (Exception e) {
+            throw new IgniteCheckedException("Failed to serialize object: " + obj, e);
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeOut(objOut);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
+    @Override protected <T> T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+        assert in != null;
+
+        OptimizedObjectInputStream objIn = null;
+
+        try {
+            objIn = OptimizedObjectStreamRegistry.in();
+
+            objIn.context(clsMap, ctx, mapper, clsLdr != null ? clsLdr : dfltClsLdr);
+
+            objIn.in().inputStream(in);
+
+            return (T)objIn.readObject();
+        }
+        catch (ClassNotFoundException e) {
+            throw new IgniteCheckedException("Failed to find class with given class loader for unmarshalling " +
+                "(make sure same versions of all classes are available on all nodes or enable peer-class-loading) " +
+                "[clsLdr=" + clsLdr + ", cls=" + e.getMessage() + "]", e);
+        }
+        catch (Exception e) {
+            throw new IgniteCheckedException("Failed to deserialize object with given class loader: " + clsLdr, e);
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeIn(objIn);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
+    @Override protected <T> T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+        assert arr != null;
+
+        OptimizedObjectInputStream objIn = null;
+
+        try {
+            objIn = OptimizedObjectStreamRegistry.in();
+
+            objIn.context(clsMap, ctx, mapper, clsLdr != null ? clsLdr : dfltClsLdr);
+
+            objIn.in().bytes(arr, arr.length);
+
+            return (T)objIn.readObject();
+        }
+        catch (ClassNotFoundException e) {
+            throw new IgniteCheckedException("Failed to find class with given class loader for unmarshalling " +
+                "(make sure same version of all classes are available on all nodes or enable peer-class-loading)" +
+                " [clsLdr=" + clsLdr + ", cls=" + e.getMessage() + "]", e);
+        }
+        catch (Exception e) {
+            throw new IgniteCheckedException("Failed to deserialize object with given class loader: " + clsLdr, e);
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeIn(objIn);
+        }
+    }
+
+    /**
+     * Checks whether {@code GridOptimizedMarshaller} is able to work on the current JVM.
+     * <p>
+     * As long as {@code GridOptimizedMarshaller} uses JVM-private API, which is not guaranteed
+     * to be available on all JVM, this method should be called to ensure marshaller could work properly.
+     * <p>
+     * Result of this method is automatically checked in constructor.
+     *
+     * @return {@code true} if {@code GridOptimizedMarshaller} can work on the current JVM or
+     *  {@code false} if it can't.
+     */
+    @SuppressWarnings({"TypeParameterExtendsFinalClass", "ErrorNotRethrown"})
+    public static boolean available() {
+        try {
+            Class<? extends Unsafe> unsafeCls = Unsafe.class;
+
+            unsafeCls.getMethod("allocateInstance", Class.class);
+            unsafeCls.getMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class);
+
+            return true;
+        }
+        catch (Exception ignored) {
+            return false;
+        }
+        catch (NoClassDefFoundError ignored) {
+            return false;
+        }
+    }
+
+    /**
+     * Undeployment callback invoked when class loader is being undeployed.
+     *
+     * @param ldr Class loader being undeployed.
+     */
+    @Override public void onUndeploy(ClassLoader ldr) {
+        for (Class<?> cls : clsMap.keySet()) {
+            if (ldr.equals(cls.getClassLoader()))
+                clsMap.remove(cls);
+        }
+
+        U.clearClassCache(ldr);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
new file mode 100644
index 0000000..381e5d0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
@@ -0,0 +1,33 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+/**
+ * ID mapper.
+ */
+public interface OptimizedMarshallerIdMapper {
+    /**
+     * Gets type ID for provided class name.
+     * <p>
+     * If {@code 0} is returned, hash code of class name will be used.
+     *
+     * @param clsName Class name.
+     * @return Type ID.
+     */
+    public int typeId(String clsName);
+}
\ No newline at end of file


[14/14] ignite git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/ignite into ignite-4938

Posted by ag...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/ignite into ignite-4938

Conflicts:
	examples/config/filesystem/example-igfs.xml
	modules/clients/src/test/config/jdbc-config.xml
	modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
	modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
	modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
	modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
	modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
	modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientZipOptimizedMarshaller.java
	modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
	modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
	modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
	modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
	modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
	modules/core/src/main/java/org/apache/ignite/marshaller/optimized/package-info.java
	modules/core/src/main/resources/META-INF/classnames.properties
	modules/core/src/test/config/example-cache.xml
	modules/core/src/test/config/igfs-loopback.xml
	modules/core/src/test/config/igfs-shmem.xml
	modules/core/src/test/config/spring-start-nodes-attr.xml
	modules/core/src/test/config/spring-start-nodes.xml
	modules/core/src/test/config/websession/example-cache-base.xml
	modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
	modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerSelfTest.java
	modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
	modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
	modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
	modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
	modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
	modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
	modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
	modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
	modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
	modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
	modules/core/src/test/java/org/apache/ignite/testsuites/IgniteIgfsTestSuite.java
	modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
	modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
	modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
	modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
	modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
	modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
	modules/hadoop/src/test/config/igfs-cli-config-dual-sync.xml
	modules/hadoop/src/test/config/igfs-cli-config-primary.xml
	modules/hadoop/src/test/config/igfs-cli-config-proxy.xml
	modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/igfs/IgniteHadoopFileSystemAbstractSelfTest.java
	modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheNoClassQuerySelfTest.java
	modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/AbstractH2CompareQueryTest.java
	modules/indexing/src/test/java/org/apache/ignite/loadtests/h2indexing/FetchingQueryCursorStressTest.java
	modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/marshaller-invalid.xml
	modules/spring-data/src/main/java/org/apache/ignite/springdata/repository/package-info.java
	modules/spring/src/test/java/org/apache/ignite/internal/GridSpringBeanSerializationSelfTest.java
	modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
	modules/yardstick/config/ignite-int-max-values-offheap-config.xml
	modules/yardstick/config/ignite-int-max-values-onheap-config.xml
	modules/yardstick/config/ignite-int-max-values-swap-config.xml
	modules/yardstick/config/ignite-jdbc-config.xml


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c89cc392
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c89cc392
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c89cc392

Branch: refs/heads/ignite-4938
Commit: c89cc392f6e9f3008707a532422e10ba12fe44f1
Parents: 1115ca5 ecadf6a
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Fri Apr 14 18:00:51 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Fri Apr 14 18:00:51 2017 +0300

----------------------------------------------------------------------
 assembly/dependencies-fabric.xml                |    1 +
 assembly/libs/README.txt                        |    1 +
 assembly/release-fabric-base.xml                |    6 +
 bin/control.bat                                 |  229 +
 bin/control.sh                                  |  180 +
 examples/pom-standalone-lgpl.xml                |    6 +
 examples/pom-standalone.xml                     |    6 +
 examples/pom.xml                                |    6 +
 .../starschema/CacheStarSchemaExample.java      |   59 +-
 .../examples/springdata/PersonRepository.java   |   59 +
 .../examples/springdata/SpringAppCfg.java       |   69 +
 .../examples/springdata/SpringDataExample.java  |  154 +
 .../examples/ScalarCacheAffinityExample.scala   |    2 +-
 .../examples/SpringDataExampleSelfTest.java     |   32 +
 .../testsuites/IgniteExamplesSelfTestSuite.java |    2 +
 .../optimized/OptimizedMarshallerAopTest.java   |  105 +
 .../optimized/OptimizedMarshallerAopTest.java   |  105 -
 modules/aws/pom.xml                             |    6 +-
 .../jmh/future/JmhFutureAdapterBenchmark.java   |  145 +
 .../benchmarks/jmh/tree/BPlusTreeBenchmark.java |  325 ++
 .../ignite/ignite-cassandra-server-template.xml |    6 -
 .../tests/ignite-cassandra-client-template.xml  |    6 -
 .../integration/ClientAbstractSelfTest.java     |    6 -
 .../jdbc2/JdbcComplexQuerySelfTest.java         |   82 +-
 .../internal/jdbc2/JdbcLocalCachesSelfTest.java |   30 +-
 .../internal/jdbc2/JdbcMetadataSelfTest.java    |   96 +-
 .../jdbc2/JdbcPreparedStatementSelfTest.java    |   53 +-
 .../rest/ChangeStateCommandHandlerTest.java     |  125 +
 .../JettyRestProcessorAbstractSelfTest.java     |   82 +-
 .../ignite/jdbc/JdbcComplexQuerySelfTest.java   |   44 +-
 .../ignite/jdbc/JdbcMetadataSelfTest.java       |  103 +-
 .../ignite/codegen/MessageCodeGenerator.java    |    2 +
 .../src/main/java/org/apache/ignite/Ignite.java |   31 +-
 .../java/org/apache/ignite/IgniteCache.java     |  302 +-
 .../apache/ignite/IgniteCheckedException.java   |   12 +
 .../java/org/apache/ignite/IgniteCluster.java   |   52 -
 .../apache/ignite/IgniteSystemProperties.java   |   52 +
 .../java/org/apache/ignite/MemoryMetrics.java   |   95 +
 .../binary/BinaryAbstractIdentityResolver.java  |   53 -
 .../binary/BinaryArrayIdentityResolver.java     |  224 -
 .../binary/BinaryFieldIdentityResolver.java     |  307 --
 .../ignite/binary/BinaryIdentityResolver.java   |   42 -
 .../ignite/binary/BinaryTypeConfiguration.java  |   25 -
 .../org/apache/ignite/cache/CacheEntry.java     |    1 -
 .../apache/ignite/cache/CacheMemoryMode.java    |   63 -
 .../org/apache/ignite/cache/CacheMetrics.java   |   70 -
 .../org/apache/ignite/cache/CachePeekMode.java  |    6 +-
 .../cache/CacheWriteSynchronizationMode.java    |    4 +-
 .../ignite/cache/PartitionLossPolicy.java       |   80 +
 .../org/apache/ignite/cache/QueryIndex.java     |   21 +
 .../org/apache/ignite/cache/QueryIndexType.java |   17 +-
 .../cache/affinity/AffinityKeyMapped.java       |   14 +-
 .../AffinityNodeAddressHashResolver.java        |   44 -
 .../affinity/AffinityNodeHashResolver.java      |   47 -
 .../affinity/AffinityNodeIdHashResolver.java    |   45 -
 .../affinity/fair/FairAffinityFunction.java     | 1158 -----
 .../cache/affinity/fair/package-info.java       |   21 -
 .../rendezvous/RendezvousAffinityFunction.java  |  359 +-
 .../store/jdbc/CacheAbstractJdbcStore.java      |   11 +-
 .../configuration/CacheConfiguration.java       |  501 +-
 .../configuration/CollectionConfiguration.java  |   22 -
 .../configuration/DataPageEvictionMode.java     |   44 +
 .../configuration/IgniteConfiguration.java      |  116 +-
 .../configuration/MemoryConfiguration.java      |  173 +
 .../MemoryPolicyConfiguration.java              |  162 +
 .../configuration/NearCacheConfiguration.java   |    1 -
 .../org/apache/ignite/hadoop/package-info.java  |   22 +
 .../java/org/apache/ignite/igfs/IgfsPath.java   |   31 +-
 .../ignite/internal/GridCachePluginContext.java |   13 +-
 .../apache/ignite/internal/GridComponent.java   |   10 +-
 .../internal/GridEventConsumeHandler.java       |    5 +-
 .../ignite/internal/GridKernalContext.java      |   24 +-
 .../ignite/internal/GridKernalContextImpl.java  |   36 +-
 .../internal/GridMessageListenHandler.java      |    5 +-
 .../ignite/internal/GridPluginComponent.java    |    4 +-
 .../org/apache/ignite/internal/GridTopic.java   |    2 +
 .../ignite/internal/IgniteInternalFuture.java   |   15 -
 .../apache/ignite/internal/IgniteKernal.java    |  354 +-
 .../ignite/internal/IgniteNodeAttributes.java   |    3 +
 .../org/apache/ignite/internal/IgnitionEx.java  |   41 +-
 .../apache/ignite/internal/LessNamingBean.java  |   28 -
 .../ignite/internal/MarshallerContextImpl.java  |   14 +-
 .../binary/BinaryAbstractIdentityResolver.java  |   56 +
 .../binary/BinaryArrayIdentityResolver.java     |  222 +
 .../internal/binary/BinaryClassDescriptor.java  |    1 +
 .../ignite/internal/binary/BinaryContext.java   |   19 +-
 .../internal/binary/BinaryEnumObjectImpl.java   |   39 +-
 .../ignite/internal/binary/BinaryFieldEx.java   |   45 +
 .../ignite/internal/binary/BinaryFieldImpl.java |  173 +-
 .../internal/binary/BinaryIdentityResolver.java |   43 +
 .../ignite/internal/binary/BinaryMetadata.java  |    1 +
 .../internal/binary/BinaryObjectExImpl.java     |   11 +-
 .../internal/binary/BinaryObjectImpl.java       |  137 +
 .../binary/BinaryObjectOffheapImpl.java         |   26 +
 .../internal/binary/BinaryReaderExImpl.java     |    2 +-
 .../ignite/internal/binary/BinarySchema.java    |   11 +
 .../ignite/internal/binary/BinaryUtils.java     |   14 +-
 .../internal/binary/BinaryWriterExImpl.java     |    1 -
 .../binary/builder/BinaryBuilderReader.java     |    8 +
 .../streams/BinaryByteBufferInputStream.java    |  301 ++
 .../ignite/internal/client/GridClient.java      |    9 +
 .../internal/client/GridClientClusterState.java |   33 +
 .../client/impl/GridClientClusterStateImpl.java |   75 +
 .../internal/client/impl/GridClientImpl.java    |   11 +
 .../impl/connection/GridClientConnection.java   |   17 +
 .../connection/GridClientNioTcpConnection.java  |   21 +
 .../GridClientOptimizedMarshaller.java          |    1 +
 .../GridClientZipOptimizedMarshaller.java       |    1 +
 .../router/impl/GridRouterClientImpl.java       |    6 +
 .../cluster/IgniteClusterAsyncImpl.java         |   11 -
 .../internal/cluster/IgniteClusterImpl.java     |   38 -
 .../internal/commandline/CommandHandler.java    |   89 +
 .../ignite/internal/jdbc2/JdbcQueryTask.java    |   41 +-
 .../ignite/internal/jdbc2/JdbcQueryTaskV2.java  |  406 --
 .../ignite/internal/jdbc2/JdbcResultSet.java    |   64 +-
 .../ignite/internal/jdbc2/JdbcStatement.java    |   12 +-
 .../internal/managers/GridManagerAdapter.java   |   38 +-
 .../checkpoint/GridCheckpointManager.java       |    2 +-
 .../collision/GridCollisionManager.java         |    2 +-
 .../managers/communication/GridIoManager.java   |   26 +-
 .../communication/GridIoMessageFactory.java     |   40 +-
 .../communication/IgniteIoTestMessage.java      |   11 +-
 .../deployment/GridDeploymentManager.java       |    2 +-
 .../discovery/GridDiscoveryManager.java         |   76 +-
 .../eventstorage/GridEventStorageManager.java   |  343 +-
 .../managers/failover/GridFailoverManager.java  |    2 +-
 .../managers/indexing/GridIndexingManager.java  |    2 +-
 .../loadbalancer/GridLoadBalancerManager.java   |    2 +-
 .../swapspace/GridSwapSpaceManager.java         |  417 --
 .../managers/swapspace/package-info.java        |   22 -
 .../optimized/OptimizedClassDescriptor.java     |    8 +-
 .../ignite/internal/mem/DirectMemory.java       |   55 +
 .../internal/mem/DirectMemoryProvider.java      |   25 +
 .../ignite/internal/mem/DirectMemoryRegion.java |   41 +
 .../internal/mem/OutOfMemoryException.java      |   51 +
 .../apache/ignite/internal/mem/UnsafeChunk.java |   66 +
 .../ignite/internal/mem/file/MappedFile.java    |  152 +
 .../mem/file/MappedFileMemoryProvider.java      |  225 +
 .../mem/unsafe/UnsafeMemoryProvider.java        |   89 +
 .../ignite/internal/pagemem/FullPageId.java     |  157 +
 .../internal/pagemem/PageIdAllocator.java       |   53 +
 .../ignite/internal/pagemem/PageIdUtils.java    |  201 +
 .../ignite/internal/pagemem/PageMemory.java     |   46 +
 .../ignite/internal/pagemem/PageSupport.java    |  114 +
 .../ignite/internal/pagemem/PageUtils.java      |  185 +
 .../pagemem/impl/PageMemoryNoStoreImpl.java     |  663 +++
 .../snapshot/SnapshotFinishedMessage.java       |  136 +
 .../snapshot/SnapshotProgressMessage.java       |  135 +
 .../StartFullSnapshotAckDiscoveryMessage.java   |  147 +
 .../StartFullSnapshotDiscoveryMessage.java      |  160 +
 .../pagemem/store/IgnitePageStoreManager.java   |  192 +
 .../internal/pagemem/store/PageStore.java       |   96 +
 .../pagemem/wal/IgniteWriteAheadLogManager.java |   86 +
 .../internal/pagemem/wal/StorageException.java  |   44 +
 .../internal/pagemem/wal/WALIterator.java       |   29 +
 .../ignite/internal/pagemem/wal/WALPointer.java |   28 +
 .../internal/pagemem/wal/record/CacheState.java |   96 +
 .../pagemem/wal/record/CheckpointRecord.java    |  112 +
 .../internal/pagemem/wal/record/DataEntry.java  |  171 +
 .../internal/pagemem/wal/record/DataRecord.java |   70 +
 .../pagemem/wal/record/LazyDataEntry.java       |  116 +
 .../wal/record/MemoryRecoveryRecord.java        |   44 +
 .../pagemem/wal/record/PageSnapshot.java        |   81 +
 .../wal/record/StoreOperationRecord.java        |  118 +
 .../internal/pagemem/wal/record/TxRecord.java   |  111 +
 .../internal/pagemem/wal/record/WALRecord.java  |  257 +
 .../delta/DataPageInsertFragmentRecord.java     |   84 +
 .../wal/record/delta/DataPageInsertRecord.java  |   66 +
 .../wal/record/delta/DataPageRemoveRecord.java  |   67 +
 .../delta/DataPageSetFreeListPageRecord.java    |   62 +
 .../wal/record/delta/DataPageUpdateRecord.java  |   79 +
 .../record/delta/DeltaApplicationException.java |   35 +
 .../wal/record/delta/FixCountRecord.java        |   57 +
 .../record/delta/FixLeftmostChildRecord.java    |   58 +
 .../pagemem/wal/record/delta/FixRemoveId.java   |   62 +
 .../wal/record/delta/InitNewPageRecord.java     |   98 +
 .../wal/record/delta/InnerReplaceRecord.java    |   96 +
 .../pagemem/wal/record/delta/InsertRecord.java  |  110 +
 .../pagemem/wal/record/delta/MergeRecord.java   |   97 +
 .../wal/record/delta/MetaPageAddRootRecord.java |   57 +
 .../wal/record/delta/MetaPageCutRootRecord.java |   48 +
 .../wal/record/delta/MetaPageInitRecord.java    |   93 +
 .../delta/MetaPageInitRootInlineRecord.java     |   62 +
 .../record/delta/MetaPageInitRootRecord.java    |   61 +
 .../delta/MetaPageUpdateLastAllocatedIndex.java |   62 +
 ...aPageUpdateLastSuccessfulFullSnapshotId.java |   59 +
 .../MetaPageUpdateLastSuccessfulSnapshotId.java |   70 +
 .../delta/MetaPageUpdateNextSnapshotId.java     |   59 +
 .../MetaPageUpdatePartitionDataRecord.java      |  107 +
 .../wal/record/delta/NewRootInitRecord.java     |  115 +
 .../wal/record/delta/PageDeltaRecord.java       |   77 +
 .../delta/PageListMetaResetCountRecord.java     |   47 +
 .../record/delta/PagesListAddPageRecord.java    |   73 +
 .../delta/PagesListInitNewPageRecord.java       |  100 +
 .../record/delta/PagesListRemovePageRecord.java |   74 +
 .../record/delta/PagesListSetNextRecord.java    |   60 +
 .../delta/PagesListSetPreviousRecord.java       |   60 +
 .../record/delta/PartitionMetaStateRecord.java  |   82 +
 .../pagemem/wal/record/delta/RecycleRecord.java |   55 +
 .../pagemem/wal/record/delta/RemoveRecord.java  |   82 +
 .../pagemem/wal/record/delta/ReplaceRecord.java |   86 +
 .../record/delta/SplitExistingPageRecord.java   |   76 +
 .../record/delta/SplitForwardPageRecord.java    |  115 +
 .../record/delta/TrackingPageDeltaRecord.java   |   85 +
 .../processors/GridProcessorAdapter.java        |    4 +-
 .../affinity/GridAffinityProcessor.java         |    2 +-
 .../cache/CacheAffinitySharedManager.java       |   27 +-
 .../cache/CacheClusterMetricsMXBeanImpl.java    |   50 -
 .../cache/CacheEntryPredicateAdapter.java       |    7 +-
 .../cache/CacheEvictableEntryImpl.java          |   18 +-
 .../processors/cache/CacheEvictionManager.java  |   63 +
 .../cache/CacheInvalidStateException.java       |   65 +
 .../processors/cache/CacheLazyEntry.java        |    2 +-
 .../cache/CacheLocalMetricsMXBeanImpl.java      |   50 -
 .../processors/cache/CacheMetricsImpl.java      |  157 +-
 .../processors/cache/CacheMetricsSnapshot.java  |  120 -
 .../internal/processors/cache/CacheObject.java  |   33 +
 .../processors/cache/CacheObjectAdapter.java    |  123 +
 .../cache/CacheObjectByteArrayImpl.java         |   26 +-
 .../processors/cache/CacheObjectImpl.java       |   16 +-
 .../cache/CacheOffheapEvictionManager.java      |   72 +
 .../processors/cache/CacheOperationContext.java |   50 +-
 .../cache/CacheOsConflictResolutionManager.java |    2 +-
 .../cache/ChangeGlobalStateMessage.java         |  120 +
 .../internal/processors/cache/ClusterState.java |   38 +
 .../cache/DynamicCacheChangeRequest.java        |   71 +-
 .../cache/DynamicCacheDescriptor.java           |   17 +
 .../processors/cache/GridCacheAdapter.java      |  821 ++-
 .../cache/GridCacheAffinityManager.java         |    2 +-
 .../processors/cache/GridCacheAttributes.java   |   37 -
 .../cache/GridCacheClearAllRunnable.java        |   54 +-
 .../cache/GridCacheCompoundFuture.java          |   63 +
 .../cache/GridCacheCompoundIdentityFuture.java  |   63 +
 .../cache/GridCacheConcurrentMap.java           |    9 +-
 .../cache/GridCacheConcurrentMapImpl.java       |  234 +-
 .../processors/cache/GridCacheContext.java      |  180 +-
 .../GridCacheDefaultAffinityKeyMapper.java      |   38 +-
 .../cache/GridCacheDeploymentManager.java       |    6 +-
 .../processors/cache/GridCacheEntryEx.java      |   58 +-
 .../cache/GridCacheEvictionManager.java         | 1822 +------
 .../cache/GridCacheEvictionRequest.java         |  248 -
 .../cache/GridCacheEvictionResponse.java        |  225 -
 .../processors/cache/GridCacheFuture.java       |   15 +
 .../cache/GridCacheFutureAdapter.java           |   61 +
 .../processors/cache/GridCacheIoManager.java    |   14 -
 .../cache/GridCacheLocalConcurrentMap.java      |   54 +
 .../processors/cache/GridCacheManager.java      |    3 +-
 .../cache/GridCacheManagerAdapter.java          |    7 +-
 .../processors/cache/GridCacheMapEntry.java     | 2894 +++++------
 .../cache/GridCacheOffheapSwapEntry.java        |  191 -
 .../GridCachePartitionExchangeManager.java      |  175 +-
 .../processors/cache/GridCachePreloader.java    |    1 +
 .../cache/GridCachePreloaderAdapter.java        |    1 +
 .../processors/cache/GridCacheProcessor.java    | 1028 ++--
 .../processors/cache/GridCacheProxyImpl.java    |   95 +-
 .../cache/GridCacheSharedContext.java           |  106 +-
 .../cache/GridCacheSharedManagerAdapter.java    |    7 +
 .../cache/GridCacheSharedTtlCleanupManager.java |    9 +
 .../processors/cache/GridCacheSwapManager.java  | 2616 ----------
 .../processors/cache/GridCacheTtlManager.java   |  120 +-
 .../cache/GridCacheUpdateAtomicResult.java      |   96 +-
 .../processors/cache/GridCacheUtils.java        |   30 +-
 .../GridChangeGlobalStateMessageResponse.java   |  177 +
 .../processors/cache/GridNoStorageCacheMap.java |   11 +-
 .../cache/IgniteCacheOffheapManager.java        |  408 ++
 .../cache/IgniteCacheOffheapManagerImpl.java    | 2007 ++++++++
 .../processors/cache/IgniteCacheProxy.java      |  139 +-
 .../processors/cache/IgniteInternalCache.java   |  100 +-
 .../cache/IgniteRebalanceIterator.java          |   31 +
 .../processors/cache/IncompleteCacheObject.java |   84 +
 .../processors/cache/IncompleteObject.java      |   89 +
 .../binary/CacheObjectBinaryProcessorImpl.java  |   22 +-
 .../cache/binary/MetadataRequestMessage.java    |    2 +
 .../cache/binary/MetadataResponseMessage.java   |   36 +-
 .../processors/cache/database/CacheDataRow.java |   62 +
 .../cache/database/CacheDataRowAdapter.java     |  578 +++
 .../cache/database/CacheSearchRow.java          |   40 +
 .../cache/database/DataStructure.java           |  384 ++
 .../IgniteCacheDatabaseSharedManager.java       |  717 +++
 .../cache/database/MemoryMetricsImpl.java       |  314 ++
 .../processors/cache/database/MemoryPolicy.java |   84 +
 .../processors/cache/database/MetaStore.java    |   51 +
 .../cache/database/MetadataStorage.java         |  417 ++
 .../processors/cache/database/RootPage.java     |   62 +
 .../processors/cache/database/RowStore.java     |   91 +
 .../evict/FairFifoPageEvictionTracker.java      |   74 +
 .../database/evict/NoOpPageEvictionTracker.java |   50 +
 .../evict/PageAbstractEvictionTracker.java      |  243 +
 .../database/evict/PageEvictionTracker.java     |   52 +
 .../evict/Random2LruPageEvictionTracker.java    |  180 +
 .../evict/RandomLruPageEvictionTracker.java     |  157 +
 .../cache/database/freelist/FreeList.java       |   51 +
 .../cache/database/freelist/FreeListImpl.java   |  595 +++
 .../cache/database/freelist/PagesList.java      | 1450 ++++++
 .../database/freelist/io/PagesListMetaIO.java   |  186 +
 .../database/freelist/io/PagesListNodeIO.java   |  231 +
 .../cache/database/tree/BPlusTree.java          | 4754 ++++++++++++++++++
 .../cache/database/tree/io/BPlusIO.java         |  403 ++
 .../cache/database/tree/io/BPlusInnerIO.java    |  180 +
 .../cache/database/tree/io/BPlusLeafIO.java     |   56 +
 .../cache/database/tree/io/BPlusMetaIO.java     |  182 +
 .../cache/database/tree/io/CacheVersionIO.java  |  188 +
 .../cache/database/tree/io/DataPageIO.java      | 1450 ++++++
 .../cache/database/tree/io/DataPagePayload.java |   64 +
 .../cache/database/tree/io/IOVersions.java      |   99 +
 .../cache/database/tree/io/PageIO.java          |  510 ++
 .../cache/database/tree/io/PageMetaIO.java      |  217 +
 .../database/tree/io/PagePartitionMetaIO.java   |  123 +
 .../cache/database/tree/io/TrackingPageIO.java  |  334 ++
 .../cache/database/tree/reuse/ReuseBag.java     |   33 +
 .../cache/database/tree/reuse/ReuseList.java    |   43 +
 .../database/tree/reuse/ReuseListImpl.java      |   95 +
 .../cache/database/tree/util/PageHandler.java   |  512 ++
 .../database/tree/util/PageLockListener.java    |   69 +
 .../distributed/GridCacheTxRecoveryFuture.java  |    9 +-
 .../GridDistributedCacheAdapter.java            |   76 +-
 .../GridDistributedTxRemoteAdapter.java         |  442 +-
 .../dht/CacheDistributedGetFutureAdapter.java   |   11 +-
 .../dht/GridCachePartitionedConcurrentMap.java  |   20 +-
 .../dht/GridClientPartitionTopology.java        |  166 +-
 .../distributed/dht/GridDhtCacheAdapter.java    |   80 +-
 .../distributed/dht/GridDhtCacheEntry.java      |   35 +-
 .../cache/distributed/dht/GridDhtGetFuture.java |   13 +-
 .../distributed/dht/GridDhtGetSingleFuture.java |   13 +-
 .../distributed/dht/GridDhtLocalPartition.java  |  752 ++-
 .../distributed/dht/GridDhtLockFuture.java      |   42 +-
 .../dht/GridDhtOffHeapCacheEntry.java           |   71 -
 .../distributed/dht/GridDhtPartitionState.java  |    5 +-
 .../dht/GridDhtPartitionTopology.java           |   63 +-
 .../dht/GridDhtPartitionTopologyImpl.java       |  652 ++-
 .../distributed/dht/GridDhtTopologyFuture.java  |   13 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |    2 -
 .../distributed/dht/GridDhtTxFinishFuture.java  |   11 +-
 .../distributed/dht/GridDhtTxLocalAdapter.java  |   26 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |   34 +-
 .../dht/GridPartitionedGetFuture.java           |   30 +-
 .../dht/GridPartitionedSingleGetFuture.java     |   36 +-
 .../GridDhtAtomicAbstractUpdateFuture.java      |    4 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  341 +-
 .../dht/atomic/GridDhtAtomicNearResponse.java   |    2 +-
 .../atomic/GridDhtAtomicOffHeapCacheEntry.java  |   71 -
 ...idNearAtomicAbstractSingleUpdateRequest.java |    2 +
 .../GridNearAtomicAbstractUpdateFuture.java     |   14 +-
 .../GridNearAtomicAbstractUpdateRequest.java    |   20 +
 .../GridNearAtomicCheckUpdateRequest.java       |    2 +-
 .../atomic/GridNearAtomicFullUpdateRequest.java |    3 +-
 ...GridNearAtomicSingleUpdateFilterRequest.java |    2 +
 .../GridNearAtomicSingleUpdateFuture.java       |   33 +-
 ...GridNearAtomicSingleUpdateInvokeRequest.java |    2 +
 .../GridNearAtomicSingleUpdateRequest.java      |    5 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |   31 +-
 .../atomic/GridNearAtomicUpdateResponse.java    |    3 +
 .../dht/atomic/NearCacheUpdates.java            |    2 +-
 .../distributed/dht/atomic/UpdateErrors.java    |    2 +-
 .../dht/colocated/GridDhtColocatedCache.java    |   31 +-
 .../colocated/GridDhtColocatedLockFuture.java   |   62 +-
 .../GridDhtColocatedOffHeapCacheEntry.java      |   71 -
 .../colocated/GridDhtDetachedCacheEntry.java    |   18 +-
 .../dht/preloader/GridDhtForceKeysFuture.java   |   10 +-
 .../GridDhtPartitionDemandMessage.java          |   49 +-
 .../dht/preloader/GridDhtPartitionDemander.java |   87 +-
 .../dht/preloader/GridDhtPartitionMap.java      |   13 +-
 .../dht/preloader/GridDhtPartitionSupplier.java |  318 +-
 .../GridDhtPartitionSupplyMessage.java          |   56 +-
 .../GridDhtPartitionsAbstractMessage.java       |   12 +-
 .../GridDhtPartitionsExchangeFuture.java        |  585 ++-
 .../preloader/GridDhtPartitionsFullMessage.java |   83 +-
 .../GridDhtPartitionsSingleMessage.java         |   81 +-
 .../GridDhtPartitionsSingleRequest.java         |    8 +
 .../dht/preloader/GridDhtPreloader.java         |   77 +-
 .../distributed/near/GridNearAtomicCache.java   |    2 +
 .../distributed/near/GridNearCacheAdapter.java  |   63 +-
 .../distributed/near/GridNearCacheEntry.java    |   22 +-
 .../distributed/near/GridNearGetFuture.java     |   22 +-
 .../distributed/near/GridNearGetRequest.java    |   50 +-
 .../distributed/near/GridNearLockFuture.java    |   34 +-
 .../near/GridNearOffHeapCacheEntry.java         |   60 -
 ...arOptimisticSerializableTxPrepareFuture.java |    2 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |   11 +-
 ...ridNearOptimisticTxPrepareFutureAdapter.java |   20 +-
 .../GridNearPessimisticTxPrepareFuture.java     |    5 +-
 .../near/GridNearSingleGetRequest.java          |   24 +-
 .../near/GridNearTransactionalCache.java        |   11 +-
 .../near/GridNearTxFinishFuture.java            |   13 +-
 .../cache/distributed/near/GridNearTxLocal.java |   81 +-
 .../near/GridNearTxPrepareFutureAdapter.java    |    4 +-
 .../distributed/near/GridNearTxRemote.java      |    8 +-
 .../cache/dr/GridOsCacheDrManager.java          |    2 +-
 .../extras/GridCacheAttributesEntryExtras.java  |    7 +-
 .../GridCacheAttributesMvccEntryExtras.java     |    5 +-
 ...dCacheAttributesMvccObsoleteEntryExtras.java |    5 +-
 ...cheAttributesMvccObsoleteTtlEntryExtras.java |    7 +-
 .../GridCacheAttributesMvccTtlEntryExtras.java  |    7 +-
 .../GridCacheAttributesObsoleteEntryExtras.java |    5 +-
 ...idCacheAttributesObsoleteTtlEntryExtras.java |    7 +-
 .../GridCacheAttributesTtlEntryExtras.java      |    7 +-
 .../cache/extras/GridCacheMvccEntryExtras.java  |    3 +-
 .../GridCacheMvccObsoleteEntryExtras.java       |    5 +-
 .../GridCacheMvccObsoleteTtlEntryExtras.java    |    7 +-
 .../extras/GridCacheMvccTtlEntryExtras.java     |    7 +-
 .../extras/GridCacheObsoleteEntryExtras.java    |    3 +-
 .../extras/GridCacheObsoleteTtlEntryExtras.java |    7 +-
 .../cache/extras/GridCacheTtlEntryExtras.java   |    5 +-
 .../processors/cache/local/GridLocalCache.java  |   22 +
 .../cache/local/GridLocalCacheEntry.java        |   18 -
 .../cache/local/GridLocalLockFuture.java        |    6 +-
 .../local/atomic/GridLocalAtomicCache.java      |   56 +-
 .../query/GridCacheDistributedQueryFuture.java  |   25 +-
 .../query/GridCacheQueryFutureAdapter.java      |   31 +-
 .../cache/query/GridCacheQueryManager.java      |  776 +--
 .../cache/query/GridCacheQueryResponse.java     |   49 +-
 .../cache/query/GridCacheSqlIndexMetadata.java  |    3 +-
 .../cache/query/GridCacheSqlMetadata.java       |    3 +-
 .../continuous/CacheContinuousQueryEntry.java   |    4 +-
 .../continuous/CacheContinuousQueryEvent.java   |    3 +-
 .../continuous/CacheContinuousQueryHandler.java |   40 +-
 .../continuous/CacheContinuousQueryManager.java |    7 +-
 .../cache/store/CacheStoreManager.java          |   15 +-
 .../store/GridCacheStoreManagerAdapter.java     |   49 +-
 .../transactions/IgniteTransactionsImpl.java    |    4 +-
 .../cache/transactions/IgniteTxAdapter.java     |   16 +-
 .../cache/transactions/IgniteTxEntry.java       |    4 +-
 .../cache/transactions/IgniteTxHandler.java     |  128 +-
 .../IgniteTxImplicitSingleStateImpl.java        |   18 +-
 .../transactions/IgniteTxLocalAdapter.java      |   42 +-
 .../cache/transactions/IgniteTxManager.java     |    5 +-
 .../IgniteTxRemoteSingleStateImpl.java          |    2 +-
 .../IgniteTxRemoteStateAdapter.java             |    8 +-
 .../cache/transactions/IgniteTxState.java       |    9 +-
 .../cache/transactions/IgniteTxStateImpl.java   |   41 +-
 .../cache/transactions/TxDeadlockDetection.java |    5 +-
 .../processors/cache/transactions/TxLock.java   |    2 +
 .../cache/version/GridCacheVersionManager.java  |    3 +
 .../cacheobject/IgniteCacheObjectProcessor.java |   40 +-
 .../IgniteCacheObjectProcessorImpl.java         |  111 +-
 .../clock/GridClockDeltaSnapshot.java           |    2 +-
 .../clock/GridClockSyncProcessor.java           |    8 +-
 .../closure/GridClosureProcessor.java           |    2 +-
 .../processors/cluster/ClusterProcessor.java    |    2 +-
 .../cluster/GridClusterStateProcessor.java      |  947 ++++
 .../cluster/IgniteChangeGlobalStateSupport.java |   42 +
 .../continuous/GridContinuousHandler.java       |    5 +-
 .../continuous/GridContinuousProcessor.java     |    7 +-
 .../StartRoutineAckDiscoveryMessage.java        |   13 +-
 .../StartRoutineDiscoveryMessage.java           |   19 +-
 .../datastreamer/DataStreamProcessor.java       |    2 +-
 .../datastreamer/DataStreamerImpl.java          |  102 +-
 .../datastructures/DataStructuresProcessor.java |  134 +-
 .../datastructures/GridCacheAtomicLongImpl.java |   14 +-
 .../GridCacheAtomicReferenceImpl.java           |   16 +-
 .../GridCacheAtomicSequenceImpl.java            |   14 +-
 .../GridCacheAtomicStampedImpl.java             |   14 +-
 .../GridCacheCountDownLatchImpl.java            |   14 +-
 .../datastructures/GridCacheLockImpl.java       |   17 +-
 .../datastructures/GridCacheQueueAdapter.java   |   49 +-
 .../datastructures/GridCacheSemaphoreImpl.java  |   26 +-
 .../datastructures/GridCacheSetImpl.java        |   54 +-
 .../internal/processors/hadoop/HadoopJobId.java |   10 +-
 .../shuffle/HadoopDirectShuffleMessage.java     |   22 +-
 .../hadoop/shuffle/HadoopShuffleAck.java        |   10 +-
 .../hadoop/shuffle/HadoopShuffleMessage.java    |   18 +-
 .../internal/processors/igfs/IgfsProcessor.java |   24 +-
 .../processors/job/GridJobProcessor.java        |    2 +-
 .../jobmetrics/GridJobMetricsProcessor.java     |    2 +-
 .../GridMarshallerMappingProcessor.java         |    3 +-
 .../marshaller/MarshallerMappingTransport.java  |   14 +-
 .../MissingMappingRequestMessage.java           |    4 +
 .../MissingMappingResponseMessage.java          |   15 +-
 .../internal/processors/odbc/OdbcProcessor.java |   11 +-
 .../platform/PlatformProcessorImpl.java         |    2 +-
 .../platform/cache/PlatformCache.java           |   10 -
 .../callback/PlatformCallbackGateway.java       |   68 -
 .../platform/compute/PlatformCompute.java       |   10 -
 .../cache/PlatformCachePluginConfiguration.java |    7 -
 .../cache/PlatformCachePluginProvider.java      |  123 -
 .../utils/PlatformConfigurationUtils.java       |  191 +-
 .../processors/plugin/CachePluginManager.java   |   20 +-
 .../plugin/IgnitePluginProcessor.java           |    5 +-
 .../processors/port/GridPortProcessor.java      |    2 +-
 .../query/GridQueryIndexDescriptor.java         |    7 +
 .../processors/query/GridQueryIndexing.java     |   43 +-
 .../processors/query/GridQueryProcessor.java    |  221 +-
 .../query/GridQueryTypeDescriptor.java          |    5 +
 .../query/QueryIndexDescriptorImpl.java         |   11 +-
 .../query/QueryTypeDescriptorImpl.java          |   36 +-
 .../internal/processors/query/QueryUtils.java   |    4 +-
 .../twostep/messages/GridQueryFailResponse.java |   10 +-
 .../query/property/QueryBinaryProperty.java     |    4 +-
 .../resource/GridResourceProcessor.java         |    3 +-
 .../processors/rest/GridRestCommand.java        |   11 +-
 .../processors/rest/GridRestProcessor.java      |    7 +-
 .../rest/client/message/GridClientNodeBean.java |    2 +-
 .../client/message/GridClientStateRequest.java  |   80 +
 .../cluster/GridChangeStateCommandHandler.java  |   90 +
 .../top/GridTopologyCommandHandler.java         |    4 +
 .../tcp/GridTcpMemcachedNioListener.java        |   20 +-
 .../protocols/tcp/GridTcpRestNioListener.java   |   20 +
 .../request/GridRestChangeStateRequest.java     |   57 +
 .../service/GridServiceProcessor.java           |  211 +-
 .../session/GridTaskSessionProcessor.java       |    2 +-
 .../processors/task/GridTaskProcessor.java      |    6 +-
 .../timeout/GridTimeoutProcessor.java           |    2 +-
 .../apache/ignite/internal/util/GridArrays.java |  116 +
 .../util/GridCursorIteratorWrapper.java         |   52 +
 .../apache/ignite/internal/util/GridDebug.java  |    2 +-
 .../util/GridMultiCollectionWrapper.java        |  186 +
 .../ignite/internal/util/GridStringBuilder.java |   19 +
 .../apache/ignite/internal/util/GridUnsafe.java |   67 +-
 .../internal/util/IgniteExceptionRegistry.java  |    3 +-
 .../apache/ignite/internal/util/IgniteTree.java |  134 +
 .../ignite/internal/util/IgniteUtils.java       |  194 +-
 .../internal/util/OffheapReadWriteLock.java     |  661 +++
 .../util/future/GridCompoundFuture.java         |   45 +-
 .../util/future/GridFinishedFuture.java         |   13 -
 .../internal/util/future/GridFutureAdapter.java |  479 +-
 .../internal/util/future/IgniteFutureImpl.java  |   10 -
 .../util/future/IgniteRemoteMapTask.java        |  142 +
 .../ignite/internal/util/lang/GridCursor.java   |   41 +
 .../ignite/internal/util/lang/GridFunc.java     | 1223 +----
 .../internal/util/lang/GridTreePrinter.java     |   81 +
 .../ignite/internal/util/lang/GridTupleV.java   |  195 -
 .../lang/gridfunc/AlwaysFalsePredicate.java     |   46 +
 .../util/lang/gridfunc/AlwaysTruePredicate.java |   46 +
 .../util/lang/gridfunc/AlwaysTrueReducer.java   |   56 +
 .../gridfunc/AtomicIntegerFactoryCallable.java  |   40 +
 .../gridfunc/CacheEntryGetValueClosure.java     |   42 +
 .../gridfunc/CacheEntryHasPeekPredicate.java    |   41 +
 .../lang/gridfunc/ClusterNodeGetIdClosure.java  |   41 +
 .../ConcurrentDequeFactoryCallable.java         |   40 +
 .../ConcurrentHashSetFactoryCallable.java       |   40 +
 .../gridfunc/ConcurrentMapFactoryCallable.java  |   41 +
 .../lang/gridfunc/ContainsNodeIdsPredicate.java |   52 +
 .../util/lang/gridfunc/ContainsPredicate.java   |   55 +
 .../gridfunc/EntryByKeyEvaluationPredicate.java |   53 +
 .../gridfunc/EqualsClusterNodeIdPredicate.java  |   51 +
 .../util/lang/gridfunc/EqualsUuidPredicate.java |   50 +
 .../lang/gridfunc/FlatCollectionWrapper.java    |   66 +
 .../util/lang/gridfunc/FlatIterator.java        |  104 +
 .../util/lang/gridfunc/HasEqualIdPredicate.java |   51 +
 .../lang/gridfunc/HasNotEqualIdPredicate.java   |   51 +
 .../util/lang/gridfunc/IdentityClosure.java     |   39 +
 .../util/lang/gridfunc/IntSumReducer.java       |   51 +
 .../util/lang/gridfunc/IsAllPredicate.java      |   52 +
 .../util/lang/gridfunc/IsNotAllPredicate.java   |   52 +
 .../util/lang/gridfunc/IsNotNullPredicate.java  |   44 +
 .../util/lang/gridfunc/LongSumReducer.java      |   51 +
 .../util/lang/gridfunc/MapFactoryCallable.java  |   41 +
 .../util/lang/gridfunc/MultipleIterator.java    |  106 +
 .../util/lang/gridfunc/NoOpClosure.java         |   39 +
 .../lang/gridfunc/NotContainsPredicate.java     |   54 +
 .../util/lang/gridfunc/NotEqualPredicate.java   |   53 +
 .../lang/gridfunc/PredicateCollectionView.java  |   78 +
 .../util/lang/gridfunc/PredicateMapView.java    |  121 +
 .../util/lang/gridfunc/PredicateSetView.java    |  153 +
 .../lang/gridfunc/ReadOnlyCollectionView.java   |   95 +
 .../lang/gridfunc/ReadOnlyCollectionView2X.java |  100 +
 .../lang/gridfunc/RunnableWrapperClosure.java   |   51 +
 .../util/lang/gridfunc/SetFactoryCallable.java  |   41 +
 .../util/lang/gridfunc/StringConcatReducer.java |   79 +
 .../util/lang/gridfunc/ToStringClosure.java     |   42 +
 .../lang/gridfunc/TransformCollectionView.java  |   79 +
 .../gridfunc/TransformFilteringIterator.java    |  138 +
 .../util/lang/gridfunc/TransformMapView.java    |  168 +
 .../util/lang/gridfunc/TransformMapView2.java   |  165 +
 .../util/lang/gridfunc/package-info.java        |   22 +
 .../util/nio/GridNioBackPressureControl.java    |   39 +-
 .../util/nio/GridNioMessageTracker.java         |    7 +
 .../util/nio/GridNioRecoveryDescriptor.java     |    1 +
 .../offheap/unsafe/GridOffHeapSnapTreeMap.java  |   11 +-
 .../internal/util/snaptree/SnapTreeMap.java     |   10 +-
 .../ignite/internal/util/worker/GridWorker.java |    2 +-
 .../internal/visor/VisorDataTransferObject.java |   87 +
 .../visor/VisorDataTransferObjectInput.java     |  156 +
 .../visor/VisorDataTransferObjectOutput.java    |  141 +
 .../ignite/internal/visor/VisorEither.java      |  103 +
 .../internal/visor/VisorMultiNodeTask.java      |    6 +-
 .../ignite/internal/visor/VisorOneNodeTask.java |    5 +-
 .../internal/visor/VisorTaskArgument.java       |   53 +-
 .../visor/binary/VisorBinaryMetadata.java       |  139 +
 .../VisorBinaryMetadataCollectorTask.java       |   70 +
 .../VisorBinaryMetadataCollectorTaskResult.java |   87 +
 .../visor/binary/VisorBinaryMetadataField.java  |  101 +
 .../ignite/internal/visor/cache/VisorCache.java |  305 +-
 .../cache/VisorCacheAffinityConfiguration.java  |   91 +-
 .../visor/cache/VisorCacheAffinityNodeTask.java |   13 +-
 .../cache/VisorCacheAffinityNodeTaskArg.java    |   86 +
 .../cache/VisorCacheAggregatedMetrics.java      |  205 +-
 .../visor/cache/VisorCacheClearTask.java        |  100 +-
 .../visor/cache/VisorCacheClearTaskResult.java  |   85 +
 .../visor/cache/VisorCacheConfiguration.java    |  297 +-
 .../VisorCacheConfigurationCollectorJob.java    |    4 +-
 .../cache/VisorCacheDefaultConfiguration.java   |   58 -
 .../cache/VisorCacheEvictionConfiguration.java  |   97 +-
 .../visor/cache/VisorCacheJdbcType.java         |  189 +
 .../visor/cache/VisorCacheJdbcTypeField.java    |  117 +
 .../visor/cache/VisorCacheLoadTask.java         |   20 +-
 .../visor/cache/VisorCacheLoadTaskArg.java      |  101 +
 .../visor/cache/VisorCacheMetadataTask.java     |   18 +-
 .../internal/visor/cache/VisorCacheMetrics.java |  214 +-
 .../cache/VisorCacheMetricsCollectorTask.java   |   29 +-
 .../VisorCacheMetricsCollectorTaskArg.java      |   87 +
 .../cache/VisorCacheNearConfiguration.java      |   59 +-
 .../visor/cache/VisorCachePartition.java        |   65 +-
 .../visor/cache/VisorCachePartitions.java       |   45 +-
 .../visor/cache/VisorCachePartitionsTask.java   |   28 +-
 .../cache/VisorCacheQueryConfiguration.java     |  123 -
 .../cache/VisorCacheQueryDetailMetrics.java     |  167 -
 ...sorCacheQueryDetailMetricsCollectorTask.java |  146 -
 .../visor/cache/VisorCacheQueryMetrics.java     |  102 -
 .../cache/VisorCacheRebalanceConfiguration.java |   71 +-
 .../VisorCacheResetQueryDetailMetricsTask.java  |   71 -
 .../cache/VisorCacheResetQueryMetricsTask.java  |   69 -
 .../visor/cache/VisorCacheSqlIndexMetadata.java |  115 +
 .../visor/cache/VisorCacheSqlMetadata.java      |  162 +
 .../visor/cache/VisorCacheStartArg.java         |  100 +
 .../visor/cache/VisorCacheStartTask.java        |   60 +-
 .../cache/VisorCacheStoreConfiguration.java     |   77 +-
 .../visor/cache/VisorCacheSwapBackupsTask.java  |  102 -
 .../cache/VisorCacheTypeFieldMetadata.java      |   92 -
 .../visor/cache/VisorCacheTypeMetadata.java     |  294 --
 .../internal/visor/cache/VisorPartitionMap.java |   90 +
 .../compute/VisorComputeMonitoringHolder.java   |    8 +-
 .../VisorComputeToggleMonitoringTask.java       |   52 +-
 .../VisorComputeToggleMonitoringTaskArg.java    |   86 +
 .../visor/compute/VisorGatewayTask.java         |   18 +-
 .../visor/debug/VisorThreadDumpTask.java        |   13 +-
 .../visor/debug/VisorThreadDumpTaskResult.java  |   88 +
 .../internal/visor/debug/VisorThreadInfo.java   |  234 +-
 .../visor/debug/VisorThreadLockInfo.java        |   51 +-
 .../visor/debug/VisorThreadMonitorInfo.java     |   76 +-
 .../visor/event/VisorGridDeploymentEvent.java   |   43 +-
 .../visor/event/VisorGridDiscoveryEvent.java    |   59 +-
 .../internal/visor/event/VisorGridEvent.java    |   66 +-
 .../visor/event/VisorGridEventsLost.java        |   15 +-
 .../internal/visor/event/VisorGridJobEvent.java |   61 +-
 .../visor/event/VisorGridTaskEvent.java         |   61 +-
 .../internal/visor/file/VisorFileBlock.java     |   60 +-
 .../internal/visor/file/VisorFileBlockArg.java  |  114 +
 .../internal/visor/file/VisorFileBlockTask.java |   64 +-
 .../visor/file/VisorLatestTextFilesTask.java    |   17 +-
 .../visor/file/VisorLatestTextFilesTaskArg.java |   86 +
 .../ignite/internal/visor/igfs/VisorIgfs.java   |   78 +-
 .../internal/visor/igfs/VisorIgfsEndpoint.java  |   72 +-
 .../internal/visor/igfs/VisorIgfsMetrics.java   |  118 +-
 .../internal/visor/igfs/VisorIgfsProfiler.java  |   24 +-
 .../visor/igfs/VisorIgfsProfilerClearTask.java  |   11 +-
 .../igfs/VisorIgfsProfilerClearTaskResult.java  |   85 +
 .../visor/igfs/VisorIgfsProfilerEntry.java      |  106 +-
 .../visor/igfs/VisorIgfsProfilerTask.java       |   31 +-
 .../VisorIgfsProfilerUniformityCounters.java    |   38 +-
 .../visor/igfs/VisorIgfsSamplingStateTask.java  |   17 +-
 .../igfs/VisorIgfsSamplingStateTaskArg.java     |   86 +
 .../ignite/internal/visor/log/VisorLogFile.java |   43 +-
 .../internal/visor/log/VisorLogSearchArg.java   |  114 +
 .../visor/log/VisorLogSearchResult.java         |   80 +-
 .../internal/visor/log/VisorLogSearchTask.java  |   74 +-
 .../visor/log/VisorLogSearchTaskResult.java     |   92 +
 .../misc/VisorChangeGridActiveStateTask.java    |   65 +
 .../visor/node/VisorAtomicConfiguration.java    |   49 +-
 .../visor/node/VisorBasicConfiguration.java     |  163 +-
 .../node/VisorExecutorServiceConfiguration.java |   81 +-
 .../visor/node/VisorGridConfiguration.java      |  133 +-
 .../visor/node/VisorIgfsConfiguration.java      |  233 +-
 .../visor/node/VisorLifecycleConfiguration.java |   39 +-
 .../visor/node/VisorMemoryConfiguration.java    |  141 +
 .../node/VisorMemoryPolicyConfiguration.java    |  105 +
 .../visor/node/VisorMetricsConfiguration.java   |   50 +-
 .../VisorNodeConfigurationCollectorJob.java     |    4 +-
 .../visor/node/VisorNodeDataCollectorJob.java   |   63 +-
 .../node/VisorNodeDataCollectorJobResult.java   |  115 +-
 .../visor/node/VisorNodeDataCollectorTask.java  |   42 +-
 .../node/VisorNodeDataCollectorTaskArg.java     |   54 +-
 .../node/VisorNodeDataCollectorTaskResult.java  |  127 +-
 .../node/VisorNodeEventsCollectorTask.java      |  133 +-
 .../node/VisorNodeEventsCollectorTaskArg.java   |  163 +
 .../internal/visor/node/VisorNodeGcTask.java    |   18 +-
 .../visor/node/VisorNodeGcTaskResult.java       |   85 +
 .../internal/visor/node/VisorNodePingTask.java  |   15 +-
 .../visor/node/VisorNodePingTaskResult.java     |   99 +
 .../visor/node/VisorNodeSuppressedErrors.java   |   89 +
 .../node/VisorNodeSuppressedErrorsTask.java     |   23 +-
 .../node/VisorPeerToPeerConfiguration.java      |   57 +-
 .../visor/node/VisorRestConfiguration.java      |   93 +-
 .../node/VisorSegmentationConfiguration.java    |   67 +-
 .../visor/node/VisorSpiDescription.java         |   89 +
 .../visor/node/VisorSpisConfiguration.java      |  139 +-
 .../visor/node/VisorSuppressedError.java        |  147 +
 .../node/VisorTransactionConfiguration.java     |  104 +-
 .../visor/query/VisorCancelQueriesTask.java     |   72 -
 .../query/VisorCollectRunningQueriesTask.java   |   96 -
 .../internal/visor/query/VisorQueryArg.java     |   65 +-
 .../visor/query/VisorQueryCancelTask.java       |   72 +
 .../visor/query/VisorQueryCleanupTask.java      |    6 +-
 .../visor/query/VisorQueryConfiguration.java    |  142 +
 .../visor/query/VisorQueryDetailMetrics.java    |  205 +
 .../VisorQueryDetailMetricsCollectorTask.java   |  146 +
 .../internal/visor/query/VisorQueryEntity.java  |  188 +
 .../internal/visor/query/VisorQueryField.java   |   42 +-
 .../internal/visor/query/VisorQueryIndex.java   |  105 +
 .../visor/query/VisorQueryIndexField.java       |  106 +
 .../internal/visor/query/VisorQueryJob.java     |  274 -
 .../internal/visor/query/VisorQueryMetrics.java |  125 +
 .../visor/query/VisorQueryNextPageTask.java     |   33 +-
 .../visor/query/VisorQueryNextPageTaskArg.java  |   86 +
 .../query/VisorQueryResetDetailMetricsTask.java |   71 +
 .../visor/query/VisorQueryResetMetricsTask.java |   69 +
 .../internal/visor/query/VisorQueryResult.java  |   97 +-
 .../visor/query/VisorQueryResultEx.java         |   89 -
 .../visor/query/VisorQueryScanRegexFilter.java  |   59 +
 .../query/VisorQueryScanSubstringFilter.java    |   64 -
 .../internal/visor/query/VisorQueryTask.java    |  120 +-
 .../internal/visor/query/VisorQueryUtils.java   |   43 +-
 .../query/VisorRunningQueriesCollectorTask.java |   96 +
 .../internal/visor/query/VisorRunningQuery.java |   47 +-
 .../internal/visor/query/VisorScanQueryArg.java |  157 +
 .../visor/query/VisorScanQueryTask.java         |  185 +
 .../visor/service/VisorServiceDescriptor.java   |   40 +-
 .../internal/visor/util/VisorMimeTypes.java     |   12 +-
 .../internal/visor/util/VisorTaskUtils.java     |   46 +-
 .../org/apache/ignite/lang/IgniteFuture.java    |   15 -
 .../apache/ignite/marshaller/Marshaller.java    |    1 +
 .../ignite/marshaller/jdk/JdkMarshaller.java    |    1 +
 .../ignite/mxbean/CacheMetricsMXBean.java       |   40 -
 .../org/apache/ignite/mxbean/IgniteMXBean.java  |   29 +-
 .../ignite/mxbean/MemoryMetricsMXBean.java      |   89 +
 .../ignite/plugin/CachePluginConfiguration.java |    7 -
 .../ignite/plugin/CachePluginContext.java       |    5 -
 .../ignite/plugin/CachePluginProvider.java      |    4 +-
 .../apache/ignite/plugin/PluginProvider.java    |   11 +-
 .../ignite/plugin/platform/package-info.java    |   22 +
 .../plugin/security/SecurityPermissionSet.java  |    3 +-
 .../ignite/plugin/security/SecuritySubject.java |    3 +-
 .../plugin/segmentation/SegmentationPolicy.java |   18 +-
 .../org/apache/ignite/spi/IgniteSpiAdapter.java |    9 +
 .../communication/tcp/TcpCommunicationSpi.java  |  174 +-
 .../tcp/TcpCommunicationSpiMBean.java           |   54 -
 .../ignite/spi/discovery/DiscoverySpi.java      |   11 +-
 .../spi/discovery/DiscoverySpiListener.java     |    9 +
 .../ignite/spi/discovery/tcp/ClientImpl.java    |    6 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   52 +-
 .../spi/discovery/tcp/TcpDiscoveryImpl.java     |   10 +
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   92 +-
 .../tcp/internal/TcpDiscoveryNode.java          |   15 +-
 .../tcp/internal/TcpDiscoveryNodesRing.java     |    3 +-
 .../ignite/spi/swapspace/SwapContext.java       |   47 -
 .../apache/ignite/spi/swapspace/SwapKey.java    |  128 -
 .../ignite/spi/swapspace/SwapSpaceSpi.java      |  225 -
 .../spi/swapspace/SwapSpaceSpiListener.java     |   35 -
 .../spi/swapspace/file/FileSwapArray.java       |  188 -
 .../spi/swapspace/file/FileSwapSpaceSpi.java    | 2025 --------
 .../swapspace/file/FileSwapSpaceSpiMBean.java   |   67 -
 .../ignite/spi/swapspace/file/package-info.java |   22 -
 .../spi/swapspace/noop/NoopSwapSpaceSpi.java    |  159 -
 .../ignite/spi/swapspace/noop/package-info.java |   22 -
 .../ignite/spi/swapspace/package-info.java      |   22 -
 .../ignite/startup/BasicWarmupClosure.java      |    3 +-
 .../TransactionDeadlockException.java           |    4 +-
 .../transactions/TransactionException.java      |   80 +
 .../TransactionHeuristicException.java          |    4 +-
 .../TransactionOptimisticException.java         |    4 +-
 .../TransactionRollbackException.java           |    4 +-
 .../TransactionTimeoutException.java            |    4 +-
 .../org/jsr166/ConcurrentLinkedHashMap.java     |    2 +-
 .../resources/META-INF/classnames.properties    |  381 +-
 .../core/src/test/config/spring-multicache.xml  |   16 +
 .../config/websession/example-cache-client.xml  |    4 +
 .../org.apache.ignite.plugin.PluginProvider     |    3 +-
 .../GridCacheAffinityBackupsSelfTest.java       |   20 +-
 .../ignite/IgniteCacheAffinitySelfTest.java     |   12 +-
 .../ignite/cache/LargeEntryUpdateTest.java      |  176 +
 .../affinity/AffinityClientNodeSelfTest.java    |   15 +-
 .../affinity/AffinityHistoryCleanupTest.java    |    3 +-
 .../fair/FairAffinityDynamicCacheSelfTest.java  |   86 -
 ...airAffinityFunctionBackupFilterSelfTest.java |   44 -
 ...ffinityFunctionExcludeNeighborsSelfTest.java |   31 -
 .../fair/FairAffinityFunctionNodesSelfTest.java |  247 -
 .../fair/FairAffinityFunctionSelfTest.java      |   31 -
 .../affinity/fair/FairAffinityNodesRestart.java |  130 -
 .../local/LocalAffinityFunctionTest.java        |    4 +-
 ...inityFunctionFastPowerOfTwoHashSelfTest.java |   33 +
 ...ndezvousAffinityFunctionSimpleBenchmark.java | 1054 ++++
 ...ousAffinityFunctionStandardHashSelfTest.java |   33 +
 .../IgniteCacheExpiryStoreLoadSelfTest.java     |   14 +-
 .../CacheJdbcPojoStoreAbstractSelfTest.java     |    1 -
 .../store/jdbc/CacheJdbcPojoStoreTest.java      |   13 +
 ...eJdbcStoreAbstractMultithreadedSelfTest.java |    1 -
 ...CacheJdbcBlobStoreMultithreadedSelfTest.java |    1 -
 .../apache/ignite/igfs/IgfsPathSelfTest.java    |    1 +
 .../internal/ClusterNodeMetricsSelfTest.java    |   48 +-
 .../internal/GridAffinityNoCacheSelfTest.java   |   21 +
 .../internal/GridLifecycleAwareSelfTest.java    |    1 +
 .../internal/GridMultipleJobsSelfTest.java      |   12 +-
 .../IgniteClientReconnectCacheTest.java         |   16 +-
 .../IgniteSlowClientDetectionSelfTest.java      |    6 +
 .../MarshallerContextLockingSelfTest.java       |   33 +-
 .../BinaryArrayIdentityResolverSelfTest.java    |    4 -
 ...ryConfigurationCustomSerializerSelfTest.java |  147 +
 .../internal/binary/BinaryEnumsSelfTest.java    |    2 +
 .../binary/BinaryFieldExtractionSelfTest.java   |  161 +
 .../BinaryFieldIdentityResolverSelfTest.java    |  333 --
 ...ryIdentityResolverConfigurationSelfTest.java |  138 -
 .../BinaryObjectBuilderAdditionalSelfTest.java  |    1 -
 ...naryObjectBuilderDefaultMappersSelfTest.java |    1 -
 .../binary/BinaryObjectExceptionSelfTest.java   |  209 -
 .../mutabletest/GridBinaryTestClasses.java      |    9 +
 ...GridManagerLocalMessageListenerSelfTest.java |    8 +-
 .../managers/GridManagerStopSelfTest.java       |   19 +-
 .../managers/GridNoopManagerSelfTest.java       |    2 +-
 .../GridCommunicationSendMessageSelfTest.java   |    3 -
 .../GridDeploymentMessageCountSelfTest.java     |   10 +
 .../GridSwapSpaceCustomLocalValue.java          |   85 -
 .../swapspace/GridSwapSpaceManagerSelfTest.java |  170 -
 .../managers/swapspace/package-info.java        |   22 -
 .../OptimizedMarshallerNodeFailoverTest.java    |    1 +
 .../OptimizedMarshallerPooledSelfTest.java      |    2 +
 .../optimized/OptimizedMarshallerSelfTest.java  |    1 +
 ...arshallerSerialPersistentFieldsSelfTest.java |    2 +
 .../OptimizedObjectStreamSelfTest.java          |    5 +
 .../pagemem/impl/PageIdUtilsSelfTest.java       |  146 +
 .../pagemem/impl/PageMemoryNoLoadSelfTest.java  |  346 ++
 .../BinaryObjectOffHeapUnswapTemporaryTest.java |  367 --
 .../cache/CacheClientStoreSelfTest.java         |   35 +-
 .../cache/CacheConfigurationLeakTest.java       |   27 +-
 .../cache/CacheDeferredDeleteQueueTest.java     |    2 +-
 ...cheDhtLocalPartitionAfterRemoveSelfTest.java |    2 +-
 .../cache/CacheEnumOperationsAbstractTest.java  |   52 +-
 ...CacheExchangeMessageDuplicatedStateTest.java |   37 +-
 .../cache/CacheGetEntryAbstractTest.java        |    8 +-
 ...erceptorPartitionCounterLocalSanityTest.java |   25 +-
 ...torPartitionCounterRandomOperationsTest.java |  111 -
 .../cache/CacheKeepBinaryTransactionTest.java   |  121 +
 .../CacheMemoryPolicyConfigurationTest.java     |  164 +
 .../cache/CacheNearReaderUpdateTest.java        |   24 -
 .../cache/CacheOffheapMapEntrySelfTest.java     |   61 +-
 .../CachePutEventListenerErrorSelfTest.java     |   41 +-
 .../cache/CacheRebalancingSelfTest.java         |    5 +-
 .../cache/CacheRemoveAllSelfTest.java           |    1 -
 .../CacheSerializableTransactionsTest.java      |   63 +-
 .../CacheStartupInDeploymentModesTest.java      |    1 +
 .../cache/CacheStopAndDestroySelfTest.java      |   48 +-
 .../cache/CacheSwapUnswapGetTest.java           |  313 --
 .../CacheSwapUnswapGetTestSmallQueueSize.java   |   35 -
 .../cache/ClusterStateAbstractTest.java         |  439 ++
 .../cache/ClusterStatePartitionedSelfTest.java  |   41 +
 .../cache/ClusterStateReplicatedSelfTest.java   |   42 +
 .../cache/CrossCacheTxRandomOperationsTest.java |   36 +-
 .../EntryVersionConsistencyReadThroughTest.java |    6 +-
 ...idAbstractCacheInterceptorRebalanceTest.java |   38 +-
 ...ridCacheAbstractByteArrayValuesSelfTest.java |    6 -
 .../GridCacheAbstractFailoverSelfTest.java      |    4 +
 .../cache/GridCacheAbstractFullApiSelfTest.java |  205 +-
 .../GridCacheAbstractLocalStoreSelfTest.java    |   24 +-
 .../cache/GridCacheAbstractMetricsSelfTest.java |   36 +-
 .../GridCacheAbstractRemoveFailureTest.java     |   29 +-
 .../cache/GridCacheAbstractSelfTest.java        |   35 +-
 .../cache/GridCacheAbstractTxReadTest.java      |    2 -
 .../cache/GridCacheBasicStoreAbstractTest.java  |    6 +-
 ...acheBasicStoreMultithreadedAbstractTest.java |    1 -
 .../cache/GridCacheClearSelfTest.java           |  125 +-
 ...GridCacheConcurrentGetCacheOnClientTest.java |  129 +
 .../cache/GridCacheConcurrentMapTest.java       |  138 -
 .../GridCacheConcurrentTxMultiNodeTest.java     |   12 +-
 .../GridCacheConditionalDeploymentSelfTest.java |   19 +-
 ...idCacheConfigurationConsistencySelfTest.java |   55 +-
 ...ridCacheConfigurationValidationSelfTest.java |   13 -
 .../GridCacheDeploymentOffHeapSelfTest.java     |   41 -
 ...ridCacheDeploymentOffHeapValuesSelfTest.java |   41 -
 .../cache/GridCacheDeploymentSelfTest.java      |    2 +-
 .../cache/GridCacheEntryMemorySizeSelfTest.java |   19 +-
 .../GridCacheEvictionEventAbstractTest.java     |    8 +-
 ...idCacheGetAndTransformStoreAbstractTest.java |    1 -
 ...heInterceptorAtomicOffheapRebalanceTest.java |   30 -
 ...GridCacheInterceptorAtomicRebalanceTest.java |    6 -
 ...ceptorTransactionalOffheapRebalanceTest.java |   35 -
 ...heInterceptorTransactionalRebalanceTest.java |    6 -
 .../cache/GridCacheLifecycleAwareSelfTest.java  |    1 +
 .../cache/GridCacheMemoryModeSelfTest.java      |  289 --
 .../cache/GridCacheObjectToStringSelfTest.java  |    1 +
 .../cache/GridCacheOffHeapCleanupTest.java      |  169 -
 ...HeapMultiThreadedUpdateAbstractSelfTest.java |    3 -
 .../GridCacheOffHeapTieredAbstractSelfTest.java |  675 ---
 .../GridCacheOffHeapTieredAtomicSelfTest.java   |   32 -
 ...heOffHeapTieredEvictionAbstractSelfTest.java |  364 --
 ...acheOffHeapTieredEvictionAtomicSelfTest.java |   32 -
 .../GridCacheOffHeapTieredEvictionSelfTest.java |   33 -
 .../cache/GridCacheOffHeapTieredSelfTest.java   |   33 -
 .../GridCacheOffHeapValuesEvictionSelfTest.java |  210 -
 .../cache/GridCacheOffheapUpdateSelfTest.java   |    3 -
 .../GridCacheOrderedPreloadingSelfTest.java     |   48 +-
 .../cache/GridCacheP2PUndeploySelfTest.java     |   29 +-
 .../GridCachePartitionedAffinitySpreadTest.java |  169 -
 .../cache/GridCachePartitionedGetSelfTest.java  |    2 -
 ...chePartitionedOffHeapLocalStoreSelfTest.java |   44 -
 .../cache/GridCachePartitionedWritesTest.java   |    1 -
 .../GridCachePreloadingEvictionsSelfTest.java   |   11 +-
 .../cache/GridCachePutAllFailoverSelfTest.java  |   58 -
 .../cache/GridCacheQueryEmbeddedValue.java      |   37 +
 .../cache/GridCacheReloadSelfTest.java          |    4 +-
 .../processors/cache/GridCacheStopSelfTest.java |    2 -
 ...ridCacheStoreManagerDeserializationTest.java |   11 +-
 .../cache/GridCacheStoreValueBytesSelfTest.java |    7 +-
 .../cache/GridCacheSwapCleanupTest.java         |   99 -
 .../cache/GridCacheSwapPreloadSelfTest.java     |    2 -
 .../cache/GridCacheSwapReloadSelfTest.java      |  260 -
 ...ridCacheSwapSpaceSpiConsistencySelfTest.java |  146 -
 .../processors/cache/GridCacheTestEntryEx.java  |   25 +-
 .../GridCacheTtlManagerEvictionSelfTest.java    |   52 +-
 .../GridCacheValueBytesPreloadingSelfTest.java  |   61 +-
 ...idCacheValueConsistencyAbstractSelfTest.java |   51 +-
 .../cache/GridCacheVersionMultinodeTest.java    |    6 +-
 .../GridCacheVersionTopologyChangeTest.java     |    5 -
 .../processors/cache/H2CacheStoreStrategy.java  |   37 +-
 .../cache/IgniteCacheAbstractTest.java          |    7 +-
 ...IgniteCacheAtomicPutAllFailoverSelfTest.java |    5 -
 .../IgniteCacheConfigVariationsFullApiTest.java |  282 +-
 .../IgniteCacheEntryListenerAbstractTest.java   |   11 -
 ...cheEntryListenerAtomicOffheapTieredTest.java |   32 -
 ...cheEntryListenerAtomicOffheapValuesTest.java |   32 -
 ...niteCacheEntryListenerExpiredEventsTest.java |   26 +-
 ...teCacheEntryListenerTxOffheapTieredTest.java |   32 -
 ...teCacheEntryListenerTxOffheapValuesTest.java |   32 -
 ...niteCacheExpireAndUpdateConsistencyTest.java |   37 +-
 .../IgniteCacheInterceptorSelfTestSuite.java    |   12 +-
 .../cache/IgniteCacheInvokeAbstractTest.java    |    2 +-
 ...gniteCacheInvokeReadThroughAbstractTest.java |    4 -
 ...iteCacheInvokeReadThroughSingleNodeTest.java |   32 +-
 .../cache/IgniteCacheInvokeReadThroughTest.java |   92 +-
 ...gniteCacheLoadRebalanceEvictionSelfTest.java |    3 +-
 .../cache/IgniteCacheObjectPutSelfTest.java     |  179 +
 ...gniteCacheP2pUnmarshallingNearErrorTest.java |    4 +-
 .../cache/IgniteCachePeekModesAbstractTest.java |  249 +-
 .../IgniteCacheReadThroughEvictionSelfTest.java |   12 +-
 .../IgniteCacheStoreValueAbstractTest.java      |    5 -
 .../IgniteCacheTopologySafeGetSelfTest.java     |    2 +-
 .../cache/IgniteCacheTxNearPeekModesTest.java   |    5 +-
 .../cache/IgniteCacheTxPeekModesTest.java       |    5 +-
 .../IgniteClientAffinityAssignmentSelfTest.java |   20 +-
 ...eDynamicCacheStartNoExchangeTimeoutTest.java |   11 +-
 .../IgniteIncompleteCacheObjectSelfTest.java    |  186 +
 ...iteMarshallerCacheClassNameConflictTest.java |    5 +
 ...lerCacheClientRequestsMappingOnMissTest.java |   94 +-
 .../IgniteTxStoreExceptionAbstractSelfTest.java |    4 +-
 .../cache/MemoryPolicyConfigValidationTest.java |  241 +
 .../cache/OffHeapTieredTransactionSelfTest.java |  135 -
 ...heapCacheMetricsForClusterGroupSelfTest.java |    3 -
 .../cache/OffheapCacheOnClientsTest.java        |  143 -
 .../GridCacheBinaryObjectsAbstractSelfTest.java |   84 +-
 ...ntNodeBinaryObjectMetadataMultinodeTest.java |    2 +
 .../GridDataStreamerImplSelfTest.java           |    8 +-
 ...AtomicNearDisabledOffheapTieredSelfTest.java |   29 -
 ...ObjectsAtomicNearDisabledOnheapSelfTest.java |   25 +
 ...inaryObjectsAtomicOffheapTieredSelfTest.java |   29 -
 ...dCacheBinaryObjectsAtomicOnheapSelfTest.java |   25 +
 ...tionedNearDisabledOffheapTieredSelfTest.java |   30 -
 ...tsPartitionedNearDisabledOnheapSelfTest.java |   25 +
 ...ObjectsPartitionedOffheapTieredSelfTest.java |   30 -
 ...eBinaryObjectsPartitionedOnheapSelfTest.java |   25 +
 .../dht/GridCacheMemoryModeBinarySelfTest.java  |   36 -
 ...dCacheOffHeapTieredAtomicBinarySelfTest.java |   48 -
 .../GridCacheOffHeapTieredBinarySelfTest.java   |   48 -
 ...fHeapTieredEvictionAtomicBinarySelfTest.java |   96 -
 ...acheOffHeapTieredEvictionBinarySelfTest.java |   96 -
 ...BinaryObjectsLocalOffheapTieredSelfTest.java |   29 -
 ...idCacheBinaryObjectsLocalOnheapSelfTest.java |   26 +
 .../database/tree/io/TrackingPageIOTest.java    |  283 ++
 ...actQueueFailoverDataConsistencySelfTest.java |   17 +-
 .../GridCacheQueueCleanupSelfTest.java          |    7 -
 ...dCacheQueueMultiNodeConsistencySelfTest.java |    7 -
 .../IgniteCollectionAbstractTest.java           |    7 -
 .../IgniteDataStructureUniqueNameTest.java      |    7 -
 ...SemaphoreFailoverSafeReleasePermitsTest.java |    9 +-
 .../GridCacheLocalAtomicOffheapSetSelfTest.java |   32 -
 .../GridCacheLocalAtomicQueueApiSelfTest.java   |    6 -
 .../local/GridCacheLocalAtomicSetSelfTest.java  |    7 -
 .../GridCacheLocalOffheapQueueApiSelfTest.java  |   31 -
 .../local/GridCacheLocalQueueApiSelfTest.java   |    7 -
 .../local/GridCacheLocalSetSelfTest.java        |    7 -
 ...artitionedAtomicOffheapQueueApiSelfTest.java |   32 -
 ...omicOffheapQueueCreateMultiNodeSelfTest.java |   32 -
 ...onedAtomicOffheapQueueMultiNodeSelfTest.java |   32 -
 ...dCachePartitionedAtomicQueueApiSelfTest.java |    7 -
 ...ionedAtomicQueueCreateMultiNodeSelfTest.java |    7 -
 ...micQueueFailoverDataConsistencySelfTest.java |    7 -
 ...PartitionedAtomicQueueMultiNodeSelfTest.java |    7 -
 ...itionedAtomicQueueRotativeMultiNodeTest.java |    7 -
 ...chePartitionedAtomicSetFailoverSelfTest.java |    7 -
 ...rtitionedDataStructuresFailoverSelfTest.java |    7 -
 ...artitionedOffHeapValuesQueueApiSelfTest.java |   35 -
 ...achePartitionedOffHeapValuesSetSelfTest.java |   32 -
 ...edOffheapDataStructuresFailoverSelfTest.java |   33 -
 ...hePartitionedOffheapSetFailoverSelfTest.java |   32 -
 .../GridCachePartitionedQueueApiSelfTest.java   |    7 -
 ...PartitionedQueueCreateMultiNodeSelfTest.java |    7 -
 ...dCachePartitionedQueueEntryMoveSelfTest.java |    9 +-
 ...nedQueueFailoverDataConsistencySelfTest.java |    7 -
 ...CachePartitionedQueueJoinedNodeSelfTest.java |    7 -
 ...dCachePartitionedQueueMultiNodeSelfTest.java |    7 -
 ...hePartitionedQueueRotativeMultiNodeTest.java |    7 -
 ...GridCachePartitionedSetFailoverSelfTest.java |    7 -
 .../GridCachePartitionedSetSelfTest.java        |    7 -
 .../IgnitePartitionedQueueNoBackupsTest.java    |    7 -
 ...eplicatedDataStructuresFailoverSelfTest.java |    7 -
 .../GridCacheReplicatedQueueApiSelfTest.java    |    7 -
 ...idCacheReplicatedQueueMultiNodeSelfTest.java |    7 -
 ...cheReplicatedQueueRotativeMultiNodeTest.java |    7 -
 .../GridCacheReplicatedSetSelfTest.java         |    7 -
 .../CacheAtomicPrimarySyncBackPressureTest.java |  165 +
 .../CacheGetFutureHangsSelfTest.java            |    1 +
 ...eLateAffinityAssignmentFairAffinityTest.java |   32 -
 .../CacheLateAffinityAssignmentTest.java        |    2 +-
 ...CacheLoadingConcurrentGridStartSelfTest.java |   22 +-
 ...tractDistributedByteArrayValuesSelfTest.java |  130 +-
 .../GridCacheAbstractNodeRestartSelfTest.java   |  116 +-
 ...tractPartitionedByteArrayValuesSelfTest.java |   35 +-
 .../GridCacheClientModesAbstractSelfTest.java   |    4 +-
 ...acheEntrySetIterationPreloadingSelfTest.java |    6 +-
 .../distributed/GridCacheEventAbstractTest.java |  103 +-
 ...heExpiredEntriesPreloadAbstractSelfTest.java |  122 -
 ...dCacheMultithreadedFailoverAbstractTest.java |    1 -
 ...ridCachePartitionNotLoadedEventSelfTest.java |   21 +-
 ...GridCachePreloadRestartAbstractSelfTest.java |   12 +-
 ...ActiveOnStartNodeJoinValidationSelfTest.java |  134 +
 .../IgniteCacheAtomicNodeRestartTest.java       |    5 -
 ...niteCacheClientNodeChangingTopologyTest.java |   52 +-
 ...teCacheClientNodePartitionsExchangeTest.java |   18 +-
 .../distributed/IgniteCacheCreatePutTest.java   |    1 +
 .../IgniteCacheNearOffheapGetSelfTest.java      |  136 -
 .../IgniteCachePartitionLossPolicySelfTest.java |  352 ++
 .../IgniteCacheTxFairAffinityNodeJoinTest.java  |   35 -
 .../IgniteCacheTxIteratorSelfTest.java          |   34 +-
 ...arDisabledFairAffinityPutGetRestartTest.java |   35 -
 .../IgniteTxCachePrimarySyncTest.java           |    2 +
 ...teSynchronizationModesMultithreadedTest.java |    5 +-
 ...xOriginatingNodeFailureAbstractSelfTest.java |    3 +-
 ...cOriginatingNodeFailureAbstractSelfTest.java |    5 +-
 ...tPartitionedOnlyByteArrayValuesSelfTest.java |   58 +-
 ...acheAtomicExpiredEntriesPreloadSelfTest.java |   46 -
 .../dht/GridCacheAtomicNearCacheSelfTest.java   |   60 +-
 .../dht/GridCacheColocatedDebugTest.java        |    1 -
 ...eColocatedOptimisticTransactionSelfTest.java |    4 -
 .../dht/GridCacheDhtEntrySelfTest.java          |   14 +-
 ...GridCacheDhtEvictionNearReadersSelfTest.java |    7 +-
 .../dht/GridCacheDhtEvictionSelfTest.java       |  357 --
 .../GridCacheDhtEvictionsDisabledSelfTest.java  |    6 +-
 ...idCacheDhtExpiredEntriesPreloadSelfTest.java |   39 -
 .../dht/GridCacheDhtPreloadDelayedSelfTest.java |    2 +-
 .../GridCacheDhtPreloadDisabledSelfTest.java    |   11 +-
 .../dht/GridCacheDhtPreloadOffHeapSelfTest.java |   38 -
 .../dht/GridCacheDhtPreloadOnheapSelfTest.java  |   26 +
 .../dht/GridCacheDhtPreloadSelfTest.java        |   43 +-
 ...icOffHeapTieredMultiNodeFullApiSelfTest.java |   43 -
 ...NearDisabledAtomicOnheapFullApiSelfTest.java |   38 +
 ...ledAtomicOnheapMultiNodeFullApiSelfTest.java |   38 +
 ...ledFairAffinityMultiNodeFullApiSelfTest.java |   36 -
 ...ionedNearDisabledOffHeapFullApiSelfTest.java |   33 -
 ...DisabledOffHeapMultiNodeFullApiSelfTest.java |   33 -
 ...abledOffHeapTieredAtomicFullApiSelfTest.java |   57 -
 ...earDisabledOffHeapTieredFullApiSelfTest.java |   33 -
 ...edOffHeapTieredMultiNodeFullApiSelfTest.java |   33 -
 ...tionedNearDisabledOnheapFullApiSelfTest.java |   27 +
 ...rDisabledOnheapMultiNodeFullApiSelfTest.java |   27 +
 .../dht/GridCacheTxNodeFailureSelfTest.java     |   13 +-
 .../dht/IgniteCacheConcurrentPutGetRemove.java  |   27 +-
 .../IgniteCacheCrossCacheTxFailoverTest.java    |   49 +-
 .../dht/IgniteCacheMultiTxLockSelfTest.java     |    3 +
 ...artitionedBackupNodeFailureRecoveryTest.java |   16 +-
 .../IgniteCachePutRetryAbstractSelfTest.java    |   56 +-
 .../dht/IgniteCachePutRetryAtomicSelfTest.java  |    2 +-
 ...gniteCachePutRetryTransactionalSelfTest.java |   28 +-
 .../AtomicPutAllChangingTopologyTest.java       |    4 +-
 ...eAtomicInvalidPartitionHandlingSelfTest.java |   85 +-
 ...nlyFairAffinityMultiNodeFullApiSelfTest.java |   36 -
 ...tomicClientOnlyMultiNodeFullApiSelfTest.java |  116 +-
 ...micFairAffinityMultiNodeFullApiSelfTest.java |   35 -
 ...ledFairAffinityMultiNodeFullApiSelfTest.java |   36 -
 ...eAtomicNearOnlyMultiNodeFullApiSelfTest.java |   52 -
 .../GridCacheAtomicOffHeapFullApiSelfTest.java  |   67 -
 ...heAtomicOffHeapMultiNodeFullApiSelfTest.java |   68 -
 ...CacheAtomicOffHeapTieredFullApiSelfTest.java |   32 -
 ...icOffHeapTieredMultiNodeFullApiSelfTest.java |   33 -
 .../GridCacheAtomicOnheapFullApiSelfTest.java   |   28 +
 ...cheAtomicOnheapMultiNodeFullApiSelfTest.java |   26 +
 ...derFairAffinityMultiNodeFullApiSelfTest.java |   36 -
 ...PrimaryWriteOrderOffHeapFullApiSelfTest.java |   32 -
 ...yWriteOrderOffHeapTieredFullApiSelfTest.java |   33 -
 ...cPrimaryWriteOrderOnheapFullApiSelfTest.java |   28 +
 ...riteOrderOnheapMultiNodeFullApiSelfTest.java |   29 +
 ...ityOrderOffHeapMultiNodeFullApiSelfTest.java |   33 -
 ...erOffHeapTieredMultiNodeFullApiSelfTest.java |   33 -
 ...dCacheNearExpiredEntriesPreloadSelfTest.java |   33 -
 .../near/GridCacheNearMultiNodeSelfTest.java    |   36 +-
 .../near/GridCacheNearOneNodeSelfTest.java      |    2 +-
 ...nlyFairAffinityMultiNodeFullApiSelfTest.java |   35 -
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |   10 +-
 .../near/GridCacheNearReadersSelfTest.java      |   36 +-
 .../near/GridCacheNearTxForceKeyTest.java       |   14 +-
 ...rtitionedAffinityHashIdResolverSelfTest.java |  102 -
 ...ePartitionedAtomicOnheapFullApiSelfTest.java |   38 +
 ...nedAtomicOnheapMultiNodeFullApiSelfTest.java |   38 +
 ...ePartitionedBasicStoreMultiNodeSelfTest.java |    1 -
 .../GridCachePartitionedEvictionSelfTest.java   |    3 +-
 .../GridCachePartitionedFullApiSelfTest.java    |    3 -
 ...achePartitionedMultiNodeCounterSelfTest.java |   12 +-
 ...achePartitionedMultiNodeFullApiSelfTest.java |   41 -
 ...ePartitionedMultiThreadedPutGetSelfTest.java |    3 +-
 ...dCachePartitionedOffHeapFullApiSelfTest.java |   32 -
 ...titionedOffHeapMultiNodeFullApiSelfTest.java |   32 -
 ...PartitionedOffHeapTieredFullApiSelfTest.java |   32 -
 ...edOffHeapTieredMultiNodeFullApiSelfTest.java |   73 -
 ...idCachePartitionedOnheapFullApiSelfTest.java |   26 +
 ...rtitionedOnheapMultiNodeFullApiSelfTest.java |   26 +
 ...achePartitionedPreloadLifecycleSelfTest.java |    1 -
 .../GridNearOffheapCacheStoreUpdateTest.java    |   35 -
 .../near/GridPartitionedBackupLoadSelfTest.java |    4 +-
 .../near/IgniteCacheNearOnlyTxTest.java         |   12 +-
 .../near/NearCachePutAllMultinodeTest.java      |    1 -
 .../near/NoneRebalanceModeSelfTest.java         |    4 +-
 ...cheRebalancingPartitionDistributionTest.java |    2 +-
 .../GridCacheRebalancingSyncSelfTest.java       |   26 +-
 ...eRebalancingUnmarshallingFailedSelfTest.java |    6 +-
 ...xcludeNeighborsMultiNodeFullApiSelfTest.java |   36 -
 ...tedFairAffinityMultiNodeFullApiSelfTest.java |   35 -
 ...stractReplicatedByteArrayValuesSelfTest.java |   30 -
 ...nedFairAffinityMultiNodeFullApiSelfTest.java |   37 -
 .../GridCacheReplicatedEvictionSelfTest.java    |  135 -
 .../GridCacheReplicatedFullApiSelfTest.java     |    9 -
 ...idCacheReplicatedOffHeapFullApiSelfTest.java |   32 -
 ...plicatedOffHeapMultiNodeFullApiSelfTest.java |   32 -
 ...eReplicatedOffHeapTieredFullApiSelfTest.java |   33 -
 ...edOffHeapTieredMultiNodeFullApiSelfTest.java |   33 -
 ...ridCacheReplicatedOnheapFullApiSelfTest.java |   26 +
 ...eplicatedOnheapMultiNodeFullApiSelfTest.java |   26 +
 ...idCacheReplicatedUnswapAdvancedSelfTest.java |    6 +-
 ...CacheReplicatedPreloadLifecycleSelfTest.java |    1 -
 ...idCacheReplicatedPreloadOffHeapSelfTest.java |   37 -
 .../GridCacheReplicatedPreloadSelfTest.java     |   25 +-
 .../cache/eviction/EvictionAbstractTest.java    |   38 +-
 .../GridCacheBatchEvictUnswapSelfTest.java      |  200 -
 ...heConcurrentEvictionConsistencySelfTest.java |    8 +-
 .../GridCacheConcurrentEvictionsSelfTest.java   |    3 +-
 .../GridCacheDistributedEvictionsSelfTest.java  |  237 -
 .../GridCacheEmptyEntriesAbstractSelfTest.java  |    6 +-
 .../GridCacheEvictableEntryEqualsSelfTest.java  |    1 +
 .../GridCacheEvictionFilterSelfTest.java        |    3 +-
 .../GridCacheEvictionLockUnlockSelfTest.java    |    1 +
 .../GridCacheEvictionTouchSelfTest.java         |   14 +-
 ...cheSynchronousEvictionsFailoverSelfTest.java |  167 -
 .../lru/LruNearEvictionPolicySelfTest.java      |   28 -
 .../LruNearOnlyNearEvictionPolicySelfTest.java  |   55 -
 .../paged/PageEvictionAbstractTest.java         |  124 +
 .../paged/PageEvictionMultinodeTest.java        |  110 +
 .../paged/PageEvictionReadThroughTest.java      |  140 +
 .../paged/PageEvictionTouchOrderTest.java       |  109 +
 .../paged/PageEvictionWithRebalanceTest.java    |   81 +
 .../Random2LruPageEvictionMultinodeTest.java    |   30 +
 ...Random2LruPageEvictionWithRebalanceTest.java |   30 +
 .../RandomLruPageEvictionMultinodeTest.java     |   30 +
 .../RandomLruPageEvictionWithRebalanceTest.java |   30 +
 .../cache/eviction/paged/TestObject.java        |   78 +
 .../SortedEvictionPolicyPerformanceTest.java    |    2 +-
 ...CacheAtomicLocalOffheapExpiryPolicyTest.java |   30 -
 ...eCacheAtomicLocalOnheapExpiryPolicyTest.java |   26 +
 ...gniteCacheAtomicOffheapExpiryPolicyTest.java |   30 -
 ...IgniteCacheAtomicOnheapExpiryPolicyTest.java |   26 +
 ...rimaryWriteOrderOffheapExpiryPolicyTest.java |   31 -
 ...maryWriteOrderWithStoreExpiryPolicyTest.java |    2 +-
 ...teOrderWithStoreOffheapExpiryPolicyTest.java |   31 -
 ...AtomicReplicatedOffheapExpiryPolicyTest.java |   30 -
 ...eAtomicWithStoreOffheapExpiryPolicyTest.java |   30 -
 .../IgniteCacheClientNearCacheExpiryTest.java   |   28 +-
 .../IgniteCacheExpiryPolicyAbstractTest.java    |   75 +-
 .../IgniteCacheExpiryPolicyTestSuite.java       |   15 +-
 ...eCacheExpiryPolicyWithStoreAbstractTest.java |   22 +-
 .../expiry/IgniteCacheLargeValueExpireTest.java |  175 +
 ...niteCacheTxLocalOffheapExpiryPolicyTest.java |   30 -
 .../IgniteCacheTxOffheapExpiryPolicyTest.java   |   30 -
 ...acheTxReplicatedOffheapExpiryPolicyTest.java |   30 -
 ...CacheTxWithStoreOffheapExpiryPolicyTest.java |   30 -
 .../IgniteCacheLoadAllAbstractTest.java         |    9 +-
 ...dCacheLocalAtomicOffHeapFullApiSelfTest.java |   42 -
 ...LocalAtomicOffHeapTieredFullApiSelfTest.java |   32 -
 ...cheLocalBasicStoreMultithreadedSelfTest.java |    1 +
 .../GridCacheLocalByteArrayValuesSelfTest.java  |   71 +-
 .../local/GridCacheLocalFullApiSelfTest.java    |    9 -
 .../GridCacheLocalOffHeapFullApiSelfTest.java   |   30 -
 ...dCacheLocalOffHeapTieredFullApiSelfTest.java |   32 -
 ...LocalCacheOffHeapAndSwapMetricsSelfTest.java |  621 ---
 ...OnlyFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...omicFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...bledFairAffinityMultiJvmFullApiSelfTest.java |   36 -
 ...cheAtomicOffHeapMultiJvmFullApiSelfTest.java |   31 -
 ...micOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...acheAtomicOnheapMultiJvmFullApiSelfTest.java |   28 +
 ...rderFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...WriteOrderOnheapMultiJvmFullApiSelfTest.java |   29 +
 ...rityOrderOffHeapMultiJvmFullApiSelfTest.java |   31 -
 ...derOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...OnlyFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...onedFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...micOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...bledAtomicOnheapMultiJvmFullApiSelfTest.java |   28 +
 ...bledFairAffinityMultiJvmFullApiSelfTest.java |   31 -
 ...rDisabledOffHeapMultiJvmFullApiSelfTest.java |   31 -
 ...ledOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...arDisabledOnheapMultiJvmFullApiSelfTest.java |   28 +
 ...rtitionedOffHeapMultiJvmFullApiSelfTest.java |   31 -
 ...nedOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...artitionedOnheapMultiJvmFullApiSelfTest.java |   28 +
 ...eplicatedOffHeapMultiJvmFullApiSelfTest.java |   31 -
 ...tedOffHeapTieredMultiJvmFullApiSelfTest.java |   36 -
 ...ReplicatedOnheapMultiJvmFullApiSelfTest.java |   28 +
 .../GridCacheSwapScanQueryAbstractSelfTest.java |  435 --
 .../query/GridCacheSwapScanQuerySelfTest.java   |   25 -
 .../IgniteCacheQueryCacheDestroySelfTest.java   |    2 -
 .../continuous/CacheContinuousBatchAckTest.java |   73 +-
 ...eContinuousQueryAsyncFilterListenerTest.java |  180 +-
 ...acheContinuousQueryExecuteInPrimaryTest.java |    2 -
 ...usQueryFactoryFilterRandomOperationTest.java |    2 -
 ...ContinuousQueryFailoverAbstractSelfTest.java |   16 +-
 ...tomicPrimaryWriteOrderOffheapTieredTest.java |   33 -
 ...tinuousQueryFailoverTxOffheapTieredTest.java |   32 -
 .../CacheContinuousQueryOperationP2PTest.java   |   31 +-
 .../CacheContinuousQueryOrderingEventTest.java  |  128 +-
 ...acheContinuousQueryRandomOperationsTest.java |  323 +-
 ...CacheKeepBinaryIterationNearEnabledTest.java |    6 +-
 ...acheKeepBinaryIterationStoreEnabledTest.java |    6 +-
 ...CacheKeepBinaryIterationSwapEnabledTest.java |   56 -
 .../CacheKeepBinaryIterationTest.java           |  103 +-
 ...ridCacheContinuousQueryAbstractSelfTest.java |   10 -
 ...eContinuousQueryAtomicOffheapTieredTest.java |   32 -
 ...eContinuousQueryAtomicOffheapValuesTest.java |   32 -
 .../GridCacheContinuousQueryConcurrentTest.java |   47 +-
 ...CacheContinuousQueryTxOffheapTieredTest.java |   32 -
 ...CacheContinuousQueryTxOffheapValuesTest.java |   32 -
 ...niteCacheContinuousQueryBackupQueueTest.java |    6 +
 .../IgniteCacheContinuousQueryClientTest.java   |   23 +-
 ...teCacheContinuousQueryNoUnsubscribeTest.java |    2 +
 .../GridCacheWriteBehindStoreAbstractTest.java  |    1 -
 .../TxOptimisticDeadlockDetectionTest.java      |   12 +-
 .../TxPessimisticDeadlockDetectionTest.java     |   17 +
 .../CacheVersionedEntryAbstractTest.java        |   15 +-
 ...edEntryPartitionedAtomicOffHeapSelfTest.java |   35 -
 ...PartitionedTransactionalOffHeapSelfTest.java |   36 -
 ...nedEntryReplicatedAtomicOffHeapSelfTest.java |   35 -
 ...yReplicatedTransactionalOffHeapSelfTest.java |   36 -
 .../continuous/GridEventConsumeSelfTest.java    |    3 +-
 .../database/BPlusTreeFakeReuseSelfTest.java    |   63 +
 .../database/BPlusTreeReuseSelfTest.java        |  131 +
 .../processors/database/BPlusTreeSelfTest.java  | 1757 +++++++
 .../database/FreeListImplSelfTest.java          |  557 ++
 .../database/IgniteDbAbstractTest.java          |  367 ++
 .../database/IgniteDbDynamicCacheSelfTest.java  |  152 +
 .../IgniteDbMemoryLeakAbstractTest.java         |  259 +
 .../IgniteDbMemoryLeakLargeObjectsTest.java     |   56 +
 .../IgniteDbMemoryLeakLargePagesTest.java       |   33 +
 .../IgniteDbMemoryLeakNonTransactionalTest.java |   31 +
 .../database/IgniteDbMemoryLeakTest.java        |   46 +
 .../IgniteDbMemoryLeakWithExpirationTest.java   |   44 +
 .../database/IgniteDbMultiNodePutGetTest.java   |   33 +
 .../database/IgniteDbPutGetAbstractTest.java    | 1212 +++++
 .../database/IgniteDbSingleNodePutGetTest.java  |   33 +
 .../IgniteDbSingleNodeTinyPutGetTest.java       |  151 +
 .../database/MemoryMetricsSelfTest.java         |  313 ++
 .../database/MetadataStorageSelfTest.java       |  166 +
 .../DataStreamProcessorSelfTest.java            |    8 +-
 .../datastreamer/DataStreamerImplSelfTest.java  |   36 -
 .../IgniteDataStreamerPerformanceTest.java      |    1 -
 .../igfs/IgfsAbstractBaseSelfTest.java          |   19 +-
 .../processors/igfs/IgfsAbstractSelfTest.java   |   11 -
 .../IgfsAtomicPrimaryOffheapTieredSelfTest.java |   39 -
 .../IgfsAtomicPrimaryOffheapValuesSelfTest.java |   39 -
 ...sCachePerBlockLruEvictionPolicySelfTest.java |    1 +
 .../processors/igfs/IgfsFileInfoSelfTest.java   |    1 +
 .../processors/igfs/IgfsIgniteMock.java         |   25 +
 .../processors/igfs/IgfsMaxSizeSelfTest.java    |    1 -
 .../igfs/IgfsPrimaryOffheapTieredSelfTest.java  |   33 -
 .../igfs/IgfsPrimaryOffheapValuesSelfTest.java  |   33 -
 .../processors/igfs/IgfsProcessorSelfTest.java  |    2 +-
 .../odbc/OdbcProcessorValidationSelfTest.java   |   23 +-
 .../service/ClosureServiceClientsNodesTest.java |    1 +
 .../GridServiceProcessorProxySelfTest.java      |   24 +-
 ...gniteServiceConfigVariationsFullApiTest.java |    9 +-
 ...ent2ClassLoadersOptimizedMarshallerTest.java |   31 +
 ...mentClassLoadingOptimizedMarshallerTest.java |   31 +
 .../IgniteServiceDynamicCachesSelfTest.java     |   14 +-
 .../internal/util/GridArraysSelfTest.java       |  129 +
 .../util/future/IgniteFutureImplTest.java       |   38 -
 .../unsafe/GridUnsafeMemorySelfTest.java        |   35 +
 .../apache/ignite/lang/GridTupleSelfTest.java   |   35 -
 .../IgniteOffheapReadWriteLockSelfTest.java     |  479 ++
 ...idFileSwapSpaceSpiMultithreadedLoadTest.java |  252 -
 .../loadtests/GridCacheMultiNodeLoadTest.java   |    2 +-
 .../GridCacheWriteBehindStoreLoadTest.java      |    1 -
 .../loadtests/colocation/GridTestKey.java       |   28 +-
 .../communication/GridIoManagerBenchmark0.java  |    1 -
 .../GridCachePartitionedAtomicLongLoadTest.java |    2 +-
 .../ignite/loadtests/dsi/GridDsiPerfJob.java    |    7 +-
 .../loadtests/hashmap/GridCacheTestContext.java |   12 +-
 .../swap/GridSwapEvictAllBenchmark.java         |  309 --
 ...namicProxySerializationMultiJvmSelfTest.java |    1 +
 .../GridMarshallerPerformanceTest.java          |    2 +-
 .../marshaller/MarshallerContextSelfTest.java   |   10 +-
 .../ignite/messaging/GridMessagingSelfTest.java |   13 +-
 .../platform/PlatformCacheWriteMetricsTask.java |  126 +-
 .../platform/PlatformEventsWriteEventTask.java  |   14 +-
 .../plugin/PlatformTestPluginProvider.java      |    6 +
 .../PlatformTestCachePluginConfiguration.java   |    5 -
 ...tCachePluginConfigurationClosureFactory.java |    2 +-
 .../cache/PlatformTestCachePluginProvider.java  |    5 +-
 .../communication/GridCacheMessageSelfTest.java |    2 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |    4 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   15 +
 ...gniteClientReconnectMassiveShutdownTest.java |    3 -
 .../tcp/TcpClientDiscoverySpiSelfTest.java      |    2 +-
 .../tcp/TestReconnectPluginProvider.java        |    7 +
 .../GridSwapSpaceSpiAbstractSelfTest.java       |  652 ---
 .../GridSwapSpaceSpiConsistencySelfTest.java    |  131 -
 .../file/GridFileSwapCompactionSelfTest.java    |  131 -
 .../file/GridFileSwapSpaceSpiSelfTest.java      |  456 --
 .../inmemory/GridTestSwapSpaceSpi.java          |  518 --
 .../noop/GridNoopSwapSpaceSpiSelfTest.java      |   61 -
 .../ignite/spi/swapspace/package-info.java      |   22 -
 .../ignite/testframework/GridTestNode.java      |   12 +-
 .../ignite/testframework/GridTestUtils.java     |  210 +-
 .../configvariations/ConfigVariations.java      |   32 +-
 .../testframework/junits/GridAbstractTest.java  |   12 +-
 .../junits/GridTestKernalContext.java           |    2 +-
 ...IgniteCacheConfigVariationsAbstractTest.java |   59 +-
 .../ignite/testframework/junits/IgniteMock.java |   21 +
 .../junits/common/GridCommonAbstractTest.java   |  304 +-
 .../multijvm/IgniteCacheProcessProxy.java       |   42 +-
 .../multijvm/IgniteClusterProcessProxy.java     |   11 -
 .../junits/multijvm/IgniteNodeRunner.java       |    5 +-
 .../junits/multijvm/IgniteProcessProxy.java     |   35 +
 .../ConfigVariationsTestSuiteBuilderTest.java   |    4 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java |   16 +-
 .../testsuites/IgniteBinaryBasicTestSuite.java  |    7 +
 .../testsuites/IgniteBinaryCacheTestSuite.java  |   22 +-
 .../IgniteBinaryObjectsTestSuite.java           |   21 +-
 .../IgniteCacheDataStructuresSelfTestSuite.java |   18 -
 .../IgniteCacheEvictionSelfTestSuite.java       |   21 +-
 .../IgniteCacheFailoverTestSuite.java           |    4 -
 ...IgniteCacheFullApiMultiJvmSelfTestSuite.java |   54 +-
 .../IgniteCacheFullApiSelfTestSuite.java        |  102 +-
 .../IgniteCacheMetricsSelfTestSuite.java        |    2 -
 .../ignite/testsuites/IgniteCacheTestSuite.java |   62 +-
 .../testsuites/IgniteCacheTestSuite2.java       |   42 +-
 .../testsuites/IgniteCacheTestSuite3.java       |   12 +-
 .../testsuites/IgniteCacheTestSuite4.java       |   52 +-
 .../testsuites/IgniteCacheTestSuite5.java       |   28 +-
 .../testsuites/IgniteComputeGridTestSuite.java  |    1 -
 .../testsuites/IgniteDatabaseTestSuite.java     |   40 +
 .../testsuites/IgniteDbMemoryLeakTestSuite.java |   49 +
 .../ignite/testsuites/IgniteIgfsTestSuite.java  |    9 -
 .../testsuites/IgniteKernalSelfTestSuite.java   |    2 -
 .../IgniteMarshallerSelfTestSuite.java          |    7 +
 .../IgniteSpiSwapSpaceSelfTestSuite.java        |   44 -
 .../ignite/testsuites/IgniteSpiTestSuite.java   |    3 -
 .../testsuites/IgniteUtilSelfTestSuite.java     |    6 +
 .../org.apache.ignite.plugin.PluginProvider     |    1 -
 ...CacheDeploymentCachePluginConfiguration.java |   10 +-
 .../apache/ignite/tests/p2p/cache/Person.java   |   41 +
 .../query/h2/opt/GridH2SpatialIndex.java        |   29 +-
 .../ignite/hadoop/planner/package-info.java     |   22 +
 .../processors/hadoop/HadoopProcessor.java      |    6 +-
 .../hadoop/impl/v1/HadoopV1ReduceTask.java      |    2 +-
 .../external/HadoopExternalTaskExecutor.java    |    2 +-
 .../resources/META-INF/classnames.properties    |   16 +-
 .../impl/HadoopAbstractMapReduceTest.java       |    1 -
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |    1 -
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |    1 -
 .../HibernateAccessStrategyAdapter.java         |    8 +-
 .../cache/hibernate/HibernateCacheProxy.java    |  811 +++
 .../hibernate/HibernateCollectionRegion.java    |    3 +-
 .../cache/hibernate/HibernateEntityRegion.java  |    3 +-
 .../hibernate/HibernateGeneralDataRegion.java   |    3 +-
 .../hibernate/HibernateKeyTransformer.java      |   28 +
 .../cache/hibernate/HibernateKeyWrapper.java    |   72 +
 .../hibernate/HibernateNaturalIdRegion.java     |    3 +-
 .../HibernateNonStrictAccessStrategy.java       |    5 +-
 .../hibernate/HibernateQueryResultsRegion.java  |    3 +-
 .../HibernateReadOnlyAccessStrategy.java        |    3 +-
 .../HibernateReadWriteAccessStrategy.java       |    3 +-
 .../ignite/cache/hibernate/HibernateRegion.java |    6 +-
 .../cache/hibernate/HibernateRegionFactory.java |   30 +-
 .../hibernate/HibernateTimestampsRegion.java    |    3 +-
 .../HibernateTransactionalAccessStrategy.java   |    2 +-
 .../HibernateTransactionalDataRegion.java       |    3 +-
 .../hibernate/HibernateL2CacheSelfTest.java     |    2 +-
 .../IgniteBinaryHibernateTestSuite.java         |   37 +
 modules/hibernate5/README.txt                   |   48 +
 modules/hibernate5/licenses/apache-2.0.txt      |  202 +
 modules/hibernate5/pom.xml                      |  146 +
 .../HibernateAbstractRegionAccessStrategy.java  |   99 +
 .../HibernateAccessStrategyAdapter.java         |  379 ++
 .../cache/hibernate/HibernateCacheProxy.java    |  811 +++
 .../hibernate/HibernateCollectionRegion.java    |  114 +
 .../cache/hibernate/HibernateEntityRegion.java  |  129 +
 .../hibernate/HibernateGeneralDataRegion.java   |   72 +
 .../hibernate/HibernateKeyTransformer.java      |   28 +
 .../cache/hibernate/HibernateKeyWrapper.java    |  108 +
 .../hibernate/HibernateNaturalIdRegion.java     |  113 +
 .../HibernateNonStrictAccessStrategy.java       |  222 +
 .../hibernate/HibernateQueryResultsRegion.java  |   70 +
 .../HibernateReadOnlyAccessStrategy.java        |  107 +
 .../HibernateReadWriteAccessStrategy.java       |  328 ++
 .../ignite/cache/hibernate/HibernateRegion.java |   99 +
 .../cache/hibernate/HibernateRegionFactory.java |  255 +
 .../hibernate/HibernateTimestampsRegion.java    |   39 +
 .../HibernateTransactionalAccessStrategy.java   |  141 +
 .../HibernateTransactionalDataRegion.java       |  107 +
 .../ignite/cache/hibernate/package-info.java    |   24 +
 .../hibernate/CacheHibernateBlobStore.java      |  542 ++
 .../CacheHibernateBlobStoreEntry.hbm.xml        |   31 +
 .../hibernate/CacheHibernateBlobStoreEntry.java |   89 +
 .../CacheHibernateBlobStoreFactory.java         |  235 +
 .../CacheHibernateStoreSessionListener.java     |  223 +
 .../cache/store/hibernate/package-info.java     |   22 +
 .../src/test/config/factory-cache.xml           |   59 +
 .../src/test/config/factory-cache1.xml          |   61 +
 .../config/factory-incorrect-store-cache.xml    |   56 +
 .../HibernateL2CacheConfigurationSelfTest.java  |  409 ++
 .../hibernate/HibernateL2CacheSelfTest.java     | 1948 +++++++
 .../HibernateL2CacheTransactionalSelfTest.java  |  154 +
 ...nateL2CacheTransactionalUseSyncSelfTest.java |   31 +
 .../CacheHibernateBlobStoreNodeRestartTest.java |   54 +
 .../CacheHibernateBlobStoreSelfTest.java        |  113 +
 .../CacheHibernateStoreFactorySelfTest.java     |  326 ++
 ...heHibernateStoreSessionListenerSelfTest.java |  241 +
 .../cache/store/hibernate/hibernate.cfg.xml     |   42 +
 .../cache/store/hibernate/package-info.java     |   22 +
 .../IgniteBinaryHibernate5TestSuite.java        |   37 +
 .../testsuites/IgniteHibernate5TestSuite.java   |   57 +
 .../query/h2/DmlStatementsProcessor.java        |    2 +-
 .../internal/processors/query/h2/H2Cursor.java  |  108 +
 .../processors/query/h2/IgniteH2Indexing.java   |  421 +-
 .../query/h2/database/H2PkHashIndex.java        |  323 ++
 .../query/h2/database/H2RowFactory.java         |   80 +
 .../processors/query/h2/database/H2Tree.java    |  250 +
 .../query/h2/database/H2TreeIndex.java          |  420 ++
 .../query/h2/database/InlineIndexHelper.java    |  572 +++
 .../query/h2/database/io/H2ExtrasInnerIO.java   |  140 +
 .../query/h2/database/io/H2ExtrasLeafIO.java    |  135 +
 .../query/h2/database/io/H2InnerIO.java         |   74 +
 .../query/h2/database/io/H2LeafIO.java          |   74 +
 .../query/h2/database/io/H2RowLinkIO.java       |   30 +
 .../query/h2/database/util/CompareUtils.java    |  332 ++
 .../query/h2/opt/GridH2AbstractKeyValueRow.java |    8 +-
 .../query/h2/opt/GridH2IndexBase.java           |  215 +-
 .../query/h2/opt/GridH2KeyValueRowOffheap.java  |    2 +-
 .../query/h2/opt/GridH2KeyValueRowOnheap.java   |    8 +
 .../query/h2/opt/GridH2MetaTable.java           |    5 +
 .../processors/query/h2/opt/GridH2Row.java      |   66 +-
 .../query/h2/opt/GridH2RowDescriptor.java       |   13 +-
 .../query/h2/opt/GridH2RowFactory.java          |   15 +
 .../query/h2/opt/GridH2ScanIndex.java           |   55 +-
 .../processors/query/h2/opt/GridH2Table.java    |  271 +-
 .../query/h2/opt/GridH2TreeIndex.java           |  223 +-
 .../query/h2/opt/GridLuceneIndex.java           |    5 +-
 .../h2/twostep/GridReduceQueryExecutor.java     |   28 +-
 .../cache/CacheIndexStreamerTest.java           |    6 -
 .../cache/CacheIndexingOffheapCleanupTest.java  |  157 -
 .../CacheOffheapBatchIndexingBaseTest.java      |    6 +-
 .../CacheOffheapBatchIndexingMultiTypeTest.java |   17 +-
 ...CacheOffheapBatchIndexingSingleTypeTest.java |   20 +-
 .../CacheOperationsWithExpirationTest.java      |   69 +-
 .../cache/CacheQueryEvictDataLostTest.java      |  120 +
 .../cache/CacheQueryFilterExpiredTest.java      |  111 +
 .../CacheQueryOffheapEvictDataLostTest.java     |  138 -
 .../CacheRandomOperationsMultithreadedTest.java |   64 +-
 .../ClientReconnectAfterClusterRestartTest.java |   16 +-
 .../cache/GridCacheCrossCacheQuerySelfTest.java |   36 +-
 .../cache/GridCacheOffHeapAndSwapSelfTest.java  |  570 ---
 .../cache/GridCacheOffHeapSelfTest.java         |   16 +-
 .../GridCacheOffheapIndexEntryEvictTest.java    |    7 -
 .../cache/GridCacheOffheapIndexGetSelfTest.java |   38 +-
 .../GridCacheQueryIndexDisabledSelfTest.java    |   16 +-
 .../cache/GridCacheQuerySimpleBenchmark.java    |    4 -
 .../processors/cache/GridCacheSwapSelfTest.java |  724 ---
 .../cache/GridIndexingWithNoopSwapSelfTest.java |    7 +-
 .../IgniteBinaryObjectFieldsQuerySelfTest.java  |    5 +-
 ...aryObjectQueryArgumentsOffheapLocalTest.java |   28 -
 ...teBinaryObjectQueryArgumentsOffheapTest.java |   30 -
 .../IgniteBinaryObjectQueryArgumentsTest.java   |   11 -
 .../IgniteCacheAbstractFieldsQuerySelfTest.java |  492 +-
 ...niteCacheAbstractInsertSqlQuerySelfTest.java |  129 -
 .../cache/IgniteCacheAbstractQuerySelfTest.java |  273 +-
 .../IgniteCacheCollocatedQuerySelfTest.java     |    1 -
 ...acheConfigurationPrimitiveTypesSelfTest.java |   50 +-
 .../IgniteCacheCrossCacheJoinRandomTest.java    |    2 +-
 ...CacheDistributedJoinQueryConditionsTest.java |   16 -
 .../IgniteCacheInsertSqlQuerySelfTest.java      |   36 -
 ...PartitionedAndReplicatedCollocationTest.java |    5 +-
 .../cache/IgniteCacheLargeResultSelfTest.java   |    1 -
 ...PartitionOnAffinityRunAtomicCacheOpTest.java |   46 +-
 ...niteCacheLockPartitionOnAffinityRunTest.java |   35 +-
 .../cache/IgniteCacheMergeSqlQuerySelfTest.java |   34 -
 .../IgniteCacheMultipleIndexedTypesTest.java    |  200 +
 .../cache/IgniteCacheOffheapEvictQueryTest.java |   10 -
 .../cache/IgniteCacheOffheapIndexScanTest.java  |    3 -
 ...CacheOffheapTieredMultithreadedSelfTest.java |  302 --
 .../cache/IgniteCacheQueriesLoadTest1.java      |    2 -
 ...QueryMultiThreadedOffHeapTieredSelfTest.java |   38 -
 .../IgniteCacheQueryMultiThreadedSelfTest.java  |  122 +-
 ...QueryOffheapEvictsMultiThreadedSelfTest.java |   28 -
 ...eCacheQueryOffheapMultiThreadedSelfTest.java |   28 -
 .../cache/IgniteCacheUnionDuplicatesTest.java   |   21 +-
 .../cache/IgniteCrossCachesJoinsQueryTest.java  |   25 +-
 .../cache/IncorrectQueryEntityTest.java         |    8 +-
 .../cache/SqlFieldsQuerySelfTest.java           |   23 -
 ...niteCachePartitionedFieldsQuerySelfTest.java |   13 +-
 .../IgniteCachePartitionedQuerySelfTest.java    |    8 +-
 ...QueryNodeRestartDistributedJoinSelfTest.java |  165 +-
 .../IgniteCacheQueryNodeRestartSelfTest.java    |    3 +-
 ...gniteCacheReplicatedFieldsQuerySelfTest.java |    6 +-
 .../IgniteCacheReplicatedQuerySelfTest.java     |   25 +-
 .../IgniteCacheLocalFieldsQuerySelfTest.java    |    4 +-
 .../local/IgniteCacheLocalQuerySelfTest.java    |    2 +-
 .../cache/ttl/CacheTtlAbstractSelfTest.java     |   31 +-
 .../ttl/CacheTtlAtomicAbstractSelfTest.java     |   29 +
 .../cache/ttl/CacheTtlAtomicLocalSelfTest.java  |   34 +
 .../ttl/CacheTtlAtomicPartitionedSelfTest.java  |   34 +
 .../ttl/CacheTtlOffheapAbstractSelfTest.java    |   29 -
 .../CacheTtlOffheapAtomicAbstractSelfTest.java  |   29 -
 .../ttl/CacheTtlOffheapAtomicLocalSelfTest.java |   34 -
 ...acheTtlOffheapAtomicPartitionedSelfTest.java |   34 -
 ...TtlOffheapTransactionalAbstractSelfTest.java |   29 -
 ...cheTtlOffheapTransactionalLocalSelfTest.java |   34 -
 ...OffheapTransactionalPartitionedSelfTest.java |   34 -
 .../ttl/CacheTtlOnheapAbstractSelfTest.java     |   29 -
 .../CacheTtlOnheapAtomicAbstractSelfTest.java   |   29 -
 .../ttl/CacheTtlOnheapAtomicLocalSelfTest.java  |   34 -
 ...CacheTtlOnheapAtomicPartitionedSelfTest.java |   34 -
 ...eTtlOnheapTransactionalAbstractSelfTest.java |   29 -
 ...acheTtlOnheapTransactionalLocalSelfTest.java |   34 -
 ...lOnheapTransactionalPartitionedSelfTest.java |   34 -
 .../CacheTtlTransactionalAbstractSelfTest.java  |   29 +
 .../ttl/CacheTtlTransactionalLocalSelfTest.java |   34 +
 ...acheTtlTransactionalPartitionedSelfTest.java |   34 +
 .../database/IgniteDbMemoryLeakIndexedTest.java |   33 +
 .../IgniteDbMemoryLeakSqlQueryTest.java         |   76 +
 ...IgniteDbMultiNodeWithIndexingPutGetTest.java |   28 +
 ...gniteDbSingleNodeWithIndexingPutGetTest.java |  251 +
 .../query/IgniteSqlDistributedJoinSelfTest.java |  199 +
 .../query/IgniteSqlSchemaIndexingTest.java      |   17 +-
 .../query/IgniteSqlSegmentedIndexSelfTest.java  |    7 +-
 .../query/IgniteSqlSplitterSelfTest.java        |   92 +-
 .../h2/GridIndexingSpiAbstractSelfTest.java     |  256 +-
 .../query/h2/IgniteSqlQueryMinMaxTest.java      |  376 ++
 .../h2/database/InlineIndexHelperTest.java      |  364 ++
 .../query/h2/opt/GridH2TableSelfTest.java       |   87 +-
 .../h2/sql/AbstractH2CompareQueryTest.java      |   76 +-
 .../query/h2/sql/BaseH2CompareQueryTest.java    |  346 +-
 .../query/h2/sql/GridQueryParsingTest.java      |  168 +-
 .../query/h2/sql/H2CompareBigQueryTest.java     |  114 +-
 .../IgniteCacheQuerySelfTestSuite.java          |   31 +-
 .../IgniteCacheQuerySelfTestSuite2.java         |   10 +-
 .../IgniteCacheQuerySelfTestSuite3.java         |   12 +-
 .../IgniteCacheQuerySelfTestSuite4.java         |    4 -
 .../IgniteCacheWithIndexingTestSuite.java       |   32 +-
 ...IgniteDbMemoryLeakWithIndexingTestSuite.java |   40 +
 .../IgniteDistributedJoinTestSuite.java         |   55 +
 .../processors/query/h2/sql/bigQuery.sql        |   14 +-
 .../ignite/stream/kafka/TestKafkaBroker.java    |    2 +-
 .../osgi-karaf/src/main/resources/features.xml  |    9 +-
 modules/osgi/pom.xml                            |    1 -
 modules/platforms/.gitignore                    |   31 +
 modules/platforms/cpp/binary/Makefile.am        |    1 -
 .../platforms/cpp/binary/include/Makefile.am    |    3 -
 .../binary/binary_array_identity_resolver.h     |   64 -
 .../include/ignite/binary/binary_consts.h       |   86 +-
 .../include/ignite/binary/binary_containers.h   |   12 +-
 .../ignite/binary/binary_identity_resolver.h    |   61 -
 .../include/ignite/binary/binary_object.h       |   12 +-
 .../include/ignite/binary/binary_raw_reader.h   |    6 +-
 .../include/ignite/binary/binary_raw_writer.h   |   16 +-
 .../include/ignite/binary/binary_reader.h       |    6 +-
 .../binary/include/ignite/binary/binary_type.h  |   10 -
 .../include/ignite/binary/binary_writer.h       |   13 +-
 .../ignite/impl/binary/binary_reader_impl.h     |   31 +-
 .../include/ignite/impl/binary/binary_schema.h  |   19 +-
 .../ignite/impl/binary/binary_type_impl.h       |  147 -
 .../include/ignite/impl/binary/binary_utils.h   |    1 -
 .../ignite/impl/binary/binary_writer_impl.h     |   26 +-
 .../cpp/binary/project/vs/binary.vcxproj        |    4 -
 .../binary/project/vs/binary.vcxproj.filters    |   12 -
 .../binary/binary_array_identity_resolver.cpp   |   42 -
 .../cpp/binary/src/binary/binary_raw_reader.cpp |    2 +-
 .../cpp/binary/src/binary/binary_reader.cpp     |    2 +-
 .../src/impl/binary/binary_reader_impl.cpp      |   50 +-
 .../binary/src/impl/binary/binary_schema.cpp    |   17 +-
 .../src/impl/binary/binary_writer_impl.cpp      |   14 +-
 modules/platforms/cpp/common/configure.ac       |   62 +
 .../cpp/core-test/config/cache-identity-32.xml  |   50 +
 .../core-test/config/cache-identity-default.xml |  154 +
 .../cpp/core-test/config/cache-identity.xml     |  124 +-
 .../cpp/core-test/config/cache-query-32.xml     |   50 +
 .../config/cache-query-continuous-32.xml        |   46 +
 .../config/cache-query-continuous-default.xml   |   87 +
 .../core-test/config/cache-query-continuous.xml |   61 +-
 .../core-test/config/cache-query-default.xml    |  153 +
 .../cpp/core-test/config/cache-query.xml        |  123 +-
 .../cpp/core-test/config/cache-store-32.xml     |   50 +
 .../core-test/config/cache-store-default.xml    |   71 +
 .../cpp/core-test/config/cache-store.xml        |   41 +-
 .../cpp/core-test/config/cache-test-32.xml      |   50 +
 .../cpp/core-test/config/cache-test-default.xml |  136 +
 .../cpp/core-test/config/cache-test.xml         |  106 +-
 modules/platforms/cpp/core-test/configure.ac    |   62 +
 .../core-test/include/ignite/binary_test_defs.h |   31 +-
 .../cpp/core-test/include/ignite/complex_type.h |    2 -
 .../cpp/core-test/include/ignite/test_type.h    |    1 -
 .../cpp/core-test/project/vs/core-test.vcxproj  |   15 +
 .../project/vs/core-test.vcxproj.filters        |   33 +
 .../src/binary_identity_resolver_test.cpp       |  246 +-
 .../cpp/core-test/src/binary_object_test.cpp    |    8 +
 .../src/binary_reader_writer_raw_test.cpp       |   34 +-
 .../core-test/src/binary_reader_writer_test.cpp |   96 +-
 .../cpp/core-test/src/cache_invoke_test.cpp     |    7 +-
 .../cpp/core-test/src/cache_query_test.cpp      |    6 +-
 .../cpp/core-test/src/cache_store_test.cpp      |   17 +-
 .../platforms/cpp/core-test/src/cache_test.cpp  |   86 +-
 .../cpp/core-test/src/cluster_test.cpp          |    4 +
 .../cpp/core-test/src/continuous_query_test.cpp |   26 +-
 .../cpp/core-test/src/ignition_test.cpp         |    4 +
 .../cpp/core-test/src/interop_test.cpp          |    4 +
 .../cpp/core-test/src/transactions_test.cpp     |   80 +-
 modules/platforms/cpp/core/configure.ac         |   62 +
 .../cpp/core/include/ignite/cache/cache.h       |   12 +-
 .../core/include/ignite/cache/cache_peek_mode.h |   67 +-
 .../cpp/core/include/ignite/ignite_binding.h    |    4 +-
 .../cpp/core/include/ignite/impl/bindings.h     |    4 +-
 .../impl/cache/cache_entry_processor_holder.h   |   37 +-
 .../include/ignite/impl/ignite_binding_impl.h   |   11 +-
 .../ignite/impl/interop/interop_target.h        |   21 +-
 .../core/include/ignite/impl/module_manager.h   |   26 +
 .../ignite/impl/transactions/transaction_impl.h |    4 +-
 .../impl/transactions/transactions_impl.h       |   10 +-
 .../include/ignite/transactions/transaction.h   |   12 +-
 .../ignite/transactions/transaction_consts.h    |  181 +-
 .../include/ignite/transactions/transactions.h  |   16 +-
 .../impl/binary/binary_type_updater_impl.cpp    |   17 +-
 .../continuous/continuous_query_handle_impl.cpp |   13 +-
 .../src/impl/cluster/cluster_group_impl.cpp     |    9 +-
 .../cpp/core/src/impl/ignite_environment.cpp    |   42 +-
 .../core/src/impl/interop/interop_target.cpp    |   12 +-
 .../src/impl/transactions/transaction_impl.cpp  |   18 +-
 .../src/impl/transactions/transactions_impl.cpp |   92 +-
 .../cpp/core/src/transactions/transaction.cpp   |    8 +-
 .../cpp/core/src/transactions/transactions.cpp  |   20 +-
 .../examples/include/ignite/examples/address.h  |   26 +-
 .../include/ignite/examples/organization.h      |   26 +-
 .../examples/include/ignite/examples/person.h   |   17 +-
 modules/platforms/cpp/ignite/configure.ac       |   62 +
 .../cpp/odbc-test/config/queries-test-32.xml    |   47 +
 .../odbc-test/config/queries-test-default.xml   |   38 +
 .../odbc-test/config/queries-test-noodbc-32.xml |   47 +
 .../cpp/odbc-test/config/queries-test.xml       |   11 +-
 .../cpp/odbc-test/include/complex_type.h        |    2 -
 .../platforms/cpp/odbc-test/include/test_type.h |    1 -
 .../cpp/odbc-test/project/vs/odbc-test.vcxproj  |    3 +
 .../project/vs/odbc-test.vcxproj.filters        |    6 +
 .../cpp/odbc-test/src/api_robustness_test.cpp   |   20 +-
 .../src/application_data_buffer_test.cpp        |   94 +-
 .../platforms/cpp/odbc-test/src/column_test.cpp |   56 +-
 .../cpp/odbc-test/src/connection_info_test.cpp  |   72 +-
 .../cpp/odbc-test/src/queries_test.cpp          |    8 +
 .../platforms/cpp/odbc-test/src/row_test.cpp    |   16 +-
 .../odbc-test/src/sql_test_suite_fixture.cpp    |    6 +-
 .../ignite/odbc/app/application_data_buffer.h   |    6 +-
 .../cpp/odbc/include/ignite/odbc/column.h       |    2 +-
 .../cpp/odbc/include/ignite/odbc/common_types.h |  350 +-
 .../ignite/odbc/config/connection_info.h        |    2 +-
 .../cpp/odbc/include/ignite/odbc/connection.h   |   18 +-
 .../ignite/odbc/diagnostic/diagnosable.h        |    4 +-
 .../odbc/diagnostic/diagnosable_adapter.h       |    8 +-
 .../ignite/odbc/diagnostic/diagnostic_record.h  |    4 +-
 .../odbc/diagnostic/diagnostic_record_storage.h |    8 +-
 .../cpp/odbc/include/ignite/odbc/environment.h  |   10 +-
 .../cpp/odbc/include/ignite/odbc/message.h      |   56 +-
 .../ignite/odbc/query/column_metadata_query.h   |   10 +-
 .../odbc/include/ignite/odbc/query/data_query.h |   23 +-
 .../ignite/odbc/query/foreign_keys_query.h      |    8 +-
 .../ignite/odbc/query/primary_keys_query.h      |    8 +-
 .../cpp/odbc/include/ignite/odbc/query/query.h  |   32 +-
 .../ignite/odbc/query/special_columns_query.h   |    8 +-
 .../ignite/odbc/query/table_metadata_query.h    |   10 +-
 .../include/ignite/odbc/query/type_info_query.h |    8 +-
 .../cpp/odbc/include/ignite/odbc/row.h          |    2 +-
 .../cpp/odbc/include/ignite/odbc/statement.h    |   52 +-
 .../odbc/system/ui/dsn_configuration_window.h   |   35 +-
 .../cpp/odbc/include/ignite/odbc/type_traits.h  |   91 +-
 .../ignite/odbc/system/ui/custom_window.h       |   12 +-
 .../odbc/os/win/src/system/ui/custom_window.cpp |    4 +-
 .../src/system/ui/dsn_configuration_window.cpp  |   42 +-
 .../cpp/odbc/os/win/src/system_dsn.cpp          |    2 +-
 .../odbc/src/app/application_data_buffer.cpp    |  386 +-
 .../platforms/cpp/odbc/src/app/parameter.cpp    |    6 +-
 modules/platforms/cpp/odbc/src/column.cpp       |   14 +-
 modules/platforms/cpp/odbc/src/common_types.cpp |   54 +-
 .../cpp/odbc/src/config/connection_info.cpp     |   12 +-
 modules/platforms/cpp/odbc/src/connection.cpp   |   74 +-
 .../odbc/src/diagnostic/diagnosable_adapter.cpp |    4 +-
 .../odbc/src/diagnostic/diagnostic_record.cpp   |   46 +-
 .../diagnostic/diagnostic_record_storage.cpp    |   78 +-
 modules/platforms/cpp/odbc/src/environment.cpp  |   62 +-
 modules/platforms/cpp/odbc/src/odbc.cpp         |   20 +-
 .../odbc/src/query/column_metadata_query.cpp    |  123 +-
 .../platforms/cpp/odbc/src/query/data_query.cpp |  102 +-
 .../cpp/odbc/src/query/foreign_keys_query.cpp   |   26 +-
 .../cpp/odbc/src/query/primary_keys_query.cpp   |   71 +-
 .../odbc/src/query/special_columns_query.cpp    |   26 +-
 .../cpp/odbc/src/query/table_metadata_query.cpp |   81 +-
 .../cpp/odbc/src/query/type_info_query.cpp      |  231 +-
 modules/platforms/cpp/odbc/src/row.cpp          |    4 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |  258 +-
 modules/platforms/cpp/odbc/src/type_traits.cpp  |   46 +-
 .../Apache.Ignite.Core.Tests.csproj             |    4 -
 .../Binary/BinaryBuilderSelfTest.cs             |    4 +-
 .../Binary/BinaryDynamicRegistrationTest.cs     |   11 +-
 .../Binary/BinaryEqualityComparerTest.cs        |  220 +-
 .../Binary/BinarySelfTest.cs                    |    4 +-
 .../Affinity/AffinityFunctionSpringTest.cs      |    6 +-
 .../Cache/Affinity/AffinityFunctionTest.cs      |   94 +-
 .../Cache/CacheAbstractTest.cs                  |   17 +-
 .../Cache/CacheAbstractTransactionalTest.cs     |    1 +
 .../Cache/CacheConfigurationTest.cs             |   42 +-
 .../Cache/CacheMetricsTest.cs                   |   96 +-
 .../Cache/CacheSwapSpaceTest.cs                 |  122 -
 .../Cache/Query/CacheDmlQueriesTest.cs          |   13 +-
 .../Cache/Query/CacheLinqTest.cs                |    3 +-
 .../Continuous/ContinuousQueryAbstractTest.cs   |   41 +-
 .../Cache/Store/CacheStoreTest.cs               |   20 +-
 .../Compute/ComputeApiTest.cs                   |    8 +-
 .../Config/Cache/Affinity/affinity-function.xml |    4 +-
 .../Config/native-client-test-cache.xml         |    5 -
 .../Apache.Ignite.Core.Tests/EventsTest.cs      |   38 +-
 .../IgniteConfigurationSerializerTest.cs        |   74 +-
 .../IgniteConfigurationTest.cs                  |   29 +-
 .../Apache.Ignite.Core.Tests/LifecycleTest.cs   |    8 +-
 .../Log/CustomLoggerTest.cs                     |    4 +-
 .../Plugin/Cache/CachePlugin.cs                 |  127 -
 .../Plugin/Cache/CachePluginConfiguration.cs    |   64 -
 .../Plugin/Cache/CachePluginTest.cs             |  218 -
 .../Apache.Ignite.Core.Tests/TestUtils.cs       |   23 +-
 .../Apache.Ignite.Core.csproj                   |   23 +-
 .../Binary/BinaryArrayEqualityComparer.cs       |  160 -
 .../Binary/BinaryConfiguration.cs               |   24 +-
 .../Binary/BinaryTypeConfiguration.cs           |   14 -
 .../Cache/Affinity/Fair/FairAffinityFunction.cs |   32 -
 .../Cache/Affinity/Fair/Package-Info.cs         |   26 -
 .../Cache/Affinity/IAffinityFunction.cs         |    3 +-
 .../Apache.Ignite.Core/Cache/CachePeekMode.cs   |    7 +-
 .../Cache/Configuration/CacheConfiguration.cs   |  130 +-
 .../Cache/Configuration/CacheMemoryMode.cs      |   60 -
 .../Apache.Ignite.Core/Cache/ICacheMetrics.cs   |   80 -
 .../Apache.Ignite.Core/Events/EventReader.cs    |    1 -
 .../Apache.Ignite.Core/Events/EventType.cs      |   57 -
 .../Apache.Ignite.Core/Events/SwapSpaceEvent.cs |   51 -
 .../Apache.Ignite.Core/IgniteConfiguration.cs   |   66 +-
 .../IgniteConfigurationSection.xsd              |  112 +-
 .../dotnet/Apache.Ignite.Core/Ignition.cs       |   32 +-
 .../Impl/Binary/BinaryArrayEqualityComparer.cs  |  159 +
 .../Binary/BinaryEqualityComparerSerializer.cs  |  100 +-
 .../Impl/Binary/BinaryFieldEqualityComparer.cs  |  138 -
 .../Impl/Binary/BinaryFullTypeDescriptor.cs     |   20 -
 .../Impl/Binary/BinaryObject.cs                 |    4 +-
 .../Impl/Binary/BinaryObjectBuilder.cs          |    7 +-
 .../Binary/BinarySurrogateTypeDescriptor.cs     |   16 +-
 .../Impl/Binary/BinaryUtils.cs                  |   18 +-
 .../Impl/Binary/BinaryWriter.cs                 |    6 +-
 .../Impl/Binary/IBinaryEqualityComparer.cs      |   63 -
 .../Impl/Binary/IBinaryTypeDescriptor.cs        |    5 -
 .../Impl/Binary/Marshaller.cs                   |   36 +-
 .../Affinity/AffinityFunctionSerializer.cs      |   18 +-
 .../Impl/Cache/CacheMetricsImpl.cs              |   70 -
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs    |   16 +-
 .../Impl/LifecycleBeanHolder.cs                 |   66 -
 .../Impl/LifecycleHandlerHolder.cs              |   66 +
 .../Impl/Plugin/Cache/CachePluginContext.cs     |   82 -
 .../Impl/Plugin/Cache/CachePluginProcessor.cs   |   77 -
 .../Plugin/Cache/CachePluginProviderProxy.cs    |   75 -
 .../Plugin/Cache/ICachePluginProviderProxy.cs   |   52 -
 .../Impl/SwapSpace/SwapSpaceSerializer.cs       |   99 -
 .../Impl/Unmanaged/UnmanagedCallbackOp.cs       |    4 -
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        |   58 +-
 .../Lifecycle/ILifecycleBean.cs                 |   64 -
 .../Lifecycle/ILifecycleHandler.cs              |   64 +
 .../Lifecycle/LifecycleEventType.cs             |    2 +-
 .../Cache/CachePluginProviderTypeAttribute.cs   |   52 -
 .../Plugin/Cache/ICachePluginConfiguration.cs   |   21 -
 .../Plugin/Cache/ICachePluginContext.cs         |   47 -
 .../Plugin/Cache/ICachePluginProvider.cs        |   52 -
 .../SwapSpace/File/FileSwapSpaceSpi.cs          |  105 -
 .../SwapSpace/ISwapSpaceSpi.cs                  |   35 -
 .../Apache.Ignite/Service/IgniteService.cs      |    6 +-
 .../Datagrid/MultiTieredCacheExample.cs         |   26 +-
 .../Misc/LifecycleExample.cs                    |   12 +-
 .../http/jetty/GridJettyObjectMapper.java       |  119 +-
 .../schedule/IgniteScheduleProcessor.java       |    2 +-
 .../processors/schedule/ScheduleFutureImpl.java |   20 -
 .../spark/JavaStandaloneIgniteRDDSelfTest.java  |   41 +-
 .../org/apache/ignite/spark/IgniteRDDSpec.scala |   84 +-
 modules/spring-data/README.txt                  |   32 +
 modules/spring-data/licenses/apache-2.0.txt     |  202 +
 modules/spring-data/pom.xml                     |   79 +
 .../springdata/repository/IgniteRepository.java |   58 +
 .../config/EnableIgniteRepositories.java        |  119 +
 .../config/IgniteRepositoriesRegistar.java      |   36 +
 .../IgniteRepositoryConfigurationExtension.java |   49 +
 .../springdata/repository/config/Query.java     |   37 +
 .../repository/config/RepositoryConfig.java     |   39 +
 .../repository/config/package-info.java         |   22 +
 .../springdata/repository/package-info.java     |   22 +
 .../repository/query/IgniteQuery.java           |   83 +
 .../repository/query/IgniteQueryGenerator.java  |  243 +
 .../repository/query/IgniteRepositoryQuery.java |  306 ++
 .../repository/query/package-info.java          |   22 +
 .../support/IgniteRepositoryFactory.java        |  168 +
 .../support/IgniteRepositoryFactoryBean.java    |   85 +
 .../support/IgniteRepositoryImpl.java           |  160 +
 .../repository/support/package-info.java        |   22 +
 .../IgniteSpringDataCrudSelfTest.java           |  233 +
 .../IgniteSpringDataQueriesSelfTest.java        |  291 ++
 .../misc/ApplicationConfiguration.java          |   46 +
 .../apache/ignite/springdata/misc/Person.java   |   97 +
 .../springdata/misc/PersonRepository.java       |   92 +
 .../springdata/misc/PersonSecondRepository.java |   40 +
 .../testsuites/IgniteSpringDataTestSuite.java   |   41 +
 .../org/apache/ignite/IgniteSpringBean.java     |   38 +-
 .../GridSpringBeanSerializationSelfTest.java    |    2 +
 .../ant/beautifier/GridJavadocAntTask.java      |   18 +-
 .../ignite/visor/commands/VisorConsole.scala    |    1 -
 .../commands/cache/VisorCacheClearCommand.scala |    2 +-
 .../commands/cache/VisorCacheCommand.scala      |  341 +-
 .../commands/cache/VisorCacheScanCommand.scala  |   16 +-
 .../commands/cache/VisorCacheSwapCommand.scala  |  145 -
 .../config/VisorConfigurationCommand.scala      |  184 +-
 .../commands/disco/VisorDiscoveryCommand.scala  |   24 +-
 .../commands/events/VisorEventsCommand.scala    |   38 +-
 .../visor/commands/gc/VisorGcCommand.scala      |    4 +-
 .../commands/tasks/VisorTasksCommand.scala      |   61 +-
 .../scala/org/apache/ignite/visor/visor.scala   |   34 +-
 .../cswap/VisorCacheSwapCommandSpec.scala       |   89 -
 .../testsuites/VisorConsoleSelfTestSuite.scala  |    2 -
 modules/web-console/backend/app/agent.js        |   98 +-
 modules/web-console/backend/app/browser.js      |   76 +-
 modules/web-console/backend/app/mongo.js        |   29 +-
 modules/web-console/frontend/.eslintrc          |    2 +-
 modules/web-console/frontend/app/app.js         |    3 -
 .../form-field-datepicker.pug                   |   59 -
 .../form-field-datepicker.scss                  |   20 -
 .../list-of-registered-users.categories.js      |    4 +-
 .../list-of-registered-users.column-defs.js     |   44 +-
 .../list-of-registered-users.controller.js      |  141 +-
 .../list-of-registered-users.scss               |    4 +
 .../list-of-registered-users.tpl.pug            |   76 +-
 .../ui-grid-header/ui-grid-header.scss          |   91 -
 .../ui-grid-header/ui-grid-header.tpl.pug       |   29 -
 .../ui-grid-settings/ui-grid-settings.pug       |   33 -
 .../ui-grid-settings/ui-grid-settings.scss      |  144 -
 .../frontend/app/data/pom-dependencies.json     |    1 +
 .../app/helpers/jade/form/form-field-text.pug   |   40 +-
 .../frontend/app/helpers/jade/mixins.pug        |   23 +-
 .../frontend/app/modules/agent/agent.module.js  |   41 +-
 .../generator/AbstractTransformer.js            |    5 -
 .../generator/ConfigurationGenerator.js         |   58 +-
 .../generator/JavaTransformer.service.js        |    3 +
 .../generator/PlatformGenerator.js              |   10 +-
 .../defaults/Cache.platform.service.js          |    5 -
 .../generator/defaults/Cache.service.js         |   10 +-
 .../generator/defaults/Cluster.service.js       |    7 +-
 .../generator/defaults/IGFS.service.js          |    2 +-
 .../frontend/app/modules/sql/sql.controller.js  |   62 +-
 .../frontend/app/modules/states/admin.state.js  |   11 +-
 .../states/configuration/caches/affinity.pug    |    2 +-
 .../states/configuration/caches/general.pug     |   25 +
 .../states/configuration/caches/memory.pug      |   64 +-
 .../states/configuration/caches/query.pug       |    3 +
 .../states/configuration/clusters/events.pug    |    6 +-
 .../states/configuration/clusters/general.pug   |    3 +
 .../clusters/general/discovery/kubernetes.pug   |   37 +
 .../configuration/clusters/marshaller.pug       |    6 -
 .../states/configuration/clusters/swap.pug      |   72 -
 .../modules/states/configuration/igfs/misc.pug  |    2 +-
 .../configuration/summary/summary.controller.js |    3 +
 .../configuration/summary/summary.worker.js     |   22 +
 .../frontend/app/primitives/badge/index.scss    |    4 +
 .../frontend/app/primitives/btn-group/index.pug |   35 +
 .../frontend/app/primitives/btn/index.scss      |   41 +
 .../app/primitives/datepicker/index.pug         |   60 +
 .../app/primitives/datepicker/index.scss        |   64 +
 .../frontend/app/primitives/dropdown/index.pug  |   43 +
 .../frontend/app/primitives/dropdown/index.scss |   82 +
 .../frontend/app/primitives/index.js            |    8 +
 .../frontend/app/primitives/page/index.scss     |   35 +
 .../frontend/app/primitives/panel/index.scss    |   51 +
 .../frontend/app/primitives/tabs/index.scss     |   15 +
 .../app/primitives/ui-grid-header/index.scss    |   91 +
 .../app/primitives/ui-grid-header/index.tpl.pug |   29 +
 .../app/primitives/ui-grid-settings/index.pug   |   33 +
 .../app/primitives/ui-grid-settings/index.scss  |  171 +
 .../frontend/app/primitives/ui-grid/index.scss  |  329 ++
 .../frontend/controllers/caches-controller.js   |   29 -
 .../frontend/controllers/clusters-controller.js |   41 +-
 .../frontend/public/stylesheets/style.scss      |    5 -
 modules/web-console/frontend/views/base2.pug    |   22 +
 .../views/configuration/clusters.tpl.pug        |    1 -
 .../views/configuration/domains-import.tpl.pug  |    2 +-
 .../views/configuration/domains.tpl.pug         |    1 -
 .../frontend/views/settings/admin.tpl.pug       |    3 +-
 .../web-console/frontend/views/sql/sql.tpl.pug  |   13 +-
 .../ignite/console/demo/AgentClusterDemo.java   |    5 +-
 .../src/main/resources/log4j.properties         |    1 -
 .../cache/websession/WebSessionFilter.java      |   22 +-
 .../internal/websession/WebSessionSelfTest.java |    4 +
 modules/yardstick/README.txt                    |    2 -
 .../config/benchmark-atomic-win.properties      |    8 +-
 .../config/benchmark-atomic.properties          |    6 -
 .../config/benchmark-client-mode.properties     |    9 -
 .../yardstick/config/benchmark-h2.properties    |   56 +
 .../config/benchmark-multicast.properties       |    9 -
 .../yardstick/config/benchmark-mysql.properties |   56 +
 .../yardstick/config/benchmark-pgsql.properties |   57 +
 .../config/benchmark-query-win.properties       |    5 +-
 .../yardstick/config/benchmark-query.properties |    3 -
 .../config/benchmark-tx-win.properties          |    6 +-
 .../yardstick/config/benchmark-tx.properties    |    4 -
 modules/yardstick/config/benchmark.properties   |   11 +-
 modules/yardstick/config/h2-schema.sql          |   11 +
 modules/yardstick/config/ignite-base-config.xml |  110 +-
 .../config/ignite-base-load-config.xml          |   91 -
 .../config/ignite-cache-load-config.xml         |    5 -
 .../config/ignite-failover-base-config.xml      |   43 -
 .../ignite-int-max-values-offheap-config.xml    |   87 -
 .../ignite-int-max-values-onheap-config.xml     |    1 -
 .../ignite-int-max-values-swap-config.xml       |   91 -
 .../config/ignite-localhost-config.xml          |    6 +
 .../yardstick/config/ignite-store-config.xml    |    2 -
 modules/yardstick/config/mysql-schema.sql       |   11 +
 modules/yardstick/config/pgsql-schema.sql       |   18 +
 .../test-max-int-values-offheap.properties      |   65 -
 .../config/test-max-int-values-swap.properties  |   64 -
 modules/yardstick/pom.xml                       |   14 +
 .../yardstick/IgniteAbstractBenchmark.java      |    8 +-
 .../yardstick/IgniteBenchmarkArguments.java     |   78 +-
 .../ignite/yardstick/IgniteBenchmarkUtils.java  |    7 +-
 .../org/apache/ignite/yardstick/IgniteNode.java |   23 +-
 .../yardstick/cache/IgniteGetBenchmark.java     |    5 +-
 .../cache/IgniteGetOffHeapBenchmark.java        |   32 -
 .../cache/IgniteGetOffHeapValuesBenchmark.java  |   32 -
 .../cache/IgniteIoTestAbstractBenchmark.java    |   61 +
 .../cache/IgniteIoTestSendAllBenchmark.java     |   32 +
 .../cache/IgniteIoTestSendRandomBenchmark.java  |   35 +
 .../yardstick/cache/IgnitePutAllBenchmark.java  |   95 +-
 .../cache/IgnitePutAllTxBenchmark.java          |   43 +-
 .../cache/IgnitePutGetOffHeapBenchmark.java     |   32 -
 .../IgnitePutGetOffHeapValuesBenchmark.java     |   32 -
 .../cache/IgnitePutGetTxOffHeapBenchmark.java   |   32 -
 .../IgnitePutGetTxOffHeapValuesBenchmark.java   |   32 -
 .../cache/IgnitePutOffHeapBenchmark.java        |   32 -
 .../cache/IgnitePutOffHeapValuesBenchmark.java  |   32 -
 .../IgnitePutRandomValueSizeBenchmark.java      |    2 +-
 .../cache/IgnitePutTxOffHeapBenchmark.java      |   32 -
 .../IgnitePutTxOffHeapValuesBenchmark.java      |   32 -
 .../IgniteSqlQueryJoinOffHeapBenchmark.java     |   32 -
 .../cache/IgniteSqlQueryOffHeapBenchmark.java   |   32 -
 .../IgniteSqlQueryPutOffHeapBenchmark.java      |   32 -
 ...IgniteAtomicOffHeapInvokeRetryBenchmark.java |   31 -
 .../IgniteAtomicOffHeapRetriesBenchmark.java    |   31 -
 ...ransactionalOffHeapInvokeRetryBenchmark.java |   33 -
 ...ransactionalOffHeapWriteInvokeBenchmark.java |   37 -
 ...eTransactionalOffHeapWriteReadBenchmark.java |   32 -
 .../cache/jdbc/JdbcAbstractBenchmark.java       |  163 +
 .../yardstick/cache/jdbc/JdbcPutBenchmark.java  |   89 +
 .../cache/jdbc/JdbcPutGetBenchmark.java         |   62 +
 .../jdbc/JdbcPutIndexedValue8Benchmark.java     |  104 +
 .../cache/jdbc/JdbcSqlQueryBenchmark.java       |   94 +
 .../cache/jdbc/JdbcSqlQueryJoinBenchmark.java   |  111 +
 .../IgniteCacheRandomOperationBenchmark.java    |    7 -
 parent/pom.xml                                  |    7 +-
 pom.xml                                         |    2 +
 scripts/git-remoteless-branches.sh              |   35 +
 1983 files changed, 97266 insertions(+), 59980 deletions(-)
----------------------------------------------------------------------



[07/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
index 2ecdc8e..6759c40 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
+import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.util.io.GridByteArrayInputStream;
 import org.apache.ignite.internal.util.io.GridByteArrayOutputStream;
@@ -36,7 +37,8 @@ import org.jetbrains.annotations.Nullable;
  * <h2 class="header">Mandatory</h2>
  * This marshaller has no mandatory configuration parameters.
  * <h2 class="header">Java Example</h2>
- * {@code JdkMarshaller} needs to be explicitly configured to override default {@link org.apache.ignite.marshaller.optimized.OptimizedMarshaller}.
+ * {@code JdkMarshaller} needs to be explicitly configured to override default <b>binary marshaller</b> -
+ * see {@link IgniteBinary}.
  * <pre name="code" class="java">
  * JdkMarshaller marshaller = new JdkMarshaller();
  *

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
deleted file mode 100644
index fd885f2..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
+++ /dev/null
@@ -1,1141 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamField;
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.internal.util.GridUnsafe;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteProductVersion;
-import org.apache.ignite.marshaller.MarshallerContext;
-import org.apache.ignite.marshaller.MarshallerExclusions;
-import org.apache.ignite.internal.util.SerializableTransient;
-import org.apache.ignite.marshaller.MarshallerUtils;
-
-import static java.lang.reflect.Modifier.isFinal;
-import static java.lang.reflect.Modifier.isPrivate;
-import static java.lang.reflect.Modifier.isStatic;
-import static java.lang.reflect.Modifier.isTransient;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BYTE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BYTE_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CHAR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CHAR_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CLS;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DATE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.ENUM;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.EXTERNALIZABLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.FLOAT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.FLOAT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_MAP;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET_MAP_OFF;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.INT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.INT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_MAP;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_SET;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_LIST;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LONG;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LONG_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.OBJ_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.PROPS;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.PROXY;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SERIALIZABLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SHORT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SHORT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.STR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.UUID;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.computeSerialVersionUid;
-
-/**
- * Class descriptor.
- */
-class OptimizedClassDescriptor {
-    /** Class. */
-    private final Class<?> cls;
-
-    /** Context. */
-    private final MarshallerContext ctx;
-
-    /** */
-    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
-
-    /** ID mapper. */
-    private final OptimizedMarshallerIdMapper mapper;
-
-    /** Class name. */
-    private final String name;
-
-    /** Type ID. */
-    private final int typeId;
-
-    /** Short ID. */
-    private final short checksum;
-
-    /** Class type. */
-    private int type;
-
-    /** Primitive flag. */
-    private boolean isPrimitive;
-
-    /** Enum flag. */
-    private boolean isEnum;
-
-    /** Serializable flag. */
-    private boolean isSerial;
-
-    /** Excluded flag. */
-    private boolean excluded;
-
-    /** {@code True} if descriptor is for {@link Class}. */
-    private boolean isCls;
-
-    /** Enumeration values. */
-    private Object[] enumVals;
-
-    /** Constructor. */
-    private Constructor<?> constructor;
-
-    /** Fields. */
-    private Fields fields;
-
-    /** {@code writeObject} methods. */
-    private List<Method> writeObjMtds;
-
-    /** {@code writeReplace} method. */
-    private Method writeReplaceMtd;
-
-    /** {@code readObject} methods. */
-    private List<Method> readObjMtds;
-
-    /** {@code readResolve} method. */
-    private Method readResolveMtd;
-
-    /** Defaults field offset. */
-    private long dfltsFieldOff;
-
-    /** Load factor field offset. */
-    private long loadFactorFieldOff;
-
-    /** Access order field offset. */
-    private long accessOrderFieldOff;
-
-    /** Proxy interfaces. */
-    private Class<?>[] proxyIntfs;
-
-    /** Method returns serializable transient fields. */
-    private Method serTransMtd;
-
-    /**
-     * Creates descriptor for class.
-     *
-     * @param typeId Type ID.
-     * @param clsMap Class descriptors by class map.
-     * @param cls Class.
-     * @param ctx Context.
-     * @param mapper ID mapper.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    OptimizedClassDescriptor(Class<?> cls,
-        int typeId,
-        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
-        MarshallerContext ctx,
-        OptimizedMarshallerIdMapper mapper)
-        throws IOException {
-        this.cls = cls;
-        this.typeId = typeId;
-        this.clsMap = clsMap;
-        this.ctx = ctx;
-        this.mapper = mapper;
-
-        name = cls.getName();
-
-        excluded = MarshallerExclusions.isExcluded(cls);
-
-        if (!excluded) {
-            Class<?> parent;
-
-            if (cls == byte.class || cls == Byte.class) {
-                type = BYTE;
-
-                isPrimitive = true;
-            }
-            else if (cls == short.class || cls == Short.class) {
-                type = SHORT;
-
-                isPrimitive = true;
-            }
-            else if (cls == int.class || cls == Integer.class) {
-                type = INT;
-
-                isPrimitive = true;
-            }
-            else if (cls == long.class || cls == Long.class) {
-                type = LONG;
-
-                isPrimitive = true;
-            }
-            else if (cls == float.class || cls == Float.class) {
-                type = FLOAT;
-
-                isPrimitive = true;
-            }
-            else if (cls == double.class || cls == Double.class) {
-                type = DOUBLE;
-
-                isPrimitive = true;
-            }
-            else if (cls == char.class || cls == Character.class) {
-                type = CHAR;
-
-                isPrimitive = true;
-            }
-            else if (cls == boolean.class || cls == Boolean.class) {
-                type = BOOLEAN;
-
-                isPrimitive = true;
-            }
-            else if (cls == byte[].class)
-                type = BYTE_ARR;
-            else if (cls == short[].class)
-                type = SHORT_ARR;
-            else if (cls == int[].class)
-                type = INT_ARR;
-            else if (cls == long[].class)
-                type = LONG_ARR;
-            else if (cls == float[].class)
-                type = FLOAT_ARR;
-            else if (cls == double[].class)
-                type = DOUBLE_ARR;
-            else if (cls == char[].class)
-                type = CHAR_ARR;
-            else if (cls == boolean[].class)
-                type = BOOLEAN_ARR;
-            else if (cls.isArray())
-                type = OBJ_ARR;
-            else if (cls == String.class)
-                type = STR;
-            else if (cls.isEnum()) {
-                type = ENUM;
-
-                isEnum = true;
-                enumVals = cls.getEnumConstants();
-            }
-            // Support for enum constants, based on anonymous children classes.
-            else if ((parent = cls.getSuperclass()) != null && parent.isEnum()) {
-                type = ENUM;
-
-                isEnum = true;
-                enumVals = parent.getEnumConstants();
-            }
-            else if (cls == UUID.class)
-                type = UUID;
-            else if (cls == Properties.class) {
-                type = PROPS;
-
-                try {
-                    dfltsFieldOff = GridUnsafe.objectFieldOffset(Properties.class.getDeclaredField("defaults"));
-                }
-                catch (NoSuchFieldException e) {
-                    throw new IOException(e);
-                }
-            }
-            else if (cls == ArrayList.class)
-                type = ARRAY_LIST;
-            else if (cls == HashMap.class) {
-                type = HASH_MAP;
-
-                try {
-                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
-                }
-                catch (NoSuchFieldException e) {
-                    throw new IOException(e);
-                }
-            }
-            else if (cls == HashSet.class) {
-                type = HASH_SET;
-
-                try {
-                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
-                }
-                catch (NoSuchFieldException e) {
-                    throw new IOException(e);
-                }
-            }
-            else if (cls == LinkedList.class)
-                type = LINKED_LIST;
-            else if (cls == LinkedHashMap.class) {
-                type = LINKED_HASH_MAP;
-
-                try {
-                    loadFactorFieldOff =
-                        GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
-                    accessOrderFieldOff =
-                        GridUnsafe.objectFieldOffset(LinkedHashMap.class.getDeclaredField("accessOrder"));
-                }
-                catch (NoSuchFieldException e) {
-                    throw new IOException(e);
-                }
-            }
-            else if (cls == LinkedHashSet.class) {
-                type = LINKED_HASH_SET;
-
-                try {
-                    loadFactorFieldOff = GridUnsafe.objectFieldOffset(HashMap.class.getDeclaredField("loadFactor"));
-                }
-                catch (NoSuchFieldException e) {
-                    throw new IOException(e);
-                }
-            }
-            else if (cls == Date.class)
-                type = DATE;
-            else if (cls == Class.class) {
-                type = CLS;
-
-                isCls = true;
-            }
-            else if (Proxy.class.isAssignableFrom(cls)) {
-                type = PROXY;
-
-                proxyIntfs = cls.getInterfaces();
-            }
-            else {
-                Class<?> c = cls;
-
-                while ((writeReplaceMtd == null || readResolveMtd == null) && c != null && !c.equals(Object.class)) {
-                    if (writeReplaceMtd == null) {
-                        try {
-                            writeReplaceMtd = c.getDeclaredMethod("writeReplace");
-
-                            if (!isStatic(writeReplaceMtd.getModifiers()) &&
-                                !(isPrivate(writeReplaceMtd.getModifiers()) && c != cls) &&
-                                writeReplaceMtd.getReturnType().equals(Object.class))
-                                writeReplaceMtd.setAccessible(true);
-                            else
-                                // Set method back to null if it has incorrect signature.
-                                writeReplaceMtd = null;
-                        }
-                        catch (NoSuchMethodException ignored) {
-                            // No-op.
-                        }
-                    }
-
-                    if (readResolveMtd == null) {
-                        try {
-                            readResolveMtd = c.getDeclaredMethod("readResolve");
-
-                            if (!isStatic(readResolveMtd.getModifiers()) &&
-                                !(isPrivate(readResolveMtd.getModifiers()) && c != cls) &&
-                                readResolveMtd.getReturnType().equals(Object.class))
-                                readResolveMtd.setAccessible(true);
-                            else
-                                // Set method back to null if it has incorrect signature.
-                                readResolveMtd = null;
-                        }
-                        catch (NoSuchMethodException ignored) {
-                            // No-op.
-                        }
-                    }
-
-                    c = c.getSuperclass();
-                }
-
-                if (Externalizable.class.isAssignableFrom(cls)) {
-                    type = EXTERNALIZABLE;
-
-                    try {
-                        constructor = !Modifier.isStatic(cls.getModifiers()) && cls.getDeclaringClass() != null ?
-                            cls.getDeclaredConstructor(cls.getDeclaringClass()) :
-                            cls.getDeclaredConstructor();
-
-                        constructor.setAccessible(true);
-                    }
-                    catch (NoSuchMethodException e) {
-                        throw new IOException("Externalizable class doesn't have default constructor: " + cls, e);
-                    }
-                }
-                else {
-                    type = SERIALIZABLE;
-
-                    isSerial = Serializable.class.isAssignableFrom(cls);
-
-                    writeObjMtds = new ArrayList<>();
-                    readObjMtds = new ArrayList<>();
-                    List<ClassFields> fields = new ArrayList<>();
-
-                    for (c = cls; c != null && !c.equals(Object.class); c = c.getSuperclass()) {
-                        Method mtd;
-
-                        try {
-                            mtd = c.getDeclaredMethod("writeObject", ObjectOutputStream.class);
-
-                            int mod = mtd.getModifiers();
-
-                            if (!isStatic(mod) && isPrivate(mod) && mtd.getReturnType() == Void.TYPE)
-                                mtd.setAccessible(true);
-                            else
-                                // Set method back to null if it has incorrect signature.
-                                mtd = null;
-                        }
-                        catch (NoSuchMethodException ignored) {
-                            mtd = null;
-                        }
-
-                        writeObjMtds.add(mtd);
-
-                        try {
-                            mtd = c.getDeclaredMethod("readObject", ObjectInputStream.class);
-
-                            int mod = mtd.getModifiers();
-
-                            if (!isStatic(mod) && isPrivate(mod) && mtd.getReturnType() == Void.TYPE)
-                                mtd.setAccessible(true);
-                            else
-                                // Set method back to null if it has incorrect signature.
-                                mtd = null;
-                        }
-                        catch (NoSuchMethodException ignored) {
-                            mtd = null;
-                        }
-
-                        readObjMtds.add(mtd);
-
-                        final SerializableTransient serTransAn = c.getAnnotation(SerializableTransient.class);
-
-                        // Custom serialization policy for transient fields.
-                        if (serTransAn != null) {
-                            try {
-                                serTransMtd = c.getDeclaredMethod(serTransAn.methodName(), cls, IgniteProductVersion.class);
-
-                                int mod = serTransMtd.getModifiers();
-
-                                if (isStatic(mod) && isPrivate(mod)
-                                    && serTransMtd.getReturnType() == String[].class)
-                                    serTransMtd.setAccessible(true);
-                                else
-                                    // Set method back to null if it has incorrect signature.
-                                    serTransMtd = null;
-                            }
-                            catch (NoSuchMethodException ignored) {
-                                serTransMtd = null;
-                            }
-                        }
-
-                        Field[] clsFields0 = c.getDeclaredFields();
-
-                        Map<String, Field> fieldNames = new HashMap<>();
-
-                        for (Field f : clsFields0)
-                            fieldNames.put(f.getName(), f);
-
-                        List<FieldInfo> clsFields = new ArrayList<>(clsFields0.length);
-
-                        boolean hasSerialPersistentFields  = false;
-
-                        try {
-                            Field serFieldsDesc = c.getDeclaredField("serialPersistentFields");
-
-                            int mod = serFieldsDesc.getModifiers();
-
-                            if (serFieldsDesc.getType() == ObjectStreamField[].class &&
-                                isPrivate(mod) && isStatic(mod) && isFinal(mod)) {
-                                hasSerialPersistentFields = true;
-
-                                serFieldsDesc.setAccessible(true);
-
-                                ObjectStreamField[] serFields = (ObjectStreamField[]) serFieldsDesc.get(null);
-
-                                for (int i = 0; i < serFields.length; i++) {
-                                    ObjectStreamField serField = serFields[i];
-
-                                    FieldInfo fieldInfo;
-
-                                    if (!fieldNames.containsKey(serField.getName())) {
-                                        fieldInfo = new FieldInfo(null,
-                                            serField.getName(),
-                                            -1,
-                                            fieldType(serField.getType()));
-                                    }
-                                    else {
-                                        Field f = fieldNames.get(serField.getName());
-
-                                        fieldInfo = new FieldInfo(f,
-                                            serField.getName(),
-                                            GridUnsafe.objectFieldOffset(f),
-                                            fieldType(serField.getType()));
-                                    }
-
-                                    clsFields.add(fieldInfo);
-                                }
-                            }
-                        }
-                        catch (NoSuchFieldException ignored) {
-                            // No-op.
-                        }
-                        catch (IllegalAccessException e) {
-                            throw new IOException("Failed to get value of 'serialPersistentFields' field in class: " +
-                                cls.getName(), e);
-                        }
-
-                        if (!hasSerialPersistentFields) {
-                            for (int i = 0; i < clsFields0.length; i++) {
-                                Field f = clsFields0[i];
-
-                                int mod = f.getModifiers();
-
-                                if (!isStatic(mod) && !isTransient(mod)) {
-                                    FieldInfo fieldInfo = new FieldInfo(f, f.getName(),
-                                        GridUnsafe.objectFieldOffset(f), fieldType(f.getType()));
-
-                                    clsFields.add(fieldInfo);
-                                }
-                            }
-                        }
-
-                        Collections.sort(clsFields, new Comparator<FieldInfo>() {
-                            @Override public int compare(FieldInfo t1, FieldInfo t2) {
-                                return t1.name().compareTo(t2.name());
-                            }
-                        });
-
-                        fields.add(new ClassFields(clsFields));
-                    }
-
-                    Collections.reverse(writeObjMtds);
-                    Collections.reverse(readObjMtds);
-                    Collections.reverse(fields);
-
-                    this.fields = new Fields(fields);
-                }
-            }
-        }
-
-        checksum = computeSerialVersionUid(cls, fields != null ? fields.ownFields() : null);
-    }
-
-    /**
-     * @return Excluded flag.
-     */
-    boolean excluded() {
-        return excluded;
-    }
-
-    /**
-     * @return Class.
-     */
-    Class<?> describedClass() {
-        return cls;
-    }
-
-    /**
-     * @return Primitive flag.
-     */
-    boolean isPrimitive() {
-        return isPrimitive;
-    }
-
-    /**
-     * @return Enum flag.
-     */
-    boolean isEnum() {
-        return isEnum;
-    }
-
-    /**
-     * @return {@code True} if descriptor is for {@link Class}.
-     */
-    boolean isClass() {
-        return isCls;
-    }
-
-    /**
-     * @return {@code True} if descriptor is for {@link Proxy}.
-     */
-    boolean isProxy() {
-        return type == PROXY;
-    }
-
-    /**
-     * Replaces object.
-     *
-     * @param obj Object.
-     * @return Replaced object or {@code null} if there is no {@code writeReplace} method.
-     * @throws IOException In case of error.
-     */
-    Object replace(Object obj) throws IOException {
-        if (writeReplaceMtd != null) {
-            try {
-                return writeReplaceMtd.invoke(obj);
-            }
-            catch (IllegalAccessException | InvocationTargetException e) {
-                throw new IOException(e);
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     * Writes object to stream.
-     *
-     * @param out Output stream.
-     * @param obj Object.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    void write(OptimizedObjectOutputStream out, Object obj) throws IOException {
-        out.write(type);
-
-        switch (type) {
-            case BYTE:
-                out.writeByte((Byte)obj);
-
-                break;
-
-            case SHORT:
-                out.writeShort((Short)obj);
-
-                break;
-
-            case INT:
-                out.writeInt((Integer)obj);
-
-                break;
-
-            case LONG:
-                out.writeLong((Long)obj);
-
-                break;
-
-            case FLOAT:
-                out.writeFloat((Float)obj);
-
-                break;
-
-            case DOUBLE:
-                out.writeDouble((Double)obj);
-
-                break;
-
-            case CHAR:
-                out.writeChar((Character)obj);
-
-                break;
-
-            case BOOLEAN:
-                out.writeBoolean((Boolean)obj);
-
-                break;
-
-            case BYTE_ARR:
-                out.writeByteArray((byte[])obj);
-
-                break;
-
-            case SHORT_ARR:
-                out.writeShortArray((short[])obj);
-
-                break;
-
-            case INT_ARR:
-                out.writeIntArray((int[])obj);
-
-                break;
-
-            case LONG_ARR:
-                out.writeLongArray((long[])obj);
-
-                break;
-
-            case FLOAT_ARR:
-                out.writeFloatArray((float[])obj);
-
-                break;
-
-            case DOUBLE_ARR:
-                out.writeDoubleArray((double[])obj);
-
-                break;
-
-            case CHAR_ARR:
-                out.writeCharArray((char[])obj);
-
-                break;
-
-            case BOOLEAN_ARR:
-                out.writeBooleanArray((boolean[])obj);
-
-                break;
-
-            case OBJ_ARR:
-                OptimizedClassDescriptor compDesc = classDescriptor(clsMap,
-                    obj.getClass().getComponentType(),
-                    ctx,
-                    mapper);
-
-                compDesc.writeTypeData(out);
-
-                out.writeArray((Object[])obj);
-
-                break;
-
-            case STR:
-                out.writeString((String)obj);
-
-                break;
-
-            case UUID:
-                out.writeUuid((UUID)obj);
-
-                break;
-
-            case PROPS:
-                out.writeProperties((Properties)obj, dfltsFieldOff);
-
-                break;
-
-            case ARRAY_LIST:
-                out.writeArrayList((ArrayList<?>)obj);
-
-                break;
-
-            case HASH_MAP:
-                out.writeHashMap((HashMap<?, ?>)obj, loadFactorFieldOff, false);
-
-                break;
-
-            case HASH_SET:
-                out.writeHashSet((HashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
-
-                break;
-
-            case LINKED_LIST:
-                out.writeLinkedList((LinkedList<?>)obj);
-
-                break;
-
-            case LINKED_HASH_MAP:
-                out.writeLinkedHashMap((LinkedHashMap<?, ?>)obj, loadFactorFieldOff, accessOrderFieldOff, false);
-
-                break;
-
-            case LINKED_HASH_SET:
-                out.writeLinkedHashSet((LinkedHashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
-
-                break;
-
-            case DATE:
-                out.writeDate((Date)obj);
-
-                break;
-
-            case CLS:
-                OptimizedClassDescriptor clsDesc = classDescriptor(clsMap, (Class<?>)obj, ctx, mapper);
-
-                clsDesc.writeTypeData(out);
-
-                break;
-
-            case PROXY:
-                out.writeInt(proxyIntfs.length);
-
-                for (Class<?> intf : proxyIntfs) {
-                    OptimizedClassDescriptor intfDesc = classDescriptor(clsMap, intf, ctx, mapper);
-
-                    intfDesc.writeTypeData(out);
-                }
-
-                InvocationHandler ih = Proxy.getInvocationHandler(obj);
-
-                assert ih != null;
-
-                out.writeObject(ih);
-
-                break;
-
-            case ENUM:
-                writeTypeData(out);
-
-                out.writeInt(((Enum)obj).ordinal());
-
-                break;
-
-            case EXTERNALIZABLE:
-                writeTypeData(out);
-
-                out.writeShort(checksum);
-                out.writeExternalizable(obj);
-
-                break;
-
-            case SERIALIZABLE:
-                if (out.requireSerializable() && !isSerial)
-                    throw new NotSerializableException("Must implement java.io.Serializable or " +
-                        "set OptimizedMarshaller.setRequireSerializable() to false " +
-                        "(note that performance may degrade if object is not Serializable): " + name);
-
-                writeTypeData(out);
-
-                out.writeShort(checksum);
-                out.writeSerializable(obj, writeObjMtds, serializableFields(obj.getClass(), obj, null));
-
-                break;
-
-            default:
-                throw new IllegalStateException("Invalid class type: " + type);
-        }
-    }
-
-    /**
-     * Gets list of serializable fields. If {@link #serTransMtd} method
-     * returns list of transient fields, they will be added to other fields.
-     * Transient fields that are not included in that list will be normally
-     * ignored.
-     *
-     * @param cls Class.
-     * @param obj Object.
-     * @param ver Job sender version.
-     * @return Serializable fields.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    private Fields serializableFields(Class<?> cls, Object obj, IgniteProductVersion ver) {
-        if (serTransMtd == null)
-            return fields;
-
-        try {
-            final String[] transFields = (String[])serTransMtd.invoke(cls, obj, ver);
-
-            if (transFields == null || transFields.length == 0)
-                return fields;
-
-            List<FieldInfo> clsFields = new ArrayList<>();
-
-            clsFields.addAll(fields.fields.get(0).fields);
-
-            for (int i = 0; i < transFields.length; i++) {
-                final String fieldName = transFields[i];
-
-                final Field f = cls.getDeclaredField(fieldName);
-
-                FieldInfo fieldInfo = new FieldInfo(f, f.getName(),
-                    GridUnsafe.objectFieldOffset(f), fieldType(f.getType()));
-
-                clsFields.add(fieldInfo);
-            }
-
-            Collections.sort(clsFields, new Comparator<FieldInfo>() {
-                @Override public int compare(FieldInfo t1, FieldInfo t2) {
-                    return t1.name().compareTo(t2.name());
-                }
-            });
-
-            List<ClassFields> fields = new ArrayList<>();
-
-            fields.add(new ClassFields(clsFields));
-
-            return new Fields(fields);
-        }
-        catch (Exception ignored) {
-            return fields;
-        }
-    }
-
-    /**
-     * @param out Output stream.
-     * @throws IOException In case of error.
-     */
-    void writeTypeData(OptimizedObjectOutputStream out) throws IOException {
-        out.writeInt(typeId);
-
-        if (typeId == 0)
-            out.writeUTF(name);
-    }
-
-    /**
-     * Reads object from stream.
-     *
-     * @param in Input stream.
-     * @return Object.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    Object read(OptimizedObjectInputStream in) throws ClassNotFoundException, IOException {
-        switch (type) {
-            case ENUM:
-                return enumVals[in.readInt()];
-
-            case EXTERNALIZABLE:
-                verifyChecksum(in.readShort());
-
-                return in.readExternalizable(constructor, readResolveMtd);
-
-            case SERIALIZABLE:
-                verifyChecksum(in.readShort());
-
-                // If no serialize method, then unmarshal as usual.
-                if (serTransMtd != null)
-                    return in.readSerializable(cls, readObjMtds, readResolveMtd,
-                        serializableFields(cls, null, MarshallerUtils.jobSenderVersion()));
-                else
-                    return in.readSerializable(cls, readObjMtds, readResolveMtd, fields);
-
-            default:
-                assert false : "Unexpected type: " + type;
-
-                return null;
-        }
-    }
-
-    /**
-     * @param checksum Checksum.
-     * @throws ClassNotFoundException If checksum is wrong.
-     * @throws IOException In case of error.
-     */
-    private void verifyChecksum(short checksum) throws ClassNotFoundException, IOException {
-        if (checksum != this.checksum)
-            throw new ClassNotFoundException("Optimized stream class checksum mismatch " +
-                "(is same version of marshalled class present on all nodes?) " +
-                "[expected=" + this.checksum + ", actual=" + checksum + ", cls=" + cls + ']');
-    }
-
-    /**
-     * @param cls Class.
-     * @return Type.
-     */
-    @SuppressWarnings("IfMayBeConditional")
-    private OptimizedFieldType fieldType(Class<?> cls) {
-        OptimizedFieldType type;
-
-        if (cls == byte.class)
-            type = OptimizedFieldType.BYTE;
-        else if (cls == short.class)
-            type = OptimizedFieldType.SHORT;
-        else if (cls == int.class)
-            type = OptimizedFieldType.INT;
-        else if (cls == long.class)
-            type = OptimizedFieldType.LONG;
-        else if (cls == float.class)
-            type = OptimizedFieldType.FLOAT;
-        else if (cls == double.class)
-            type = OptimizedFieldType.DOUBLE;
-        else if (cls == char.class)
-            type = OptimizedFieldType.CHAR;
-        else if (cls == boolean.class)
-            type = OptimizedFieldType.BOOLEAN;
-        else
-            type = OptimizedFieldType.OTHER;
-
-        return type;
-    }
-
-    /**
-     * Information about one field.
-     */
-    @SuppressWarnings("PackageVisibleInnerClass")
-    static class FieldInfo {
-        /** Field. */
-        private final Field field;
-
-        /** Field offset. */
-        private final long fieldOffs;
-
-        /** Field type. */
-        private final OptimizedFieldType fieldType;
-
-        /** Field name. */
-        private final String fieldName;
-
-        /**
-         * @param field Field.
-         * @param name Field name.
-         * @param offset Field offset.
-         * @param type Grid optimized field type.
-         */
-        FieldInfo(Field field, String name, long offset, OptimizedFieldType type) {
-            this.field = field;
-            fieldOffs = offset;
-            fieldType = type;
-            fieldName = name;
-        }
-
-        /**
-         * @return Returns field.
-         */
-        Field field() {
-            return field;
-        }
-
-        /**
-         * @return Offset.
-         */
-        long offset() {
-            return fieldOffs;
-        }
-
-        /**
-         * @return Type.
-         */
-        OptimizedFieldType type() {
-            return fieldType;
-        }
-
-        /**
-         * @return Name.
-         */
-        String name() {
-            return fieldName;
-        }
-    }
-
-    /**
-     * Information about one class.
-     */
-    static class ClassFields {
-        /** Fields. */
-        private final List<FieldInfo> fields;
-
-        private final Map<String, Integer> nameToIndex;
-
-        /**
-         * @param fields Field infos.
-         */
-        ClassFields(List<FieldInfo> fields) {
-            this.fields = fields;
-
-            nameToIndex = U.newHashMap(fields.size());
-
-            for (int i = 0; i < fields.size(); ++i)
-                nameToIndex.put(fields.get(i).name(), i);
-        }
-
-        /**
-         * @return Class fields.
-         */
-        List<FieldInfo> fields() {
-            return fields;
-        }
-
-        /**
-         * @return Fields count.
-         */
-        int size() {
-            return fields.size();
-        }
-
-        /**
-         * @param i Field's index.
-         * @return FieldInfo.
-         */
-        FieldInfo get(int i) {
-            return fields.get(i);
-        }
-
-        /**
-         * @param name Field's name.
-         * @return Field's index.
-         */
-        int getIndex(String name) {
-            assert nameToIndex.containsKey(name);
-
-            return nameToIndex.get(name);
-        }
-    }
-
-    /**
-     * Encapsulates data about class fields.
-     */
-    @SuppressWarnings("PackageVisibleInnerClass")
-    static class Fields {
-        /** Fields. */
-        private final List<ClassFields> fields;
-
-        /** Own fields (excluding inherited). */
-        private final List<Field> ownFields;
-
-        /**
-         * Creates new instance.
-         *
-         * @param fields Fields.
-         */
-        Fields(List<ClassFields> fields) {
-            this.fields = fields;
-
-            if (fields.isEmpty())
-                ownFields = null;
-            else {
-                ownFields = new ArrayList<>(fields.size());
-
-                for (FieldInfo f : fields.get(fields.size() - 1).fields()) {
-                    if (f.field() != null)
-                        ownFields.add(f.field);
-                }
-            }
-        }
-
-        /**
-         * Returns class's own fields (excluding inherited).
-         *
-         * @return List of fields or {@code null} if fields list is empty.
-         */
-        List<Field> ownFields() {
-            return ownFields;
-        }
-
-        /**
-         * Returns field types and their offsets.
-         *
-         * @param i hierarchy level where 0 corresponds to top level.
-         * @return list of pairs where first value is field type and second value is its offset.
-         */
-        ClassFields fields(int i) {
-            return fields.get(i);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedFieldType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedFieldType.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedFieldType.java
deleted file mode 100644
index aca7ce4..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedFieldType.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-/**
- * Field type used to calculate {@code Unsafe} offsets into objects.
- */
-enum OptimizedFieldType {
-    /** */
-    BYTE,
-
-    /** */
-    SHORT,
-
-    /** */
-    INT,
-
-    /** */
-    LONG,
-
-    /** */
-    FLOAT,
-
-    /** */
-    DOUBLE,
-
-    /** */
-    CHAR,
-
-    /** */
-    BOOLEAN,
-
-    /** */
-    OTHER
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/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
deleted file mode 100644
index e61e8dc..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller;
-import org.jetbrains.annotations.Nullable;
-import org.jsr166.ConcurrentHashMap8;
-import sun.misc.Unsafe;
-
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
-
-/**
- * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}.
- * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller},
- * which is based on standard {@link ObjectOutputStream}, this marshaller does not
- * enforce that all serialized objects implement {@link Serializable} interface. It is also
- * about 20 times faster as it removes lots of serialization overhead that exists in
- * default JDK implementation.
- * <p>
- * {@code OptimizedMarshaller} is tested only on Java HotSpot VM on other VMs
- * it could yield unexpected results. It is the default marshaller on Java HotSpot VMs
- * and will be used if no other marshaller was explicitly configured.
- * <p>
- * <h1 class="header">Configuration</h1>
- * <h2 class="header">Mandatory</h2>
- * This marshaller has no mandatory configuration parameters.
- * <h2 class="header">Java Example</h2>
- * <pre name="code" class="java">
- * OptimizedMarshaller marshaller = new OptimizedMarshaller();
- *
- * // Enforce Serializable interface.
- * marshaller.setRequireSerializable(true);
- *
- * IgniteConfiguration cfg = new IgniteConfiguration();
- *
- * // Override marshaller.
- * cfg.setMarshaller(marshaller);
- *
- * // Starts grid.
- * G.start(cfg);
- * </pre>
- * <h2 class="header">Spring Example</h2>
- * GridOptimizedMarshaller can be configured from Spring XML configuration file:
- * <pre name="code" class="xml">
- * &lt;bean id="grid.custom.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"&gt;
- *     ...
- *     &lt;property name="marshaller"&gt;
- *         &lt;bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"&gt;
- *             &lt;property name="requireSerializable"&gt;true&lt;/property&gt;
- *         &lt;/bean&gt;
- *     &lt;/property&gt;
- *     ...
- * &lt;/bean&gt;
- * </pre>
- * <p>
- * <img src="http://ignite.apache.org/images/spring-small.png">
- * <br>
- * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
- */
-public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
-    /** Use default {@code serialVersionUID} for {@link Serializable} classes. */
-    public static final boolean USE_DFLT_SUID =
-        IgniteSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, false);
-
-    /** Default class loader. */
-    private final ClassLoader dfltClsLdr = getClass().getClassLoader();
-
-    /** Whether or not to require an object to be serializable in order to be marshalled. */
-    private boolean requireSer = true;
-
-    /** ID mapper. */
-    private OptimizedMarshallerIdMapper mapper;
-
-    /** Class descriptors by class. */
-    private final ConcurrentMap<Class, OptimizedClassDescriptor> clsMap = new ConcurrentHashMap8<>();
-
-    /**
-     * Creates new marshaller will all defaults.
-     *
-     * @throws IgniteException If this marshaller is not supported on the current JVM.
-     */
-    public OptimizedMarshaller() {
-        if (!available())
-            throw new IgniteException("Using OptimizedMarshaller on unsupported JVM version (some of " +
-                "JVM-private APIs required for the marshaller to work are missing).");
-    }
-
-    /**
-     * Creates new marshaller providing whether it should
-     * require {@link Serializable} interface or not.
-     *
-     * @param requireSer Whether to require {@link Serializable}.
-     */
-    public OptimizedMarshaller(boolean requireSer) {
-        this.requireSer = requireSer;
-    }
-
-    /**
-     * Sets whether marshaller should require {@link Serializable} interface or not.
-     *
-     * @param requireSer Whether to require {@link Serializable}.
-     * @return {@code this} for chaining.
-     */
-    public OptimizedMarshaller setRequireSerializable(boolean requireSer) {
-        this.requireSer = requireSer;
-
-        return this;
-    }
-
-    /**
-     * Sets ID mapper.
-     *
-     * @param mapper ID mapper.
-     * @return {@code this} for chaining.
-     */
-    public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) {
-        this.mapper = mapper;
-
-        return this;
-    }
-
-    /**
-     * Specifies size of cached object streams used by marshaller. Object streams are cached for
-     * performance reason to avoid costly recreation for every serialization routine. If {@code 0} (default),
-     * pool is not used and each thread has its own cached object stream which it keeps reusing.
-     * <p>
-     * Since each stream has an internal buffer, creating a stream for each thread can lead to
-     * high memory consumption if many large messages are marshalled or unmarshalled concurrently.
-     * Consider using pool in this case. This will limit number of streams that can be created and,
-     * therefore, decrease memory consumption.
-     * <p>
-     * NOTE: Using streams pool can decrease performance since streams will be shared between
-     * 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 OptimizedMarshaller setPoolSize(int poolSize) {
-        OptimizedObjectStreamRegistry.poolSize(poolSize);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException {
-        assert out != null;
-
-        OptimizedObjectOutputStream objOut = null;
-
-        try {
-            objOut = OptimizedObjectStreamRegistry.out();
-
-            objOut.context(clsMap, ctx, mapper, requireSer);
-
-            objOut.out().outputStream(out);
-
-            objOut.writeObject(obj);
-        }
-        catch (IOException e) {
-            throw new IgniteCheckedException("Failed to serialize object: " + obj, e);
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeOut(objOut);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override protected byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException {
-        OptimizedObjectOutputStream objOut = null;
-
-        try {
-            objOut = OptimizedObjectStreamRegistry.out();
-
-            objOut.context(clsMap, ctx, mapper, requireSer);
-
-            objOut.writeObject(obj);
-
-            return objOut.out().array();
-        }
-        catch (Exception e) {
-            throw new IgniteCheckedException("Failed to serialize object: " + obj, e);
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeOut(objOut);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override protected <T> T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
-        assert in != null;
-
-        OptimizedObjectInputStream objIn = null;
-
-        try {
-            objIn = OptimizedObjectStreamRegistry.in();
-
-            objIn.context(clsMap, ctx, mapper, clsLdr != null ? clsLdr : dfltClsLdr);
-
-            objIn.in().inputStream(in);
-
-            return (T)objIn.readObject();
-        }
-        catch (ClassNotFoundException e) {
-            throw new IgniteCheckedException("Failed to find class with given class loader for unmarshalling " +
-                "(make sure same versions of all classes are available on all nodes or enable peer-class-loading) " +
-                "[clsLdr=" + clsLdr + ", cls=" + e.getMessage() + "]", e);
-        }
-        catch (Exception e) {
-            throw new IgniteCheckedException("Failed to deserialize object with given class loader: " + clsLdr, e);
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeIn(objIn);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override protected <T> T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
-        assert arr != null;
-
-        OptimizedObjectInputStream objIn = null;
-
-        try {
-            objIn = OptimizedObjectStreamRegistry.in();
-
-            objIn.context(clsMap, ctx, mapper, clsLdr != null ? clsLdr : dfltClsLdr);
-
-            objIn.in().bytes(arr, arr.length);
-
-            return (T)objIn.readObject();
-        }
-        catch (ClassNotFoundException e) {
-            throw new IgniteCheckedException("Failed to find class with given class loader for unmarshalling " +
-                "(make sure same version of all classes are available on all nodes or enable peer-class-loading)" +
-                " [clsLdr=" + clsLdr + ", cls=" + e.getMessage() + "]", e);
-        }
-        catch (Exception e) {
-            throw new IgniteCheckedException("Failed to deserialize object with given class loader: " + clsLdr, e);
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeIn(objIn);
-        }
-    }
-
-    /**
-     * Checks whether {@code GridOptimizedMarshaller} is able to work on the current JVM.
-     * <p>
-     * As long as {@code GridOptimizedMarshaller} uses JVM-private API, which is not guaranteed
-     * to be available on all JVM, this method should be called to ensure marshaller could work properly.
-     * <p>
-     * Result of this method is automatically checked in constructor.
-     *
-     * @return {@code true} if {@code GridOptimizedMarshaller} can work on the current JVM or
-     *  {@code false} if it can't.
-     */
-    @SuppressWarnings({"TypeParameterExtendsFinalClass", "ErrorNotRethrown"})
-    public static boolean available() {
-        try {
-            Class<? extends Unsafe> unsafeCls = Unsafe.class;
-
-            unsafeCls.getMethod("allocateInstance", Class.class);
-            unsafeCls.getMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class);
-
-            return true;
-        }
-        catch (Exception ignored) {
-            return false;
-        }
-        catch (NoClassDefFoundError ignored) {
-            return false;
-        }
-    }
-
-    /**
-     * Undeployment callback invoked when class loader is being undeployed.
-     *
-     * @param ldr Class loader being undeployed.
-     */
-    @Override public void onUndeploy(ClassLoader ldr) {
-        for (Class<?> cls : clsMap.keySet()) {
-            if (ldr.equals(cls.getClassLoader()))
-                clsMap.remove(cls);
-        }
-
-        U.clearClassCache(ldr);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java
deleted file mode 100644
index 91d07df..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIdMapper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-/**
- * ID mapper.
- */
-public interface OptimizedMarshallerIdMapper {
-    /**
-     * Gets type ID for provided class name.
-     * <p>
-     * If {@code 0} is returned, hash code of class name will be used.
-     *
-     * @param clsName Class name.
-     * @return Type ID.
-     */
-    public int typeId(String clsName);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
deleted file mode 100644
index 60a627a..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.IOException;
-import java.io.ObjectStreamClass;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.nio.charset.Charset;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.util.GridUnsafe;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.marshaller.MarshallerContext;
-import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-
-import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID;
-
-/**
- * Miscellaneous utility methods to facilitate {@link OptimizedMarshaller}.
- */
-class OptimizedMarshallerUtils {
-    /** */
-    static final long HASH_SET_MAP_OFF;
-
-    /** */
-    static final byte JDK = -2;
-
-    /** */
-    static final byte HANDLE = -1;
-
-    /** */
-    static final byte NULL = 0;
-
-    /** */
-    static final byte BYTE = 1;
-
-    /** */
-    static final byte SHORT = 2;
-
-    /** */
-    static final byte INT = 3;
-
-    /** */
-    static final byte LONG = 4;
-
-    /** */
-    static final byte FLOAT = 5;
-
-    /** */
-    static final byte DOUBLE = 6;
-
-    /** */
-    static final byte CHAR = 7;
-
-    /** */
-    static final byte BOOLEAN = 8;
-
-    /** */
-    static final byte BYTE_ARR = 9;
-
-    /** */
-    static final byte SHORT_ARR = 10;
-
-    /** */
-    static final byte INT_ARR = 11;
-
-    /** */
-    static final byte LONG_ARR = 12;
-
-    /** */
-    static final byte FLOAT_ARR = 13;
-
-    /** */
-    static final byte DOUBLE_ARR = 14;
-
-    /** */
-    static final byte CHAR_ARR = 15;
-
-    /** */
-    static final byte BOOLEAN_ARR = 16;
-
-    /** */
-    static final byte OBJ_ARR = 17;
-
-    /** */
-    static final byte STR = 18;
-
-    /** */
-    static final byte UUID = 19;
-
-    /** */
-    static final byte PROPS = 20;
-
-    /** */
-    static final byte ARRAY_LIST = 21;
-
-    /** */
-    static final byte HASH_MAP = 22;
-
-    /** */
-    static final byte HASH_SET = 23;
-
-    /** */
-    static final byte LINKED_LIST = 24;
-
-    /** */
-    static final byte LINKED_HASH_MAP = 25;
-
-    /** */
-    static final byte LINKED_HASH_SET = 26;
-
-    /** */
-    static final byte DATE = 27;
-
-    /** */
-    static final byte CLS = 28;
-
-    /** */
-    static final byte PROXY = 29;
-
-    /** */
-    static final byte ENUM = 100;
-
-    /** */
-    static final byte EXTERNALIZABLE = 101;
-
-    /** */
-    static final byte SERIALIZABLE = 102;
-
-    /** UTF-8 character name. */
-    static final Charset UTF_8 = Charset.forName("UTF-8");
-
-    /** JDK marshaller. */
-    static final JdkMarshaller JDK_MARSH = new JdkMarshaller();
-
-    static {
-        long mapOff;
-
-        try {
-            mapOff = GridUnsafe.objectFieldOffset(HashSet.class.getDeclaredField("map"));
-        }
-        catch (NoSuchFieldException ignored) {
-            try {
-                // Workaround for legacy IBM JRE.
-                mapOff = GridUnsafe.objectFieldOffset(HashSet.class.getDeclaredField("backingMap"));
-            }
-            catch (NoSuchFieldException e2) {
-                throw new IgniteException("Initialization failure.", e2);
-            }
-        }
-
-        HASH_SET_MAP_OFF = mapOff;
-    }
-
-    /**
-     */
-    private OptimizedMarshallerUtils() {
-        // No-op.
-    }
-
-    /**
-     * Gets descriptor for provided class.
-     *
-     * @param clsMap Class descriptors by class map.
-     * @param cls Class.
-     * @param ctx Context.
-     * @param mapper ID mapper.
-     * @return Descriptor.
-     * @throws IOException In case of error.
-     */
-    static OptimizedClassDescriptor classDescriptor(
-        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
-        Class cls,
-        MarshallerContext ctx,
-        OptimizedMarshallerIdMapper mapper)
-        throws IOException
-    {
-        OptimizedClassDescriptor desc = clsMap.get(cls);
-
-        if (desc == null) {
-            int typeId = resolveTypeId(cls.getName(), mapper);
-
-            boolean registered;
-
-            try {
-                registered = ctx.registerClassName(JAVA_ID, typeId, cls.getName());
-            }
-            catch (IgniteCheckedException e) {
-                throw new IOException("Failed to register class: " + cls.getName(), e);
-            }
-
-            desc = new OptimizedClassDescriptor(cls, registered ? typeId : 0, clsMap, ctx, mapper);
-
-            if (registered) {
-                OptimizedClassDescriptor old = clsMap.putIfAbsent(cls, desc);
-
-                if (old != null)
-                    desc = old;
-            }
-        }
-
-        return desc;
-    }
-
-    /**
-     * @param clsName Class name.
-     * @param mapper Mapper.
-     * @return Type ID.
-     */
-    private static int resolveTypeId(String clsName, OptimizedMarshallerIdMapper mapper) {
-        int typeId;
-
-        if (mapper != null) {
-            typeId = mapper.typeId(clsName);
-
-            if (typeId == 0)
-                typeId = clsName.hashCode();
-        }
-        else
-            typeId = clsName.hashCode();
-
-        return typeId;
-    }
-
-    /**
-     * Gets descriptor for provided ID.
-     *
-     * @param clsMap Class descriptors by class map.
-     * @param typeId ID.
-     * @param ldr Class loader.
-     * @param ctx Context.
-     * @param mapper ID mapper.
-     * @return Descriptor.
-     * @throws IOException In case of error.
-     * @throws ClassNotFoundException If class was not found.
-     */
-    static OptimizedClassDescriptor classDescriptor(
-        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
-        int typeId,
-        ClassLoader ldr,
-        MarshallerContext ctx,
-        OptimizedMarshallerIdMapper mapper) throws IOException, ClassNotFoundException {
-        Class cls;
-
-        try {
-            cls = ctx.getClass(typeId, ldr);
-        }
-        catch (IgniteCheckedException e) {
-            throw new IOException("Failed to resolve class for ID: " + typeId, e);
-        }
-
-        OptimizedClassDescriptor desc = clsMap.get(cls);
-
-        if (desc == null) {
-            OptimizedClassDescriptor old = clsMap.putIfAbsent(cls, desc =
-                new OptimizedClassDescriptor(cls, resolveTypeId(cls.getName(), mapper), clsMap, ctx, mapper));
-
-            if (old != null)
-                desc = old;
-        }
-
-        return desc;
-    }
-
-    /**
-     * Computes the serial version UID value for the given class. The code is taken from {@link
-     * ObjectStreamClass#computeDefaultSUID(Class)}.
-     *
-     * @param cls A class.
-     * @param fields Fields.
-     * @return A serial version UID.
-     * @throws IOException If failed.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    static short computeSerialVersionUid(Class cls, List<Field> fields) throws IOException {
-        if (Serializable.class.isAssignableFrom(cls) && !Enum.class.isAssignableFrom(cls)) {
-            try {
-                Field field = cls.getDeclaredField("serialVersionUID");
-
-                if (field.getType() == long.class) {
-                    int mod = field.getModifiers();
-
-                    if (Modifier.isStatic(mod) && Modifier.isFinal(mod)) {
-                        field.setAccessible(true);
-
-                        return (short)field.getLong(null);
-                    }
-                }
-            }
-            catch (NoSuchFieldException ignored) {
-                // No-op.
-            }
-            catch (IllegalAccessException e) {
-                throw new IOException(e);
-            }
-
-            if (OptimizedMarshaller.USE_DFLT_SUID)
-                return (short)ObjectStreamClass.lookup(cls).getSerialVersionUID();
-        }
-
-        MessageDigest md;
-
-        try {
-            md = MessageDigest.getInstance("SHA");
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new IOException("Failed to get digest for SHA.", e);
-        }
-
-        md.update(cls.getName().getBytes(UTF_8));
-
-        if (!F.isEmpty(fields)) {
-            for (int i = 0; i < fields.size(); i++) {
-                Field f = fields.get(i);
-
-                md.update(f.getName().getBytes(UTF_8));
-                md.update(f.getType().getName().getBytes(UTF_8));
-            }
-        }
-
-        byte[] hashBytes = md.digest();
-
-        long hash = 0;
-
-        // Composes a single-long hash from the byte[] hash.
-        for (int i = Math.min(hashBytes.length, 8) - 1; i >= 0; i--)
-            hash = (hash << 8) | (hashBytes[i] & 0xFF);
-
-        return (short)hash;
-    }
-
-    /**
-     * Gets byte field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Byte value.
-     */
-    static byte getByte(Object obj, long off) {
-        return GridUnsafe.getByteField(obj, off);
-    }
-
-    /**
-     * Sets byte field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setByte(Object obj, long off, byte val) {
-        GridUnsafe.putByteField(obj, off, val);
-    }
-
-    /**
-     * Gets short field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Short value.
-     */
-    static short getShort(Object obj, long off) {
-        return GridUnsafe.getShortField(obj, off);
-    }
-
-    /**
-     * Sets short field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setShort(Object obj, long off, short val) {
-        GridUnsafe.putShortField(obj, off, val);
-    }
-
-    /**
-     * Gets integer field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Integer value.
-     */
-    static int getInt(Object obj, long off) {
-        return GridUnsafe.getIntField(obj, off);
-    }
-
-    /**
-     * Sets integer field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setInt(Object obj, long off, int val) {
-        GridUnsafe.putIntField(obj, off, val);
-    }
-
-    /**
-     * Gets long field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Long value.
-     */
-    static long getLong(Object obj, long off) {
-        return GridUnsafe.getLongField(obj, off);
-    }
-
-    /**
-     * Sets long field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setLong(Object obj, long off, long val) {
-        GridUnsafe.putLongField(obj, off, val);
-    }
-
-    /**
-     * Gets float field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Float value.
-     */
-    static float getFloat(Object obj, long off) {
-        return GridUnsafe.getFloatField(obj, off);
-    }
-
-    /**
-     * Sets float field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setFloat(Object obj, long off, float val) {
-        GridUnsafe.putFloatField(obj, off, val);
-    }
-
-    /**
-     * Gets double field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Double value.
-     */
-    static double getDouble(Object obj, long off) {
-        return GridUnsafe.getDoubleField(obj, off);
-    }
-
-    /**
-     * Sets double field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setDouble(Object obj, long off, double val) {
-        GridUnsafe.putDoubleField(obj, off, val);
-    }
-
-    /**
-     * Gets char field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Char value.
-     */
-    static char getChar(Object obj, long off) {
-        return GridUnsafe.getCharField(obj, off);
-    }
-
-    /**
-     * Sets char field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setChar(Object obj, long off, char val) {
-        GridUnsafe.putCharField(obj, off, val);
-    }
-
-    /**
-     * Gets boolean field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Boolean value.
-     */
-    static boolean getBoolean(Object obj, long off) {
-        return GridUnsafe.getBooleanField(obj, off);
-    }
-
-    /**
-     * Sets boolean field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setBoolean(Object obj, long off, boolean val) {
-        GridUnsafe.putBooleanField(obj, off, val);
-    }
-
-    /**
-     * Gets field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @return Value.
-     */
-    static Object getObject(Object obj, long off) {
-        return GridUnsafe.getObjectField(obj, off);
-    }
-
-    /**
-     * Sets field value.
-     *
-     * @param obj Object.
-     * @param off Field offset.
-     * @param val Value.
-     */
-    static void setObject(Object obj, long off, Object val) {
-        GridUnsafe.putObjectField(obj, off, val);
-    }
-}


[04/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
new file mode 100644
index 0000000..b1d071c
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
@@ -0,0 +1,2157 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.NotActiveException;
+import java.io.NotSerializableException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.text.SimpleDateFormat;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.PriorityQueue;
+import java.util.Properties;
+import java.util.Queue;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.Vector;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.util.io.GridUnsafeDataInput;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.MarshallerExclusions;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
+import org.jsr166.ConcurrentHashMap8;
+
+import static org.junit.Assert.assertArrayEquals;
+
+/**
+ * Test for optimized object streams.
+ */
+public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest {
+    /** */
+    private static final MarshallerContext CTX = new MarshallerContextTestImpl();
+
+    /** */
+    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap = new ConcurrentHashMap8<>();
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNull() throws Exception {
+        assertNull(marshalUnmarshal(null));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testByte() throws Exception {
+        byte val = 10;
+
+        assertEquals(new Byte(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testShort() throws Exception {
+        short val = 100;
+
+        assertEquals(new Short(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testInteger() throws Exception {
+        int val = 100;
+
+        assertEquals(new Integer(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLong() throws Exception {
+        long val = 1000L;
+
+        assertEquals(new Long(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testFloat() throws Exception {
+        float val = 10.0f;
+
+        assertEquals(val, marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testDouble() throws Exception {
+        double val = 100.0d;
+
+        assertEquals(val, marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBoolean() throws Exception {
+        boolean val = true;
+
+        assertEquals(new Boolean(val), marshalUnmarshal(val));
+
+        val = false;
+
+        assertEquals(new Boolean(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testChar() throws Exception {
+        char val = 10;
+
+        assertEquals(new Character(val), marshalUnmarshal(val));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testByteArray() throws Exception {
+        byte[] arr = marshalUnmarshal(new byte[] {1, 2});
+
+        assertArrayEquals(new byte[] {1, 2}, arr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testShortArray() throws Exception {
+        short[] arr = marshalUnmarshal(new short[] {1, 2});
+
+        assertArrayEquals(new short[] {1, 2}, arr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIntArray() throws Exception {
+        int[] arr = marshalUnmarshal(new int[] {1, 2});
+
+        assertArrayEquals(new int[] {1, 2}, arr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLongArray() throws Exception {
+        long[] arr = marshalUnmarshal(new long[] {1L, 2L});
+
+        assertArrayEquals(new long[] {1, 2}, arr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testFloatArray() throws Exception {
+        float[] arr = marshalUnmarshal(new float[] {1.0f, 2.0f});
+
+        assertArrayEquals(new float[] {1.0f, 2.0f}, arr, 0.1f);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testDoubleArray() throws Exception {
+        double[] arr = marshalUnmarshal(new double[] {1.0d, 2.0d});
+
+        assertArrayEquals(new double[] {1.0d, 2.0d}, arr, 0.1d);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBooleanArray() throws Exception {
+        boolean[] arr = marshalUnmarshal(new boolean[] {true, false, false});
+
+        assertEquals(3, arr.length);
+        assertEquals(true, arr[0]);
+        assertEquals(false, arr[1]);
+        assertEquals(false, arr[2]);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCharArray() throws Exception {
+        char[] arr = marshalUnmarshal(new char[] {1, 2});
+
+        assertArrayEquals(new char[] {1, 2}, arr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testObject() throws Exception {
+        TestObject obj = new TestObject();
+
+        obj.longVal = 100L;
+        obj.doubleVal = 100.0d;
+        obj.longArr = new Long[] {200L, 300L};
+        obj.doubleArr = new Double[] {200.0d, 300.0d};
+
+        assertEquals(obj, marshalUnmarshal(obj));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRequireSerializable() throws Exception {
+        try {
+            OptimizedMarshaller marsh = new OptimizedMarshaller(true);
+
+            marsh.setContext(CTX);
+
+            marsh.marshal(new Object());
+
+            assert false : "Exception not thrown.";
+        }
+        catch (IgniteCheckedException e) {
+            NotSerializableException serEx = e.getCause(NotSerializableException.class);
+
+            if (serEx == null)
+                throw e;
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPool() throws Exception {
+        final TestObject obj = new TestObject();
+
+        obj.longVal = 100L;
+        obj.doubleVal = 100.0d;
+        obj.longArr = new Long[100 * 1024];
+        obj.doubleArr = new Double[100 * 1024];
+
+        Arrays.fill(obj.longArr, 100L);
+        Arrays.fill(obj.doubleArr, 100.0d);
+
+        final OptimizedMarshaller marsh = new OptimizedMarshaller();
+
+        marsh.setContext(CTX);
+
+        marsh.setPoolSize(5);
+
+        try {
+            multithreaded(new Callable<Object>() {
+                @Override public Object call() throws Exception {
+                    for (int i = 0; i < 50; i++)
+                        assertEquals(obj, marsh.unmarshal(marsh.marshal(obj), null));
+
+                    return null;
+                }
+            }, 20);
+        }
+        finally {
+            marsh.setPoolSize(0);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testObjectWithNulls() throws Exception {
+        TestObject obj = new TestObject();
+
+        obj.longVal = 100L;
+        obj.longArr = new Long[] {200L, 300L};
+
+        assertEquals(obj, marshalUnmarshal(obj));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testObjectArray() throws Exception {
+        TestObject obj1 = new TestObject();
+
+        obj1.longVal = 100L;
+        obj1.doubleVal = 100.0d;
+        obj1.longArr = new Long[] {200L, 300L};
+        obj1.doubleArr = new Double[] {200.0d, 300.0d};
+
+        TestObject obj2 = new TestObject();
+
+        obj2.longVal = 400L;
+        obj2.doubleVal = 400.0d;
+        obj2.longArr = new Long[] {500L, 600L};
+        obj2.doubleArr = new Double[] {500.0d, 600.0d};
+
+        TestObject[] arr = {obj1, obj2};
+
+        assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
+
+        String[] strArr = {"str1", "str2"};
+
+        assertArrayEquals(strArr, (String[])marshalUnmarshal(strArr));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testExternalizable() throws Exception {
+        ExternalizableTestObject1 obj = new ExternalizableTestObject1();
+
+        obj.longVal = 100L;
+        obj.doubleVal = 100.0d;
+        obj.longArr = new Long[] {200L, 300L};
+        obj.doubleArr = new Double[] {200.0d, 300.0d};
+
+        assertEquals(obj, marshalUnmarshal(obj));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testExternalizableWithNulls() throws Exception {
+        ExternalizableTestObject2 obj = new ExternalizableTestObject2();
+
+        obj.longVal = 100L;
+        obj.doubleVal = 100.0d;
+        obj.longArr = new Long[] {200L, 300L};
+        obj.doubleArr = new Double[] {200.0d, 300.0d};
+
+        obj = marshalUnmarshal(obj);
+
+        assertEquals(100L, obj.longVal.longValue());
+        assertNull(obj.doubleVal);
+        assertArrayEquals(new Long[] {200L, 300L}, obj.longArr);
+        assertNull(obj.doubleArr);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLink() throws Exception {
+        for (int i = 0; i < 20; i++) {
+            LinkTestObject1 obj1 = new LinkTestObject1();
+            LinkTestObject2 obj2 = new LinkTestObject2();
+            LinkTestObject2 obj3 = new LinkTestObject2();
+
+            obj1.val = 100;
+            obj2.ref = obj1;
+            obj3.ref = obj1;
+
+            LinkTestObject2[] arr = new LinkTestObject2[] {obj2, obj3};
+
+            assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCycleLink() throws Exception {
+        for (int i = 0; i < 20; i++) {
+            CycleLinkTestObject obj = new CycleLinkTestObject();
+
+            obj.val = 100;
+            obj.ref = obj;
+
+            assertEquals(obj, marshalUnmarshal(obj));
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNoDefaultConstructor() throws Exception {
+        NoDefaultConstructorTestObject obj = new NoDefaultConstructorTestObject(100);
+
+        assertEquals(obj, marshalUnmarshal(obj));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testEnum() throws Exception {
+        assertEquals(TestEnum.B, marshalUnmarshal(TestEnum.B));
+
+        TestEnum[] arr = new TestEnum[] {TestEnum.C, TestEnum.A, TestEnum.B, TestEnum.A};
+
+        assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCollection() throws Exception {
+        TestObject obj1 = new TestObject();
+
+        obj1.longVal = 100L;
+        obj1.doubleVal = 100.0d;
+        obj1.longArr = new Long[] {200L, 300L};
+        obj1.doubleArr = new Double[] {200.0d, 300.0d};
+
+        TestObject obj2 = new TestObject();
+
+        obj2.longVal = 400L;
+        obj2.doubleVal = 400.0d;
+        obj2.longArr = new Long[] {500L, 600L};
+        obj2.doubleArr = new Double[] {500.0d, 600.0d};
+
+        Collection<TestObject> col = F.asList(obj1, obj2);
+
+        assertEquals(col, marshalUnmarshal(col));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testMap() throws Exception {
+        TestObject obj1 = new TestObject();
+
+        obj1.longVal = 100L;
+        obj1.doubleVal = 100.0d;
+        obj1.longArr = new Long[] {200L, 300L};
+        obj1.doubleArr = new Double[] {200.0d, 300.0d};
+
+        TestObject obj2 = new TestObject();
+
+        obj2.longVal = 400L;
+        obj2.doubleVal = 400.0d;
+        obj2.longArr = new Long[] {500L, 600L};
+        obj2.doubleArr = new Double[] {500.0d, 600.0d};
+
+        Map<Integer, TestObject> map = F.asMap(1, obj1, 2, obj2);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testUuid() throws Exception {
+        UUID uuid = UUID.randomUUID();
+
+        assertEquals(uuid, marshalUnmarshal(uuid));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testDate() throws Exception {
+        Date date = new Date();
+
+        assertEquals(date, marshalUnmarshal(date));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testTransient() throws Exception {
+        TransientTestObject obj = marshalUnmarshal(new TransientTestObject(100, 200, "str1", "str2"));
+
+        assertEquals(100, obj.val1);
+        assertEquals(0, obj.val2);
+        assertEquals("str1", obj.str1);
+        assertNull(obj.str2);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testWriteReadObject() throws Exception {
+        WriteReadTestObject obj = marshalUnmarshal(new WriteReadTestObject(100, "str"));
+
+        assertEquals(100, obj.val);
+        assertEquals("Optional data", obj.str);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testWriteReplace() throws Exception {
+        ReplaceTestObject obj = marshalUnmarshal(new ReplaceTestObject(100));
+
+        assertEquals(200, obj.value());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testWriteReplaceNull() throws Exception {
+        ReplaceNullTestObject obj = marshalUnmarshal(new ReplaceNullTestObject());
+
+        assertNull(obj);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReadResolve() throws Exception {
+        ResolveTestObject obj = marshalUnmarshal(new ResolveTestObject(100));
+
+        assertEquals(200, obj.value());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testArrayDeque() throws Exception {
+        Queue<Integer> queue = new ArrayDeque<>();
+
+        for (int i = 0; i < 100; i++)
+            queue.add(i);
+
+        Queue<Integer> newQueue = marshalUnmarshal(queue);
+
+        assertEquals(queue.size(), newQueue.size());
+
+        Integer i;
+
+        while ((i = newQueue.poll()) != null)
+            assertEquals(queue.poll(), i);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testArrayList() throws Exception {
+        Collection<Integer> list = new ArrayList<>();
+
+        for (int i = 0; i < 100; i++)
+            list.add(i);
+
+        assertEquals(list, marshalUnmarshal(list));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testHashMap() throws Exception {
+        Map<Integer, Integer> map = new HashMap<>();
+
+        for (int i = 0; i < 100; i++)
+            map.put(i, i);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testHashSet() throws Exception {
+        Collection<Integer> set = new HashSet<>();
+
+        for (int i = 0; i < 100; i++)
+            set.add(i);
+
+        assertEquals(set, marshalUnmarshal(set));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("UseOfObsoleteCollectionType")
+    public void testHashtable() throws Exception {
+        Map<Integer, Integer> map = new Hashtable<>();
+
+        for (int i = 0; i < 100; i++)
+            map.put(i, i);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIdentityHashMap() throws Exception {
+        Map<Integer, Integer> map = new IdentityHashMap<>();
+
+        for (int i = 0; i < 100; i++)
+            map.put(i, i);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLinkedHashMap() throws Exception {
+        Map<Integer, Integer> map = new LinkedHashMap<>();
+
+        for (int i = 0; i < 100; i++)
+            map.put(i, i);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLinkedHashSet() throws Exception {
+        Collection<Integer> set = new LinkedHashSet<>();
+
+        for (int i = 0; i < 100; i++)
+            set.add(i);
+
+        assertEquals(set, marshalUnmarshal(set));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testLinkedList() throws Exception {
+        Collection<Integer> list = new LinkedList<>();
+
+        for (int i = 0; i < 100; i++)
+            list.add(i);
+
+        assertEquals(list, marshalUnmarshal(list));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPriorityQueue() throws Exception {
+        Queue<Integer> queue = new PriorityQueue<>();
+
+        for (int i = 0; i < 100; i++)
+            queue.add(i);
+
+        Queue<Integer> newQueue = marshalUnmarshal(queue);
+
+        assertEquals(queue.size(), newQueue.size());
+
+        Integer i;
+
+        while ((i = newQueue.poll()) != null)
+            assertEquals(queue.poll(), i);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testProperties() throws Exception {
+        Properties dflts = new Properties();
+
+        dflts.setProperty("key1", "val1");
+        dflts.setProperty("key2", "wrong");
+
+        Properties props = new Properties(dflts);
+
+        props.setProperty("key2", "val2");
+
+        Properties newProps = marshalUnmarshal(props);
+
+        assertEquals("val1", newProps.getProperty("key1"));
+        assertEquals("val2", newProps.getProperty("key2"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testTreeMap() throws Exception {
+        Map<Integer, Integer> map = new TreeMap<>();
+
+        for (int i = 0; i < 100; i++)
+            map.put(i, i);
+
+        assertEquals(map, marshalUnmarshal(map));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testTreeSet() throws Exception {
+        Collection<Integer> set = new TreeSet<>();
+
+        for (int i = 0; i < 100; i++)
+            set.add(i);
+
+        assertEquals(set, marshalUnmarshal(set));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("UseOfObsoleteCollectionType")
+    public void testVector() throws Exception {
+        Collection<Integer> vector = new Vector<>();
+
+        for (int i = 0; i < 100; i++)
+            vector.add(i);
+
+        assertEquals(vector, marshalUnmarshal(vector));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testString() throws Exception {
+        assertEquals("Latin", marshalUnmarshal("Latin"));
+        assertEquals("\u041a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430", marshalUnmarshal("\u041a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430"));
+        assertEquals("\u4e2d\u56fd\u7684", marshalUnmarshal("\u4e2d\u56fd\u7684"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReadLine() throws Exception {
+        OptimizedObjectInputStream in = new OptimizedObjectInputStream(new GridUnsafeDataInput());
+
+        byte[] bytes = "line1\nline2\r\nli\rne3\nline4".getBytes();
+
+        in.in().bytes(bytes, bytes.length);
+
+        assertEquals("line1", in.readLine());
+        assertEquals("line2", in.readLine());
+        assertEquals("line3", in.readLine());
+        assertEquals("line4", in.readLine());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testHierarchy() throws Exception {
+        C c = new C(100, "str", 200, "str", 300, "str");
+
+        C newC = marshalUnmarshal(c);
+
+        assertEquals(100, newC.valueA());
+        assertEquals("Optional data", newC.stringA());
+        assertEquals(200, newC.valueB());
+        assertNull(newC.stringB());
+        assertEquals(0, newC.valueC());
+        assertEquals("Optional data", newC.stringC());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testInet4Address() throws Exception {
+        Inet4Address addr = (Inet4Address)InetAddress.getByName("localhost");
+
+        assertEquals(addr, marshalUnmarshal(addr));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testClass() throws Exception {
+        assertEquals(int.class, marshalUnmarshal(int.class));
+        assertEquals(Long.class, marshalUnmarshal(Long.class));
+        assertEquals(TestObject.class, marshalUnmarshal(TestObject.class));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testWriteReadFields() throws Exception {
+        WriteReadFieldsTestObject obj = marshalUnmarshal(new WriteReadFieldsTestObject(100, "str"));
+
+        assertEquals(100, obj.val);
+        assertEquals("Optional data", obj.str);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testWriteFields() throws Exception {
+        WriteFieldsTestObject obj = marshalUnmarshal(new WriteFieldsTestObject(100, "str"));
+
+        assertEquals(100, obj.val);
+        assertEquals("Optional data", obj.str);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBigInteger() throws Exception {
+        BigInteger b = new BigInteger("54654865468745468465321414646834562346475457488");
+
+        assertEquals(b, marshalUnmarshal(b));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testBigDecimal() throws Exception {
+        BigDecimal b = new BigDecimal("849572389457208934572093574.123512938654126458542145");
+
+        assertEquals(b, marshalUnmarshal(b));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSimpleDateFormat() throws Exception {
+        SimpleDateFormat f = new SimpleDateFormat("MM/dd/yyyy");
+
+        assertEquals(f, marshalUnmarshal(f));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testComplexObject() throws Exception {
+        ComplexTestObject obj = new ComplexTestObject();
+
+        assertEquals(obj, marshalUnmarshal(obj));
+
+        ExternalizableTestObject1 extObj1 = new ExternalizableTestObject1();
+
+        extObj1.longVal = 1000L;
+        extObj1.doubleVal = 1000.0d;
+        extObj1.longArr = new Long[] {1000L, 2000L, 3000L};
+        extObj1.doubleArr = new Double[] {1000.0d, 2000.0d, 3000.0d};
+
+        ExternalizableTestObject1 extObj2 = new ExternalizableTestObject1();
+
+        extObj2.longVal = 2000L;
+        extObj2.doubleVal = 2000.0d;
+        extObj2.longArr = new Long[] {4000L, 5000L, 6000L};
+        extObj2.doubleArr = new Double[] {4000.0d, 5000.0d, 6000.0d};
+
+        Properties props = new Properties();
+
+        props.setProperty("name", "value");
+
+        Collection<Integer> col = F.asList(10, 20, 30);
+
+        Map<Integer, String> map = F.asMap(10, "str1", 20, "str2", 30, "str3");
+
+        obj = new ComplexTestObject(
+            (byte)1,
+            (short)10,
+            100,
+            1000L,
+            100.0f,
+            1000.0d,
+            'a',
+            false,
+            (byte)2,
+            (short)20,
+            200,
+            2000L,
+            200.0f,
+            2000.0d,
+            'b',
+            true,
+            new byte[] {1, 2, 3},
+            new short[] {10, 20, 30},
+            new int[] {100, 200, 300},
+            new long[] {1000, 2000, 3000},
+            new float[] {100.0f, 200.0f, 300.0f},
+            new double[] {1000.0d, 2000.0d, 3000.0d},
+            new char[] {'a', 'b', 'c'},
+            new boolean[] {false, true},
+            new ExternalizableTestObject1[] {extObj1, extObj2},
+            "String",
+            TestEnum.A,
+            UUID.randomUUID(),
+            props,
+            new ArrayList<>(col),
+            new HashMap<>(map),
+            new HashSet<>(col),
+            new LinkedList<>(col),
+            new LinkedHashMap<>(map),
+            new LinkedHashSet<>(col),
+            new Date(),
+            ExternalizableTestObject2.class
+        );
+
+        assertEquals(obj, marshalUnmarshal(obj));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReadToArray() throws Exception {
+        OptimizedObjectInputStream in = OptimizedObjectStreamRegistry.in();
+
+        try {
+            byte[] arr = new byte[50];
+
+            for (int i = 0; i < arr.length; i++)
+                arr[i] = (byte)i;
+
+            in.in().bytes(arr, arr.length);
+
+            byte[] buf = new byte[10];
+
+            assertEquals(10, in.read(buf));
+
+            for (int i = 0; i < buf.length; i++)
+                assertEquals(i, buf[i]);
+
+            buf = new byte[30];
+
+            assertEquals(20, in.read(buf, 0, 20));
+
+            for (int i = 0; i < buf.length; i++)
+                assertEquals(i < 20 ? 10 + i : 0, buf[i]);
+
+            buf = new byte[30];
+
+            assertEquals(10, in.read(buf, 10, 10));
+
+            for (int i = 0; i < buf.length; i++)
+                assertEquals(i >= 10 && i < 20 ? 30 + (i - 10) : 0, buf[i]);
+
+            buf = new byte[20];
+
+            assertEquals(10, in.read(buf));
+
+            for (int i = 0; i < buf.length; i++)
+                assertEquals(i < 10 ? 40 + i : 0, buf[i]);
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeIn(in);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testHandleTableGrow() throws Exception {
+        List<String> c = new ArrayList<>();
+
+        for (int i = 0; i < 29; i++)
+            c.add("str");
+
+        String str = c.get(28);
+
+        c.add("str");
+        c.add(str);
+
+        List<Object> c0 = marshalUnmarshal(c);
+
+        assertTrue(c0.get(28) == c0.get(30));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIncorrectExternalizable() throws Exception {
+        GridTestUtils.assertThrows(
+            log,
+            new Callable<Object>() {
+                @Override public Object call() throws Exception {
+                    return marshalUnmarshal(new IncorrectExternalizable());
+                }
+            },
+            IOException.class,
+            null);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testExcludedClass() throws Exception {
+        Class<?>[] exclClasses = U.staticField(MarshallerExclusions.class, "EXCL_CLASSES");
+
+        assertFalse(F.isEmpty(exclClasses));
+
+        for (Class<?> cls : exclClasses)
+            assertEquals(cls, marshalUnmarshal(cls));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testInet6Address() throws Exception {
+        final InetAddress address = Inet6Address.getByAddress(new byte[16]);
+
+        assertEquals(address, marshalUnmarshal(address));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
+    public void testPutFieldsWithDefaultWriteObject() throws Exception {
+        try {
+            marshalUnmarshal(new CustomWriteObjectMethodObject("test"));
+        }
+        catch (IOException e) {
+            assert e.getCause() instanceof NotActiveException;
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("ThrowableInstanceNeverThrown")
+    public void testThrowable() throws Exception {
+        Throwable t = new Throwable("Throwable");
+
+        assertEquals(t.getMessage(), ((Throwable)marshalUnmarshal(t)).getMessage());
+    }
+
+    /**
+     * Marshals and unmarshals object.
+     *
+     * @param obj Original object.
+     * @return Object after marshalling and unmarshalling.
+     * @throws Exception In case of error.
+     */
+    private <T> T marshalUnmarshal(@Nullable Object obj) throws Exception {
+        OptimizedObjectOutputStream out = null;
+        OptimizedObjectInputStream in = null;
+
+        try {
+            out = OptimizedObjectStreamRegistry.out();
+
+            out.context(clsMap, CTX, null, true);
+
+            out.writeObject(obj);
+
+            byte[] arr = out.out().array();
+
+            in = OptimizedObjectStreamRegistry.in();
+
+            in.context(clsMap, CTX, null, getClass().getClassLoader());
+
+            in.in().bytes(arr, arr.length);
+
+            Object obj0 = in.readObject();
+
+            checkHandles(out, in);
+
+            return (T)obj0;
+        }
+        finally {
+            OptimizedObjectStreamRegistry.closeOut(out);
+            OptimizedObjectStreamRegistry.closeIn(in);
+        }
+    }
+
+    /**
+     * Checks that handles are equal in output and input streams.
+     *
+     * @param out Output stream.
+     * @param in Input stream.
+     * @throws Exception If failed.
+     */
+    private void checkHandles(OptimizedObjectOutputStream out, OptimizedObjectInputStream in)
+        throws Exception {
+        Object[] outHandles = out.handledObjects();
+        Object[] inHandles = in.handledObjects();
+
+        assertEquals(outHandles.length, inHandles.length);
+
+        for (int i = 0; i < outHandles.length; i++) {
+            if (outHandles[i] == null)
+                assertTrue(inHandles[i] == null);
+            else {
+                assertFalse(inHandles[i] == null);
+
+                assertTrue(outHandles[i].getClass() == inHandles[i].getClass());
+            }
+        }
+    }
+
+    /** */
+    private static class IncorrectExternalizable implements Externalizable {
+        /**
+         * Required by {@link Externalizable}.
+         */
+        public IncorrectExternalizable() {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeInt(0);
+            out.writeInt(200);
+            out.writeObject("str");
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            in.readInt();
+            in.readObject();
+        }
+    }
+
+    /**
+     * Test object.
+     */
+    private static class TestObject implements Serializable {
+        /** */
+        private Long longVal;
+
+        /** */
+        private Double doubleVal;
+
+        /** */
+        private Long[] longArr;
+
+        /** */
+        private Double[] doubleArr;
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            TestObject obj = (TestObject)o;
+
+            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
+                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
+                Arrays.equals(longArr, obj.longArr) &&
+                Arrays.equals(doubleArr, obj.doubleArr);
+        }
+    }
+
+    /**
+     * Externalizable test object.
+     */
+    private static class ExternalizableTestObject1 implements Externalizable {
+        /** */
+        private Long longVal;
+
+        /** */
+        private Double doubleVal;
+
+        /** */
+        private Long[] longArr;
+
+        /** */
+        private Double[] doubleArr;
+
+        /**
+         * Required by {@link Externalizable}.
+         */
+        public ExternalizableTestObject1() {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            ExternalizableTestObject1 obj = (ExternalizableTestObject1)o;
+
+            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
+                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
+                Arrays.equals(longArr, obj.longArr) &&
+                Arrays.equals(doubleArr, obj.doubleArr);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeLong(longVal);
+            out.writeDouble(doubleVal);
+            U.writeArray(out, longArr);
+            U.writeArray(out, doubleArr);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            longVal = in.readLong();
+            doubleVal = in.readDouble();
+
+            Object[] arr = U.readArray(in);
+
+            longArr = Arrays.copyOf(arr, arr.length, Long[].class);
+
+            arr = U.readArray(in);
+
+            doubleArr = Arrays.copyOf(arr, arr.length, Double[].class);
+        }
+    }
+
+    /**
+     * Externalizable test object.
+     */
+    private static class ExternalizableTestObject2 implements Externalizable {
+        /** */
+        private Long longVal;
+
+        /** */
+        private Double doubleVal;
+
+        /** */
+        private Long[] longArr;
+
+        /** */
+        private Double[] doubleArr;
+
+        /**
+         * Required by {@link Externalizable}.
+         */
+        public ExternalizableTestObject2() {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            ExternalizableTestObject2 obj = (ExternalizableTestObject2)o;
+
+            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
+                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
+                Arrays.equals(longArr, obj.longArr) &&
+                Arrays.equals(doubleArr, obj.doubleArr);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeLong(longVal);
+            U.writeArray(out, longArr);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            longVal = in.readLong();
+
+            Object[] arr = U.readArray(in);
+
+            longArr = Arrays.copyOf(arr, arr.length, Long[].class);
+        }
+    }
+
+    /**
+     * Test object.
+     */
+    private static class LinkTestObject1 implements Serializable {
+        /** */
+        private int val;
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            LinkTestObject1 obj = (LinkTestObject1)o;
+
+            return val == obj.val;
+        }
+    }
+
+    /**
+     * Test object.
+     */
+    private static class LinkTestObject2 implements Serializable {
+        /** */
+        private LinkTestObject1 ref;
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            LinkTestObject2 obj = (LinkTestObject2)o;
+
+            return ref != null ? ref.equals(obj.ref) : obj.ref == null;
+        }
+    }
+
+    /**
+     * Cycle link test object.
+     */
+    private static class CycleLinkTestObject implements Serializable {
+        /** */
+        private int val;
+
+        /** */
+        private CycleLinkTestObject ref;
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            CycleLinkTestObject obj = (CycleLinkTestObject)o;
+
+            return val == obj.val && ref != null ? ref.val == val : obj.ref == null;
+        }
+    }
+
+    /**
+     * Test object without default constructor.
+     */
+    private static class NoDefaultConstructorTestObject implements Serializable {
+        /** */
+        private int val;
+
+        /**
+         * @param val Value.
+         */
+        private NoDefaultConstructorTestObject(int val) {
+            this.val = val;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            NoDefaultConstructorTestObject obj = (NoDefaultConstructorTestObject)o;
+
+            return val == obj.val;
+        }
+    }
+
+    /**
+     * Test object with transient fields.
+     */
+    @SuppressWarnings("TransientFieldNotInitialized")
+    private static class TransientTestObject implements Serializable {
+        /** */
+        private int val1;
+
+        /** */
+        private transient int val2;
+
+        /** */
+        private String str1;
+
+        /** */
+        private transient String str2;
+
+        /**
+         * @param val1 Value 1.
+         * @param val2 Value 2.
+         * @param str1 String 1.
+         * @param str2 String 2.
+         */
+        private TransientTestObject(int val1, int val2, String str1, String str2) {
+            this.val1 = val1;
+            this.val2 = val2;
+            this.str1 = str1;
+            this.str2 = str2;
+        }
+    }
+
+    /**
+     * Test object with {@code writeObject} and {@code readObject} methods.
+     */
+    @SuppressWarnings("TransientFieldNotInitialized")
+    private static class WriteReadTestObject implements Serializable {
+        /** */
+        private int val;
+
+        /** */
+        private transient String str;
+
+        /**
+         * @param val Value.
+         * @param str String.
+         */
+        private WriteReadTestObject(int val, String str) {
+            this.val = val;
+            this.str = str;
+        }
+
+        /**
+         * @param out Output stream.
+         * @throws IOException In case of error.
+         */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            out.defaultWriteObject();
+
+            out.writeUTF("Optional data");
+        }
+
+        /**
+         * @param in Input stream.
+         * @throws IOException In case of error.
+         * @throws ClassNotFoundException If class not found.
+         */
+        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+            in.defaultReadObject();
+
+            str = in.readUTF();
+        }
+    }
+
+    /**
+     * Test object that uses {@code writeFields} and {@code readFields} methods.
+     */
+    private static class WriteReadFieldsTestObject implements Serializable {
+        /** */
+        private int val;
+
+        /** */
+        private String str;
+
+        /**
+         * @param val Value.
+         * @param str String.
+         */
+        private WriteReadFieldsTestObject(int val, String str) {
+            this.val = val;
+            this.str = str;
+        }
+
+        /**
+         * @param out Output stream.
+         * @throws IOException In case of error.
+         */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            ObjectOutputStream.PutField fields = out.putFields();
+
+            fields.put("val", val);
+            fields.put("str", "Optional data");
+
+            out.writeFields();
+        }
+
+        /**
+         * @param in Input stream.
+         * @throws IOException In case of error.
+         * @throws ClassNotFoundException If class not found.
+         */
+        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+            ObjectInputStream.GetField fields = in.readFields();
+
+            val = fields.get("val", 0);
+            str = (String)fields.get("str", null);
+        }
+    }
+
+    /**
+     * Test object that uses {@code writeFields} and {@code readFields} methods.
+     */
+    private static class WriteFieldsTestObject implements Serializable {
+        /** */
+        private int val;
+
+        /** */
+        @SuppressWarnings("UnusedDeclaration")
+        private String str;
+
+        /**
+         * @param val Value.
+         * @param str String.
+         */
+        private WriteFieldsTestObject(int val, String str) {
+            this.val = val;
+            this.str = str;
+        }
+
+        /**
+         * @param out Output stream.
+         * @throws IOException In case of error.
+         */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            ObjectOutputStream.PutField fields = out.putFields();
+
+            fields.put("val", val);
+            fields.put("str", "Optional data");
+
+            out.writeFields();
+        }
+    }
+
+    /**
+     * Base object with {@code writeReplace} method.
+     */
+    private abstract static class ReplaceTestBaseObject implements Serializable {
+        /** */
+        private int val;
+
+        /**
+         * @param val Value.
+         */
+        private ReplaceTestBaseObject(int val) {
+            this.val = val;
+        }
+
+        /**
+         * @return Value.
+         */
+        public int value() {
+            return val;
+        }
+
+        /**
+         * @return Replaced object.
+         * @throws ObjectStreamException In case of error.
+         */
+        protected Object writeReplace() throws ObjectStreamException {
+            return new ReplaceTestObject(val * 2);
+        }
+    }
+
+    /**
+     * Test object for {@code writeReplace} method.
+     */
+    private static class ReplaceTestObject extends ReplaceTestBaseObject {
+        /**
+         * @param val Value.
+         */
+        private ReplaceTestObject(int val) {
+            super(val);
+        }
+    }
+
+    /**
+     * Test object with {@code writeReplace} method.
+     */
+    private static class ReplaceNullTestObject implements Serializable {
+        /**
+         * @return Replaced object.
+         * @throws ObjectStreamException In case of error.
+         */
+        protected Object writeReplace() throws ObjectStreamException {
+            return null;
+        }
+    }
+
+    /**
+     * Base object with {@code readResolve} method.
+     */
+    private abstract static class ResolveTestBaseObject implements Serializable {
+        /** */
+        private int val;
+
+        /**
+         * @param val Value.
+         */
+        private ResolveTestBaseObject(int val) {
+            this.val = val;
+        }
+
+        /**
+         * @return Value.
+         */
+        public int value() {
+            return val;
+        }
+
+        /**
+         * @return Replaced object.
+         * @throws ObjectStreamException In case of error.
+         */
+        protected Object readResolve() throws ObjectStreamException {
+            return new ResolveTestObject(val * 2);
+        }
+    }
+
+    /**
+     * Test object for {@code readResolve} method.
+     */
+    private static class ResolveTestObject extends ResolveTestBaseObject {
+        /**
+         * @param val Value.
+         */
+        private ResolveTestObject(int val) {
+            super(val);
+        }
+    }
+
+    /**
+     * Class A.
+     */
+    private static class A implements Serializable {
+        /** */
+        private int valA;
+
+        /** */
+        private transient String strA;
+
+        /**
+         * @param valA Value A.
+         * @param strA String A.
+         */
+        A(int valA, String strA) {
+            this.valA = valA;
+            this.strA = strA;
+        }
+
+        /**
+         * @return Value.
+         */
+        int valueA() {
+            return valA;
+        }
+
+        /**
+         * @return String.
+         */
+        String stringA() {
+            return strA;
+        }
+
+        /**
+         * @param out Output stream.
+         * @throws IOException In case of error.
+         */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            out.defaultWriteObject();
+
+            out.writeUTF("Optional data");
+        }
+
+        /**
+         * @param in Input stream.
+         * @throws IOException In case of error.
+         * @throws ClassNotFoundException If class not found.
+         */
+        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+            in.defaultReadObject();
+
+            strA = in.readUTF();
+        }
+    }
+
+    /**
+     * Class B.
+     */
+    private static class B extends A {
+        /** */
+        private int valB;
+
+        /** */
+        @SuppressWarnings("TransientFieldNotInitialized")
+        private transient String strB;
+
+        /**
+         * @param valA Value A.
+         * @param strA String A.
+         * @param valB Value B.
+         * @param strB String B.
+         */
+        B(int valA, String strA, int valB, String strB) {
+            super(valA, strA);
+
+            this.valB = valB;
+            this.strB = strB;
+        }
+
+        /**
+         * @return Value.
+         */
+        int valueB() {
+            return valB;
+        }
+
+        /**
+         * @return String.
+         */
+        String stringB() {
+            return strB;
+        }
+    }
+
+    /**
+     * Class C.
+     */
+    @SuppressWarnings("MethodOverridesPrivateMethodOfSuperclass")
+    private static class C extends B {
+        /** */
+        @SuppressWarnings("InstanceVariableMayNotBeInitializedByReadObject")
+        private int valC;
+
+        /** */
+        private transient String strC;
+
+        /**
+         * @param valA Value A.
+         * @param strA String A.
+         * @param valB Value B.
+         * @param strB String B.
+         * @param valC Value C.
+         * @param strC String C.
+         */
+        C(int valA, String strA, int valB, String strB, int valC, String strC) {
+            super(valA, strA, valB, strB);
+
+            this.valC = valC;
+            this.strC = strC;
+        }
+
+        /**
+         * @return Value.
+         */
+        int valueC() {
+            return valC;
+        }
+
+        /**
+         * @return String.
+         */
+        String stringC() {
+            return strC;
+        }
+
+        /**
+         * @param out Output stream.
+         * @throws IOException In case of error.
+         */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            out.writeUTF("Optional data");
+        }
+
+        /**
+         * @param in Input stream.
+         * @throws IOException In case of error.
+         * @throws ClassNotFoundException If class not found.
+         */
+        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+            strC = in.readUTF();
+        }
+    }
+
+    /**
+     * Complex test object.
+     */
+    private static class ComplexTestObject implements Serializable {
+        /** */
+        private byte byteVal1;
+
+        /** */
+        private short shortVal1;
+
+        /** */
+        private int intVal1;
+
+        /** */
+        private long longVal1;
+
+        /** */
+        private float floatVal1;
+
+        /** */
+        private double doubleVal1;
+
+        /** */
+        private char cVal1;
+
+        /** */
+        private boolean boolVal1;
+
+        /** */
+        private Byte byteVal2;
+
+        /** */
+        private Short shortVal2;
+
+        /** */
+        private Integer intVal2;
+
+        /** */
+        private Long longVal2;
+
+        /** */
+        private Float floatVal2;
+
+        /** */
+        private Double doubleVal2;
+
+        /** */
+        private Character cVal2;
+
+        /** */
+        private Boolean boolVal2;
+
+        /** */
+        private byte[] byteArr;
+
+        /** */
+        private short[] shortArr;
+
+        /** */
+        private int[] intArr;
+
+        /** */
+        private long[] longArr;
+
+        /** */
+        private float[] floatArr;
+
+        /** */
+        private double[] doubleArr;
+
+        /** */
+        private char[] cArr;
+
+        /** */
+        private boolean[] boolArr;
+
+        /** */
+        private ExternalizableTestObject1[] objArr;
+
+        /** */
+        private String str;
+
+        /** */
+        private TestEnum enumVal;
+
+        /** */
+        private UUID uuid;
+
+        /** */
+        private Properties props;
+
+        /** */
+        private ArrayList<Integer> arrList;
+
+        /** */
+        private HashMap<Integer, String> hashMap;
+
+        /** */
+        private HashSet<Integer> hashSet;
+
+        /** */
+        private LinkedList<Integer> linkedList;
+
+        /** */
+        private LinkedHashMap<Integer, String> linkedHashMap;
+
+        /** */
+        private LinkedHashSet<Integer> linkedHashSet;
+
+        /** */
+        private Date date;
+
+        /** */
+        private Class<?> cls;
+
+        /** */
+        private ComplexTestObject self;
+
+        /** */
+        private ComplexTestObject() {
+            self = this;
+        }
+
+        /**
+         * @param byteVal1 Byte value.
+         * @param shortVal1 Short value.
+         * @param intVal1 Integer value.
+         * @param longVal1 Long value.
+         * @param floatVal1 Float value.
+         * @param doubleVal1 Double value.
+         * @param cVal1 Char value.
+         * @param boolVal1 Boolean value.
+         * @param byteVal2 Byte value.
+         * @param shortVal2 Short value.
+         * @param intVal2 Integer value.
+         * @param longVal2 Long value.
+         * @param floatVal2 Float value.
+         * @param doubleVal2 Double value.
+         * @param cVal2 Char value.
+         * @param boolVal2 Boolean value.
+         * @param byteArr Bytes array.
+         * @param shortArr Shorts array.
+         * @param intArr Integers array.
+         * @param longArr Longs array.
+         * @param floatArr Floats array.
+         * @param doubleArr Doubles array.
+         * @param cArr Chars array.
+         * @param boolArr Booleans array.
+         * @param objArr Objects array.
+         * @param str String.
+         * @param enumVal Enum.
+         * @param uuid UUID.
+         * @param props Properties.
+         * @param arrList ArrayList.
+         * @param hashMap HashMap.
+         * @param hashSet HashSet.
+         * @param linkedList LinkedList.
+         * @param linkedHashMap LinkedHashMap.
+         * @param linkedHashSet LinkedHashSet.
+         * @param date Date.
+         * @param cls Class.
+         */
+        private ComplexTestObject(byte byteVal1, short shortVal1, int intVal1, long longVal1, float floatVal1,
+            double doubleVal1, char cVal1, boolean boolVal1, Byte byteVal2, Short shortVal2, Integer intVal2,
+            Long longVal2, Float floatVal2, Double doubleVal2, Character cVal2, Boolean boolVal2, byte[] byteArr,
+            short[] shortArr, int[] intArr, long[] longArr, float[] floatArr, double[] doubleArr, char[] cArr,
+            boolean[] boolArr, ExternalizableTestObject1[] objArr, String str, TestEnum enumVal, UUID uuid,
+            Properties props, ArrayList<Integer> arrList, HashMap<Integer, String> hashMap, HashSet<Integer> hashSet,
+            LinkedList<Integer> linkedList, LinkedHashMap<Integer, String> linkedHashMap,
+            LinkedHashSet<Integer> linkedHashSet, Date date, Class<?> cls) {
+            this.byteVal1 = byteVal1;
+            this.shortVal1 = shortVal1;
+            this.intVal1 = intVal1;
+            this.longVal1 = longVal1;
+            this.floatVal1 = floatVal1;
+            this.doubleVal1 = doubleVal1;
+            this.cVal1 = cVal1;
+            this.boolVal1 = boolVal1;
+            this.byteVal2 = byteVal2;
+            this.shortVal2 = shortVal2;
+            this.intVal2 = intVal2;
+            this.longVal2 = longVal2;
+            this.floatVal2 = floatVal2;
+            this.doubleVal2 = doubleVal2;
+            this.cVal2 = cVal2;
+            this.boolVal2 = boolVal2;
+            this.byteArr = byteArr;
+            this.shortArr = shortArr;
+            this.intArr = intArr;
+            this.longArr = longArr;
+            this.floatArr = floatArr;
+            this.doubleArr = doubleArr;
+            this.cArr = cArr;
+            this.boolArr = boolArr;
+            this.objArr = objArr;
+            this.str = str;
+            this.enumVal = enumVal;
+            this.uuid = uuid;
+            this.props = props;
+            this.arrList = arrList;
+            this.hashMap = hashMap;
+            this.hashSet = hashSet;
+            this.linkedList = linkedList;
+            this.linkedHashMap = linkedHashMap;
+            this.linkedHashSet = linkedHashSet;
+            this.date = date;
+            this.cls = cls;
+
+            self = this;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("RedundantIfStatement")
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            ComplexTestObject obj = (ComplexTestObject)o;
+
+            if (boolVal1 != obj.boolVal1)
+                return false;
+
+            if (byteVal1 != obj.byteVal1)
+                return false;
+
+            if (cVal1 != obj.cVal1)
+                return false;
+
+            if (Double.compare(obj.doubleVal1, doubleVal1) != 0)
+                return false;
+
+            if (Float.compare(obj.floatVal1, floatVal1) != 0)
+                return false;
+
+            if (intVal1 != obj.intVal1)
+                return false;
+
+            if (longVal1 != obj.longVal1)
+                return false;
+
+            if (shortVal1 != obj.shortVal1)
+                return false;
+
+            if (arrList != null ? !arrList.equals(obj.arrList) : obj.arrList != null)
+                return false;
+
+            if (!Arrays.equals(boolArr, obj.boolArr))
+                return false;
+
+            if (boolVal2 != null ? !boolVal2.equals(obj.boolVal2) : obj.boolVal2 != null)
+                return false;
+
+            if (!Arrays.equals(byteArr, obj.byteArr))
+                return false;
+
+            if (byteVal2 != null ? !byteVal2.equals(obj.byteVal2) : obj.byteVal2 != null)
+                return false;
+
+            if (!Arrays.equals(cArr, obj.cArr))
+                return false;
+
+            if (cVal2 != null ? !cVal2.equals(obj.cVal2) : obj.cVal2 != null)
+                return false;
+
+            if (cls != null ? !cls.equals(obj.cls) : obj.cls != null)
+                return false;
+
+            if (date != null ? !date.equals(obj.date) : obj.date != null)
+                return false;
+
+            if (!Arrays.equals(doubleArr, obj.doubleArr))
+                return false;
+
+            if (doubleVal2 != null ? !doubleVal2.equals(obj.doubleVal2) : obj.doubleVal2 != null)
+                return false;
+
+            if (enumVal != obj.enumVal)
+                return false;
+
+            if (!Arrays.equals(floatArr, obj.floatArr))
+                return false;
+
+            if (floatVal2 != null ? !floatVal2.equals(obj.floatVal2) : obj.floatVal2 != null)
+                return false;
+
+            if (hashMap != null ? !hashMap.equals(obj.hashMap) : obj.hashMap != null)
+                return false;
+
+            if (hashSet != null ? !hashSet.equals(obj.hashSet) : obj.hashSet != null)
+                return false;
+
+            if (!Arrays.equals(intArr, obj.intArr))
+                return false;
+
+            if (intVal2 != null ? !intVal2.equals(obj.intVal2) : obj.intVal2 != null)
+                return false;
+
+            if (linkedHashMap != null ? !linkedHashMap.equals(obj.linkedHashMap) : obj.linkedHashMap != null)
+                return false;
+
+            if (linkedHashSet != null ? !linkedHashSet.equals(obj.linkedHashSet) : obj.linkedHashSet != null)
+                return false;
+
+            if (linkedList != null ? !linkedList.equals(obj.linkedList) : obj.linkedList != null)
+                return false;
+
+            if (!Arrays.equals(longArr, obj.longArr))
+                return false;
+
+            if (longVal2 != null ? !longVal2.equals(obj.longVal2) : obj.longVal2 != null)
+                return false;
+
+            if (!Arrays.equals(objArr, obj.objArr))
+                return false;
+
+            if (props != null ? !props.equals(obj.props) : obj.props != null)
+                return false;
+
+            if (!Arrays.equals(shortArr, obj.shortArr))
+                return false;
+
+            if (shortVal2 != null ? !shortVal2.equals(obj.shortVal2) : obj.shortVal2 != null)
+                return false;
+
+            if (str != null ? !str.equals(obj.str) : obj.str != null)
+                return false;
+
+            if (uuid != null ? !uuid.equals(obj.uuid) : obj.uuid != null)
+                return false;
+
+            if (self != this)
+                return false;
+
+            return true;
+        }
+    }
+
+    /**
+     * Test enum.
+     */
+    @SuppressWarnings("JavaDoc")
+    private enum TestEnum {
+        /** */
+        A,
+
+        /** */
+        B,
+
+        /** */
+        C
+    }
+
+    /**
+     * Class with custom serialization method which at the beginning invokes
+     * {@link ObjectOutputStream#defaultWriteObject()} and {@link ObjectOutputStream#putFields()} then.
+     */
+    public static class CustomWriteObjectMethodObject implements Serializable {
+        /** */
+        private final String name;
+
+        /**
+         * Creates new instance.
+         * @param name Object name.
+         */
+        public CustomWriteObjectMethodObject(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        private void writeObject(ObjectOutputStream stream) throws IOException {
+            stream.defaultWriteObject();
+
+            ObjectOutputStream.PutField fields = stream.putFields();
+            fields.put("name", "test");
+
+            stream.writeFields();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
new file mode 100644
index 0000000..fcf1750
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
@@ -0,0 +1,43 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import org.apache.ignite.spi.IgniteSpiException;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter;
+
+/**
+ * Test TCP discovery IP finder adapter.
+ */
+public class TestTcpDiscoveryIpFinderAdapter extends TcpDiscoveryIpFinderAdapter {
+    /** {@inheritDoc} */
+    @Override public Collection<InetSocketAddress> getRegisteredAddresses() throws IgniteSpiException {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void registerAddresses(Collection<InetSocketAddress> addrs) throws IgniteSpiException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void unregisterAddresses(Collection<InetSocketAddress> addrs) throws IgniteSpiException {
+        // No-op.
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/package-info.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
new file mode 100644
index 0000000..d255fac
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * 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 description. -->
+ * Optimized marchalling test package.
+ */
+package org.apache.ignite.internal.marshaller.optimized;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
index 6f65545..be039e4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStartupInDeploymentModesTest.java
@@ -24,7 +24,6 @@ import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**
@@ -73,26 +72,6 @@ public class CacheStartupInDeploymentModesTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If fail.
      */
-    public void testFailedInIsolatedMode() throws Exception {
-        deploymentMode = DeploymentMode.ISOLATED;
-        marshaller = new OptimizedMarshaller();
-
-        doCheckFailed();
-    }
-
-    /**
-     * @throws Exception If fail.
-     */
-    public void testFailedInPrivateMode() throws Exception {
-        deploymentMode = DeploymentMode.PRIVATE;
-        marshaller = new OptimizedMarshaller();
-
-        doCheckFailed();
-    }
-
-    /**
-     * @throws Exception If fail.
-     */
     public void testStartedInIsolatedMode() throws Exception {
         deploymentMode = DeploymentMode.ISOLATED;
         marshaller = new BinaryMarshaller();
@@ -133,22 +112,6 @@ public class CacheStartupInDeploymentModesTest extends GridCommonAbstractTest {
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    private void doCheckFailed() throws Exception {
-        try {
-            startGridsMultiThreaded(2);
-        }
-        catch (Exception e) {
-            assert e.getMessage().contains("Cache can be started in PRIVATE or ISOLATED deployment mode only ");
-
-            return;
-        }
-
-        fail("Unexpected start of the caches!");
-    }
-
-    /**
      * @param cache IgniteCache
      */
     private void checkPutCache(IgniteCache cache) {
@@ -224,6 +187,5 @@ public class CacheStartupInDeploymentModesTest extends GridCommonAbstractTest {
                 ", name='" + name + '\'' +
                 '}';
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
index 452aa21..c086c35 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
@@ -28,12 +28,12 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContext;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
index 73d01fe..da1a395 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
@@ -35,10 +35,10 @@ import org.apache.ignite.cache.store.CacheStoreAdapter;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.extras.GridCacheObsoleteEntryExtras;
 import org.apache.ignite.internal.processors.cache.store.CacheLocalStore;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
index 8179dc5..45db0bb 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java
index d4e4269..46669ac 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAffinityEarlyTest.java
@@ -29,7 +29,7 @@ import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -66,10 +66,7 @@ public class CacheAffinityEarlyTest extends GridCommonAbstractTest {
 
         cfg.setDiscoverySpi(discoSpi);
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-        marsh.setRequireSerializable(false);
-
-        cfg.setMarshaller(marsh);
+        cfg.setMarshaller(new BinaryMarshaller());
 
         return cfg;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
index 78cb817..1b2ed1b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheGetFutureHangsSelfTest.java
@@ -30,9 +30,9 @@ import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.T2;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -67,10 +67,7 @@ public class CacheGetFutureHangsSelfTest extends GridCommonAbstractTest {
 
         ((TcpCommunicationSpi)cfg.getCommunicationSpi()).setSharedMemoryPort(-1);
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-        marsh.setRequireSerializable(false);
-
-        cfg.setMarshaller(marsh);
+        cfg.setMarshaller(new BinaryMarshaller());
 
         CacheConfiguration ccfg = defaultCacheConfiguration();
         ccfg.setCacheMode(CacheMode.PARTITIONED);

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
index 0ba2228..3b7fa4f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutMultiNodeSelfTest.java
@@ -29,7 +29,7 @@ import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
index 97bd202..42d6a12 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheCreatePutTest.java
@@ -26,8 +26,8 @@ import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
index f1c791e..e4624d5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxForceKeyTest.java
@@ -22,7 +22,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java
index b462417..3d5e008 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheEntryProcessorNonSerializableTest.java
@@ -30,7 +30,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
@@ -83,7 +83,7 @@ public class CacheEntryProcessorNonSerializableTest extends GridCommonAbstractTe
         ((TcpCommunicationSpi)cfg.getCommunicationSpi()).setSharedMemoryPort(-1);
 
         cfg.setClientMode(client);
-        cfg.setMarshaller(new OptimizedMarshaller());
+        cfg.setMarshaller(new BinaryMarshaller());
 
         return cfg;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
index 6a2af15..8886f57 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
@@ -47,6 +47,7 @@ import org.apache.ignite.igfs.secondary.IgfsSecondaryFileSystem;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
 import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
@@ -54,7 +55,6 @@ import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
index b2b87dc..435ff15 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsFileInfoSelfTest.java
@@ -17,17 +17,16 @@
 
 package org.apache.ignite.internal.processors.igfs;
 
+import java.io.Externalizable;
+import java.util.Random;
+import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.jetbrains.annotations.Nullable;
 
-import java.io.Externalizable;
-import java.util.Random;
-import java.util.concurrent.Callable;
-
 /**
  * {@link IgfsEntryInfo} test case.
  */

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
index 3119f2d..c1af323 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/ClosureServiceClientsNodesTest.java
@@ -27,10 +27,10 @@ import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cluster.ClusterGroup;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteCallable;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.resources.LoggerResource;
 import org.apache.ignite.services.Service;
@@ -59,7 +59,7 @@ public class ClosureServiceClientsNodesTest extends GridCommonAbstractTest {
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 
-        cfg.setMarshaller(new OptimizedMarshaller(false));
+        cfg.setMarshaller(new BinaryMarshaller());
 
         cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder).setForceServerMode(true));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
index f2988cc..b0cdf1f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeployment2ClassLoadersOptimizedMarshallerTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.ignite.internal.processors.service;
 
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 
 /**
  * Tests that not all nodes in cluster need user's service definition (only nodes according to filter).

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
index cb0c911..d021517 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/service/IgniteServiceDeploymentClassLoadingOptimizedMarshallerTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.ignite.internal.processors.service;
 
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 
 /**
  * Tests that not all nodes in cluster need user's service definition (only nodes according to filter).


[05/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
index 6591776..2345dd6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
@@ -22,15 +22,15 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_SERVICES_COMPATIBILITY_MODE;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
 import static org.apache.ignite.configuration.DeploymentMode.CONTINUOUS;
 import static org.apache.ignite.configuration.DeploymentMode.SHARED;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
new file mode 100644
index 0000000..c7a58f7
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import junit.framework.TestCase;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.testframework.junits.GridTestKernalContext;
+import org.apache.ignite.testframework.junits.logger.GridTestLog4jLogger;
+
+/**
+ *
+ */
+public class OptimizedMarshallerEnumSelfTest extends TestCase {
+
+    private String igniteHome = System.getProperty("user.dir");
+
+    private final IgniteLogger rootLog = new GridTestLog4jLogger(false);
+    /**
+     * @throws Exception If failed.
+     */
+    public void testEnumSerialisation() throws Exception {
+        OptimizedMarshaller marsh = new OptimizedMarshaller();
+
+        MarshallerContextTestImpl context = new MarshallerContextTestImpl();
+
+        context.onMarshallerProcessorStarted(newContext(), null);
+
+        marsh.setContext(context);
+
+        byte[] bytes = marsh.marshal(TestEnum.Bond);
+
+        TestEnum unmarshalled = marsh.unmarshal(bytes, Thread.currentThread().getContextClassLoader());
+
+        assertEquals(TestEnum.Bond, unmarshalled);
+        assertEquals(TestEnum.Bond.desc, unmarshalled.desc);
+    }
+
+    private GridKernalContext newContext() throws IgniteCheckedException {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setIgniteHome(igniteHome);
+        cfg.setClientMode(false);
+
+        return new GridTestKernalContext(rootLog.getLogger(OptimizedMarshallerEnumSelfTest.class), cfg);
+    }
+
+    private enum TestEnum {
+        Equity("Equity") {
+            @Override public String getTestString() {
+                return "eee";
+            }
+        },
+
+        Bond("Bond") {
+            @Override public String getTestString() {
+                return "qqq";
+            }
+        };
+
+        public final String desc;
+
+        TestEnum(String desc) {
+            this.desc = desc;
+        }
+
+        public abstract String getTestString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
new file mode 100644
index 0000000..077447c
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
@@ -0,0 +1,357 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+
+/**
+ *
+ */
+public class OptimizedMarshallerNodeFailoverTest extends GridCommonAbstractTest {
+    /** */
+    private static TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
+
+    /** */
+    private boolean cache;
+
+    /** */
+    private String workDir;
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        TcpDiscoverySpi disco = new TcpDiscoverySpi();
+
+        disco.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(disco);
+
+        cfg.setMarshaller(new OptimizedMarshaller());
+
+        cfg.setWorkDirectory(workDir);
+
+        if (cache) {
+            CacheConfiguration ccfg = new CacheConfiguration();
+
+            ccfg.setCacheMode(PARTITIONED);
+            ccfg.setBackups(1);
+            ccfg.setWriteSynchronizationMode(FULL_SYNC);
+
+            cfg.setCacheConfiguration(ccfg);
+        }
+        else
+            cfg.setClientMode(true);
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testClassCacheUpdateFailover1() throws Exception {
+        classCacheUpdateFailover(false);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testClassCacheUpdateFailover2() throws Exception {
+        classCacheUpdateFailover(true);
+    }
+
+    /**
+     * @param stopSrv If {@code true} restarts server node, otherwise client node.
+     * @throws Exception If failed.
+     */
+    private void classCacheUpdateFailover(boolean stopSrv) throws Exception {
+        cache = true;
+
+        startGridsMultiThreaded(2);
+
+        cache = stopSrv;
+
+        IgniteCache<Integer, Object> cache0 = ignite(0).cache(null);
+
+        for (int i = 0; i < 20; i++) {
+            log.info("Iteration: " + i);
+
+            Map<Integer, Object> map = new HashMap<>();
+
+            for (int j = 0; j < 10_000; j++)
+                map.put(j, create(i + 1));
+
+            final Ignite ignite = startGrid(2);
+
+            IgniteInternalFuture fut = GridTestUtils.runAsync(new Callable() {
+                @Override public Object call() throws Exception {
+                    ignite.close();
+
+                    return null;
+                }
+            });
+
+            cache0.putAll(map);
+
+            fut.get();
+        }
+
+        cache = true;
+
+        Ignite ignite = startGrid(2); // Check can start one more cache node.
+
+        assertNotNull(ignite.cache(null));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRestartAllNodes() throws Exception {
+        cache = true;
+
+        String home = U.getIgniteHome();
+
+        String[] workDirs = new String[3];
+
+        for (int i = 0; i < 3; i++) {
+            workDirs[i] = home + "/work/marshallerTestNode_" + i;
+
+            File file = new File(workDirs[i]);
+
+            if (file.exists())
+                assert U.delete(file);
+        }
+
+        try {
+            for (int i = 0; i < workDirs.length; i++) {
+                workDir = workDirs[i];
+
+                startGrid(i);
+            }
+
+            Marshaller marsh = ignite(0).configuration().getMarshaller();
+
+            TestClass1 obj = new TestClass1();
+
+            obj.val = 111;
+
+            byte[] bytes = marsh.marshal(obj);
+
+            stopAllGrids();
+
+            for (int i = 0; i < workDirs.length; i++) {
+                workDir = workDirs[i];
+
+                startGrid(i);
+            }
+
+            for (int i = 0; i < 3; i++) {
+                marsh = ignite(i).configuration().getMarshaller();
+
+                TestClass1 obj0 = marsh.unmarshal(bytes, null);
+
+                assertEquals(111, obj0.val);
+            }
+        }
+        finally {
+            for (String dir : workDirs)
+                assert U.delete(new File(dir));
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        super.afterTest();
+
+        stopAllGrids();
+    }
+
+    /**
+     * @param id Class ID.
+     * @return Test class instance.
+     */
+    private static Object create(int id) {
+        switch (id) {
+            case 1: return new TestClass1();
+
+            case 2: return new TestClass2();
+
+            case 3: return new TestClass3();
+
+            case 4: return new TestClass4();
+
+            case 5: return new TestClass5();
+
+            case 6: return new TestClass6();
+
+            case 7: return new TestClass7();
+
+            case 8: return new TestClass8();
+
+            case 9: return new TestClass9();
+
+            case 10: return new TestClass10();
+
+            case 11: return new TestClass11();
+
+            case 12: return new TestClass12();
+
+            case 13: return new TestClass13();
+
+            case 14: return new TestClass14();
+
+            case 15: return new TestClass15();
+
+            case 16: return new TestClass16();
+
+            case 17: return new TestClass17();
+
+            case 18: return new TestClass18();
+
+            case 19: return new TestClass19();
+
+            case 20: return new TestClass20();
+        }
+
+        fail();
+
+        return null;
+    }
+
+    /**
+     *
+     */
+    static class TestClass1 implements Serializable {
+        /** */
+        int val;
+    }
+
+    /**
+     *
+     */
+    static class TestClass2 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass3 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass4 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass5 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass6 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass7 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass8 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass9 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass10 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass11 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass12 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass13 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass14 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass15 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass16 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass17 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass18 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass19 implements Serializable {}
+
+    /**
+     *
+     */
+    static class TestClass20 implements Serializable {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
new file mode 100644
index 0000000..276f67e
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
@@ -0,0 +1,44 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.testframework.junits.common.GridCommonTest;
+
+/**
+ * Optimized marshaller self test.
+ */
+@GridCommonTest(group = "Marshaller")
+public class OptimizedMarshallerPooledSelfTest extends OptimizedMarshallerSelfTest {
+    /** {@inheritDoc} */
+    @Override protected Marshaller marshaller() {
+        OptimizedMarshaller m = new OptimizedMarshaller(false);
+
+        m.setPoolSize(8);
+
+        return m;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        super.afterTestsStopped();
+
+        // Reset static registry.
+        new OptimizedMarshaller().setPoolSize(0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
new file mode 100644
index 0000000..1653693
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
@@ -0,0 +1,283 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.concurrent.Callable;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.lang.IgniteRunnable;
+import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonTest;
+
+/**
+ * Optimized marshaller self test.
+ */
+@GridCommonTest(group = "Marshaller")
+public class OptimizedMarshallerSelfTest extends GridMarshallerAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected Marshaller marshaller() {
+        return new OptimizedMarshaller(false);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testTestMarshalling() throws Exception {
+        final String msg = "PASSED";
+
+        byte[] buf = marshal(new IgniteRunnable() {
+            @Override public void run() {
+                c1.apply(msg);
+                c2.apply(msg);
+
+                c3.apply();
+                c4.reduce();
+
+                System.out.println("Test message: " + msg);
+            }
+        });
+
+        Runnable r = unmarshal(buf);
+
+        assertNotNull(r);
+
+        r.run();
+    }
+
+    /**
+     * Tests marshal self-linked object.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testMarshallingSelfLink() throws IgniteCheckedException {
+        SelfLink sl = new SelfLink("a string 1");
+
+        sl.link(sl);
+
+        SelfLink sl1 = unmarshal(marshal(sl));
+
+        assert sl1.link() == sl1;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testInvalid() throws Exception {
+        GridTestUtils.assertThrows(
+            log,
+            new Callable<Object>() {
+                @Override public Object call() throws Exception {
+                    byte[] arr = new byte[10];
+
+                    arr[0] = (byte)200;
+
+                    unmarshal(arr);
+
+                    return null;
+                }
+            },
+            IgniteCheckedException.class,
+            null
+        );
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNested() throws Exception {
+        NestedTestObject obj = new NestedTestObject("String", 100);
+
+        NestedTestObject newObj = unmarshal(marshal(obj));
+
+        assertEquals("String", newObj.str);
+        assertEquals(100, newObj.val);
+    }
+
+    /**
+     * Class for nested execution test.
+     */
+    private static class NestedTestObject implements Serializable {
+        /** */
+        private String str;
+
+        /** */
+        private int val;
+
+        /**
+         * @param str String.
+         * @param val Value.
+         */
+        private NestedTestObject(String str, int val) {
+            this.str = str;
+            this.val = val;
+        }
+
+        /** {@inheritDoc} */
+        private void writeObject(ObjectOutputStream out) throws IOException {
+            try {
+                byte[] arr = marshal(str);
+
+                out.writeInt(arr.length);
+                out.write(arr);
+
+                out.writeInt(val);
+            }
+            catch (IgniteCheckedException e) {
+                throw new IOException(e);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("UnusedParameters")
+        private void readObject(ObjectInputStream in) throws IOException {
+            try {
+                byte[] arr = new byte[in.readInt()];
+
+                in.read(arr);
+
+                str = unmarshal(arr);
+
+                val = in.readInt();
+            }
+            catch (IgniteCheckedException e) {
+                throw new IOException(e);
+            }
+        }
+    }
+
+    /** */
+    private static class TestObject2 {
+        /** */
+        private final int i;
+
+        /**
+         * Constructor for TestObject2 instances.
+         *
+         * @param i Integer value to hold.
+         */
+        private TestObject2(int i) {
+            this.i = i;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            return i == ((TestObject2)o).i;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return i;
+        }
+    }
+
+    /**
+     * Static nested class.
+     */
+    private static class TestObject {
+        /** */
+        private final TestObject2 o2;
+
+        /** The only meaningful field in the class, used for {@link #equals(Object o)} and {@link #hashCode()}. */
+        private final String str;
+
+        /**
+         * @param str String to hold.
+         * @param i Integer.
+         */
+        TestObject(String str, int i) {
+            this.str = str;
+
+            o2 = new TestObject2(i);
+        }
+
+        /**
+         * Method for accessing value of the hold string after the object is created.
+         *
+         * @return Wrapped string.
+         */
+        public String string() {
+            return str;
+        }
+
+        /**
+         * @return Object held in this wrapped.
+         */
+        public TestObject2 obj() {
+            return o2;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return 31 * o2.hashCode() + str.hashCode();
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("RedundantIfStatement")
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            TestObject obj = (TestObject)o;
+
+            if (o2 != null ? !o2.equals(obj.o2) : obj.o2 != null)
+                return false;
+
+            if (str != null ? !str.equals(obj.str) : obj.str != null)
+                return false;
+
+            return true;
+        }
+    }
+
+    /**
+     * Static nested class.
+     */
+    private static class SelfLink extends TestObject {
+        /** */
+        private SelfLink link;
+
+        /**
+         * @param str String to hold.
+         */
+        SelfLink(String str) {
+            super(str, 1);
+        }
+
+        /**
+         * @return The object this link points to,.
+         */
+        public SelfLink link() {
+            return link;
+        }
+
+        /**
+         * @param link The object this link should points to,
+         */
+        public void link(SelfLink link) {
+            this.link = link;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
new file mode 100644
index 0000000..0a9b6ce
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
+import org.apache.ignite.marshaller.Marshaller;
+
+/**
+ * Test that Optimized Marshaller works with classes with serialPersistentFields.
+ */
+public class OptimizedMarshallerSerialPersistentFieldsSelfTest  extends GridMarshallerAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected Marshaller marshaller() {
+        return new OptimizedMarshaller(false);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testOptimizedMarshaller() throws Exception {
+        unmarshal(marshal(new TestClass()));
+
+        TestClass2 val = unmarshal(marshal(new TestClass2()));
+
+        assertNull(val.field3);
+    }
+
+    /**
+     * Test class with serialPersistentFields fields.
+     */
+    private static class TestClass implements Serializable {
+        private static final long serialVersionUID = 0L;
+
+        /** For serialization compatibility. */
+        private static final ObjectStreamField[] serialPersistentFields = {
+            new ObjectStreamField("field1", Integer.TYPE),
+            new ObjectStreamField("field2", Integer.TYPE)
+        };
+
+        /**
+         * @param s Object output stream.
+         */
+        private void writeObject(ObjectOutputStream s) throws IOException {
+            s.putFields().put("field1", 1);
+            s.putFields().put("field2", 2);
+            s.writeFields();
+
+            s.writeObject(null);
+        }
+
+        /**
+         * @param s Object input stream.
+         */
+        private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
+            s.defaultReadObject();
+
+            s.readObject();
+        }
+    }
+
+    /**
+     * Test class with serialPersistentFields fields.
+     */
+    private static class TestClass2 implements Serializable {
+        private static final long serialVersionUID = 0L;
+
+        private Integer field3 = 1;
+
+        /** For serialization compatibility. */
+        private static final ObjectStreamField[] serialPersistentFields = {
+            new ObjectStreamField("field1", Integer.TYPE),
+            new ObjectStreamField("field2", Integer.TYPE)
+        };
+
+        /**
+         * @param s Object output stream.
+         */
+        private void writeObject(ObjectOutputStream s) throws IOException {
+            s.putFields().put("field1", 1);
+            s.putFields().put("field2", 2);
+            s.writeFields();
+
+            s.writeObject(null);
+        }
+
+        /**
+         * @param s Object input stream.
+         */
+        private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
+            s.defaultReadObject();
+
+            s.readObject();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
new file mode 100644
index 0000000..2698042
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
@@ -0,0 +1,790 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.compute.ComputeJobAdapter;
+import org.apache.ignite.compute.ComputeTask;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.GridMarshallerTestInheritedBean;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+public class OptimizedMarshallerTest extends GridCommonAbstractTest {
+    /**
+     * @return Marshaller.
+     */
+    private OptimizedMarshaller marshaller() {
+        U.clearClassCache();
+
+        OptimizedMarshaller marsh = new OptimizedMarshaller();
+
+        marsh.setContext(new MarshallerContextTestImpl());
+
+        return marsh;
+    }
+
+    /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        NonSerializable outObj = marsh.unmarshal(marsh.marshal(new NonSerializable(null)), null);
+
+        outObj.checkAfterUnmarshalled();
+    }
+
+    /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable1() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        byte[] bytes = marsh.marshal(new TcpDiscoveryVmIpFinder());
+
+        TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
+
+        assertFalse(ipFinder.isShared());
+
+        ipFinder = marsh.unmarshal(marsh.marshal(new TcpDiscoveryVmIpFinder(true)), null);
+
+        assertTrue(ipFinder.isShared());
+    }
+
+    /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable2() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        TcpDiscoveryIpFinderAdapter ipFinder = new TcpDiscoveryIpFinderAdapter() {
+            @Override public Collection<InetSocketAddress> getRegisteredAddresses() {
+                return null;
+            }
+
+            @Override public void registerAddresses(Collection<InetSocketAddress> addrs) {
+                //No-op.
+            }
+
+            @Override public void unregisterAddresses(Collection<InetSocketAddress> addrs) {
+                //No-op.
+            }
+        };
+
+        ipFinder.setShared(false);
+
+        byte[] bytes = marsh.marshal(ipFinder);
+
+        ipFinder = marsh.unmarshal(bytes, null);
+
+        assertFalse(ipFinder.isShared());
+    }
+
+    /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable3() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        byte[] bytes = marsh.marshal(new TestTcpDiscoveryIpFinderAdapter());
+
+        TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
+
+        assertFalse(ipFinder.isShared());
+    }
+
+     /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable4() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        byte[] bytes = marsh.marshal(new GridMarshallerTestInheritedBean());
+
+        info(Arrays.toString(bytes));
+
+        GridMarshallerTestInheritedBean bean = marsh.unmarshal(bytes, null);
+
+        assertTrue(bean.isFlag());
+    }
+
+     /**
+     * Tests ability to marshal non-serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testNonSerializable5() throws IgniteCheckedException {
+        Marshaller marsh = marshaller();
+
+        byte[] bytes = marsh.marshal(true);
+
+        Boolean val = marsh.unmarshal(bytes, null);
+
+        assertTrue(val);
+    }
+
+    /**
+     * Tests ability to marshal serializable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testSerializable() throws IgniteCheckedException {
+        Marshaller marsh = marshaller();
+
+        SomeSerializable outObj = marsh.unmarshal(marsh.marshal(new SomeSerializable(null)), null);
+
+        outObj.checkAfterUnmarshalled();
+    }
+
+    /**
+     * @throws IgniteCheckedException If failed.
+     */
+    public void testSerializableAfterChangingValue() throws IgniteCheckedException {
+        Marshaller marsh = marshaller();
+
+        SomeSimpleSerializable newObj = new SomeSimpleSerializable();
+
+        assert(newObj.flag);
+
+        newObj.setFlagValue(false);
+
+        assert(! newObj.flag);
+
+        SomeSimpleSerializable outObj = marsh.unmarshal(marsh.marshal(newObj), null);
+
+        assert (! outObj.flag);
+    }
+
+    /**
+     * Tests ability to marshal externalizable objects.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testExternalizable() throws IgniteCheckedException {
+        Marshaller marsh = marshaller();
+
+        ExternalizableA outObj = marsh.unmarshal(marsh.marshal(new ExternalizableA(null, true)), null);
+        ExternalizableA outObj1 = marsh.unmarshal(marsh.marshal(new ExternalizableA(null, false)), null);
+
+        assertNotNull(outObj);
+        assertNotNull(outObj1);
+    }
+
+    /**
+     * Tests {@link OptimizedMarshaller#setRequireSerializable(boolean)}.
+     */
+    public void testRequireSerializable() {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(true);
+
+        try {
+            marsh.marshal(new NonSerializable(null));
+
+            fail();
+        }
+        catch (IgniteCheckedException ignore) {
+            // No-op.
+        }
+    }
+
+    /**
+     * Tests {@link Proxy}.
+     *
+     * @throws IgniteCheckedException If marshalling failed.
+     */
+    public void testProxy() throws IgniteCheckedException {
+        OptimizedMarshaller marsh = marshaller();
+
+        marsh.setRequireSerializable(false);
+
+        SomeItf inItf = (SomeItf)Proxy.newProxyInstance(
+            OptimizedMarshallerTest.class.getClassLoader(), new Class[] {SomeItf.class},
+            new InvocationHandler() {
+                private NonSerializable obj = new NonSerializable(null);
+
+                @Override public Object invoke(Object proxy, Method mtd, Object[] args) throws Throwable {
+                    obj.checkAfterUnmarshalled();
+
+                    return 17;
+                }
+            }
+        );
+
+        SomeItf outItf = marsh.unmarshal(marsh.marshal(inItf), null);
+
+        assertEquals(outItf.checkAfterUnmarshalled(), 17);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testDescriptorCache() throws Exception {
+        try {
+            Ignite ignite = startGridsMultiThreaded(2);
+
+            String taskClsName = "org.apache.ignite.tests.p2p.SingleSplitTestTask";
+            String jobClsName = "org.apache.ignite.tests.p2p.SingleSplitTestTask$SingleSplitTestJob";
+
+            ClassLoader ldr = getExternalClassLoader();
+
+            Class<? extends ComputeTask<?, ?>> taskCls = (Class<? extends ComputeTask<?, ?>>)ldr.loadClass(taskClsName);
+            Class<? extends ComputeTask<?, ?>> jobCls = (Class<? extends ComputeTask<?, ?>>)ldr.loadClass(jobClsName);
+
+            ignite.compute().localDeployTask(taskCls, ldr);
+
+            ignite.compute().execute(taskClsName, 2);
+
+            ConcurrentMap<Class<?>, OptimizedClassDescriptor> cache =
+                U.field(ignite.configuration().getMarshaller(), "clsMap");
+
+            assertTrue(cache.containsKey(jobCls));
+
+            ignite.compute().undeployTask(taskClsName);
+
+            // Wait for undeploy.
+            Thread.sleep(1000);
+
+            assertFalse(cache.containsKey(jobCls));
+        }
+        finally {
+            stopAllGrids();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPerformance() throws Exception {
+        System.gc();
+
+        checkPerformance(10000, 4);
+    }
+
+    /**
+     * @param cnt Number of marshalling attempts.
+     * @param tries Number of retries.
+     * @throws Exception If failed.
+     */
+    private void checkPerformance(int cnt, int tries) throws Exception {
+        Marshaller marsh = marshaller();
+
+        for (int j = 0; j < tries; j++) {
+            System.gc();
+
+            long start = System.currentTimeMillis();
+
+            for (int i = 0; i < cnt; i++) {
+                TestCacheKey key = new TestCacheKey("key", "id");
+
+                TestCacheKey outKey = marsh.unmarshal(marsh.marshal(key), null);
+
+                assert key.equals(outKey);
+                assert key.hashCode() == outKey.hashCode();
+            }
+
+            info("Time non-serializable: " + (System.currentTimeMillis() - start));
+
+            System.gc();
+
+            start = System.currentTimeMillis();
+
+            for (int i = 0; i < cnt; i++) {
+                TestCacheKeySerializable key1 = new TestCacheKeySerializable("key", "id");
+
+                TestCacheKeySerializable outKey = marsh.unmarshal(marsh.marshal(key1), null);
+
+                assert key1.equals(outKey);
+                assert key1.hashCode() == outKey.hashCode();
+            }
+
+            info("Time serializable: " + (System.currentTimeMillis() - start));
+
+            System.gc();
+
+            start = System.currentTimeMillis();
+
+            for (int i = 0; i < cnt; i++) {
+                TestCacheKeyExternalizable key2 = new TestCacheKeyExternalizable("key", "id");
+
+                TestCacheKeyExternalizable outKey = marsh.unmarshal(marsh.marshal(key2), null);
+
+                assert key2.equals(outKey);
+                assert key2.hashCode() == outKey.hashCode();
+            }
+
+            info("Time externalizable: " + (System.currentTimeMillis() - start));
+
+            info(">>>");
+        }
+
+        info(">>> Finished performance check <<<");
+    }
+
+    /**
+     * Some non-serializable class.
+     */
+    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","FieldMayBeStatic"})
+    private static class NonSerializableA {
+        /** */
+        private final long longVal = 0x33445566778899AAL;
+
+        /** */
+        protected Short shortVal = (short)0xAABB;
+
+        /** */
+        public String[] strArr = {"AA","BB"};
+
+        /** */
+        public boolean flag1 = true;
+
+        /** */
+        public boolean flag2;
+
+        /** */
+        public Boolean flag3;
+
+        /** */
+        public Boolean flag4 = true;
+
+        /** */
+        public Boolean flag5 = false;
+
+        /** */
+        private transient int intVal = 0xAABBCCDD;
+
+        /**
+         * @param strArr Array.
+         * @param shortVal Short value.
+         */
+        @SuppressWarnings( {"UnusedDeclaration"})
+        private NonSerializableA(@Nullable String[] strArr, @Nullable Short shortVal) {
+            // No-op.
+        }
+
+        /**
+         * Checks correctness of the state after unmarshalling.
+         */
+        void checkAfterUnmarshalled() {
+            assertEquals(longVal, 0x33445566778899AAL);
+
+            assertEquals(shortVal.shortValue(), (short)0xAABB);
+
+            assertTrue(Arrays.equals(strArr, new String[] {"AA","BB"}));
+
+            assertEquals(intVal, 0);
+
+            assertTrue(flag1);
+            assertFalse(flag2);
+            assertNull(flag3);
+            assertTrue(flag4);
+            assertFalse(flag5);
+        }
+    }
+
+    /**
+     * Some non-serializable class.
+     */
+    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","PackageVisibleInnerClass"})
+    static class NonSerializableB extends NonSerializableA {
+        /** */
+        public Short shortVal = 0x1122;
+
+        /** */
+        public long longVal = 0x8877665544332211L;
+
+        /** */
+        private transient NonSerializableA[] aArr = {
+            new NonSerializableA(null, null),
+            new NonSerializableA(null, null),
+            new NonSerializableA(null, null)
+        };
+
+        /** */
+        protected Double doubleVal = 123.456;
+
+        /**
+         * Just to eliminate the default constructor.
+         */
+        private NonSerializableB() {
+            super(null, null);
+        }
+
+        /**
+         * Checks correctness of the state after unmarshalling.
+         */
+        @Override void checkAfterUnmarshalled() {
+            super.checkAfterUnmarshalled();
+
+            assertEquals(shortVal.shortValue(), 0x1122);
+
+            assertEquals(longVal, 0x8877665544332211L);
+
+            assertNull(aArr);
+
+            assertEquals(doubleVal, 123.456);
+        }
+    }
+
+    /**
+     * Some non-serializable class.
+     */
+    @SuppressWarnings( {"TransientFieldInNonSerializableClass","PublicField"})
+    private static class NonSerializable extends NonSerializableB {
+        /** */
+        private int idVal = -17;
+
+        /** */
+        private final NonSerializableA aVal = new NonSerializableB();
+
+        /** */
+        private transient NonSerializableB bVal = new NonSerializableB();
+
+        /** */
+        private NonSerializableA[] bArr = new NonSerializableA[] {
+            new NonSerializableB(),
+            new NonSerializableA(null, null)
+        };
+
+        /** */
+        public float floatVal = 567.89F;
+
+        /**
+         * Just to eliminate the default constructor.
+         *
+         * @param aVal Unused.
+         */
+        @SuppressWarnings( {"UnusedDeclaration"})
+        private NonSerializable(NonSerializableA aVal) {
+        }
+
+        /**
+         * Checks correctness of the state after unmarshalling.
+         */
+        @Override void checkAfterUnmarshalled() {
+            super.checkAfterUnmarshalled();
+
+            assertEquals(idVal, -17);
+
+            aVal.checkAfterUnmarshalled();
+
+            assertNull(bVal);
+
+            for (NonSerializableA a : bArr) {
+                a.checkAfterUnmarshalled();
+            }
+
+            assertEquals(floatVal, 567.89F);
+        }
+    }
+
+    /**
+     * Some serializable class.
+     */
+    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","PackageVisibleInnerClass"})
+    static class ForSerializableB {
+        /** */
+        public Short shortVal = 0x1122;
+
+        /** */
+        public long longVal = 0x8877665544332211L;
+
+        /** */
+        private transient NonSerializableA[] aArr;
+
+        /** */
+        private transient String strVal = "abc";
+
+        /** */
+        protected Double doubleVal = 123.456;
+
+        /**
+         */
+        protected void init() {
+            shortVal = 0x1122;
+
+            longVal = 0x8877665544332211L;
+
+            aArr = new NonSerializableA[] {
+                new NonSerializableA(null, null),
+                new NonSerializableA(null, null),
+                new NonSerializableA(null, null)
+            };
+        }
+
+        /**
+         * Checks correctness of the state after unmarshalling.
+         */
+        void checkAfterUnmarshalled() {
+            assertEquals(shortVal.shortValue(), 0x1122);
+
+            assertEquals(longVal, 0x8877665544332211L);
+
+            assertNull(aArr);
+
+            assertNull(strVal);
+
+            assertEquals(doubleVal, 123.456);
+        }
+    }
+
+    /**
+     * Some serializable class.
+     */
+    private static class SomeSimpleSerializable extends ComputeJobAdapter {
+        /** */
+        private boolean flag = true;
+
+        /**
+         * @param newFlagVal - The new value of flag field.
+         */
+        public void setFlagValue(boolean newFlagVal) {
+            flag = newFlagVal;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Object execute() {
+            assert false;
+
+            return null;
+        }
+    }
+    /**
+     * Some serializable class.
+     */
+    private static class SomeSerializable extends ForSerializableB implements Serializable {
+        /**
+         * Just to eliminate the default constructor.
+         *
+         * @param id Unused.
+         */
+        @SuppressWarnings( {"UnusedDeclaration"})
+        private SomeSerializable(Long id) {
+            init();
+        }
+    }
+
+    /**
+     */
+    private static interface SomeItf {
+        /**
+         * @return Check result.
+         */
+        int checkAfterUnmarshalled();
+    }
+
+    /**
+     * Some externalizable class.
+     */
+    @SuppressWarnings( {"UnusedDeclaration", "PublicField"})
+    private static class ExternalizableA implements Externalizable {
+        /** */
+        private boolean boolVal;
+
+        /** */
+        public String[] strArr;
+
+        /** No-arg constructor is required by externalization.  */
+        public ExternalizableA() {
+            // No-op.
+        }
+
+        /**
+         *
+         * @param strArr String array.
+         * @param boolVal Boolean value.
+         */
+        private ExternalizableA(String[] strArr, boolean boolVal) {
+            this.strArr = strArr;
+            this.boolVal = boolVal;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeBoolean(false);
+            out.writeBoolean(false);
+            out.writeBoolean(false);
+            out.writeBoolean(false);
+            out.writeBoolean(false);
+            out.writeBoolean(false);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            boolVal = in.readBoolean();
+            in.readBoolean();
+            in.readBoolean();
+            in.readBoolean();
+            in.readBoolean();
+            in.readBoolean();
+        }
+    }
+
+    /**
+     *
+     */
+    private static class TestCacheKey implements Serializable {
+        /** */
+        private String key;
+
+        /** */
+        @SuppressWarnings({"UnusedDeclaration"})
+        private String terminalId;
+
+        /**
+         * @param key Key.
+         * @param terminalId Some ID.
+         */
+        TestCacheKey(String key, String terminalId) {
+            this.key = key;
+            this.terminalId = terminalId;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return key.hashCode();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object obj) {
+            return obj instanceof TestCacheKey && key.equals(((TestCacheKey)obj).key);
+        }
+    }
+
+    /**
+     *
+     */
+    private static class TestCacheKeySerializable implements Serializable {
+        /** */
+        private String key;
+
+        /** */
+        @SuppressWarnings({"UnusedDeclaration"})
+        private String terminalId;
+
+        /**
+         * @param key Key.
+         * @param terminalId Some ID.
+         */
+        TestCacheKeySerializable(String key, String terminalId) {
+            this.key = key;
+            this.terminalId = terminalId;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return key.hashCode();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object obj) {
+            return obj instanceof TestCacheKeySerializable && key.equals(((TestCacheKeySerializable)obj).key);
+        }
+    }
+
+    /**
+     *
+     */
+    private static class TestCacheKeyExternalizable implements Externalizable {
+        /** */
+        private String key;
+
+        /** */
+        private String terminalId;
+
+        /**
+         *
+         */
+        public TestCacheKeyExternalizable() {
+            // No-op.
+        }
+
+        /**
+         * @param key Key.
+         * @param terminalId Some ID.
+         */
+        TestCacheKeyExternalizable(String key, String terminalId) {
+            this.key = key;
+            this.terminalId = terminalId;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return key.hashCode();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object obj) {
+            return obj instanceof TestCacheKeyExternalizable && key.equals(((TestCacheKeyExternalizable)obj).key);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            U.writeString(out, key);
+            U.writeString(out, terminalId);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            key = U.readString(in);
+            terminalId = U.readString(in);
+        }
+    }
+}
\ No newline at end of file


[06/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
deleted file mode 100644
index 95a301b..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
+++ /dev/null
@@ -1,1231 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.NotActiveException;
-import java.io.ObjectInputStream;
-import java.io.ObjectInputValidation;
-import java.io.ObjectStreamClass;
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Properties;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.util.GridUnsafe;
-import org.apache.ignite.internal.util.io.GridDataInput;
-import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.MarshallerContext;
-
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BYTE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.BYTE_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CHAR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CHAR_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.CLS;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DATE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.ENUM;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.EXTERNALIZABLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.FLOAT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.FLOAT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HANDLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_MAP;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET_MAP_OFF;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.INT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.INT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.JDK;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.JDK_MARSH;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_MAP;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_SET;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LINKED_LIST;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LONG;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.LONG_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.NULL;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.OBJ_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.PROPS;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.PROXY;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SERIALIZABLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SHORT;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.SHORT_ARR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.STR;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.UUID;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setBoolean;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setByte;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setChar;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setDouble;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setFloat;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setInt;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setLong;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setObject;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.setShort;
-
-/**
- * Optimized object input stream.
- */
-class OptimizedObjectInputStream extends ObjectInputStream {
-    /** Dummy object for HashSet. */
-    private static final Object DUMMY = new Object();
-
-    /** */
-    private final HandleTable handles = new HandleTable(10);
-
-    /** */
-    private MarshallerContext ctx;
-
-    /** */
-    private OptimizedMarshallerIdMapper mapper;
-
-    /** */
-    private ClassLoader clsLdr;
-
-    /** */
-    private GridDataInput in;
-
-    /** */
-    private Object curObj;
-
-    /** */
-    private OptimizedClassDescriptor.ClassFields curFields;
-
-    /** */
-    private Class<?> curCls;
-
-    /** */
-    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
-
-    /**
-     * @param in Input.
-     * @throws IOException In case of error.
-     */
-    OptimizedObjectInputStream(GridDataInput in) throws IOException {
-        this.in = in;
-    }
-
-    /**
-     * @param clsMap Class descriptors by class map.
-     * @param ctx Context.
-     * @param mapper ID mapper.
-     * @param clsLdr Class loader.
-     */
-    void context(
-        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
-        MarshallerContext ctx,
-        OptimizedMarshallerIdMapper mapper,
-        ClassLoader clsLdr)
-    {
-        this.clsMap = clsMap;
-        this.ctx = ctx;
-        this.mapper = mapper;
-        this.clsLdr = clsLdr;
-    }
-
-    /**
-     * @return Input.
-     */
-    public GridDataInput in() {
-        return in;
-    }
-
-    /**
-     * @param in Input.
-     */
-    public void in(GridDataInput in) {
-        this.in = in;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void close() throws IOException {
-        reset();
-
-        ctx = null;
-        clsLdr = null;
-        clsMap = null;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("NonSynchronizedMethodOverridesSynchronizedMethod")
-    @Override public void reset() throws IOException {
-        in.reset();
-        handles.clear();
-
-        curObj = null;
-        curFields = null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object readObjectOverride() throws ClassNotFoundException, IOException {
-        curObj = null;
-        curFields = null;
-
-        byte ref = in.readByte();
-
-        switch (ref) {
-            case NULL:
-                return null;
-
-            case HANDLE:
-                return handles.lookup(readInt());
-
-            case JDK:
-                try {
-                    return JDK_MARSH.unmarshal(this, clsLdr);
-                }
-                catch (IgniteCheckedException e) {
-                    IOException ioEx = e.getCause(IOException.class);
-
-                    if (ioEx != null)
-                        throw ioEx;
-                    else
-                        throw new IOException("Failed to deserialize object with JDK marshaller.", e);
-                }
-
-            case BYTE:
-                return readByte();
-
-            case SHORT:
-                return readShort();
-
-            case INT:
-                return readInt();
-
-            case LONG:
-                return readLong();
-
-            case FLOAT:
-                return readFloat();
-
-            case DOUBLE:
-                return readDouble();
-
-            case CHAR:
-                return readChar();
-
-            case BOOLEAN:
-                return readBoolean();
-
-            case BYTE_ARR:
-                return readByteArray();
-
-            case SHORT_ARR:
-                return readShortArray();
-
-            case INT_ARR:
-                return readIntArray();
-
-            case LONG_ARR:
-                return readLongArray();
-
-            case FLOAT_ARR:
-                return readFloatArray();
-
-            case DOUBLE_ARR:
-                return readDoubleArray();
-
-            case CHAR_ARR:
-                return readCharArray();
-
-            case BOOLEAN_ARR:
-                return readBooleanArray();
-
-            case OBJ_ARR:
-                return readArray(readClass());
-
-            case STR:
-                return readString();
-
-            case UUID:
-                return readUuid();
-
-            case PROPS:
-                return readProperties();
-
-            case ARRAY_LIST:
-                return readArrayList();
-
-            case HASH_MAP:
-                return readHashMap(false);
-
-            case HASH_SET:
-                return readHashSet(HASH_SET_MAP_OFF);
-
-            case LINKED_LIST:
-                return readLinkedList();
-
-            case LINKED_HASH_MAP:
-                return readLinkedHashMap(false);
-
-            case LINKED_HASH_SET:
-                return readLinkedHashSet(HASH_SET_MAP_OFF);
-
-            case DATE:
-                return readDate();
-
-            case CLS:
-                return readClass();
-
-            case PROXY:
-                Class<?>[] intfs = new Class<?>[readInt()];
-
-                for (int i = 0; i < intfs.length; i++)
-                    intfs[i] = readClass();
-
-                InvocationHandler ih = (InvocationHandler)readObject();
-
-                return Proxy.newProxyInstance(clsLdr != null ? clsLdr : U.gridClassLoader(), intfs, ih);
-
-            case ENUM:
-            case EXTERNALIZABLE:
-            case SERIALIZABLE:
-                int typeId = readInt();
-
-                OptimizedClassDescriptor desc = typeId == 0 ?
-                    classDescriptor(clsMap, U.forName(readUTF(), clsLdr), ctx, mapper):
-                    classDescriptor(clsMap, typeId, clsLdr, ctx, mapper);
-
-                curCls = desc.describedClass();
-
-                return desc.read(this);
-
-            default:
-                SB msg = new SB("Unexpected error occurred during unmarshalling");
-
-                if (curCls != null)
-                    msg.a(" of an instance of the class: ").a(curCls.getName());
-
-                msg.a(". Check that all nodes are running the same version of Ignite and that all nodes have " +
-                    "GridOptimizedMarshaller configured with identical optimized classes lists, if any " +
-                    "(see setClassNames and setClassNamesPath methods). If your serialized classes implement " +
-                    "java.io.Externalizable interface, verify that serialization logic is correct.");
-
-                throw new IOException(msg.toString());
-        }
-    }
-
-    /**
-     * @return Class.
-     * @throws ClassNotFoundException If class was not found.
-     * @throws IOException In case of other error.
-     */
-    private Class<?> readClass() throws ClassNotFoundException, IOException {
-        int compTypeId = readInt();
-
-        return compTypeId == 0 ? U.forName(readUTF(), clsLdr) :
-            classDescriptor(clsMap, compTypeId, clsLdr, ctx, mapper).describedClass();
-    }
-
-    /**
-     * Reads array from this stream.
-     *
-     * @param compType Array component type.
-     * @return Array.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("unchecked")
-    <T> T[] readArray(Class<T> compType) throws ClassNotFoundException, IOException {
-        int len = in.readInt();
-
-        T[] arr = (T[])Array.newInstance(compType, len);
-
-        handles.assign(arr);
-
-        for (int i = 0; i < len; i++)
-            arr[i] = (T)readObject();
-
-        return arr;
-    }
-
-    /**
-     * Reads {@link UUID} from this stream.
-     *
-     * @return UUID.
-     * @throws IOException In case of error.
-     */
-    UUID readUuid() throws IOException {
-        UUID uuid = new UUID(readLong(), readLong());
-
-        handles.assign(uuid);
-
-        return uuid;
-    }
-
-    /**
-     * Reads {@link Properties} from this stream.
-     *
-     * @return Properties.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    Properties readProperties() throws ClassNotFoundException, IOException {
-        Properties dflts = readBoolean() ? null : (Properties)readObject();
-
-        Properties props = new Properties(dflts);
-
-        int size = in.readInt();
-
-        for (int i = 0; i < size; i++)
-            props.setProperty(readUTF(), readUTF());
-
-        handles.assign(props);
-
-        return props;
-    }
-
-    /**
-     * Reads and sets all non-static and non-transient field values from this stream.
-     *
-     * @param obj Object.
-     * @param fieldOffs Field offsets.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    void readFields(Object obj, OptimizedClassDescriptor.ClassFields fieldOffs) throws ClassNotFoundException,
-        IOException {
-        for (int i = 0; i < fieldOffs.size(); i++) {
-            OptimizedClassDescriptor.FieldInfo t = fieldOffs.get(i);
-
-            switch ((t.type())) {
-                case BYTE:
-                    byte resByte = readByte();
-
-                    if (t.field() != null)
-                        setByte(obj, t.offset(), resByte);
-
-                    break;
-
-                case SHORT:
-                    short resShort = readShort();
-
-                    if (t.field() != null)
-                        setShort(obj, t.offset(), resShort);
-
-                    break;
-
-                case INT:
-                    int resInt = readInt();
-
-                    if (t.field() != null)
-                        setInt(obj, t.offset(), resInt);
-
-                    break;
-
-                case LONG:
-                    long resLong = readLong();
-
-                    if (t.field() != null)
-                        setLong(obj, t.offset(), resLong);
-
-                    break;
-
-                case FLOAT:
-                    float resFloat = readFloat();
-
-                    if (t.field() != null)
-                        setFloat(obj, t.offset(), resFloat);
-
-                    break;
-
-                case DOUBLE:
-                    double resDouble = readDouble();
-
-                    if (t.field() != null)
-                        setDouble(obj, t.offset(), resDouble);
-
-                    break;
-
-                case CHAR:
-                    char resChar = readChar();
-
-                    if (t.field() != null)
-                        setChar(obj, t.offset(), resChar);
-
-                    break;
-
-                case BOOLEAN:
-                    boolean resBoolean = readBoolean();
-
-                    if (t.field() != null)
-                        setBoolean(obj, t.offset(), resBoolean);
-
-                    break;
-
-                case OTHER:
-                    Object resObject = readObject();
-
-                    if (t.field() != null)
-                        setObject(obj, t.offset(), resObject);
-            }
-        }
-    }
-
-    /**
-     * Reads {@link Externalizable} object.
-     *
-     * @param constructor Constructor.
-     * @param readResolveMtd {@code readResolve} method.
-     * @return Object.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    Object readExternalizable(Constructor<?> constructor, Method readResolveMtd)
-        throws ClassNotFoundException, IOException {
-        Object obj;
-
-        try {
-            obj = constructor.newInstance();
-        }
-        catch (InstantiationException | InvocationTargetException | IllegalAccessException e) {
-            throw new IOException(e);
-        }
-
-        int handle = handles.assign(obj);
-
-        Externalizable extObj = ((Externalizable)obj);
-
-        extObj.readExternal(this);
-
-        if (readResolveMtd != null) {
-            try {
-                obj = readResolveMtd.invoke(obj);
-
-                handles.set(handle, obj);
-            }
-            catch (IllegalAccessException | InvocationTargetException e) {
-                throw new IOException(e);
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     * Reads serializable object.
-     *
-     * @param cls Class.
-     * @param mtds {@code readObject} methods.
-     * @param readResolveMtd {@code readResolve} method.
-     * @param fields class fields details.
-     * @return Object.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    Object readSerializable(Class<?> cls, List<Method> mtds, Method readResolveMtd,
-        OptimizedClassDescriptor.Fields fields) throws ClassNotFoundException, IOException {
-        Object obj;
-
-        try {
-            obj = GridUnsafe.allocateInstance(cls);
-        }
-        catch (InstantiationException e) {
-            throw new IOException(e);
-        }
-
-        int handle = handles.assign(obj);
-
-        for (int i = 0; i < mtds.size(); i++) {
-            Method mtd = mtds.get(i);
-
-            if (mtd != null) {
-                curObj = obj;
-                curFields = fields.fields(i);
-
-                try {
-                    mtd.invoke(obj, this);
-                }
-                catch (IllegalAccessException | InvocationTargetException e) {
-                    throw new IOException(e);
-                }
-            }
-            else
-                readFields(obj, fields.fields(i));
-        }
-
-        if (readResolveMtd != null) {
-            try {
-                obj = readResolveMtd.invoke(obj);
-
-                handles.set(handle, obj);
-            }
-            catch (IllegalAccessException | InvocationTargetException e) {
-                throw new IOException(e);
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     * Reads {@link ArrayList}.
-     *
-     * @return List.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    ArrayList<?> readArrayList() throws ClassNotFoundException, IOException {
-        int size = readInt();
-
-        ArrayList<Object> list = new ArrayList<>(size);
-
-        handles.assign(list);
-
-        for (int i = 0; i < size; i++)
-            list.add(readObject());
-
-        return list;
-    }
-
-    /**
-     * Reads {@link HashMap}.
-     *
-     * @param set Whether reading underlying map from {@link HashSet}.
-     * @return Map.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    HashMap<?, ?> readHashMap(boolean set) throws ClassNotFoundException, IOException {
-        int size = readInt();
-        float loadFactor = readFloat();
-
-        HashMap<Object, Object> map = new HashMap<>(size, loadFactor);
-
-        if (!set)
-            handles.assign(map);
-
-        for (int i = 0; i < size; i++) {
-            Object key = readObject();
-            Object val = !set ? readObject() : DUMMY;
-
-            map.put(key, val);
-        }
-
-        return map;
-    }
-
-    /**
-     * Reads {@link HashSet}.
-     *
-     * @param mapFieldOff Map field offset.
-     * @return Set.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("unchecked")
-    HashSet<?> readHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
-        try {
-            HashSet<Object> set = (HashSet<Object>)GridUnsafe.allocateInstance(HashSet.class);
-
-            handles.assign(set);
-
-            setObject(set, mapFieldOff, readHashMap(true));
-
-            return set;
-        }
-        catch (InstantiationException e) {
-            throw new IOException(e);
-        }
-    }
-
-    /**
-     * Reads {@link LinkedList}.
-     *
-     * @return List.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    LinkedList<?> readLinkedList() throws ClassNotFoundException, IOException {
-        int size = readInt();
-
-        LinkedList<Object> list = new LinkedList<>();
-
-        handles.assign(list);
-
-        for (int i = 0; i < size; i++)
-            list.add(readObject());
-
-        return list;
-    }
-
-    /**
-     * Reads {@link LinkedHashMap}.
-     *
-     * @param set Whether reading underlying map from {@link LinkedHashSet}.
-     * @return Map.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    LinkedHashMap<?, ?> readLinkedHashMap(boolean set) throws ClassNotFoundException, IOException {
-        int size = readInt();
-        float loadFactor = readFloat();
-        boolean accessOrder = readBoolean();
-
-        LinkedHashMap<Object, Object> map = new LinkedHashMap<>(size, loadFactor, accessOrder);
-
-        if (!set)
-            handles.assign(map);
-
-        for (int i = 0; i < size; i++) {
-            Object key = readObject();
-            Object val = !set ? readObject() : DUMMY;
-
-            map.put(key, val);
-        }
-
-        return map;
-    }
-
-    /**
-     * Reads {@link LinkedHashSet}.
-     *
-     * @param mapFieldOff Map field offset.
-     * @return Set.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("unchecked")
-    LinkedHashSet<?> readLinkedHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
-        try {
-            LinkedHashSet<Object> set = (LinkedHashSet<Object>)GridUnsafe.allocateInstance(LinkedHashSet.class);
-
-            handles.assign(set);
-
-            setObject(set, mapFieldOff, readLinkedHashMap(true));
-
-            return set;
-        }
-        catch (InstantiationException e) {
-            throw new IOException(e);
-        }
-    }
-
-    /**
-     * Reads {@link Date}.
-     *
-     * @return Date.
-     * @throws ClassNotFoundException If class not found.
-     * @throws IOException In case of error.
-     */
-    Date readDate() throws ClassNotFoundException, IOException {
-        Date date = new Date(readLong());
-
-        handles.assign(date);
-
-        return date;
-    }
-
-    /**
-     * Reads array of {@code byte}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    byte[] readByteArray() throws IOException {
-        byte[] arr = in.readByteArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code short}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    short[] readShortArray() throws IOException {
-        short[] arr = in.readShortArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code int}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    int[] readIntArray() throws IOException {
-        int[] arr = in.readIntArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code long}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    long[] readLongArray() throws IOException {
-        long[] arr = in.readLongArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code float}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    float[] readFloatArray() throws IOException {
-        float[] arr = in.readFloatArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code double}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    double[] readDoubleArray() throws IOException {
-        double[] arr = in.readDoubleArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code char}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    char[] readCharArray() throws IOException {
-        char[] arr = in.readCharArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads array of {@code boolean}s.
-     *
-     * @return Array.
-     * @throws IOException In case of error.
-     */
-    boolean[] readBooleanArray() throws IOException {
-        boolean[] arr = in.readBooleanArray();
-
-        handles.assign(arr);
-
-        return arr;
-    }
-
-    /**
-     * Reads {@link String}.
-     *
-     * @return String.
-     * @throws IOException In case of error.
-     */
-    public String readString() throws IOException {
-        String str = in.readUTF();
-
-        handles.assign(str);
-
-        return str;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readFully(byte[] b) throws IOException {
-        in.readFully(b);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readFully(byte[] b, int off, int len) throws IOException {
-        in.readFully(b, off, len);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int skipBytes(int n) throws IOException {
-        return in.skipBytes(n);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean readBoolean() throws IOException {
-        return in.readBoolean();
-    }
-
-    /** {@inheritDoc} */
-    @Override public byte readByte() throws IOException {
-        return in.readByte();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readUnsignedByte() throws IOException {
-        return in.readUnsignedByte();
-    }
-
-    /** {@inheritDoc} */
-    @Override public short readShort() throws IOException {
-        return in.readShort();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readUnsignedShort() throws IOException {
-        return in.readUnsignedShort();
-    }
-
-    /** {@inheritDoc} */
-    @Override public char readChar() throws IOException {
-        return in.readChar();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int readInt() throws IOException {
-        return in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override public long readLong() throws IOException {
-        return in.readLong();
-    }
-
-    /** {@inheritDoc} */
-    @Override public float readFloat() throws IOException {
-        return in.readFloat();
-    }
-
-    /** {@inheritDoc} */
-    @Override public double readDouble() throws IOException {
-        return in.readDouble();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read() throws IOException {
-        return in.read();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read(byte[] b) throws IOException {
-        return in.read(b);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int read(byte[] b, int off, int len) throws IOException {
-        return in.read(b, off, len);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("deprecation")
-    @Override public String readLine() throws IOException {
-        return in.readLine();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String readUTF() throws IOException {
-        return in.readUTF();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object readUnshared() throws IOException, ClassNotFoundException {
-        return readObject();
-    }
-
-    /** {@inheritDoc} */
-    @Override public void defaultReadObject() throws IOException, ClassNotFoundException {
-        if (curObj == null)
-            throw new NotActiveException("Not in readObject() call.");
-
-        readFields(curObj, curFields);
-    }
-
-    /** {@inheritDoc} */
-    @Override public ObjectInputStream.GetField readFields() throws IOException, ClassNotFoundException {
-        if (curObj == null)
-            throw new NotActiveException("Not in readObject() call.");
-
-        return new GetFieldImpl(this);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void registerValidation(ObjectInputValidation obj, int pri) {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public int available() throws IOException {
-        return -1;
-    }
-
-    /**
-     * Returns objects that were added to handles table.
-     * Used ONLY for test purposes.
-     *
-     * @return Handled objects.
-     */
-    Object[] handledObjects() {
-        return handles.entries;
-    }
-
-    /**
-     * Lightweight identity hash table which maps objects to integer handles,
-     * assigned in ascending order.
-     */
-    private static class HandleTable {
-        /** Array mapping handle -> object/exception (depending on status). */
-        private Object[] entries;
-
-        /** Number of handles in table. */
-        private int size;
-
-        /**
-         * Creates handle table with the given initial capacity.
-         *
-         * @param initCap Initial capacity.
-         */
-        HandleTable(int initCap) {
-            entries = new Object[initCap];
-        }
-
-        /**
-         * Assigns next available handle to given object, and returns assigned
-         * handle.
-         *
-         * @param obj Object.
-         * @return Handle.
-         */
-        int assign(Object obj) {
-            if (size >= entries.length)
-                grow();
-
-            entries[size] = obj;
-
-            return size++;
-        }
-
-        /**
-         * Assigns new object to existing handle. Old object is forgotten.
-         *
-         * @param handle Handle.
-         * @param obj Object.
-         */
-        void set(int handle, Object obj) {
-            entries[handle] = obj;
-        }
-
-        /**
-         * Looks up and returns object associated with the given handle.
-         *
-         * @param handle Handle.
-         * @return Object.
-         */
-        Object lookup(int handle) {
-            return entries[handle];
-        }
-
-        /**
-         * Resets table to its initial state.
-         */
-        void clear() {
-            Arrays.fill(entries, 0, size, null);
-
-            size = 0;
-        }
-
-        /**
-         * Expands capacity of internal arrays.
-         */
-        private void grow() {
-            int newCap = (entries.length << 1) + 1;
-
-            Object[] newEntries = new Object[newCap];
-
-            System.arraycopy(entries, 0, newEntries, 0, size);
-
-            entries = newEntries;
-        }
-    }
-
-    /**
-     * {@link GetField} implementation.
-     */
-    private static class GetFieldImpl extends GetField {
-        /** Field info. */
-        private final OptimizedClassDescriptor.ClassFields fieldInfo;
-
-        /** Values. */
-        private final Object[] objs;
-
-        /**
-         * @param in Stream.
-         * @throws IOException In case of error.
-         * @throws ClassNotFoundException If class not found.
-         */
-        @SuppressWarnings("ForLoopReplaceableByForEach")
-        private GetFieldImpl(OptimizedObjectInputStream in) throws IOException, ClassNotFoundException {
-            fieldInfo = in.curFields;
-
-            objs = new Object[fieldInfo.size()];
-
-            for (int i = 0; i < fieldInfo.size(); i++) {
-                OptimizedClassDescriptor.FieldInfo t = fieldInfo.get(i);
-
-                Object obj = null;
-
-                switch (t.type()) {
-                    case BYTE:
-                        obj = in.readByte();
-
-                        break;
-
-                    case SHORT:
-                        obj = in.readShort();
-
-                        break;
-
-                    case INT:
-                        obj = in.readInt();
-
-                        break;
-
-                    case LONG:
-                        obj = in.readLong();
-
-                        break;
-
-                    case FLOAT:
-                        obj = in.readFloat();
-
-                        break;
-
-                    case DOUBLE:
-                        obj = in.readDouble();
-
-                        break;
-
-                    case CHAR:
-                        obj = in.readChar();
-
-                        break;
-
-                    case BOOLEAN:
-                        obj = in.readBoolean();
-
-                        break;
-
-                    case OTHER:
-                        obj = in.readObject();
-                }
-
-                objs[i] = obj;
-            }
-        }
-
-        /** {@inheritDoc} */
-        @Override public ObjectStreamClass getObjectStreamClass() {
-            throw new UnsupportedOperationException();
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean defaulted(String name) throws IOException {
-            return objs[fieldInfo.getIndex(name)] == null;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean get(String name, boolean dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public byte get(String name, byte dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public char get(String name, char dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public short get(String name, short dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int get(String name, int dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public long get(String name, long dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public float get(String name, float dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public double get(String name, double dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object get(String name, Object dflt) throws IOException {
-            return value(name, dflt);
-        }
-
-        /**
-         * @param name Field name.
-         * @param dflt Default value.
-         * @return Value.
-         */
-        @SuppressWarnings("unchecked")
-        private <T> T value(String name, T dflt) {
-            return objs[fieldInfo.getIndex(name)] != null ? (T)objs[fieldInfo.getIndex(name)] : dflt;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
deleted file mode 100644
index 98d85a0..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
+++ /dev/null
@@ -1,875 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.NotActiveException;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.util.GridHandleTable;
-import org.apache.ignite.internal.util.io.GridDataOutput;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.marshaller.MarshallerContext;
-
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.HANDLE;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.JDK;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.JDK_MARSH;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.NULL;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getBoolean;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getByte;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getChar;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getDouble;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getFloat;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getInt;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getLong;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getObject;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.getShort;
-
-/**
- * Optimized object output stream.
- */
-class OptimizedObjectOutputStream extends ObjectOutputStream {
-    /** */
-    private final GridHandleTable handles = new GridHandleTable(10, 3.00f);
-
-    /** */
-    private final GridDataOutput out;
-
-    /** */
-    private MarshallerContext ctx;
-
-    /** */
-    private OptimizedMarshallerIdMapper mapper;
-
-    /** */
-    private boolean requireSer;
-
-    /** */
-    private Object curObj;
-
-    /** */
-    private OptimizedClassDescriptor.ClassFields curFields;
-
-    /** */
-    private PutFieldImpl curPut;
-
-    /** */
-    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
-
-    /**
-     * @param out Output.
-     * @throws IOException In case of error.
-     */
-    OptimizedObjectOutputStream(GridDataOutput out) throws IOException {
-        this.out = out;
-    }
-
-    /**
-     * @param clsMap Class descriptors by class map.
-     * @param ctx Context.
-     * @param mapper ID mapper.
-     * @param requireSer Require {@link Serializable} flag.
-     */
-    void context(ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
-        MarshallerContext ctx,
-        OptimizedMarshallerIdMapper mapper,
-        boolean requireSer) {
-        this.clsMap = clsMap;
-        this.ctx = ctx;
-        this.mapper = mapper;
-        this.requireSer = requireSer;
-    }
-
-    /**
-     * @return Require {@link Serializable} flag.
-     */
-    boolean requireSerializable() {
-        return requireSer;
-    }
-
-    /**
-     * @return Output.
-     */
-    public GridDataOutput out() {
-        return out;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void close() throws IOException {
-        reset();
-
-        ctx = null;
-        clsMap = null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void write(byte[] b) throws IOException {
-        out.write(b);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void write(byte[] b, int off, int len) throws IOException {
-        out.write(b, off, len);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeObjectOverride(Object obj) throws IOException {
-        writeObject0(obj);
-    }
-
-    /**
-     * Writes object to stream.
-     *
-     * @param obj Object.
-     * @throws IOException In case of error.
-     */
-    private void writeObject0(Object obj) throws IOException {
-        curObj = null;
-        curFields = null;
-        curPut = null;
-
-        if (obj == null)
-            writeByte(NULL);
-        else {
-            if (obj instanceof Throwable && !(obj instanceof Externalizable)) {
-                writeByte(JDK);
-
-                try {
-                    JDK_MARSH.marshal(obj, this);
-                }
-                catch (IgniteCheckedException e) {
-                    IOException ioEx = e.getCause(IOException.class);
-
-                    if (ioEx != null)
-                        throw ioEx;
-                    else
-                        throw new IOException("Failed to serialize object with JDK marshaller: " + obj, e);
-                }
-            }
-            else {
-                OptimizedClassDescriptor desc = classDescriptor(
-                    clsMap,
-                    obj instanceof Object[] ? Object[].class : obj.getClass(),
-                    ctx,
-                    mapper);
-
-                if (desc.excluded()) {
-                    writeByte(NULL);
-
-                    return;
-                }
-
-                Object obj0 = desc.replace(obj);
-
-                if (obj0 == null) {
-                    writeByte(NULL);
-
-                    return;
-                }
-
-                int handle = -1;
-
-                if (!desc.isPrimitive() && !desc.isEnum() && !desc.isClass() && !desc.isProxy())
-                    handle = handles.lookup(obj);
-
-                if (obj0 != obj) {
-                    obj = obj0;
-
-                    desc = classDescriptor(clsMap,
-                        obj instanceof Object[] ? Object[].class : obj.getClass(),
-                        ctx,
-                        mapper);
-                }
-
-                if (handle >= 0) {
-                    writeByte(HANDLE);
-                    writeInt(handle);
-                }
-                else
-                    desc.write(this, obj);
-            }
-        }
-    }
-
-    /**
-     * Writes array to this stream.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    void writeArray(Object[] arr) throws IOException {
-        int len = arr.length;
-
-        writeInt(len);
-
-        for (int i = 0; i < len; i++) {
-            Object obj = arr[i];
-
-            writeObject0(obj);
-        }
-    }
-
-    /**
-     * Writes {@link UUID} to this stream.
-     *
-     * @param uuid UUID.
-     * @throws IOException In case of error.
-     */
-    void writeUuid(UUID uuid) throws IOException {
-        writeLong(uuid.getMostSignificantBits());
-        writeLong(uuid.getLeastSignificantBits());
-    }
-
-    /**
-     * Writes {@link Properties} to this stream.
-     *
-     * @param props Properties.
-     * @param dfltsFieldOff Defaults field offset.
-     * @throws IOException In case of error.
-     */
-    void writeProperties(Properties props, long dfltsFieldOff) throws IOException {
-        Properties dflts = (Properties)getObject(props, dfltsFieldOff);
-
-        if (dflts == null)
-            writeBoolean(true);
-        else {
-            writeBoolean(false);
-
-            writeObject0(dflts);
-        }
-
-        Set<String> names = props.stringPropertyNames();
-
-        writeInt(names.size());
-
-        for (String name : names) {
-            writeUTF(name);
-            writeUTF(props.getProperty(name));
-        }
-    }
-
-    /**
-     * Writes externalizable object.
-     *
-     * @param obj Object.
-     * @throws IOException In case of error.
-     */
-    void writeExternalizable(Object obj) throws IOException {
-        Externalizable extObj = (Externalizable)obj;
-
-        extObj.writeExternal(this);
-    }
-
-    /**
-     * Writes serializable object.
-     *
-     * @param obj Object.
-     * @param mtds {@code writeObject} methods.
-     * @param fields class fields details.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    void writeSerializable(Object obj, List<Method> mtds, OptimizedClassDescriptor.Fields fields)
-        throws IOException {
-        for (int i = 0; i < mtds.size(); i++) {
-            Method mtd = mtds.get(i);
-
-            if (mtd != null) {
-                curObj = obj;
-                curFields = fields.fields(i);
-
-                try {
-                    mtd.invoke(obj, this);
-                }
-                catch (IllegalAccessException e) {
-                    throw new IOException(e);
-                }
-                catch (InvocationTargetException e) {
-                    throw new IOException(e.getCause());
-                }
-            }
-            else
-                writeFields(obj, fields.fields(i));
-        }
-    }
-
-    /**
-     * Writes {@link ArrayList}.
-     *
-     * @param list List.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings({"ForLoopReplaceableByForEach", "TypeMayBeWeakened"})
-    void writeArrayList(ArrayList<?> list) throws IOException {
-        int size = list.size();
-
-        writeInt(size);
-
-        for (int i = 0; i < size; i++)
-            writeObject0(list.get(i));
-    }
-
-    /**
-     * Writes {@link HashMap}.
-     *
-     * @param map Map.
-     * @param loadFactorFieldOff Load factor field offset.
-     * @param set Whether writing underlying map from {@link HashSet}.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("TypeMayBeWeakened")
-    void writeHashMap(HashMap<?, ?> map, long loadFactorFieldOff, boolean set) throws IOException {
-        int size = map.size();
-
-        writeInt(size);
-        writeFloat(getFloat(map, loadFactorFieldOff));
-
-        for (Map.Entry<?, ?> e : map.entrySet()) {
-            writeObject0(e.getKey());
-
-            if (!set)
-                writeObject0(e.getValue());
-        }
-    }
-
-    /**
-     * Writes {@link HashSet}.
-     *
-     * @param set Set.
-     * @param mapFieldOff Map field offset.
-     * @param loadFactorFieldOff Load factor field offset.
-     * @throws IOException In case of error.
-     */
-    void writeHashSet(HashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException {
-        writeHashMap((HashMap<?, ?>)getObject(set, mapFieldOff), loadFactorFieldOff, true);
-    }
-
-    /**
-     * Writes {@link LinkedList}.
-     *
-     * @param list List.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("TypeMayBeWeakened")
-    void writeLinkedList(LinkedList<?> list) throws IOException {
-        int size = list.size();
-
-        writeInt(size);
-
-        for (Object obj : list)
-            writeObject0(obj);
-    }
-
-    /**
-     * Writes {@link LinkedHashMap}.
-     *
-     * @param map Map.
-     * @param loadFactorFieldOff Load factor field offset.
-     * @param accessOrderFieldOff access order field offset.
-     * @param set Whether writing underlying map from {@link LinkedHashSet}.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("TypeMayBeWeakened")
-    void writeLinkedHashMap(LinkedHashMap<?, ?> map, long loadFactorFieldOff, long accessOrderFieldOff, boolean set)
-        throws IOException {
-        int size = map.size();
-
-        writeInt(size);
-        writeFloat(getFloat(map, loadFactorFieldOff));
-
-        if (accessOrderFieldOff >= 0)
-            writeBoolean(getBoolean(map, accessOrderFieldOff));
-        else
-            writeBoolean(false);
-
-        for (Map.Entry<?, ?> e : map.entrySet()) {
-            writeObject0(e.getKey());
-
-            if (!set)
-                writeObject0(e.getValue());
-        }
-    }
-
-    /**
-     * Writes {@link LinkedHashSet}.
-     *
-     * @param set Set.
-     * @param mapFieldOff Map field offset.
-     * @param loadFactorFieldOff Load factor field offset.
-     * @throws IOException In case of error.
-     */
-    void writeLinkedHashSet(LinkedHashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException {
-        LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>)getObject(set, mapFieldOff);
-
-        writeLinkedHashMap(map, loadFactorFieldOff, -1, true);
-    }
-
-    /**
-     * Writes {@link Date}.
-     *
-     * @param date Date.
-     * @throws IOException In case of error.
-     */
-    void writeDate(Date date) throws IOException {
-        writeLong(date.getTime());
-    }
-
-    /**
-     * Writes all non-static and non-transient field values to this stream.
-     *
-     * @param obj Object.
-     * @param fields Fields.
-     * @throws IOException In case of error.
-     */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
-    private void writeFields(Object obj, OptimizedClassDescriptor.ClassFields fields) throws IOException {
-        for (int i = 0; i < fields.size(); i++) {
-            OptimizedClassDescriptor.FieldInfo t = fields.get(i);
-
-            switch (t.type()) {
-                case BYTE:
-                    if (t.field() != null)
-                        writeByte(getByte(obj, t.offset()));
-
-                    break;
-
-                case SHORT:
-                    if (t.field() != null)
-                        writeShort(getShort(obj, t.offset()));
-
-                    break;
-
-                case INT:
-                    if (t.field() != null)
-                        writeInt(getInt(obj, t.offset()));
-
-                    break;
-
-                case LONG:
-                    if (t.field() != null)
-                        writeLong(getLong(obj, t.offset()));
-
-                    break;
-
-                case FLOAT:
-                    if (t.field() != null)
-                        writeFloat(getFloat(obj, t.offset()));
-
-                    break;
-
-                case DOUBLE:
-                    if (t.field() != null)
-                        writeDouble(getDouble(obj, t.offset()));
-
-                    break;
-
-                case CHAR:
-                    if (t.field() != null)
-                        writeChar(getChar(obj, t.offset()));
-
-                    break;
-
-                case BOOLEAN:
-                    if (t.field() != null)
-                        writeBoolean(getBoolean(obj, t.offset()));
-
-                    break;
-
-                case OTHER:
-                    if (t.field() != null)
-                        writeObject0(getObject(obj, t.offset()));
-            }
-        }
-    }
-
-    /**
-     * Writes array of {@code byte}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeByteArray(byte[] arr) throws IOException {
-        out.writeByteArray(arr);
-    }
-
-    /**
-     * Writes array of {@code short}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeShortArray(short[] arr) throws IOException {
-        out.writeShortArray(arr);
-    }
-
-    /**
-     * Writes array of {@code int}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeIntArray(int[] arr) throws IOException {
-        out.writeIntArray(arr);
-    }
-
-    /**
-     * Writes array of {@code long}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeLongArray(long[] arr) throws IOException {
-        out.writeLongArray(arr);
-    }
-
-    /**
-     * Writes array of {@code float}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeFloatArray(float[] arr) throws IOException {
-        out.writeFloatArray(arr);
-    }
-
-    /**
-     * Writes array of {@code double}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeDoubleArray(double[] arr) throws IOException {
-        out.writeDoubleArray(arr);
-    }
-
-    /**
-     * Writes array of {@code char}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeCharArray(char[] arr) throws IOException {
-        out.writeCharArray(arr);
-    }
-
-    /**
-     * Writes array of {@code boolean}s.
-     *
-     * @param arr Array.
-     * @throws IOException In case of error.
-     */
-    void writeBooleanArray(boolean[] arr) throws IOException {
-        out.writeBooleanArray(arr);
-    }
-
-    /**
-     * Writes {@link String}.
-     *
-     * @param str String.
-     * @throws IOException In case of error.
-     */
-    void writeString(String str) throws IOException {
-        out.writeUTF(str);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeBoolean(boolean v) throws IOException {
-        out.writeBoolean(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeByte(int v) throws IOException {
-        out.writeByte(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeShort(int v) throws IOException {
-        out.writeShort(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeChar(int v) throws IOException {
-        out.writeChar(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeInt(int v) throws IOException {
-        out.writeInt(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeLong(long v) throws IOException {
-        out.writeLong(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeFloat(float v) throws IOException {
-        out.writeFloat(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeDouble(double v) throws IOException {
-        out.writeDouble(v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void write(int b) throws IOException {
-        writeByte(b);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeBytes(String s) throws IOException {
-        out.writeBytes(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeChars(String s) throws IOException {
-        out.writeChars(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeUTF(String s) throws IOException {
-        out.writeUTF(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void useProtocolVersion(int ver) throws IOException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeUnshared(Object obj) throws IOException {
-        writeObject0(obj);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void defaultWriteObject() throws IOException {
-        if (curObj == null)
-            throw new NotActiveException("Not in writeObject() call.");
-
-        writeFields(curObj, curFields);
-    }
-
-    /** {@inheritDoc} */
-    @Override public ObjectOutputStream.PutField putFields() throws IOException {
-        if (curObj == null)
-            throw new NotActiveException("Not in writeObject() call or fields already written.");
-
-        if (curPut == null)
-            curPut = new PutFieldImpl(this);
-
-        return curPut;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeFields() throws IOException {
-        if (curObj == null)
-            throw new NotActiveException("Not in writeObject() call.");
-
-        if (curPut == null)
-            throw new NotActiveException("putFields() was not called.");
-
-        for (IgniteBiTuple<OptimizedFieldType, Object> t : curPut.objs) {
-            switch (t.get1()) {
-                case BYTE:
-                    writeByte((Byte)t.get2());
-
-                    break;
-
-                case SHORT:
-                    writeShort((Short)t.get2());
-
-                    break;
-
-                case INT:
-                    writeInt((Integer)t.get2());
-
-                    break;
-
-                case LONG:
-                    writeLong((Long)t.get2());
-
-                    break;
-
-                case FLOAT:
-                    writeFloat((Float)t.get2());
-
-                    break;
-
-                case DOUBLE:
-                    writeDouble((Double)t.get2());
-
-                    break;
-
-                case CHAR:
-                    writeChar((Character)t.get2());
-
-                    break;
-
-                case BOOLEAN:
-                    writeBoolean((Boolean)t.get2());
-
-                    break;
-
-                case OTHER:
-                    writeObject0(t.get2());
-            }
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public void reset() throws IOException {
-        out.reset();
-        handles.clear();
-
-        curObj = null;
-        curFields = null;
-        curPut = null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void flush() throws IOException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public void drain() throws IOException {
-        // No-op.
-    }
-
-    /**
-     * Returns objects that were added to handles table.
-     * Used ONLY for test purposes.
-     *
-     * @return Handled objects.
-     */
-    Object[] handledObjects() {
-        return handles.objects();
-    }
-
-    /**
-     * {@link PutField} implementation.
-     */
-    private static class PutFieldImpl extends PutField {
-        /** Stream. */
-        private final OptimizedObjectOutputStream out;
-
-        /** Fields info. */
-        private final OptimizedClassDescriptor.ClassFields curFields;
-        /** Values. */
-        private final IgniteBiTuple<OptimizedFieldType, Object>[] objs;
-
-        /**
-         * @param out Output stream.
-         */
-        @SuppressWarnings("unchecked")
-        private PutFieldImpl(OptimizedObjectOutputStream out) {
-            this.out = out;
-
-            curFields = out.curFields;
-
-            objs = new IgniteBiTuple[curFields.size()];
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, boolean val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, byte val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, char val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, short val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, int val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, long val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, float val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, double val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void put(String name, Object val) {
-            value(name, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void write(ObjectOutput out) throws IOException {
-            if (out != this.out)
-                throw new IllegalArgumentException("Wrong stream.");
-
-            this.out.writeFields();
-        }
-
-        /**
-         * @param name Field name.
-         * @param val Value.
-         */
-        private void value(String name, Object val) {
-            int i = curFields.getIndex(name);
-
-            OptimizedClassDescriptor.FieldInfo info = curFields.get(i);
-
-            objs[i] = F.t(info.type(), val);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamRegistry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamRegistry.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamRegistry.java
deleted file mode 100644
index fd1b917..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamRegistry.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.IOException;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.IgniteInterruptedCheckedException;
-import org.apache.ignite.internal.util.io.GridUnsafeDataInput;
-import org.apache.ignite.internal.util.io.GridUnsafeDataOutput;
-import org.apache.ignite.internal.util.typedef.internal.U;
-
-/**
- * Storage for object streams.
- */
-class OptimizedObjectStreamRegistry {
-    /** Holders. */
-    private static final ThreadLocal<StreamHolder> holders = new ThreadLocal<>();
-
-    /** Output streams pool. */
-    private static BlockingQueue<OptimizedObjectOutputStream> outPool;
-
-    /** Input streams pool. */
-    private static BlockingQueue<OptimizedObjectInputStream> inPool;
-
-    /**
-     * Ensures singleton.
-     */
-    private OptimizedObjectStreamRegistry() {
-        // No-op.
-    }
-
-    /**
-     * Sets streams pool size.
-     *
-     * @param size Streams pool size.
-     */
-    static void poolSize(int size) {
-        if (size > 0) {
-            outPool = new LinkedBlockingQueue<>(size);
-            inPool = new LinkedBlockingQueue<>(size);
-
-            for (int i = 0; i < size; i++) {
-                outPool.offer(createOut());
-                inPool.offer(createIn());
-            }
-        }
-        else {
-            outPool = null;
-            inPool = null;
-        }
-    }
-
-    /**
-     * Gets output stream.
-     *
-     * @return Object output stream.
-     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
-     */
-    static OptimizedObjectOutputStream out() throws IgniteInterruptedCheckedException {
-        if (outPool != null) {
-            try {
-                return outPool.take();
-            }
-            catch (InterruptedException e) {
-                throw new IgniteInterruptedCheckedException(
-                    "Failed to take output object stream from pool (thread interrupted).", e);
-            }
-        }
-        else
-            return holder().acquireOut();
-    }
-
-    /**
-     * Gets input stream.
-     *
-     * @return Object input stream.
-     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
-     */
-    static OptimizedObjectInputStream in() throws IgniteInterruptedCheckedException {
-        if (inPool != null) {
-            try {
-                return inPool.take();
-            }
-            catch (InterruptedException e) {
-                throw new IgniteInterruptedCheckedException(
-                    "Failed to take input object stream from pool (thread interrupted).", e);
-            }
-        }
-        else
-            return holder().acquireIn();
-    }
-
-    /**
-     * Closes and releases output stream.
-     *
-     * @param out Object output stream.
-     */
-    static void closeOut(OptimizedObjectOutputStream out) {
-        U.close(out, null);
-
-        if (outPool != null) {
-            boolean b = outPool.offer(out);
-
-            assert b;
-        }
-        else {
-            StreamHolder holder = holders.get();
-
-            if (holder != null)
-                holder.releaseOut();
-        }
-    }
-
-    /**
-     * Closes and releases input stream.
-     *
-     * @param in Object input stream.
-     */
-    @SuppressWarnings("TypeMayBeWeakened")
-    static void closeIn(OptimizedObjectInputStream in) {
-        U.close(in, null);
-
-        if (inPool != null) {
-            boolean b = inPool.offer(in);
-
-            assert b;
-        }
-        else {
-            StreamHolder holder = holders.get();
-
-            if (holder != null)
-                holder.releaseIn();
-        }
-    }
-
-    /**
-     * Gets holder from pool or thread local.
-     *
-     * @return Stream holder.
-     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
-     */
-    private static StreamHolder holder() throws IgniteInterruptedCheckedException {
-        StreamHolder holder = holders.get();
-
-        if (holder == null)
-            holders.set(holder = new StreamHolder());
-
-        return holder;
-    }
-
-    /**
-     * Creates output stream.
-     *
-     * @return Object output stream.
-     */
-    private static OptimizedObjectOutputStream createOut() {
-        try {
-            return new OptimizedObjectOutputStream(new GridUnsafeDataOutput(4 * 1024));
-        }
-        catch (IOException e) {
-            throw new IgniteException("Failed to create object output stream.", e);
-        }
-    }
-
-    /**
-     * Creates input stream.
-     *
-     * @return Object input stream.
-     */
-    private static OptimizedObjectInputStream createIn() {
-        try {
-            return new OptimizedObjectInputStream(new GridUnsafeDataInput());
-        }
-        catch (IOException e) {
-            throw new IgniteException("Failed to create object input stream.", e);
-        }
-    }
-
-    /**
-     * Streams holder.
-     */
-    private static class StreamHolder {
-        /** Output stream. */
-        private final OptimizedObjectOutputStream out = createOut();
-
-        /** Input stream. */
-        private final OptimizedObjectInputStream in = createIn();
-
-        /** Output streams counter. */
-        private int outAcquireCnt;
-
-        /** Input streams counter. */
-        private int inAcquireCnt;
-
-        /**
-         * Gets output stream.
-         *
-         * @return Object output stream.
-         */
-        OptimizedObjectOutputStream acquireOut() {
-            return outAcquireCnt++ > 0 ? createOut() : out;
-        }
-
-        /**
-         * Gets input stream.
-         *
-         * @return Object input stream.
-         */
-        OptimizedObjectInputStream acquireIn() {
-            return inAcquireCnt++ > 0 ? createIn() : in;
-        }
-
-        /**
-         * Releases output stream.
-         */
-        void releaseOut() {
-            outAcquireCnt--;
-        }
-
-        /**
-         * Releases input stream.
-         */
-        void releaseIn() {
-            inAcquireCnt--;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/package-info.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/package-info.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/package-info.java
deleted file mode 100644
index bb61add..0000000
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 description. -->
- * Contains Optimized marshaller.
- */
-package org.apache.ignite.marshaller.optimized;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index 9cce826..b68af96 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1867,7 +1867,7 @@ org.apache.ignite.lang.IgniteRunnable
 org.apache.ignite.lang.IgniteUuid
 org.apache.ignite.lifecycle.LifecycleEventType
 org.apache.ignite.marshaller.jdk.JdkMarshallerDummySerializable
-org.apache.ignite.marshaller.optimized.OptimizedFieldType
+org.apache.ignite.internal.marshaller.optimized.OptimizedFieldType
 org.apache.ignite.messaging.MessagingListenActor
 org.apache.ignite.platform.dotnet.PlatformDotNetAffinityFunction
 org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/example-cache.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/example-cache.xml b/modules/core/src/test/config/example-cache.xml
index d9556af..770d6df 100644
--- a/modules/core/src/test/config/example-cache.xml
+++ b/modules/core/src/test/config/example-cache.xml
@@ -44,10 +44,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
-                <!-- Set to false to allow non-serializable objects in examples, default is true. -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!-- Enable cache events for examples. -->

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/igfs-loopback.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/igfs-loopback.xml b/modules/core/src/test/config/igfs-loopback.xml
index 5bfbdae..7ec5f10 100644
--- a/modules/core/src/test/config/igfs-loopback.xml
+++ b/modules/core/src/test/config/igfs-loopback.xml
@@ -57,7 +57,7 @@
             Configure optimized marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <!--
                     For better performance set this property to true in case
                     all marshalled classes implement java.io.Serializable.

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/igfs-shmem.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/igfs-shmem.xml b/modules/core/src/test/config/igfs-shmem.xml
index 5876b41..f6b1790 100644
--- a/modules/core/src/test/config/igfs-shmem.xml
+++ b/modules/core/src/test/config/igfs-shmem.xml
@@ -57,7 +57,7 @@
             Configure optimized marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <!--
                     For better performance set this property to true in case
                     all marshalled classes implement java.io.Serializable.

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/spring-start-nodes-attr.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/spring-start-nodes-attr.xml b/modules/core/src/test/config/spring-start-nodes-attr.xml
index 8db8598..b329973 100644
--- a/modules/core/src/test/config/spring-start-nodes-attr.xml
+++ b/modules/core/src/test/config/spring-start-nodes-attr.xml
@@ -37,7 +37,7 @@
         <property name="connectorConfiguration"><null/></property>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/spring-start-nodes.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/spring-start-nodes.xml b/modules/core/src/test/config/spring-start-nodes.xml
index 8ab68fb..9b2ee94 100644
--- a/modules/core/src/test/config/spring-start-nodes.xml
+++ b/modules/core/src/test/config/spring-start-nodes.xml
@@ -31,7 +31,7 @@
         <property name="connectorConfiguration"><null/></property>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <property name="requireSerializable" value="false"/>
             </bean>
         </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/config/websession/example-cache-base.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/config/websession/example-cache-base.xml b/modules/core/src/test/config/websession/example-cache-base.xml
index d3d5b46..1eeb06e 100644
--- a/modules/core/src/test/config/websession/example-cache-base.xml
+++ b/modules/core/src/test/config/websession/example-cache-base.xml
@@ -30,10 +30,7 @@
         <property name="peerClassLoadingEnabled" value="true"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
-                <!-- Set to false to allow non-serializable objects in examples, default is true. -->
-                <property name="requireSerializable" value="false"/>
-            </bean>
+            <bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
         </property>
 
         <!-- Enable cache events for examples. -->

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
index 63436ab..bfb8326 100644
--- a/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/IgniteExternalizableAbstractTest.java
@@ -19,11 +19,11 @@ package org.apache.ignite;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerSelfTest.java
deleted file mode 100644
index 3f6c9b4..0000000
--- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerSelfTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.cache.store.jdbc;
-
-import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
-
-/**
- * Test for {@link CacheJdbcPojoStore} with optimized marshaller.
- */
-public class CacheJdbcPojoStoreOptimizedMarshallerSelfTest extends CacheJdbcPojoStoreAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller(){
-        return new OptimizedMarshaller();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest.java
deleted file mode 100644
index d1ce726..0000000
--- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.cache.store.jdbc;
-
-/**
- * Test for {@link CacheJdbcPojoStore} with optimized marshaller and enabled SQL escaping.
- */
-public class CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest extends CacheJdbcPojoStoreOptimizedMarshallerSelfTest {
-    /** {@inheritDoc} */
-    @Override protected boolean sqlEscapeAll(){
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java b/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
index 3092374..110ea30 100644
--- a/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/igfs/IgfsPathSelfTest.java
@@ -24,8 +24,8 @@ import java.net.URI;
 import java.util.Arrays;
 import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
index 17ef65a..7b80f6a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridLifecycleAwareSelfTest.java
@@ -24,11 +24,11 @@ import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.ConnectorMessageInterceptor;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.client.ssl.GridSslContextFactory;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.lifecycle.LifecycleAware;
 import org.apache.ignite.lifecycle.LifecycleBean;
 import org.apache.ignite.lifecycle.LifecycleEventType;
 import org.apache.ignite.logger.java.JavaLogger;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.plugin.segmentation.SegmentationResolver;
 import org.apache.ignite.testframework.junits.common.GridAbstractLifecycleAwareSelfTest;
 import org.jetbrains.annotations.Nullable;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
index 328b775..27b7825 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerStopSelfTest.java
@@ -27,9 +27,9 @@ import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
 import org.apache.ignite.internal.managers.failover.GridFailoverManager;
 import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager;
 import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.pool.PoolProcessor;
 import org.apache.ignite.internal.processors.resource.GridResourceProcessor;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.resources.LoggerResource;
 import org.apache.ignite.spi.IgniteSpi;
 import org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpi;


[10/14] ignite git commit: Merge branch 'master' into ignite-4938

Posted by ag...@apache.org.
Merge branch 'master' into ignite-4938


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a3686db0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a3686db0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a3686db0

Branch: refs/heads/ignite-4938
Commit: a3686db055a55c87484ebad04e37f13ad06f93ce
Parents: faa8681 c9d08d3
Author: Alexander Paschenko <al...@gmail.com>
Authored: Tue Apr 11 14:43:48 2017 +0300
Committer: Alexander Paschenko <al...@gmail.com>
Committed: Tue Apr 11 14:43:48 2017 +0300

----------------------------------------------------------------------
 .gitignore                                      |  31 +-
 .../communication/GridIoMessageFactory.java     |   8 +-
 .../processors/cache/GridCacheAtomicFuture.java |   2 +-
 .../processors/cache/GridCacheMvccManager.java  |  84 +++-
 .../GridCachePartitionExchangeManager.java      |   7 +-
 .../processors/cache/GridCachePreloader.java    |   4 +-
 .../cache/GridCachePreloaderAdapter.java        |   4 +-
 .../cache/GridDeferredAckMessageSender.java     |  11 +-
 .../GridDhtAtomicAbstractUpdateFuture.java      |   4 +-
 .../GridNearAtomicAbstractUpdateFuture.java     |   2 +-
 .../GridNearAtomicSingleUpdateFuture.java       |  21 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |  23 +-
 .../dht/preloader/GridDhtPartitionDemander.java |   2 +-
 .../dht/preloader/GridDhtPartitionSupplier.java | 310 +--------------
 .../GridDhtPartitionSupplyMessage.java          |  99 ++---
 .../GridDhtPartitionSupplyMessageV2.java        | 384 -------------------
 .../dht/preloader/GridDhtPreloader.java         |   3 +-
 .../cache/transactions/IgniteTxManager.java     |   2 +-
 .../datastructures/GridCacheSemaphoreImpl.java  |  74 +++-
 .../datastructures/GridCacheSemaphoreState.java |  22 ++
 .../resources/META-INF/classnames.properties    |   1 -
 ...eAbstractDataStructuresFailoverSelfTest.java |  21 +-
 .../CacheLateAffinityAssignmentTest.java        |   6 +-
 .../IgniteCacheReadFromBackupTest.java          |   6 +-
 .../atomic/IgniteCacheAtomicProtocolTest.java   |   3 +-
 modules/log4j2/pom.xml                          |   4 +-
 .../ignite/logger/log4j2/Log4J2Logger.java      |  23 +-
 .../binary/include/ignite/binary/binary_type.h  | 129 ++-----
 .../ignite/impl/binary/binary_id_resolver.h     |  33 +-
 .../ignite/impl/binary/binary_object_impl.h     |   3 +-
 .../ignite/impl/binary/binary_reader_impl.h     |  80 +++-
 .../ignite/impl/binary/binary_type_impl.h       |  12 +-
 .../include/ignite/impl/binary/binary_utils.h   |   6 +-
 .../ignite/impl/binary/binary_writer_impl.h     |  15 +-
 .../core-test/include/ignite/binary_test_defs.h | 117 +++---
 .../cpp/core-test/include/ignite/complex_type.h |  30 +-
 .../cpp/core-test/include/ignite/test_type.h    |  37 +-
 .../src/binary_identity_resolver_test.cpp       |  92 ++---
 .../cpp/core-test/src/binary_object_test.cpp    |   4 +-
 .../cpp/core-test/src/binary_test_defs.cpp      |   5 +
 .../cpp/core-test/src/cache_invoke_test.cpp     |  18 +-
 .../cpp/core-test/src/cache_query_test.cpp      |  12 +-
 .../platforms/cpp/core-test/src/cache_test.cpp  |  38 +-
 .../cpp/core-test/src/continuous_query_test.cpp |  34 +-
 .../cpp/core/include/ignite/ignite_binding.h    |   6 +-
 .../impl/cache/cache_entry_processor_holder.h   |  33 +-
 .../cpp/odbc-test/include/complex_type.h        |  26 +-
 .../platforms/cpp/odbc-test/include/test_type.h |  37 +-
 48 files changed, 677 insertions(+), 1251 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a3686db0/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------


[03/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
index f75af03..cf4213b 100644
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/DynamicProxySerializationMultiJvmSelfTest.java
@@ -26,7 +26,6 @@ import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.lang.IgniteCallable;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**
@@ -58,19 +57,6 @@ public class DynamicProxySerializationMultiJvmSelfTest extends GridCommonAbstrac
     /**
      * @throws Exception If failed.
      */
-    public void testOptimizedMarshaller() throws Exception {
-        marshFactory = new Callable<Marshaller>() {
-            @Override public Marshaller call() throws Exception {
-                return new OptimizedMarshaller(false);
-            }
-        };
-
-        doTestMarshaller();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     public void testBinaryMarshaller() throws Exception {
         marshFactory = new Callable<Marshaller>() {
             @Override public Marshaller call() throws Exception {

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
index a9d0f66..3148bc0 100644
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerPerformanceTest.java
@@ -17,10 +17,6 @@
 
 package org.apache.ignite.marshaller;
 
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.KryoSerializable;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
@@ -34,7 +30,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.KryoSerializable;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.lang.GridTuple;
 import org.apache.ignite.internal.util.typedef.CI1;
 import org.apache.ignite.internal.util.typedef.CIX1;
@@ -43,7 +44,6 @@ import org.apache.ignite.internal.util.typedef.COX;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.lang.IgniteOutClosure;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
deleted file mode 100644
index c072170..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import junit.framework.TestCase;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.testframework.junits.GridTestKernalContext;
-import org.apache.ignite.testframework.junits.logger.GridTestLog4jLogger;
-
-/**
- *
- */
-public class OptimizedMarshallerEnumSelfTest extends TestCase {
-
-    private String igniteHome = System.getProperty("user.dir");
-
-    private final IgniteLogger rootLog = new GridTestLog4jLogger(false);
-    /**
-     * @throws Exception If failed.
-     */
-    public void testEnumSerialisation() throws Exception {
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-
-        MarshallerContextTestImpl context = new MarshallerContextTestImpl();
-
-        context.onMarshallerProcessorStarted(newContext(), null);
-
-        marsh.setContext(context);
-
-        byte[] bytes = marsh.marshal(TestEnum.Bond);
-
-        TestEnum unmarshalled = marsh.unmarshal(bytes, Thread.currentThread().getContextClassLoader());
-
-        assertEquals(TestEnum.Bond, unmarshalled);
-        assertEquals(TestEnum.Bond.desc, unmarshalled.desc);
-    }
-
-    private GridKernalContext newContext() throws IgniteCheckedException {
-        IgniteConfiguration cfg = new IgniteConfiguration();
-
-        cfg.setIgniteHome(igniteHome);
-        cfg.setClientMode(false);
-
-        return new GridTestKernalContext(rootLog.getLogger(OptimizedMarshallerEnumSelfTest.class), cfg);
-    }
-
-    private enum TestEnum {
-        Equity("Equity") {
-            @Override public String getTestString() {
-                return "eee";
-            }
-        },
-
-        Bond("Bond") {
-            @Override public String getTestString() {
-                return "qqq";
-            }
-        };
-
-        public final String desc;
-
-        TestEnum(String desc) {
-            this.desc = desc;
-        }
-
-        public abstract String getTestString();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
deleted file mode 100644
index d6bbdb4..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerNodeFailoverTest.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-
-import static org.apache.ignite.cache.CacheMode.PARTITIONED;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
-/**
- *
- */
-public class OptimizedMarshallerNodeFailoverTest extends GridCommonAbstractTest {
-    /** */
-    private static TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
-
-    /** */
-    private boolean cache;
-
-    /** */
-    private String workDir;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        disco.setIpFinder(ipFinder);
-
-        cfg.setDiscoverySpi(disco);
-
-        cfg.setMarshaller(new OptimizedMarshaller());
-
-        cfg.setWorkDirectory(workDir);
-
-        if (cache) {
-            CacheConfiguration ccfg = new CacheConfiguration();
-
-            ccfg.setCacheMode(PARTITIONED);
-            ccfg.setBackups(1);
-            ccfg.setWriteSynchronizationMode(FULL_SYNC);
-
-            cfg.setCacheConfiguration(ccfg);
-        }
-        else
-            cfg.setClientMode(true);
-
-        return cfg;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testClassCacheUpdateFailover1() throws Exception {
-        classCacheUpdateFailover(false);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testClassCacheUpdateFailover2() throws Exception {
-        classCacheUpdateFailover(true);
-    }
-
-    /**
-     * @param stopSrv If {@code true} restarts server node, otherwise client node.
-     * @throws Exception If failed.
-     */
-    private void classCacheUpdateFailover(boolean stopSrv) throws Exception {
-        cache = true;
-
-        startGridsMultiThreaded(2);
-
-        cache = stopSrv;
-
-        IgniteCache<Integer, Object> cache0 = ignite(0).cache(null);
-
-        for (int i = 0; i < 20; i++) {
-            log.info("Iteration: " + i);
-
-            Map<Integer, Object> map = new HashMap<>();
-
-            for (int j = 0; j < 10_000; j++)
-                map.put(j, create(i + 1));
-
-            final Ignite ignite = startGrid(2);
-
-            IgniteInternalFuture fut = GridTestUtils.runAsync(new Callable() {
-                @Override public Object call() throws Exception {
-                    ignite.close();
-
-                    return null;
-                }
-            });
-
-            cache0.putAll(map);
-
-            fut.get();
-        }
-
-        cache = true;
-
-        Ignite ignite = startGrid(2); // Check can start one more cache node.
-
-        assertNotNull(ignite.cache(null));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRestartAllNodes() throws Exception {
-        cache = true;
-
-        String home = U.getIgniteHome();
-
-        String[] workDirs = new String[3];
-
-        for (int i = 0; i < 3; i++) {
-            workDirs[i] = home + "/work/marshallerTestNode_" + i;
-
-            File file = new File(workDirs[i]);
-
-            if (file.exists())
-                assert U.delete(file);
-        }
-
-        try {
-            for (int i = 0; i < workDirs.length; i++) {
-                workDir = workDirs[i];
-
-                startGrid(i);
-            }
-
-            Marshaller marsh = ignite(0).configuration().getMarshaller();
-
-            TestClass1 obj = new TestClass1();
-
-            obj.val = 111;
-
-            byte[] bytes = marsh.marshal(obj);
-
-            stopAllGrids();
-
-            for (int i = 0; i < workDirs.length; i++) {
-                workDir = workDirs[i];
-
-                startGrid(i);
-            }
-
-            for (int i = 0; i < 3; i++) {
-                marsh = ignite(i).configuration().getMarshaller();
-
-                TestClass1 obj0 = marsh.unmarshal(bytes, null);
-
-                assertEquals(111, obj0.val);
-            }
-        }
-        finally {
-            for (String dir : workDirs)
-                assert U.delete(new File(dir));
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        super.afterTest();
-
-        stopAllGrids();
-    }
-
-    /**
-     * @param id Class ID.
-     * @return Test class instance.
-     */
-    private static Object create(int id) {
-        switch (id) {
-            case 1: return new TestClass1();
-
-            case 2: return new TestClass2();
-
-            case 3: return new TestClass3();
-
-            case 4: return new TestClass4();
-
-            case 5: return new TestClass5();
-
-            case 6: return new TestClass6();
-
-            case 7: return new TestClass7();
-
-            case 8: return new TestClass8();
-
-            case 9: return new TestClass9();
-
-            case 10: return new TestClass10();
-
-            case 11: return new TestClass11();
-
-            case 12: return new TestClass12();
-
-            case 13: return new TestClass13();
-
-            case 14: return new TestClass14();
-
-            case 15: return new TestClass15();
-
-            case 16: return new TestClass16();
-
-            case 17: return new TestClass17();
-
-            case 18: return new TestClass18();
-
-            case 19: return new TestClass19();
-
-            case 20: return new TestClass20();
-        }
-
-        fail();
-
-        return null;
-    }
-
-    /**
-     *
-     */
-    static class TestClass1 implements Serializable {
-        /** */
-        int val;
-    }
-
-    /**
-     *
-     */
-    static class TestClass2 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass3 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass4 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass5 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass6 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass7 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass8 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass9 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass10 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass11 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass12 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass13 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass14 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass15 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass16 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass17 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass18 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass19 implements Serializable {}
-
-    /**
-     *
-     */
-    static class TestClass20 implements Serializable {}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
deleted file mode 100644
index a883270..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.testframework.junits.common.GridCommonTest;
-
-/**
- * Optimized marshaller self test.
- */
-@GridCommonTest(group = "Marshaller")
-public class OptimizedMarshallerPooledSelfTest extends OptimizedMarshallerSelfTest {
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller() {
-        OptimizedMarshaller m = new OptimizedMarshaller(false);
-
-        m.setPoolSize(8);
-
-        return m;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        super.afterTestsStopped();
-
-        // Reset static registry.
-        new OptimizedMarshaller().setPoolSize(0);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
deleted file mode 100644
index a034b3a..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSelfTest.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.concurrent.Callable;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.lang.IgniteRunnable;
-import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
-import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.common.GridCommonTest;
-
-/**
- * Optimized marshaller self test.
- */
-@GridCommonTest(group = "Marshaller")
-public class OptimizedMarshallerSelfTest extends GridMarshallerAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller() {
-        return new OptimizedMarshaller(false);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTestMarshalling() throws Exception {
-        final String msg = "PASSED";
-
-        byte[] buf = marshal(new IgniteRunnable() {
-            @Override public void run() {
-                c1.apply(msg);
-                c2.apply(msg);
-
-                c3.apply();
-                c4.reduce();
-
-                System.out.println("Test message: " + msg);
-            }
-        });
-
-        Runnable r = unmarshal(buf);
-
-        assertNotNull(r);
-
-        r.run();
-    }
-
-    /**
-     * Tests marshal self-linked object.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testMarshallingSelfLink() throws IgniteCheckedException {
-        SelfLink sl = new SelfLink("a string 1");
-
-        sl.link(sl);
-
-        SelfLink sl1 = unmarshal(marshal(sl));
-
-        assert sl1.link() == sl1;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInvalid() throws Exception {
-        GridTestUtils.assertThrows(
-            log,
-            new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    byte[] arr = new byte[10];
-
-                    arr[0] = (byte)200;
-
-                    unmarshal(arr);
-
-                    return null;
-                }
-            },
-            IgniteCheckedException.class,
-            null
-        );
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testNested() throws Exception {
-        NestedTestObject obj = new NestedTestObject("String", 100);
-
-        NestedTestObject newObj = unmarshal(marshal(obj));
-
-        assertEquals("String", newObj.str);
-        assertEquals(100, newObj.val);
-    }
-
-    /**
-     * Class for nested execution test.
-     */
-    private static class NestedTestObject implements Serializable {
-        /** */
-        private String str;
-
-        /** */
-        private int val;
-
-        /**
-         * @param str String.
-         * @param val Value.
-         */
-        private NestedTestObject(String str, int val) {
-            this.str = str;
-            this.val = val;
-        }
-
-        /** {@inheritDoc} */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            try {
-                byte[] arr = marshal(str);
-
-                out.writeInt(arr.length);
-                out.write(arr);
-
-                out.writeInt(val);
-            }
-            catch (IgniteCheckedException e) {
-                throw new IOException(e);
-            }
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings("UnusedParameters")
-        private void readObject(ObjectInputStream in) throws IOException {
-            try {
-                byte[] arr = new byte[in.readInt()];
-
-                in.read(arr);
-
-                str = unmarshal(arr);
-
-                val = in.readInt();
-            }
-            catch (IgniteCheckedException e) {
-                throw new IOException(e);
-            }
-        }
-    }
-
-    /** */
-    private static class TestObject2 {
-        /** */
-        private final int i;
-
-        /**
-         * Constructor for TestObject2 instances.
-         *
-         * @param i Integer value to hold.
-         */
-        private TestObject2(int i) {
-            this.i = i;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            return i == ((TestObject2)o).i;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return i;
-        }
-    }
-
-    /**
-     * Static nested class.
-     */
-    private static class TestObject {
-        /** */
-        private final TestObject2 o2;
-
-        /** The only meaningful field in the class, used for {@link #equals(Object o)} and {@link #hashCode()}. */
-        private final String str;
-
-        /**
-         * @param str String to hold.
-         * @param i Integer.
-         */
-        TestObject(String str, int i) {
-            this.str = str;
-
-            o2 = new TestObject2(i);
-        }
-
-        /**
-         * Method for accessing value of the hold string after the object is created.
-         *
-         * @return Wrapped string.
-         */
-        public String string() {
-            return str;
-        }
-
-        /**
-         * @return Object held in this wrapped.
-         */
-        public TestObject2 obj() {
-            return o2;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return 31 * o2.hashCode() + str.hashCode();
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings("RedundantIfStatement")
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            TestObject obj = (TestObject)o;
-
-            if (o2 != null ? !o2.equals(obj.o2) : obj.o2 != null)
-                return false;
-
-            if (str != null ? !str.equals(obj.str) : obj.str != null)
-                return false;
-
-            return true;
-        }
-    }
-
-    /**
-     * Static nested class.
-     */
-    private static class SelfLink extends TestObject {
-        /** */
-        private SelfLink link;
-
-        /**
-         * @param str String to hold.
-         */
-        SelfLink(String str) {
-            super(str, 1);
-        }
-
-        /**
-         * @return The object this link points to,.
-         */
-        public SelfLink link() {
-            return link;
-        }
-
-        /**
-         * @param link The object this link should points to,
-         */
-        public void link(SelfLink link) {
-            this.link = link;
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
deleted file mode 100644
index ef05009..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamField;
-import java.io.Serializable;
-import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
-import org.apache.ignite.marshaller.Marshaller;
-
-/**
- * Test that Optimized Marshaller works with classes with serialPersistentFields.
- */
-public class OptimizedMarshallerSerialPersistentFieldsSelfTest  extends GridMarshallerAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected Marshaller marshaller() {
-        return new OptimizedMarshaller(false);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testOptimizedMarshaller() throws Exception {
-        unmarshal(marshal(new TestClass()));
-
-        TestClass2 val = unmarshal(marshal(new TestClass2()));
-
-        assertNull(val.field3);
-    }
-
-    /**
-     * Test class with serialPersistentFields fields.
-     */
-    private static class TestClass implements Serializable {
-        private static final long serialVersionUID = 0L;
-
-        /** For serialization compatibility. */
-        private static final ObjectStreamField[] serialPersistentFields = {
-            new ObjectStreamField("field1", Integer.TYPE),
-            new ObjectStreamField("field2", Integer.TYPE)
-        };
-
-        /**
-         * @param s Object output stream.
-         */
-        private void writeObject(ObjectOutputStream s) throws IOException {
-            s.putFields().put("field1", 1);
-            s.putFields().put("field2", 2);
-            s.writeFields();
-
-            s.writeObject(null);
-        }
-
-        /**
-         * @param s Object input stream.
-         */
-        private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
-            s.defaultReadObject();
-
-            s.readObject();
-        }
-    }
-
-    /**
-     * Test class with serialPersistentFields fields.
-     */
-    private static class TestClass2 implements Serializable {
-        private static final long serialVersionUID = 0L;
-
-        private Integer field3 = 1;
-
-        /** For serialization compatibility. */
-        private static final ObjectStreamField[] serialPersistentFields = {
-            new ObjectStreamField("field1", Integer.TYPE),
-            new ObjectStreamField("field2", Integer.TYPE)
-        };
-
-        /**
-         * @param s Object output stream.
-         */
-        private void writeObject(ObjectOutputStream s) throws IOException {
-            s.putFields().put("field1", 1);
-            s.putFields().put("field2", 2);
-            s.writeFields();
-
-            s.writeObject(null);
-        }
-
-        /**
-         * @param s Object input stream.
-         */
-        private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
-            s.defaultReadObject();
-
-            s.readObject();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
deleted file mode 100644
index 2658a29..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerTest.java
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.Serializable;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.net.InetSocketAddress;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.compute.ComputeTask;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.GridMarshallerTestInheritedBean;
-import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.Nullable;
-
-/**
- *
- */
-public class OptimizedMarshallerTest extends GridCommonAbstractTest {
-    /**
-     * @return Marshaller.
-     */
-    private OptimizedMarshaller marshaller() {
-        U.clearClassCache();
-
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
-
-        marsh.setContext(new MarshallerContextTestImpl());
-
-        return marsh;
-    }
-
-    /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        NonSerializable outObj = marsh.unmarshal(marsh.marshal(new NonSerializable(null)), null);
-
-        outObj.checkAfterUnmarshalled();
-    }
-
-    /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable1() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        byte[] bytes = marsh.marshal(new TcpDiscoveryVmIpFinder());
-
-        TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
-
-        assertFalse(ipFinder.isShared());
-
-        ipFinder = marsh.unmarshal(marsh.marshal(new TcpDiscoveryVmIpFinder(true)), null);
-
-        assertTrue(ipFinder.isShared());
-    }
-
-    /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable2() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        TcpDiscoveryIpFinderAdapter ipFinder = new TcpDiscoveryIpFinderAdapter() {
-            @Override public Collection<InetSocketAddress> getRegisteredAddresses() {
-                return null;
-            }
-
-            @Override public void registerAddresses(Collection<InetSocketAddress> addrs) {
-                //No-op.
-            }
-
-            @Override public void unregisterAddresses(Collection<InetSocketAddress> addrs) {
-                //No-op.
-            }
-        };
-
-        ipFinder.setShared(false);
-
-        byte[] bytes = marsh.marshal(ipFinder);
-
-        ipFinder = marsh.unmarshal(bytes, null);
-
-        assertFalse(ipFinder.isShared());
-    }
-
-    /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable3() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        byte[] bytes = marsh.marshal(new TestTcpDiscoveryIpFinderAdapter());
-
-        TcpDiscoveryIpFinder ipFinder = marsh.unmarshal(bytes, null);
-
-        assertFalse(ipFinder.isShared());
-    }
-
-     /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable4() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        byte[] bytes = marsh.marshal(new GridMarshallerTestInheritedBean());
-
-        info(Arrays.toString(bytes));
-
-        GridMarshallerTestInheritedBean bean = marsh.unmarshal(bytes, null);
-
-        assertTrue(bean.isFlag());
-    }
-
-     /**
-     * Tests ability to marshal non-serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testNonSerializable5() throws IgniteCheckedException {
-        Marshaller marsh = marshaller();
-
-        byte[] bytes = marsh.marshal(true);
-
-        Boolean val = marsh.unmarshal(bytes, null);
-
-        assertTrue(val);
-    }
-
-    /**
-     * Tests ability to marshal serializable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testSerializable() throws IgniteCheckedException {
-        Marshaller marsh = marshaller();
-
-        SomeSerializable outObj = marsh.unmarshal(marsh.marshal(new SomeSerializable(null)), null);
-
-        outObj.checkAfterUnmarshalled();
-    }
-
-    /**
-     * @throws IgniteCheckedException If failed.
-     */
-    public void testSerializableAfterChangingValue() throws IgniteCheckedException {
-        Marshaller marsh = marshaller();
-
-        SomeSimpleSerializable newObj = new SomeSimpleSerializable();
-
-        assert(newObj.flag);
-
-        newObj.setFlagValue(false);
-
-        assert(! newObj.flag);
-
-        SomeSimpleSerializable outObj = marsh.unmarshal(marsh.marshal(newObj), null);
-
-        assert (! outObj.flag);
-    }
-
-    /**
-     * Tests ability to marshal externalizable objects.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testExternalizable() throws IgniteCheckedException {
-        Marshaller marsh = marshaller();
-
-        ExternalizableA outObj = marsh.unmarshal(marsh.marshal(new ExternalizableA(null, true)), null);
-        ExternalizableA outObj1 = marsh.unmarshal(marsh.marshal(new ExternalizableA(null, false)), null);
-
-        assertNotNull(outObj);
-        assertNotNull(outObj1);
-    }
-
-    /**
-     * Tests {@link OptimizedMarshaller#setRequireSerializable(boolean)}.
-     */
-    public void testRequireSerializable() {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(true);
-
-        try {
-            marsh.marshal(new NonSerializable(null));
-
-            fail();
-        }
-        catch (IgniteCheckedException ignore) {
-            // No-op.
-        }
-    }
-
-    /**
-     * Tests {@link Proxy}.
-     *
-     * @throws IgniteCheckedException If marshalling failed.
-     */
-    public void testProxy() throws IgniteCheckedException {
-        OptimizedMarshaller marsh = marshaller();
-
-        marsh.setRequireSerializable(false);
-
-        SomeItf inItf = (SomeItf)Proxy.newProxyInstance(
-            OptimizedMarshallerTest.class.getClassLoader(), new Class[] {SomeItf.class},
-            new InvocationHandler() {
-                private NonSerializable obj = new NonSerializable(null);
-
-                @Override public Object invoke(Object proxy, Method mtd, Object[] args) throws Throwable {
-                    obj.checkAfterUnmarshalled();
-
-                    return 17;
-                }
-            }
-        );
-
-        SomeItf outItf = marsh.unmarshal(marsh.marshal(inItf), null);
-
-        assertEquals(outItf.checkAfterUnmarshalled(), 17);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDescriptorCache() throws Exception {
-        try {
-            Ignite ignite = startGridsMultiThreaded(2);
-
-            String taskClsName = "org.apache.ignite.tests.p2p.SingleSplitTestTask";
-            String jobClsName = "org.apache.ignite.tests.p2p.SingleSplitTestTask$SingleSplitTestJob";
-
-            ClassLoader ldr = getExternalClassLoader();
-
-            Class<? extends ComputeTask<?, ?>> taskCls = (Class<? extends ComputeTask<?, ?>>)ldr.loadClass(taskClsName);
-            Class<? extends ComputeTask<?, ?>> jobCls = (Class<? extends ComputeTask<?, ?>>)ldr.loadClass(jobClsName);
-
-            ignite.compute().localDeployTask(taskCls, ldr);
-
-            ignite.compute().execute(taskClsName, 2);
-
-            ConcurrentMap<Class<?>, OptimizedClassDescriptor> cache =
-                U.field(ignite.configuration().getMarshaller(), "clsMap");
-
-            assertTrue(cache.containsKey(jobCls));
-
-            ignite.compute().undeployTask(taskClsName);
-
-            // Wait for undeploy.
-            Thread.sleep(1000);
-
-            assertFalse(cache.containsKey(jobCls));
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPerformance() throws Exception {
-        System.gc();
-
-        checkPerformance(10000, 4);
-    }
-
-    /**
-     * @param cnt Number of marshalling attempts.
-     * @param tries Number of retries.
-     * @throws Exception If failed.
-     */
-    private void checkPerformance(int cnt, int tries) throws Exception {
-        Marshaller marsh = marshaller();
-
-        for (int j = 0; j < tries; j++) {
-            System.gc();
-
-            long start = System.currentTimeMillis();
-
-            for (int i = 0; i < cnt; i++) {
-                TestCacheKey key = new TestCacheKey("key", "id");
-
-                TestCacheKey outKey = marsh.unmarshal(marsh.marshal(key), null);
-
-                assert key.equals(outKey);
-                assert key.hashCode() == outKey.hashCode();
-            }
-
-            info("Time non-serializable: " + (System.currentTimeMillis() - start));
-
-            System.gc();
-
-            start = System.currentTimeMillis();
-
-            for (int i = 0; i < cnt; i++) {
-                TestCacheKeySerializable key1 = new TestCacheKeySerializable("key", "id");
-
-                TestCacheKeySerializable outKey = marsh.unmarshal(marsh.marshal(key1), null);
-
-                assert key1.equals(outKey);
-                assert key1.hashCode() == outKey.hashCode();
-            }
-
-            info("Time serializable: " + (System.currentTimeMillis() - start));
-
-            System.gc();
-
-            start = System.currentTimeMillis();
-
-            for (int i = 0; i < cnt; i++) {
-                TestCacheKeyExternalizable key2 = new TestCacheKeyExternalizable("key", "id");
-
-                TestCacheKeyExternalizable outKey = marsh.unmarshal(marsh.marshal(key2), null);
-
-                assert key2.equals(outKey);
-                assert key2.hashCode() == outKey.hashCode();
-            }
-
-            info("Time externalizable: " + (System.currentTimeMillis() - start));
-
-            info(">>>");
-        }
-
-        info(">>> Finished performance check <<<");
-    }
-
-    /**
-     * Some non-serializable class.
-     */
-    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","FieldMayBeStatic"})
-    private static class NonSerializableA {
-        /** */
-        private final long longVal = 0x33445566778899AAL;
-
-        /** */
-        protected Short shortVal = (short)0xAABB;
-
-        /** */
-        public String[] strArr = {"AA","BB"};
-
-        /** */
-        public boolean flag1 = true;
-
-        /** */
-        public boolean flag2;
-
-        /** */
-        public Boolean flag3;
-
-        /** */
-        public Boolean flag4 = true;
-
-        /** */
-        public Boolean flag5 = false;
-
-        /** */
-        private transient int intVal = 0xAABBCCDD;
-
-        /**
-         * @param strArr Array.
-         * @param shortVal Short value.
-         */
-        @SuppressWarnings( {"UnusedDeclaration"})
-        private NonSerializableA(@Nullable String[] strArr, @Nullable Short shortVal) {
-            // No-op.
-        }
-
-        /**
-         * Checks correctness of the state after unmarshalling.
-         */
-        void checkAfterUnmarshalled() {
-            assertEquals(longVal, 0x33445566778899AAL);
-
-            assertEquals(shortVal.shortValue(), (short)0xAABB);
-
-            assertTrue(Arrays.equals(strArr, new String[] {"AA","BB"}));
-
-            assertEquals(intVal, 0);
-
-            assertTrue(flag1);
-            assertFalse(flag2);
-            assertNull(flag3);
-            assertTrue(flag4);
-            assertFalse(flag5);
-        }
-    }
-
-    /**
-     * Some non-serializable class.
-     */
-    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","PackageVisibleInnerClass"})
-    static class NonSerializableB extends NonSerializableA {
-        /** */
-        public Short shortVal = 0x1122;
-
-        /** */
-        public long longVal = 0x8877665544332211L;
-
-        /** */
-        private transient NonSerializableA[] aArr = {
-            new NonSerializableA(null, null),
-            new NonSerializableA(null, null),
-            new NonSerializableA(null, null)
-        };
-
-        /** */
-        protected Double doubleVal = 123.456;
-
-        /**
-         * Just to eliminate the default constructor.
-         */
-        private NonSerializableB() {
-            super(null, null);
-        }
-
-        /**
-         * Checks correctness of the state after unmarshalling.
-         */
-        @Override void checkAfterUnmarshalled() {
-            super.checkAfterUnmarshalled();
-
-            assertEquals(shortVal.shortValue(), 0x1122);
-
-            assertEquals(longVal, 0x8877665544332211L);
-
-            assertNull(aArr);
-
-            assertEquals(doubleVal, 123.456);
-        }
-    }
-
-    /**
-     * Some non-serializable class.
-     */
-    @SuppressWarnings( {"TransientFieldInNonSerializableClass","PublicField"})
-    private static class NonSerializable extends NonSerializableB {
-        /** */
-        private int idVal = -17;
-
-        /** */
-        private final NonSerializableA aVal = new NonSerializableB();
-
-        /** */
-        private transient NonSerializableB bVal = new NonSerializableB();
-
-        /** */
-        private NonSerializableA[] bArr = new NonSerializableA[] {
-            new NonSerializableB(),
-            new NonSerializableA(null, null)
-        };
-
-        /** */
-        public float floatVal = 567.89F;
-
-        /**
-         * Just to eliminate the default constructor.
-         *
-         * @param aVal Unused.
-         */
-        @SuppressWarnings( {"UnusedDeclaration"})
-        private NonSerializable(NonSerializableA aVal) {
-        }
-
-        /**
-         * Checks correctness of the state after unmarshalling.
-         */
-        @Override void checkAfterUnmarshalled() {
-            super.checkAfterUnmarshalled();
-
-            assertEquals(idVal, -17);
-
-            aVal.checkAfterUnmarshalled();
-
-            assertNull(bVal);
-
-            for (NonSerializableA a : bArr) {
-                a.checkAfterUnmarshalled();
-            }
-
-            assertEquals(floatVal, 567.89F);
-        }
-    }
-
-    /**
-     * Some serializable class.
-     */
-    @SuppressWarnings( {"PublicField","TransientFieldInNonSerializableClass","PackageVisibleInnerClass"})
-    static class ForSerializableB {
-        /** */
-        public Short shortVal = 0x1122;
-
-        /** */
-        public long longVal = 0x8877665544332211L;
-
-        /** */
-        private transient NonSerializableA[] aArr;
-
-        /** */
-        private transient String strVal = "abc";
-
-        /** */
-        protected Double doubleVal = 123.456;
-
-        /**
-         */
-        protected void init() {
-            shortVal = 0x1122;
-
-            longVal = 0x8877665544332211L;
-
-            aArr = new NonSerializableA[] {
-                new NonSerializableA(null, null),
-                new NonSerializableA(null, null),
-                new NonSerializableA(null, null)
-            };
-        }
-
-        /**
-         * Checks correctness of the state after unmarshalling.
-         */
-        void checkAfterUnmarshalled() {
-            assertEquals(shortVal.shortValue(), 0x1122);
-
-            assertEquals(longVal, 0x8877665544332211L);
-
-            assertNull(aArr);
-
-            assertNull(strVal);
-
-            assertEquals(doubleVal, 123.456);
-        }
-    }
-
-    /**
-     * Some serializable class.
-     */
-    private static class SomeSimpleSerializable extends ComputeJobAdapter {
-        /** */
-        private boolean flag = true;
-
-        /**
-         * @param newFlagVal - The new value of flag field.
-         */
-        public void setFlagValue(boolean newFlagVal) {
-            flag = newFlagVal;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object execute() {
-            assert false;
-
-            return null;
-        }
-    }
-    /**
-     * Some serializable class.
-     */
-    private static class SomeSerializable extends ForSerializableB implements Serializable {
-        /**
-         * Just to eliminate the default constructor.
-         *
-         * @param id Unused.
-         */
-        @SuppressWarnings( {"UnusedDeclaration"})
-        private SomeSerializable(Long id) {
-            init();
-        }
-    }
-
-    /**
-     */
-    private static interface SomeItf {
-        /**
-         * @return Check result.
-         */
-        int checkAfterUnmarshalled();
-    }
-
-    /**
-     * Some externalizable class.
-     */
-    @SuppressWarnings( {"UnusedDeclaration", "PublicField"})
-    private static class ExternalizableA implements Externalizable {
-        /** */
-        private boolean boolVal;
-
-        /** */
-        public String[] strArr;
-
-        /** No-arg constructor is required by externalization.  */
-        public ExternalizableA() {
-            // No-op.
-        }
-
-        /**
-         *
-         * @param strArr String array.
-         * @param boolVal Boolean value.
-         */
-        private ExternalizableA(String[] strArr, boolean boolVal) {
-            this.strArr = strArr;
-            this.boolVal = boolVal;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeBoolean(false);
-            out.writeBoolean(false);
-            out.writeBoolean(false);
-            out.writeBoolean(false);
-            out.writeBoolean(false);
-            out.writeBoolean(false);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            boolVal = in.readBoolean();
-            in.readBoolean();
-            in.readBoolean();
-            in.readBoolean();
-            in.readBoolean();
-            in.readBoolean();
-        }
-    }
-
-    /**
-     *
-     */
-    private static class TestCacheKey implements Serializable {
-        /** */
-        private String key;
-
-        /** */
-        @SuppressWarnings({"UnusedDeclaration"})
-        private String terminalId;
-
-        /**
-         * @param key Key.
-         * @param terminalId Some ID.
-         */
-        TestCacheKey(String key, String terminalId) {
-            this.key = key;
-            this.terminalId = terminalId;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return key.hashCode();
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object obj) {
-            return obj instanceof TestCacheKey && key.equals(((TestCacheKey)obj).key);
-        }
-    }
-
-    /**
-     *
-     */
-    private static class TestCacheKeySerializable implements Serializable {
-        /** */
-        private String key;
-
-        /** */
-        @SuppressWarnings({"UnusedDeclaration"})
-        private String terminalId;
-
-        /**
-         * @param key Key.
-         * @param terminalId Some ID.
-         */
-        TestCacheKeySerializable(String key, String terminalId) {
-            this.key = key;
-            this.terminalId = terminalId;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return key.hashCode();
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object obj) {
-            return obj instanceof TestCacheKeySerializable && key.equals(((TestCacheKeySerializable)obj).key);
-        }
-    }
-
-    /**
-     *
-     */
-    private static class TestCacheKeyExternalizable implements Externalizable {
-        /** */
-        private String key;
-
-        /** */
-        private String terminalId;
-
-        /**
-         *
-         */
-        public TestCacheKeyExternalizable() {
-            // No-op.
-        }
-
-        /**
-         * @param key Key.
-         * @param terminalId Some ID.
-         */
-        TestCacheKeyExternalizable(String key, String terminalId) {
-            this.key = key;
-            this.terminalId = terminalId;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return key.hashCode();
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object obj) {
-            return obj instanceof TestCacheKeyExternalizable && key.equals(((TestCacheKeyExternalizable)obj).key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            U.writeString(out, key);
-            U.writeString(out, terminalId);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            key = U.readString(in);
-            terminalId = U.readString(in);
-        }
-    }
-}
\ No newline at end of file


[02/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
deleted file mode 100644
index 655a19a..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
+++ /dev/null
@@ -1,2157 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.NotActiveException;
-import java.io.NotSerializableException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.text.SimpleDateFormat;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.IdentityHashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.PriorityQueue;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.UUID;
-import java.util.Vector;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.util.io.GridUnsafeDataInput;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.MarshallerContext;
-import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.marshaller.MarshallerExclusions;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.Nullable;
-import org.jsr166.ConcurrentHashMap8;
-
-import static org.junit.Assert.assertArrayEquals;
-
-/**
- * Test for optimized object streams.
- */
-public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest {
-    /** */
-    private static final MarshallerContext CTX = new MarshallerContextTestImpl();
-
-    /** */
-    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap = new ConcurrentHashMap8<>();
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testNull() throws Exception {
-        assertNull(marshalUnmarshal(null));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testByte() throws Exception {
-        byte val = 10;
-
-        assertEquals(new Byte(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testShort() throws Exception {
-        short val = 100;
-
-        assertEquals(new Short(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInteger() throws Exception {
-        int val = 100;
-
-        assertEquals(new Integer(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLong() throws Exception {
-        long val = 1000L;
-
-        assertEquals(new Long(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFloat() throws Exception {
-        float val = 10.0f;
-
-        assertEquals(val, marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDouble() throws Exception {
-        double val = 100.0d;
-
-        assertEquals(val, marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testBoolean() throws Exception {
-        boolean val = true;
-
-        assertEquals(new Boolean(val), marshalUnmarshal(val));
-
-        val = false;
-
-        assertEquals(new Boolean(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testChar() throws Exception {
-        char val = 10;
-
-        assertEquals(new Character(val), marshalUnmarshal(val));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testByteArray() throws Exception {
-        byte[] arr = marshalUnmarshal(new byte[] {1, 2});
-
-        assertArrayEquals(new byte[] {1, 2}, arr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testShortArray() throws Exception {
-        short[] arr = marshalUnmarshal(new short[] {1, 2});
-
-        assertArrayEquals(new short[] {1, 2}, arr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testIntArray() throws Exception {
-        int[] arr = marshalUnmarshal(new int[] {1, 2});
-
-        assertArrayEquals(new int[] {1, 2}, arr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLongArray() throws Exception {
-        long[] arr = marshalUnmarshal(new long[] {1L, 2L});
-
-        assertArrayEquals(new long[] {1, 2}, arr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFloatArray() throws Exception {
-        float[] arr = marshalUnmarshal(new float[] {1.0f, 2.0f});
-
-        assertArrayEquals(new float[] {1.0f, 2.0f}, arr, 0.1f);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDoubleArray() throws Exception {
-        double[] arr = marshalUnmarshal(new double[] {1.0d, 2.0d});
-
-        assertArrayEquals(new double[] {1.0d, 2.0d}, arr, 0.1d);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testBooleanArray() throws Exception {
-        boolean[] arr = marshalUnmarshal(new boolean[] {true, false, false});
-
-        assertEquals(3, arr.length);
-        assertEquals(true, arr[0]);
-        assertEquals(false, arr[1]);
-        assertEquals(false, arr[2]);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testCharArray() throws Exception {
-        char[] arr = marshalUnmarshal(new char[] {1, 2});
-
-        assertArrayEquals(new char[] {1, 2}, arr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testObject() throws Exception {
-        TestObject obj = new TestObject();
-
-        obj.longVal = 100L;
-        obj.doubleVal = 100.0d;
-        obj.longArr = new Long[] {200L, 300L};
-        obj.doubleArr = new Double[] {200.0d, 300.0d};
-
-        assertEquals(obj, marshalUnmarshal(obj));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRequireSerializable() throws Exception {
-        try {
-            OptimizedMarshaller marsh = new OptimizedMarshaller(true);
-
-            marsh.setContext(CTX);
-
-            marsh.marshal(new Object());
-
-            assert false : "Exception not thrown.";
-        }
-        catch (IgniteCheckedException e) {
-            NotSerializableException serEx = e.getCause(NotSerializableException.class);
-
-            if (serEx == null)
-                throw e;
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPool() throws Exception {
-        final TestObject obj = new TestObject();
-
-        obj.longVal = 100L;
-        obj.doubleVal = 100.0d;
-        obj.longArr = new Long[100 * 1024];
-        obj.doubleArr = new Double[100 * 1024];
-
-        Arrays.fill(obj.longArr, 100L);
-        Arrays.fill(obj.doubleArr, 100.0d);
-
-        final OptimizedMarshaller marsh = new OptimizedMarshaller();
-
-        marsh.setContext(CTX);
-
-        marsh.setPoolSize(5);
-
-        try {
-            multithreaded(new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    for (int i = 0; i < 50; i++)
-                        assertEquals(obj, marsh.unmarshal(marsh.marshal(obj), null));
-
-                    return null;
-                }
-            }, 20);
-        }
-        finally {
-            marsh.setPoolSize(0);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testObjectWithNulls() throws Exception {
-        TestObject obj = new TestObject();
-
-        obj.longVal = 100L;
-        obj.longArr = new Long[] {200L, 300L};
-
-        assertEquals(obj, marshalUnmarshal(obj));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testObjectArray() throws Exception {
-        TestObject obj1 = new TestObject();
-
-        obj1.longVal = 100L;
-        obj1.doubleVal = 100.0d;
-        obj1.longArr = new Long[] {200L, 300L};
-        obj1.doubleArr = new Double[] {200.0d, 300.0d};
-
-        TestObject obj2 = new TestObject();
-
-        obj2.longVal = 400L;
-        obj2.doubleVal = 400.0d;
-        obj2.longArr = new Long[] {500L, 600L};
-        obj2.doubleArr = new Double[] {500.0d, 600.0d};
-
-        TestObject[] arr = {obj1, obj2};
-
-        assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
-
-        String[] strArr = {"str1", "str2"};
-
-        assertArrayEquals(strArr, (String[])marshalUnmarshal(strArr));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testExternalizable() throws Exception {
-        ExternalizableTestObject1 obj = new ExternalizableTestObject1();
-
-        obj.longVal = 100L;
-        obj.doubleVal = 100.0d;
-        obj.longArr = new Long[] {200L, 300L};
-        obj.doubleArr = new Double[] {200.0d, 300.0d};
-
-        assertEquals(obj, marshalUnmarshal(obj));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testExternalizableWithNulls() throws Exception {
-        ExternalizableTestObject2 obj = new ExternalizableTestObject2();
-
-        obj.longVal = 100L;
-        obj.doubleVal = 100.0d;
-        obj.longArr = new Long[] {200L, 300L};
-        obj.doubleArr = new Double[] {200.0d, 300.0d};
-
-        obj = marshalUnmarshal(obj);
-
-        assertEquals(100L, obj.longVal.longValue());
-        assertNull(obj.doubleVal);
-        assertArrayEquals(new Long[] {200L, 300L}, obj.longArr);
-        assertNull(obj.doubleArr);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLink() throws Exception {
-        for (int i = 0; i < 20; i++) {
-            LinkTestObject1 obj1 = new LinkTestObject1();
-            LinkTestObject2 obj2 = new LinkTestObject2();
-            LinkTestObject2 obj3 = new LinkTestObject2();
-
-            obj1.val = 100;
-            obj2.ref = obj1;
-            obj3.ref = obj1;
-
-            LinkTestObject2[] arr = new LinkTestObject2[] {obj2, obj3};
-
-            assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testCycleLink() throws Exception {
-        for (int i = 0; i < 20; i++) {
-            CycleLinkTestObject obj = new CycleLinkTestObject();
-
-            obj.val = 100;
-            obj.ref = obj;
-
-            assertEquals(obj, marshalUnmarshal(obj));
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testNoDefaultConstructor() throws Exception {
-        NoDefaultConstructorTestObject obj = new NoDefaultConstructorTestObject(100);
-
-        assertEquals(obj, marshalUnmarshal(obj));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testEnum() throws Exception {
-        assertEquals(TestEnum.B, marshalUnmarshal(TestEnum.B));
-
-        TestEnum[] arr = new TestEnum[] {TestEnum.C, TestEnum.A, TestEnum.B, TestEnum.A};
-
-        assertArrayEquals(arr, (Object[])marshalUnmarshal(arr));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testCollection() throws Exception {
-        TestObject obj1 = new TestObject();
-
-        obj1.longVal = 100L;
-        obj1.doubleVal = 100.0d;
-        obj1.longArr = new Long[] {200L, 300L};
-        obj1.doubleArr = new Double[] {200.0d, 300.0d};
-
-        TestObject obj2 = new TestObject();
-
-        obj2.longVal = 400L;
-        obj2.doubleVal = 400.0d;
-        obj2.longArr = new Long[] {500L, 600L};
-        obj2.doubleArr = new Double[] {500.0d, 600.0d};
-
-        Collection<TestObject> col = F.asList(obj1, obj2);
-
-        assertEquals(col, marshalUnmarshal(col));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testMap() throws Exception {
-        TestObject obj1 = new TestObject();
-
-        obj1.longVal = 100L;
-        obj1.doubleVal = 100.0d;
-        obj1.longArr = new Long[] {200L, 300L};
-        obj1.doubleArr = new Double[] {200.0d, 300.0d};
-
-        TestObject obj2 = new TestObject();
-
-        obj2.longVal = 400L;
-        obj2.doubleVal = 400.0d;
-        obj2.longArr = new Long[] {500L, 600L};
-        obj2.doubleArr = new Double[] {500.0d, 600.0d};
-
-        Map<Integer, TestObject> map = F.asMap(1, obj1, 2, obj2);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testUuid() throws Exception {
-        UUID uuid = UUID.randomUUID();
-
-        assertEquals(uuid, marshalUnmarshal(uuid));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDate() throws Exception {
-        Date date = new Date();
-
-        assertEquals(date, marshalUnmarshal(date));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransient() throws Exception {
-        TransientTestObject obj = marshalUnmarshal(new TransientTestObject(100, 200, "str1", "str2"));
-
-        assertEquals(100, obj.val1);
-        assertEquals(0, obj.val2);
-        assertEquals("str1", obj.str1);
-        assertNull(obj.str2);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testWriteReadObject() throws Exception {
-        WriteReadTestObject obj = marshalUnmarshal(new WriteReadTestObject(100, "str"));
-
-        assertEquals(100, obj.val);
-        assertEquals("Optional data", obj.str);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testWriteReplace() throws Exception {
-        ReplaceTestObject obj = marshalUnmarshal(new ReplaceTestObject(100));
-
-        assertEquals(200, obj.value());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testWriteReplaceNull() throws Exception {
-        ReplaceNullTestObject obj = marshalUnmarshal(new ReplaceNullTestObject());
-
-        assertNull(obj);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReadResolve() throws Exception {
-        ResolveTestObject obj = marshalUnmarshal(new ResolveTestObject(100));
-
-        assertEquals(200, obj.value());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testArrayDeque() throws Exception {
-        Queue<Integer> queue = new ArrayDeque<>();
-
-        for (int i = 0; i < 100; i++)
-            queue.add(i);
-
-        Queue<Integer> newQueue = marshalUnmarshal(queue);
-
-        assertEquals(queue.size(), newQueue.size());
-
-        Integer i;
-
-        while ((i = newQueue.poll()) != null)
-            assertEquals(queue.poll(), i);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testArrayList() throws Exception {
-        Collection<Integer> list = new ArrayList<>();
-
-        for (int i = 0; i < 100; i++)
-            list.add(i);
-
-        assertEquals(list, marshalUnmarshal(list));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testHashMap() throws Exception {
-        Map<Integer, Integer> map = new HashMap<>();
-
-        for (int i = 0; i < 100; i++)
-            map.put(i, i);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testHashSet() throws Exception {
-        Collection<Integer> set = new HashSet<>();
-
-        for (int i = 0; i < 100; i++)
-            set.add(i);
-
-        assertEquals(set, marshalUnmarshal(set));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("UseOfObsoleteCollectionType")
-    public void testHashtable() throws Exception {
-        Map<Integer, Integer> map = new Hashtable<>();
-
-        for (int i = 0; i < 100; i++)
-            map.put(i, i);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testIdentityHashMap() throws Exception {
-        Map<Integer, Integer> map = new IdentityHashMap<>();
-
-        for (int i = 0; i < 100; i++)
-            map.put(i, i);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLinkedHashMap() throws Exception {
-        Map<Integer, Integer> map = new LinkedHashMap<>();
-
-        for (int i = 0; i < 100; i++)
-            map.put(i, i);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLinkedHashSet() throws Exception {
-        Collection<Integer> set = new LinkedHashSet<>();
-
-        for (int i = 0; i < 100; i++)
-            set.add(i);
-
-        assertEquals(set, marshalUnmarshal(set));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testLinkedList() throws Exception {
-        Collection<Integer> list = new LinkedList<>();
-
-        for (int i = 0; i < 100; i++)
-            list.add(i);
-
-        assertEquals(list, marshalUnmarshal(list));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPriorityQueue() throws Exception {
-        Queue<Integer> queue = new PriorityQueue<>();
-
-        for (int i = 0; i < 100; i++)
-            queue.add(i);
-
-        Queue<Integer> newQueue = marshalUnmarshal(queue);
-
-        assertEquals(queue.size(), newQueue.size());
-
-        Integer i;
-
-        while ((i = newQueue.poll()) != null)
-            assertEquals(queue.poll(), i);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testProperties() throws Exception {
-        Properties dflts = new Properties();
-
-        dflts.setProperty("key1", "val1");
-        dflts.setProperty("key2", "wrong");
-
-        Properties props = new Properties(dflts);
-
-        props.setProperty("key2", "val2");
-
-        Properties newProps = marshalUnmarshal(props);
-
-        assertEquals("val1", newProps.getProperty("key1"));
-        assertEquals("val2", newProps.getProperty("key2"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTreeMap() throws Exception {
-        Map<Integer, Integer> map = new TreeMap<>();
-
-        for (int i = 0; i < 100; i++)
-            map.put(i, i);
-
-        assertEquals(map, marshalUnmarshal(map));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTreeSet() throws Exception {
-        Collection<Integer> set = new TreeSet<>();
-
-        for (int i = 0; i < 100; i++)
-            set.add(i);
-
-        assertEquals(set, marshalUnmarshal(set));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("UseOfObsoleteCollectionType")
-    public void testVector() throws Exception {
-        Collection<Integer> vector = new Vector<>();
-
-        for (int i = 0; i < 100; i++)
-            vector.add(i);
-
-        assertEquals(vector, marshalUnmarshal(vector));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testString() throws Exception {
-        assertEquals("Latin", marshalUnmarshal("Latin"));
-        assertEquals("\u041a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430", marshalUnmarshal("\u041a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u0430"));
-        assertEquals("\u4e2d\u56fd\u7684", marshalUnmarshal("\u4e2d\u56fd\u7684"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReadLine() throws Exception {
-        OptimizedObjectInputStream in = new OptimizedObjectInputStream(new GridUnsafeDataInput());
-
-        byte[] bytes = "line1\nline2\r\nli\rne3\nline4".getBytes();
-
-        in.in().bytes(bytes, bytes.length);
-
-        assertEquals("line1", in.readLine());
-        assertEquals("line2", in.readLine());
-        assertEquals("line3", in.readLine());
-        assertEquals("line4", in.readLine());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testHierarchy() throws Exception {
-        C c = new C(100, "str", 200, "str", 300, "str");
-
-        C newC = marshalUnmarshal(c);
-
-        assertEquals(100, newC.valueA());
-        assertEquals("Optional data", newC.stringA());
-        assertEquals(200, newC.valueB());
-        assertNull(newC.stringB());
-        assertEquals(0, newC.valueC());
-        assertEquals("Optional data", newC.stringC());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInet4Address() throws Exception {
-        Inet4Address addr = (Inet4Address)InetAddress.getByName("localhost");
-
-        assertEquals(addr, marshalUnmarshal(addr));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testClass() throws Exception {
-        assertEquals(int.class, marshalUnmarshal(int.class));
-        assertEquals(Long.class, marshalUnmarshal(Long.class));
-        assertEquals(TestObject.class, marshalUnmarshal(TestObject.class));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testWriteReadFields() throws Exception {
-        WriteReadFieldsTestObject obj = marshalUnmarshal(new WriteReadFieldsTestObject(100, "str"));
-
-        assertEquals(100, obj.val);
-        assertEquals("Optional data", obj.str);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testWriteFields() throws Exception {
-        WriteFieldsTestObject obj = marshalUnmarshal(new WriteFieldsTestObject(100, "str"));
-
-        assertEquals(100, obj.val);
-        assertEquals("Optional data", obj.str);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testBigInteger() throws Exception {
-        BigInteger b = new BigInteger("54654865468745468465321414646834562346475457488");
-
-        assertEquals(b, marshalUnmarshal(b));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testBigDecimal() throws Exception {
-        BigDecimal b = new BigDecimal("849572389457208934572093574.123512938654126458542145");
-
-        assertEquals(b, marshalUnmarshal(b));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testSimpleDateFormat() throws Exception {
-        SimpleDateFormat f = new SimpleDateFormat("MM/dd/yyyy");
-
-        assertEquals(f, marshalUnmarshal(f));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testComplexObject() throws Exception {
-        ComplexTestObject obj = new ComplexTestObject();
-
-        assertEquals(obj, marshalUnmarshal(obj));
-
-        ExternalizableTestObject1 extObj1 = new ExternalizableTestObject1();
-
-        extObj1.longVal = 1000L;
-        extObj1.doubleVal = 1000.0d;
-        extObj1.longArr = new Long[] {1000L, 2000L, 3000L};
-        extObj1.doubleArr = new Double[] {1000.0d, 2000.0d, 3000.0d};
-
-        ExternalizableTestObject1 extObj2 = new ExternalizableTestObject1();
-
-        extObj2.longVal = 2000L;
-        extObj2.doubleVal = 2000.0d;
-        extObj2.longArr = new Long[] {4000L, 5000L, 6000L};
-        extObj2.doubleArr = new Double[] {4000.0d, 5000.0d, 6000.0d};
-
-        Properties props = new Properties();
-
-        props.setProperty("name", "value");
-
-        Collection<Integer> col = F.asList(10, 20, 30);
-
-        Map<Integer, String> map = F.asMap(10, "str1", 20, "str2", 30, "str3");
-
-        obj = new ComplexTestObject(
-            (byte)1,
-            (short)10,
-            100,
-            1000L,
-            100.0f,
-            1000.0d,
-            'a',
-            false,
-            (byte)2,
-            (short)20,
-            200,
-            2000L,
-            200.0f,
-            2000.0d,
-            'b',
-            true,
-            new byte[] {1, 2, 3},
-            new short[] {10, 20, 30},
-            new int[] {100, 200, 300},
-            new long[] {1000, 2000, 3000},
-            new float[] {100.0f, 200.0f, 300.0f},
-            new double[] {1000.0d, 2000.0d, 3000.0d},
-            new char[] {'a', 'b', 'c'},
-            new boolean[] {false, true},
-            new ExternalizableTestObject1[] {extObj1, extObj2},
-            "String",
-            TestEnum.A,
-            UUID.randomUUID(),
-            props,
-            new ArrayList<>(col),
-            new HashMap<>(map),
-            new HashSet<>(col),
-            new LinkedList<>(col),
-            new LinkedHashMap<>(map),
-            new LinkedHashSet<>(col),
-            new Date(),
-            ExternalizableTestObject2.class
-        );
-
-        assertEquals(obj, marshalUnmarshal(obj));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReadToArray() throws Exception {
-        OptimizedObjectInputStream in = OptimizedObjectStreamRegistry.in();
-
-        try {
-            byte[] arr = new byte[50];
-
-            for (int i = 0; i < arr.length; i++)
-                arr[i] = (byte)i;
-
-            in.in().bytes(arr, arr.length);
-
-            byte[] buf = new byte[10];
-
-            assertEquals(10, in.read(buf));
-
-            for (int i = 0; i < buf.length; i++)
-                assertEquals(i, buf[i]);
-
-            buf = new byte[30];
-
-            assertEquals(20, in.read(buf, 0, 20));
-
-            for (int i = 0; i < buf.length; i++)
-                assertEquals(i < 20 ? 10 + i : 0, buf[i]);
-
-            buf = new byte[30];
-
-            assertEquals(10, in.read(buf, 10, 10));
-
-            for (int i = 0; i < buf.length; i++)
-                assertEquals(i >= 10 && i < 20 ? 30 + (i - 10) : 0, buf[i]);
-
-            buf = new byte[20];
-
-            assertEquals(10, in.read(buf));
-
-            for (int i = 0; i < buf.length; i++)
-                assertEquals(i < 10 ? 40 + i : 0, buf[i]);
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeIn(in);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testHandleTableGrow() throws Exception {
-        List<String> c = new ArrayList<>();
-
-        for (int i = 0; i < 29; i++)
-            c.add("str");
-
-        String str = c.get(28);
-
-        c.add("str");
-        c.add(str);
-
-        List<Object> c0 = marshalUnmarshal(c);
-
-        assertTrue(c0.get(28) == c0.get(30));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testIncorrectExternalizable() throws Exception {
-        GridTestUtils.assertThrows(
-            log,
-            new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    return marshalUnmarshal(new IncorrectExternalizable());
-                }
-            },
-            IOException.class,
-            null);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testExcludedClass() throws Exception {
-        Class<?>[] exclClasses = U.staticField(MarshallerExclusions.class, "EXCL_CLASSES");
-
-        assertFalse(F.isEmpty(exclClasses));
-
-        for (Class<?> cls : exclClasses)
-            assertEquals(cls, marshalUnmarshal(cls));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInet6Address() throws Exception {
-        final InetAddress address = Inet6Address.getByAddress(new byte[16]);
-
-        assertEquals(address, marshalUnmarshal(address));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
-    public void testPutFieldsWithDefaultWriteObject() throws Exception {
-        try {
-            marshalUnmarshal(new CustomWriteObjectMethodObject("test"));
-        }
-        catch (IOException e) {
-            assert e.getCause() instanceof NotActiveException;
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("ThrowableInstanceNeverThrown")
-    public void testThrowable() throws Exception {
-        Throwable t = new Throwable("Throwable");
-
-        assertEquals(t.getMessage(), ((Throwable)marshalUnmarshal(t)).getMessage());
-    }
-
-    /**
-     * Marshals and unmarshals object.
-     *
-     * @param obj Original object.
-     * @return Object after marshalling and unmarshalling.
-     * @throws Exception In case of error.
-     */
-    private <T> T marshalUnmarshal(@Nullable Object obj) throws Exception {
-        OptimizedObjectOutputStream out = null;
-        OptimizedObjectInputStream in = null;
-
-        try {
-            out = OptimizedObjectStreamRegistry.out();
-
-            out.context(clsMap, CTX, null, true);
-
-            out.writeObject(obj);
-
-            byte[] arr = out.out().array();
-
-            in = OptimizedObjectStreamRegistry.in();
-
-            in.context(clsMap, CTX, null, getClass().getClassLoader());
-
-            in.in().bytes(arr, arr.length);
-
-            Object obj0 = in.readObject();
-
-            checkHandles(out, in);
-
-            return (T)obj0;
-        }
-        finally {
-            OptimizedObjectStreamRegistry.closeOut(out);
-            OptimizedObjectStreamRegistry.closeIn(in);
-        }
-    }
-
-    /**
-     * Checks that handles are equal in output and input streams.
-     *
-     * @param out Output stream.
-     * @param in Input stream.
-     * @throws Exception If failed.
-     */
-    private void checkHandles(OptimizedObjectOutputStream out, OptimizedObjectInputStream in)
-        throws Exception {
-        Object[] outHandles = out.handledObjects();
-        Object[] inHandles = in.handledObjects();
-
-        assertEquals(outHandles.length, inHandles.length);
-
-        for (int i = 0; i < outHandles.length; i++) {
-            if (outHandles[i] == null)
-                assertTrue(inHandles[i] == null);
-            else {
-                assertFalse(inHandles[i] == null);
-
-                assertTrue(outHandles[i].getClass() == inHandles[i].getClass());
-            }
-        }
-    }
-
-    /** */
-    private static class IncorrectExternalizable implements Externalizable {
-        /**
-         * Required by {@link Externalizable}.
-         */
-        public IncorrectExternalizable() {
-            // No-op.
-        }
-
-        /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeInt(0);
-            out.writeInt(200);
-            out.writeObject("str");
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            in.readInt();
-            in.readObject();
-        }
-    }
-
-    /**
-     * Test object.
-     */
-    private static class TestObject implements Serializable {
-        /** */
-        private Long longVal;
-
-        /** */
-        private Double doubleVal;
-
-        /** */
-        private Long[] longArr;
-
-        /** */
-        private Double[] doubleArr;
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            TestObject obj = (TestObject)o;
-
-            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
-                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
-                Arrays.equals(longArr, obj.longArr) &&
-                Arrays.equals(doubleArr, obj.doubleArr);
-        }
-    }
-
-    /**
-     * Externalizable test object.
-     */
-    private static class ExternalizableTestObject1 implements Externalizable {
-        /** */
-        private Long longVal;
-
-        /** */
-        private Double doubleVal;
-
-        /** */
-        private Long[] longArr;
-
-        /** */
-        private Double[] doubleArr;
-
-        /**
-         * Required by {@link Externalizable}.
-         */
-        public ExternalizableTestObject1() {
-            // No-op.
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            ExternalizableTestObject1 obj = (ExternalizableTestObject1)o;
-
-            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
-                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
-                Arrays.equals(longArr, obj.longArr) &&
-                Arrays.equals(doubleArr, obj.doubleArr);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeLong(longVal);
-            out.writeDouble(doubleVal);
-            U.writeArray(out, longArr);
-            U.writeArray(out, doubleArr);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            longVal = in.readLong();
-            doubleVal = in.readDouble();
-
-            Object[] arr = U.readArray(in);
-
-            longArr = Arrays.copyOf(arr, arr.length, Long[].class);
-
-            arr = U.readArray(in);
-
-            doubleArr = Arrays.copyOf(arr, arr.length, Double[].class);
-        }
-    }
-
-    /**
-     * Externalizable test object.
-     */
-    private static class ExternalizableTestObject2 implements Externalizable {
-        /** */
-        private Long longVal;
-
-        /** */
-        private Double doubleVal;
-
-        /** */
-        private Long[] longArr;
-
-        /** */
-        private Double[] doubleArr;
-
-        /**
-         * Required by {@link Externalizable}.
-         */
-        public ExternalizableTestObject2() {
-            // No-op.
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            ExternalizableTestObject2 obj = (ExternalizableTestObject2)o;
-
-            return longVal != null ? longVal.equals(obj.longVal) : obj.longVal == null &&
-                doubleVal != null ? doubleVal.equals(obj.doubleVal) : obj.doubleVal == null &&
-                Arrays.equals(longArr, obj.longArr) &&
-                Arrays.equals(doubleArr, obj.doubleArr);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeLong(longVal);
-            U.writeArray(out, longArr);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            longVal = in.readLong();
-
-            Object[] arr = U.readArray(in);
-
-            longArr = Arrays.copyOf(arr, arr.length, Long[].class);
-        }
-    }
-
-    /**
-     * Test object.
-     */
-    private static class LinkTestObject1 implements Serializable {
-        /** */
-        private int val;
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            LinkTestObject1 obj = (LinkTestObject1)o;
-
-            return val == obj.val;
-        }
-    }
-
-    /**
-     * Test object.
-     */
-    private static class LinkTestObject2 implements Serializable {
-        /** */
-        private LinkTestObject1 ref;
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            LinkTestObject2 obj = (LinkTestObject2)o;
-
-            return ref != null ? ref.equals(obj.ref) : obj.ref == null;
-        }
-    }
-
-    /**
-     * Cycle link test object.
-     */
-    private static class CycleLinkTestObject implements Serializable {
-        /** */
-        private int val;
-
-        /** */
-        private CycleLinkTestObject ref;
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            CycleLinkTestObject obj = (CycleLinkTestObject)o;
-
-            return val == obj.val && ref != null ? ref.val == val : obj.ref == null;
-        }
-    }
-
-    /**
-     * Test object without default constructor.
-     */
-    private static class NoDefaultConstructorTestObject implements Serializable {
-        /** */
-        private int val;
-
-        /**
-         * @param val Value.
-         */
-        private NoDefaultConstructorTestObject(int val) {
-            this.val = val;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            NoDefaultConstructorTestObject obj = (NoDefaultConstructorTestObject)o;
-
-            return val == obj.val;
-        }
-    }
-
-    /**
-     * Test object with transient fields.
-     */
-    @SuppressWarnings("TransientFieldNotInitialized")
-    private static class TransientTestObject implements Serializable {
-        /** */
-        private int val1;
-
-        /** */
-        private transient int val2;
-
-        /** */
-        private String str1;
-
-        /** */
-        private transient String str2;
-
-        /**
-         * @param val1 Value 1.
-         * @param val2 Value 2.
-         * @param str1 String 1.
-         * @param str2 String 2.
-         */
-        private TransientTestObject(int val1, int val2, String str1, String str2) {
-            this.val1 = val1;
-            this.val2 = val2;
-            this.str1 = str1;
-            this.str2 = str2;
-        }
-    }
-
-    /**
-     * Test object with {@code writeObject} and {@code readObject} methods.
-     */
-    @SuppressWarnings("TransientFieldNotInitialized")
-    private static class WriteReadTestObject implements Serializable {
-        /** */
-        private int val;
-
-        /** */
-        private transient String str;
-
-        /**
-         * @param val Value.
-         * @param str String.
-         */
-        private WriteReadTestObject(int val, String str) {
-            this.val = val;
-            this.str = str;
-        }
-
-        /**
-         * @param out Output stream.
-         * @throws IOException In case of error.
-         */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            out.defaultWriteObject();
-
-            out.writeUTF("Optional data");
-        }
-
-        /**
-         * @param in Input stream.
-         * @throws IOException In case of error.
-         * @throws ClassNotFoundException If class not found.
-         */
-        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-            in.defaultReadObject();
-
-            str = in.readUTF();
-        }
-    }
-
-    /**
-     * Test object that uses {@code writeFields} and {@code readFields} methods.
-     */
-    private static class WriteReadFieldsTestObject implements Serializable {
-        /** */
-        private int val;
-
-        /** */
-        private String str;
-
-        /**
-         * @param val Value.
-         * @param str String.
-         */
-        private WriteReadFieldsTestObject(int val, String str) {
-            this.val = val;
-            this.str = str;
-        }
-
-        /**
-         * @param out Output stream.
-         * @throws IOException In case of error.
-         */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            ObjectOutputStream.PutField fields = out.putFields();
-
-            fields.put("val", val);
-            fields.put("str", "Optional data");
-
-            out.writeFields();
-        }
-
-        /**
-         * @param in Input stream.
-         * @throws IOException In case of error.
-         * @throws ClassNotFoundException If class not found.
-         */
-        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-            ObjectInputStream.GetField fields = in.readFields();
-
-            val = fields.get("val", 0);
-            str = (String)fields.get("str", null);
-        }
-    }
-
-    /**
-     * Test object that uses {@code writeFields} and {@code readFields} methods.
-     */
-    private static class WriteFieldsTestObject implements Serializable {
-        /** */
-        private int val;
-
-        /** */
-        @SuppressWarnings("UnusedDeclaration")
-        private String str;
-
-        /**
-         * @param val Value.
-         * @param str String.
-         */
-        private WriteFieldsTestObject(int val, String str) {
-            this.val = val;
-            this.str = str;
-        }
-
-        /**
-         * @param out Output stream.
-         * @throws IOException In case of error.
-         */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            ObjectOutputStream.PutField fields = out.putFields();
-
-            fields.put("val", val);
-            fields.put("str", "Optional data");
-
-            out.writeFields();
-        }
-    }
-
-    /**
-     * Base object with {@code writeReplace} method.
-     */
-    private abstract static class ReplaceTestBaseObject implements Serializable {
-        /** */
-        private int val;
-
-        /**
-         * @param val Value.
-         */
-        private ReplaceTestBaseObject(int val) {
-            this.val = val;
-        }
-
-        /**
-         * @return Value.
-         */
-        public int value() {
-            return val;
-        }
-
-        /**
-         * @return Replaced object.
-         * @throws ObjectStreamException In case of error.
-         */
-        protected Object writeReplace() throws ObjectStreamException {
-            return new ReplaceTestObject(val * 2);
-        }
-    }
-
-    /**
-     * Test object for {@code writeReplace} method.
-     */
-    private static class ReplaceTestObject extends ReplaceTestBaseObject {
-        /**
-         * @param val Value.
-         */
-        private ReplaceTestObject(int val) {
-            super(val);
-        }
-    }
-
-    /**
-     * Test object with {@code writeReplace} method.
-     */
-    private static class ReplaceNullTestObject implements Serializable {
-        /**
-         * @return Replaced object.
-         * @throws ObjectStreamException In case of error.
-         */
-        protected Object writeReplace() throws ObjectStreamException {
-            return null;
-        }
-    }
-
-    /**
-     * Base object with {@code readResolve} method.
-     */
-    private abstract static class ResolveTestBaseObject implements Serializable {
-        /** */
-        private int val;
-
-        /**
-         * @param val Value.
-         */
-        private ResolveTestBaseObject(int val) {
-            this.val = val;
-        }
-
-        /**
-         * @return Value.
-         */
-        public int value() {
-            return val;
-        }
-
-        /**
-         * @return Replaced object.
-         * @throws ObjectStreamException In case of error.
-         */
-        protected Object readResolve() throws ObjectStreamException {
-            return new ResolveTestObject(val * 2);
-        }
-    }
-
-    /**
-     * Test object for {@code readResolve} method.
-     */
-    private static class ResolveTestObject extends ResolveTestBaseObject {
-        /**
-         * @param val Value.
-         */
-        private ResolveTestObject(int val) {
-            super(val);
-        }
-    }
-
-    /**
-     * Class A.
-     */
-    private static class A implements Serializable {
-        /** */
-        private int valA;
-
-        /** */
-        private transient String strA;
-
-        /**
-         * @param valA Value A.
-         * @param strA String A.
-         */
-        A(int valA, String strA) {
-            this.valA = valA;
-            this.strA = strA;
-        }
-
-        /**
-         * @return Value.
-         */
-        int valueA() {
-            return valA;
-        }
-
-        /**
-         * @return String.
-         */
-        String stringA() {
-            return strA;
-        }
-
-        /**
-         * @param out Output stream.
-         * @throws IOException In case of error.
-         */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            out.defaultWriteObject();
-
-            out.writeUTF("Optional data");
-        }
-
-        /**
-         * @param in Input stream.
-         * @throws IOException In case of error.
-         * @throws ClassNotFoundException If class not found.
-         */
-        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-            in.defaultReadObject();
-
-            strA = in.readUTF();
-        }
-    }
-
-    /**
-     * Class B.
-     */
-    private static class B extends A {
-        /** */
-        private int valB;
-
-        /** */
-        @SuppressWarnings("TransientFieldNotInitialized")
-        private transient String strB;
-
-        /**
-         * @param valA Value A.
-         * @param strA String A.
-         * @param valB Value B.
-         * @param strB String B.
-         */
-        B(int valA, String strA, int valB, String strB) {
-            super(valA, strA);
-
-            this.valB = valB;
-            this.strB = strB;
-        }
-
-        /**
-         * @return Value.
-         */
-        int valueB() {
-            return valB;
-        }
-
-        /**
-         * @return String.
-         */
-        String stringB() {
-            return strB;
-        }
-    }
-
-    /**
-     * Class C.
-     */
-    @SuppressWarnings("MethodOverridesPrivateMethodOfSuperclass")
-    private static class C extends B {
-        /** */
-        @SuppressWarnings("InstanceVariableMayNotBeInitializedByReadObject")
-        private int valC;
-
-        /** */
-        private transient String strC;
-
-        /**
-         * @param valA Value A.
-         * @param strA String A.
-         * @param valB Value B.
-         * @param strB String B.
-         * @param valC Value C.
-         * @param strC String C.
-         */
-        C(int valA, String strA, int valB, String strB, int valC, String strC) {
-            super(valA, strA, valB, strB);
-
-            this.valC = valC;
-            this.strC = strC;
-        }
-
-        /**
-         * @return Value.
-         */
-        int valueC() {
-            return valC;
-        }
-
-        /**
-         * @return String.
-         */
-        String stringC() {
-            return strC;
-        }
-
-        /**
-         * @param out Output stream.
-         * @throws IOException In case of error.
-         */
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            out.writeUTF("Optional data");
-        }
-
-        /**
-         * @param in Input stream.
-         * @throws IOException In case of error.
-         * @throws ClassNotFoundException If class not found.
-         */
-        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-            strC = in.readUTF();
-        }
-    }
-
-    /**
-     * Complex test object.
-     */
-    private static class ComplexTestObject implements Serializable {
-        /** */
-        private byte byteVal1;
-
-        /** */
-        private short shortVal1;
-
-        /** */
-        private int intVal1;
-
-        /** */
-        private long longVal1;
-
-        /** */
-        private float floatVal1;
-
-        /** */
-        private double doubleVal1;
-
-        /** */
-        private char cVal1;
-
-        /** */
-        private boolean boolVal1;
-
-        /** */
-        private Byte byteVal2;
-
-        /** */
-        private Short shortVal2;
-
-        /** */
-        private Integer intVal2;
-
-        /** */
-        private Long longVal2;
-
-        /** */
-        private Float floatVal2;
-
-        /** */
-        private Double doubleVal2;
-
-        /** */
-        private Character cVal2;
-
-        /** */
-        private Boolean boolVal2;
-
-        /** */
-        private byte[] byteArr;
-
-        /** */
-        private short[] shortArr;
-
-        /** */
-        private int[] intArr;
-
-        /** */
-        private long[] longArr;
-
-        /** */
-        private float[] floatArr;
-
-        /** */
-        private double[] doubleArr;
-
-        /** */
-        private char[] cArr;
-
-        /** */
-        private boolean[] boolArr;
-
-        /** */
-        private ExternalizableTestObject1[] objArr;
-
-        /** */
-        private String str;
-
-        /** */
-        private TestEnum enumVal;
-
-        /** */
-        private UUID uuid;
-
-        /** */
-        private Properties props;
-
-        /** */
-        private ArrayList<Integer> arrList;
-
-        /** */
-        private HashMap<Integer, String> hashMap;
-
-        /** */
-        private HashSet<Integer> hashSet;
-
-        /** */
-        private LinkedList<Integer> linkedList;
-
-        /** */
-        private LinkedHashMap<Integer, String> linkedHashMap;
-
-        /** */
-        private LinkedHashSet<Integer> linkedHashSet;
-
-        /** */
-        private Date date;
-
-        /** */
-        private Class<?> cls;
-
-        /** */
-        private ComplexTestObject self;
-
-        /** */
-        private ComplexTestObject() {
-            self = this;
-        }
-
-        /**
-         * @param byteVal1 Byte value.
-         * @param shortVal1 Short value.
-         * @param intVal1 Integer value.
-         * @param longVal1 Long value.
-         * @param floatVal1 Float value.
-         * @param doubleVal1 Double value.
-         * @param cVal1 Char value.
-         * @param boolVal1 Boolean value.
-         * @param byteVal2 Byte value.
-         * @param shortVal2 Short value.
-         * @param intVal2 Integer value.
-         * @param longVal2 Long value.
-         * @param floatVal2 Float value.
-         * @param doubleVal2 Double value.
-         * @param cVal2 Char value.
-         * @param boolVal2 Boolean value.
-         * @param byteArr Bytes array.
-         * @param shortArr Shorts array.
-         * @param intArr Integers array.
-         * @param longArr Longs array.
-         * @param floatArr Floats array.
-         * @param doubleArr Doubles array.
-         * @param cArr Chars array.
-         * @param boolArr Booleans array.
-         * @param objArr Objects array.
-         * @param str String.
-         * @param enumVal Enum.
-         * @param uuid UUID.
-         * @param props Properties.
-         * @param arrList ArrayList.
-         * @param hashMap HashMap.
-         * @param hashSet HashSet.
-         * @param linkedList LinkedList.
-         * @param linkedHashMap LinkedHashMap.
-         * @param linkedHashSet LinkedHashSet.
-         * @param date Date.
-         * @param cls Class.
-         */
-        private ComplexTestObject(byte byteVal1, short shortVal1, int intVal1, long longVal1, float floatVal1,
-            double doubleVal1, char cVal1, boolean boolVal1, Byte byteVal2, Short shortVal2, Integer intVal2,
-            Long longVal2, Float floatVal2, Double doubleVal2, Character cVal2, Boolean boolVal2, byte[] byteArr,
-            short[] shortArr, int[] intArr, long[] longArr, float[] floatArr, double[] doubleArr, char[] cArr,
-            boolean[] boolArr, ExternalizableTestObject1[] objArr, String str, TestEnum enumVal, UUID uuid,
-            Properties props, ArrayList<Integer> arrList, HashMap<Integer, String> hashMap, HashSet<Integer> hashSet,
-            LinkedList<Integer> linkedList, LinkedHashMap<Integer, String> linkedHashMap,
-            LinkedHashSet<Integer> linkedHashSet, Date date, Class<?> cls) {
-            this.byteVal1 = byteVal1;
-            this.shortVal1 = shortVal1;
-            this.intVal1 = intVal1;
-            this.longVal1 = longVal1;
-            this.floatVal1 = floatVal1;
-            this.doubleVal1 = doubleVal1;
-            this.cVal1 = cVal1;
-            this.boolVal1 = boolVal1;
-            this.byteVal2 = byteVal2;
-            this.shortVal2 = shortVal2;
-            this.intVal2 = intVal2;
-            this.longVal2 = longVal2;
-            this.floatVal2 = floatVal2;
-            this.doubleVal2 = doubleVal2;
-            this.cVal2 = cVal2;
-            this.boolVal2 = boolVal2;
-            this.byteArr = byteArr;
-            this.shortArr = shortArr;
-            this.intArr = intArr;
-            this.longArr = longArr;
-            this.floatArr = floatArr;
-            this.doubleArr = doubleArr;
-            this.cArr = cArr;
-            this.boolArr = boolArr;
-            this.objArr = objArr;
-            this.str = str;
-            this.enumVal = enumVal;
-            this.uuid = uuid;
-            this.props = props;
-            this.arrList = arrList;
-            this.hashMap = hashMap;
-            this.hashSet = hashSet;
-            this.linkedList = linkedList;
-            this.linkedHashMap = linkedHashMap;
-            this.linkedHashSet = linkedHashSet;
-            this.date = date;
-            this.cls = cls;
-
-            self = this;
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings("RedundantIfStatement")
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            ComplexTestObject obj = (ComplexTestObject)o;
-
-            if (boolVal1 != obj.boolVal1)
-                return false;
-
-            if (byteVal1 != obj.byteVal1)
-                return false;
-
-            if (cVal1 != obj.cVal1)
-                return false;
-
-            if (Double.compare(obj.doubleVal1, doubleVal1) != 0)
-                return false;
-
-            if (Float.compare(obj.floatVal1, floatVal1) != 0)
-                return false;
-
-            if (intVal1 != obj.intVal1)
-                return false;
-
-            if (longVal1 != obj.longVal1)
-                return false;
-
-            if (shortVal1 != obj.shortVal1)
-                return false;
-
-            if (arrList != null ? !arrList.equals(obj.arrList) : obj.arrList != null)
-                return false;
-
-            if (!Arrays.equals(boolArr, obj.boolArr))
-                return false;
-
-            if (boolVal2 != null ? !boolVal2.equals(obj.boolVal2) : obj.boolVal2 != null)
-                return false;
-
-            if (!Arrays.equals(byteArr, obj.byteArr))
-                return false;
-
-            if (byteVal2 != null ? !byteVal2.equals(obj.byteVal2) : obj.byteVal2 != null)
-                return false;
-
-            if (!Arrays.equals(cArr, obj.cArr))
-                return false;
-
-            if (cVal2 != null ? !cVal2.equals(obj.cVal2) : obj.cVal2 != null)
-                return false;
-
-            if (cls != null ? !cls.equals(obj.cls) : obj.cls != null)
-                return false;
-
-            if (date != null ? !date.equals(obj.date) : obj.date != null)
-                return false;
-
-            if (!Arrays.equals(doubleArr, obj.doubleArr))
-                return false;
-
-            if (doubleVal2 != null ? !doubleVal2.equals(obj.doubleVal2) : obj.doubleVal2 != null)
-                return false;
-
-            if (enumVal != obj.enumVal)
-                return false;
-
-            if (!Arrays.equals(floatArr, obj.floatArr))
-                return false;
-
-            if (floatVal2 != null ? !floatVal2.equals(obj.floatVal2) : obj.floatVal2 != null)
-                return false;
-
-            if (hashMap != null ? !hashMap.equals(obj.hashMap) : obj.hashMap != null)
-                return false;
-
-            if (hashSet != null ? !hashSet.equals(obj.hashSet) : obj.hashSet != null)
-                return false;
-
-            if (!Arrays.equals(intArr, obj.intArr))
-                return false;
-
-            if (intVal2 != null ? !intVal2.equals(obj.intVal2) : obj.intVal2 != null)
-                return false;
-
-            if (linkedHashMap != null ? !linkedHashMap.equals(obj.linkedHashMap) : obj.linkedHashMap != null)
-                return false;
-
-            if (linkedHashSet != null ? !linkedHashSet.equals(obj.linkedHashSet) : obj.linkedHashSet != null)
-                return false;
-
-            if (linkedList != null ? !linkedList.equals(obj.linkedList) : obj.linkedList != null)
-                return false;
-
-            if (!Arrays.equals(longArr, obj.longArr))
-                return false;
-
-            if (longVal2 != null ? !longVal2.equals(obj.longVal2) : obj.longVal2 != null)
-                return false;
-
-            if (!Arrays.equals(objArr, obj.objArr))
-                return false;
-
-            if (props != null ? !props.equals(obj.props) : obj.props != null)
-                return false;
-
-            if (!Arrays.equals(shortArr, obj.shortArr))
-                return false;
-
-            if (shortVal2 != null ? !shortVal2.equals(obj.shortVal2) : obj.shortVal2 != null)
-                return false;
-
-            if (str != null ? !str.equals(obj.str) : obj.str != null)
-                return false;
-
-            if (uuid != null ? !uuid.equals(obj.uuid) : obj.uuid != null)
-                return false;
-
-            if (self != this)
-                return false;
-
-            return true;
-        }
-    }
-
-    /**
-     * Test enum.
-     */
-    @SuppressWarnings("JavaDoc")
-    private enum TestEnum {
-        /** */
-        A,
-
-        /** */
-        B,
-
-        /** */
-        C
-    }
-
-    /**
-     * Class with custom serialization method which at the beginning invokes
-     * {@link ObjectOutputStream#defaultWriteObject()} and {@link ObjectOutputStream#putFields()} then.
-     */
-    public static class CustomWriteObjectMethodObject implements Serializable {
-        /** */
-        private final String name;
-
-        /**
-         * Creates new instance.
-         * @param name Object name.
-         */
-        public CustomWriteObjectMethodObject(String name) {
-            this.name = name;
-        }
-
-        /** {@inheritDoc} */
-        private void writeObject(ObjectOutputStream stream) throws IOException {
-            stream.defaultWriteObject();
-
-            ObjectOutputStream.PutField fields = stream.putFields();
-            fields.put("name", "test");
-
-            stream.writeFields();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
deleted file mode 100644
index f72e77a..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/TestTcpDiscoveryIpFinderAdapter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.marshaller.optimized;
-
-import java.net.InetSocketAddress;
-import java.util.Collection;
-import org.apache.ignite.spi.IgniteSpiException;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter;
-
-/**
- * Test TCP discovery IP finder adapter.
- */
-public class TestTcpDiscoveryIpFinderAdapter extends TcpDiscoveryIpFinderAdapter {
-    /** {@inheritDoc} */
-    @Override public Collection<InetSocketAddress> getRegisteredAddresses() throws IgniteSpiException {
-        return null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void registerAddresses(Collection<InetSocketAddress> addrs) throws IgniteSpiException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public void unregisterAddresses(Collection<InetSocketAddress> addrs) throws IgniteSpiException {
-        // No-op.
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/package-info.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/package-info.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/package-info.java
deleted file mode 100644
index 2b5a692..0000000
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 description. -->
- * Optimized marchalling test package.
- */
-package org.apache.ignite.marshaller.optimized;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java b/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
index b731b4b..ddf0149 100644
--- a/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/messaging/IgniteMessagingWithClientTest.java
@@ -27,9 +27,9 @@ import org.apache.ignite.IgniteMessaging;
 import org.apache.ignite.cluster.ClusterGroup;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
index d3ffb96..541b3a2 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoveryMarshallerCheckSelfTest.java
@@ -19,8 +19,8 @@ package org.apache.ignite.spi.discovery.tcp;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
index df2ea22..0a66872 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryMarshallerCheckSelfTest.java
@@ -19,8 +19,8 @@ package org.apache.ignite.spi.discovery.tcp;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
index 4666581..549385f 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariations.java
@@ -45,7 +45,6 @@ import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.configuration.TopologyValidator;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.cache.MapCacheStoreStrategy;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.spi.swapspace.inmemory.GridTestSwapSpaceSpi;
 
 import static org.apache.ignite.internal.util.lang.GridFunc.asArray;
@@ -104,7 +103,7 @@ public class ConfigVariations {
     /** */
     @SuppressWarnings("unchecked")
     private static final ConfigParameter<IgniteConfiguration>[][] BASIC_IGNITE_SET = new ConfigParameter[][] {
-        Parameters.objectParameters("setMarshaller", Parameters.factory(BinaryMarshaller.class), optimizedMarshallerFactory()),
+        Parameters.objectParameters("setMarshaller", Parameters.factory(BinaryMarshaller.class), binaryMarshallerFactory()),
         Parameters.booleanParameters("setPeerClassLoadingEnabled"),
         Parameters.objectParameters("setSwapSpaceSpi", Parameters.factory(GridTestSwapSpaceSpi.class)),
     };
@@ -215,14 +214,10 @@ public class ConfigVariations {
     /**
      * @return Marshaller.
      */
-    public static Factory<OptimizedMarshaller> optimizedMarshallerFactory() {
-        return new Factory<OptimizedMarshaller>() {
-            @Override public OptimizedMarshaller create() {
-                OptimizedMarshaller marsh = new OptimizedMarshaller(true);
-
-                marsh.setRequireSerializable(false);
-
-                return marsh;
+    public static Factory<BinaryMarshaller> binaryMarshallerFactory() {
+        return new Factory<BinaryMarshaller>() {
+            @Override public BinaryMarshaller create() {
+                return new BinaryMarshaller();
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
index 4d861d0..7017e00 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
@@ -28,15 +28,15 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.resource.GridResourceProcessor;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.logger.NullLogger;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.resources.LoggerResource;
 import org.apache.ignite.testframework.config.GridTestProperties;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
index 438132c..837523d 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryBasicTestSuite.java
@@ -25,6 +25,13 @@ import org.apache.ignite.internal.GridReleaseTypeSelfTest;
 import org.apache.ignite.internal.GridVersionSelfTest;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.managers.deployment.GridDeploymentMessageCountSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerEnumSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerNodeFailoverTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerPooledSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerSerialPersistentFieldsSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedObjectStreamSelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheP2pUnmarshallingErrorTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheP2pUnmarshallingNearErrorTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheP2pUnmarshallingRebalanceErrorTest;
@@ -39,13 +46,6 @@ import org.apache.ignite.internal.util.nio.GridNioSelfTest;
 import org.apache.ignite.internal.util.nio.GridNioSslSelfTest;
 import org.apache.ignite.marshaller.DynamicProxySerializationMultiJvmSelfTest;
 import org.apache.ignite.marshaller.jdk.GridJdkMarshallerSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerEnumSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerNodeFailoverTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerPooledSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerSerialPersistentFieldsSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerTest;
-import org.apache.ignite.marshaller.optimized.OptimizedObjectStreamSelfTest;
 import org.apache.ignite.messaging.GridMessagingNoPeerClassLoadingSelfTest;
 import org.apache.ignite.messaging.GridMessagingSelfTest;
 import org.apache.ignite.testframework.config.GridTestProperties;

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
index db4909e..f5bcd66 100755
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
@@ -35,17 +35,15 @@ import org.apache.ignite.cache.store.StoreResourceInjectionSelfTest;
 import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreBinaryMarshallerSelfTest;
 import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreBinaryMarshallerWithSqlEscapeSelfTest;
 import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreMultitreadedSelfTest;
-import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreOptimizedMarshallerSelfTest;
-import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest;
 import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreTest;
 import org.apache.ignite.cache.store.jdbc.GridCacheJdbcBlobStoreMultithreadedSelfTest;
 import org.apache.ignite.cache.store.jdbc.GridCacheJdbcBlobStoreSelfTest;
+import org.apache.ignite.cache.store.jdbc.JdbcTypesDefaultTransformerTest;
 import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalanceMultipleConnectionsTest;
 import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalancePairedConnectionsTest;
 import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalanceTest;
 import org.apache.ignite.internal.managers.communication.IgniteIoTestMessagesTest;
 import org.apache.ignite.internal.managers.communication.IgniteVariousConnectionNumberTest;
-import org.apache.ignite.cache.store.jdbc.JdbcTypesDefaultTransformerTest;
 import org.apache.ignite.internal.processors.cache.CacheAffinityCallSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheDeferredDeleteQueueTest;
 import org.apache.ignite.internal.processors.cache.CacheDeferredDeleteSanitySelfTest;
@@ -262,8 +260,6 @@ public class IgniteCacheTestSuite extends TestSuite {
         suite.addTestSuite(GridCacheJdbcBlobStoreMultithreadedSelfTest.class);
         suite.addTestSuite(JdbcTypesDefaultTransformerTest.class);
         suite.addTestSuite(CacheJdbcPojoStoreTest.class);
-        suite.addTestSuite(CacheJdbcPojoStoreOptimizedMarshallerSelfTest.class);
-        suite.addTestSuite(CacheJdbcPojoStoreOptimizedMarshallerWithSqlEscapeSelfTest.class);
         suite.addTestSuite(CacheJdbcPojoStoreBinaryMarshallerSelfTest.class);
         suite.addTestSuite(CacheJdbcPojoStoreBinaryMarshallerWithSqlEscapeSelfTest.class);
         suite.addTestSuite(CacheJdbcPojoStoreMultitreadedSelfTest.class);

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeBasicConfigVariationsFullApiTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeBasicConfigVariationsFullApiTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeBasicConfigVariationsFullApiTestSuite.java
index 1be932a..41cc8a1 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeBasicConfigVariationsFullApiTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeBasicConfigVariationsFullApiTestSuite.java
@@ -37,7 +37,7 @@ public class IgniteComputeBasicConfigVariationsFullApiTestSuite extends TestSuit
         Parameters.objectParameters("setMarshaller",
             Parameters.factory(JdkMarshaller.class),
             Parameters.factory(BinaryMarshaller.class),
-            ConfigVariations.optimizedMarshallerFactory()
+            ConfigVariations.binaryMarshallerFactory()
         ),
         Parameters.booleanParameters("setPeerClassLoadingEnabled"),
         Parameters.booleanParameters("setMarshalLocalJobs"),

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
index 22d3add..98a6bde 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMarshallerSelfTestSuite.java
@@ -20,17 +20,17 @@ package org.apache.ignite.testsuites;
 import java.util.Set;
 import junit.framework.TestSuite;
 import org.apache.ignite.internal.direct.stream.v2.DirectByteBufferStreamImplV2ByteOrderSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerEnumSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerNodeFailoverTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerPooledSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerSerialPersistentFieldsSelfTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerTest;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedObjectStreamSelfTest;
 import org.apache.ignite.internal.util.GridHandleTableSelfTest;
 import org.apache.ignite.internal.util.io.GridUnsafeDataInputOutputByteOrderSelfTest;
 import org.apache.ignite.internal.util.io.GridUnsafeDataOutputArraySizingSelfTest;
 import org.apache.ignite.marshaller.jdk.GridJdkMarshallerSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerEnumSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerNodeFailoverTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerPooledSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerSerialPersistentFieldsSelfTest;
-import org.apache.ignite.marshaller.optimized.OptimizedMarshallerTest;
-import org.apache.ignite.marshaller.optimized.OptimizedObjectStreamSelfTest;
 import org.apache.ignite.testframework.GridTestUtils;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMessagingConfigVariationFullApiTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMessagingConfigVariationFullApiTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMessagingConfigVariationFullApiTestSuite.java
index bfb9cd1..0490a92 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMessagingConfigVariationFullApiTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteMessagingConfigVariationFullApiTestSuite.java
@@ -37,7 +37,7 @@ public class IgniteMessagingConfigVariationFullApiTestSuite extends TestSuite {
         Parameters.objectParameters("setMarshaller",
             Parameters.factory(JdkMarshaller.class),
             Parameters.factory(BinaryMarshaller.class),
-            ConfigVariations.optimizedMarshallerFactory()
+            ConfigVariations.binaryMarshallerFactory()
         ),
         Parameters.booleanParameters("setPeerClassLoadingEnabled")
     };

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteServiceConfigVariationsFullApiTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteServiceConfigVariationsFullApiTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteServiceConfigVariationsFullApiTestSuite.java
index 328ae8d..84af386 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteServiceConfigVariationsFullApiTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteServiceConfigVariationsFullApiTestSuite.java
@@ -37,7 +37,7 @@ public class IgniteServiceConfigVariationsFullApiTestSuite extends TestSuite {
         Parameters.objectParameters("setMarshaller",
             Parameters.factory(JdkMarshaller.class),
             Parameters.factory(BinaryMarshaller.class),
-            ConfigVariations.optimizedMarshallerFactory()
+            ConfigVariations.binaryMarshallerFactory()
         ),
 
         Parameters.booleanParameters("setPeerClassLoadingEnabled")

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
----------------------------------------------------------------------
diff --git a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
index 7fdd559..cb781e0 100644
--- a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
+++ b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
@@ -51,7 +51,7 @@
             Configure optimized marshaller.
         -->
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
                 <!--
                     For better performance set this property to true in case
                     all marshalled classes implement java.io.Serializable.

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
index dd3da7c..03cf945 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-0.xml
@@ -54,7 +54,7 @@
         <property name="gridName" value="IGFS-cli-0"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
index c577d28..a6022fa 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-1.xml
@@ -54,7 +54,7 @@
         <property name="gridName" value="IGFS-cli-1"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
index 1f7eaa3..6cfcf57 100644
--- a/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
+++ b/modules/hadoop/src/test/config/hadoop-fs-open-test/grid-2.xml
@@ -54,7 +54,7 @@
         <property name="gridName" value="IGFS-cli-2"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml b/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
index bd2ae87..488d8d9 100644
--- a/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
+++ b/modules/hadoop/src/test/config/igfs-cli-config-dual-async.xml
@@ -55,7 +55,7 @@
         <property name="gridName" value="test-IGFS-cli"/>
 
         <property name="marshaller">
-            <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+            <bean class="org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller">
             </bean>
         </property>
 


[12/14] ignite git commit: IGNITE-4938 OptimizedMarshaller de-pub take 3 - removed redundant test suites

Posted by ag...@apache.org.
IGNITE-4938 OptimizedMarshaller de-pub take 3 - removed redundant test suites


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1115ca5f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1115ca5f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1115ca5f

Branch: refs/heads/ignite-4938
Commit: 1115ca5f81dc1a729cc16bcffd6ad5697b82e319
Parents: 7942d58
Author: Alexander Paschenko <al...@gmail.com>
Authored: Wed Apr 12 03:44:42 2017 +0300
Committer: Alexander Paschenko <al...@gmail.com>
Committed: Wed Apr 12 03:44:42 2017 +0300

----------------------------------------------------------------------
 ...naryObjectsTxDeadlockDetectionTestSuite.java | 37 -------------------
 .../IgniteBinaryCacheFullApiTestSuite.java      | 37 -------------------
 .../testsuites/IgniteBinaryCacheTestSuite.java  |  4 --
 ...ObjectsCacheDataStructuresSelfTestSuite.java | 37 -------------------
 ...BinaryObjectsCacheExpiryPolicyTestSuite.java | 38 -------------------
 ...gniteBinaryObjectsCacheRestartTestSuite.java | 37 -------------------
 .../IgniteBinaryObjectsCacheTestSuite2.java     | 37 -------------------
 .../IgniteBinaryObjectsCacheTestSuite3.java     |  2 -
 .../IgniteBinaryObjectsCacheTestSuite4.java     | 37 -------------------
 ...IgniteBinaryObjectsComputeGridTestSuite.java |  4 --
 .../IgniteBinaryCacheQueryTestSuite.java        |  4 --
 .../IgniteBinaryCacheQueryTestSuite2.java       |  4 --
 .../IgniteBinaryCacheQueryTestSuite3.java       | 39 --------------------
 .../IgniteBinaryCacheQueryTestSuite4.java       | 39 --------------------
 14 files changed, 356 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/BinaryObjectsTxDeadlockDetectionTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/BinaryObjectsTxDeadlockDetectionTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/BinaryObjectsTxDeadlockDetectionTestSuite.java
deleted file mode 100644
index 45afba2..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/BinaryObjectsTxDeadlockDetectionTestSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class BinaryObjectsTxDeadlockDetectionTestSuite {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return TxDeadlockDetectionTestSuite.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheFullApiTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheFullApiTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheFullApiTestSuite.java
deleted file mode 100644
index e891d35..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheFullApiTestSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- * Cache full API suite with binary marshaller.
- */
-public class IgniteBinaryCacheFullApiTestSuite extends TestSuite {
-    /**
-     * @return Suite.
-     * @throws Exception In case of error.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheFullApiSelfTestSuite.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
index 2668598..1101c90 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
@@ -19,7 +19,6 @@ package org.apache.ignite.testsuites;
 
 import java.util.HashSet;
 import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.cache.GridCacheAffinityRoutingSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheEntryMemorySizeSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheMvccSelfTest;
@@ -46,7 +45,6 @@ import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCa
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesPartitionedOnlyByteArrayValuesSelfTest;
 import org.apache.ignite.internal.processors.cache.expiry.IgniteCacheAtomicLocalOffheapExpiryPolicyTest;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamProcessorSelfTest;
-import org.apache.ignite.testframework.config.GridTestProperties;
 
 /**
  * Cache suite with binary marshaller.
@@ -57,8 +55,6 @@ public class IgniteBinaryCacheTestSuite extends TestSuite {
      * @throws Exception In case of error.
      */
     public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
         TestSuite suite = new TestSuite("Binary Cache Test Suite");
 
         HashSet<Class> ignoredTests = new HashSet<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheDataStructuresSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheDataStructuresSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheDataStructuresSelfTestSuite.java
deleted file mode 100644
index e15540a..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheDataStructuresSelfTestSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class IgniteBinaryObjectsCacheDataStructuresSelfTestSuite {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheDataStructuresSelfTestSuite.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheExpiryPolicyTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheExpiryPolicyTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheExpiryPolicyTestSuite.java
deleted file mode 100644
index 7cb4051..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheExpiryPolicyTestSuite.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class IgniteBinaryObjectsCacheExpiryPolicyTestSuite {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheExpiryPolicyTestSuite.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheRestartTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheRestartTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheRestartTestSuite.java
deleted file mode 100644
index e3c9f68..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheRestartTestSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class IgniteBinaryObjectsCacheRestartTestSuite {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheRestartTestSuite.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite2.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite2.java
deleted file mode 100644
index c13693b..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite2.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class IgniteBinaryObjectsCacheTestSuite2 {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheTestSuite2.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite3.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite3.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite3.java
index d80478b..8d21580 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite3.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite3.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.testsuites;
 
 import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.cache.binary.GridCacheBinaryAtomicEntryProcessorDeploymentSelfTest;
 import org.apache.ignite.internal.processors.cache.binary.GridCacheBinaryTransactionalEntryProcessorDeploymentSelfTest;
 import org.apache.ignite.testframework.config.GridTestProperties;
@@ -32,7 +31,6 @@ public class IgniteBinaryObjectsCacheTestSuite3 {
      * @throws Exception If failed.
      */
     public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
         GridTestProperties.setProperty(GridTestProperties.ENTRY_PROCESSOR_CLASS_NAME,
             "org.apache.ignite.tests.p2p.CacheDeploymentBinaryEntryProcessor");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite4.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite4.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite4.java
deleted file mode 100644
index 2292a93..0000000
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsCacheTestSuite4.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- *
- */
-public class IgniteBinaryObjectsCacheTestSuite4 {
-    /**
-     * @return Test suite.
-     * @throws Exception If failed.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        return IgniteCacheTestSuite4.suite();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsComputeGridTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsComputeGridTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsComputeGridTestSuite.java
index e659966..8798db9 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsComputeGridTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsComputeGridTestSuite.java
@@ -19,8 +19,6 @@ package org.apache.ignite.testsuites;
 
 import junit.framework.TestSuite;
 import org.apache.ignite.internal.GridComputationBinarylizableClosuresSelfTest;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
 
 /**
  *
@@ -31,8 +29,6 @@ public class IgniteBinaryObjectsComputeGridTestSuite {
      * @throws Exception If failed.
      */
     public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
         TestSuite suite = IgniteComputeGridTestSuite.suite();
 
         suite.addTestSuite(GridComputationBinarylizableClosuresSelfTest.class);

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
index e957f0f..92fda7b 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
@@ -18,13 +18,11 @@
 package org.apache.ignite.testsuites;
 
 import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.cache.BinarySerializationQuerySelfTest;
 import org.apache.ignite.internal.processors.cache.BinarySerializationQueryWithReflectiveSerializerSelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheBinaryObjectsScanSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.GridCacheBinaryDuplicateIndexObjectPartitionedAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.GridCacheBinaryDuplicateIndexObjectPartitionedTransactionalSelfTest;
-import org.apache.ignite.testframework.config.GridTestProperties;
 
 /**
  * Cache query suite with binary marshaller.
@@ -35,8 +33,6 @@ public class IgniteBinaryCacheQueryTestSuite extends TestSuite {
      * @throws Exception In case of error.
      */
     public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
         TestSuite suite = IgniteCacheQuerySelfTestSuite.suite();
 
         // Serialization.

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite2.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite2.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite2.java
index 359c7fd..ce2a666 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite2.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite2.java
@@ -18,9 +18,7 @@
 package org.apache.ignite.testsuites;
 
 import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.cache.IgniteCacheQueriesLoadTest1;
-import org.apache.ignite.testframework.config.GridTestProperties;
 
 /**
  * Cache query suite with binary marshaller.
@@ -31,8 +29,6 @@ public class IgniteBinaryCacheQueryTestSuite2 extends TestSuite {
      * @throws Exception In case of error.
      */
     public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
         TestSuite suite = IgniteCacheQuerySelfTestSuite2.suite();
 
         suite.addTestSuite(IgniteCacheQueriesLoadTest1.class);

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
deleted file mode 100644
index f9e9af2..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- * Cache query suite with binary marshaller.
- */
-public class IgniteBinaryCacheQueryTestSuite3 extends TestSuite {
-    /**
-     * @return Suite.
-     * @throws Exception In case of error.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        TestSuite suite = IgniteCacheQuerySelfTestSuite3.suite();
-
-        return suite;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1115ca5f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
deleted file mode 100644
index 32a693f..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.testsuites;
-
-import junit.framework.TestSuite;
-import org.apache.ignite.internal.binary.BinaryMarshaller;
-import org.apache.ignite.testframework.config.GridTestProperties;
-
-/**
- * Cache query suite with binary marshaller.
- */
-public class IgniteBinaryCacheQueryTestSuite4 extends TestSuite {
-    /**
-     * @return Suite.
-     * @throws Exception In case of error.
-     */
-    public static TestSuite suite() throws Exception {
-        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
-
-        TestSuite suite = IgniteCacheQuerySelfTestSuite4.suite();
-
-        return suite;
-    }
-}


[08/14] ignite git commit: IGNITE-4938 De-pub of OptimizedMarshaller - take 1

Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
new file mode 100644
index 0000000..f9a6df9
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
@@ -0,0 +1,551 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.IOException;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashSet;
+import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+
+import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID;
+
+/**
+ * Miscellaneous utility methods to facilitate {@link OptimizedMarshaller}.
+ */
+class OptimizedMarshallerUtils {
+    /** */
+    static final long HASH_SET_MAP_OFF;
+
+    /** */
+    static final byte JDK = -2;
+
+    /** */
+    static final byte HANDLE = -1;
+
+    /** */
+    static final byte NULL = 0;
+
+    /** */
+    static final byte BYTE = 1;
+
+    /** */
+    static final byte SHORT = 2;
+
+    /** */
+    static final byte INT = 3;
+
+    /** */
+    static final byte LONG = 4;
+
+    /** */
+    static final byte FLOAT = 5;
+
+    /** */
+    static final byte DOUBLE = 6;
+
+    /** */
+    static final byte CHAR = 7;
+
+    /** */
+    static final byte BOOLEAN = 8;
+
+    /** */
+    static final byte BYTE_ARR = 9;
+
+    /** */
+    static final byte SHORT_ARR = 10;
+
+    /** */
+    static final byte INT_ARR = 11;
+
+    /** */
+    static final byte LONG_ARR = 12;
+
+    /** */
+    static final byte FLOAT_ARR = 13;
+
+    /** */
+    static final byte DOUBLE_ARR = 14;
+
+    /** */
+    static final byte CHAR_ARR = 15;
+
+    /** */
+    static final byte BOOLEAN_ARR = 16;
+
+    /** */
+    static final byte OBJ_ARR = 17;
+
+    /** */
+    static final byte STR = 18;
+
+    /** */
+    static final byte UUID = 19;
+
+    /** */
+    static final byte PROPS = 20;
+
+    /** */
+    static final byte ARRAY_LIST = 21;
+
+    /** */
+    static final byte HASH_MAP = 22;
+
+    /** */
+    static final byte HASH_SET = 23;
+
+    /** */
+    static final byte LINKED_LIST = 24;
+
+    /** */
+    static final byte LINKED_HASH_MAP = 25;
+
+    /** */
+    static final byte LINKED_HASH_SET = 26;
+
+    /** */
+    static final byte DATE = 27;
+
+    /** */
+    static final byte CLS = 28;
+
+    /** */
+    static final byte PROXY = 29;
+
+    /** */
+    static final byte ENUM = 100;
+
+    /** */
+    static final byte EXTERNALIZABLE = 101;
+
+    /** */
+    static final byte SERIALIZABLE = 102;
+
+    /** UTF-8 character name. */
+    static final Charset UTF_8 = Charset.forName("UTF-8");
+
+    /** JDK marshaller. */
+    static final JdkMarshaller JDK_MARSH = new JdkMarshaller();
+
+    static {
+        long mapOff;
+
+        try {
+            mapOff = GridUnsafe.objectFieldOffset(HashSet.class.getDeclaredField("map"));
+        }
+        catch (NoSuchFieldException ignored) {
+            try {
+                // Workaround for legacy IBM JRE.
+                mapOff = GridUnsafe.objectFieldOffset(HashSet.class.getDeclaredField("backingMap"));
+            }
+            catch (NoSuchFieldException e2) {
+                throw new IgniteException("Initialization failure.", e2);
+            }
+        }
+
+        HASH_SET_MAP_OFF = mapOff;
+    }
+
+    /**
+     */
+    private OptimizedMarshallerUtils() {
+        // No-op.
+    }
+
+    /**
+     * Gets descriptor for provided class.
+     *
+     * @param clsMap Class descriptors by class map.
+     * @param cls Class.
+     * @param ctx Context.
+     * @param mapper ID mapper.
+     * @return Descriptor.
+     * @throws IOException In case of error.
+     */
+    static OptimizedClassDescriptor classDescriptor(
+        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+        Class cls,
+        MarshallerContext ctx,
+        OptimizedMarshallerIdMapper mapper)
+        throws IOException
+    {
+        OptimizedClassDescriptor desc = clsMap.get(cls);
+
+        if (desc == null) {
+            int typeId = resolveTypeId(cls.getName(), mapper);
+
+            boolean registered;
+
+            try {
+                registered = ctx.registerClassName(JAVA_ID, typeId, cls.getName());
+            }
+            catch (IgniteCheckedException e) {
+                throw new IOException("Failed to register class: " + cls.getName(), e);
+            }
+
+            desc = new OptimizedClassDescriptor(cls, registered ? typeId : 0, clsMap, ctx, mapper);
+
+            if (registered) {
+                OptimizedClassDescriptor old = clsMap.putIfAbsent(cls, desc);
+
+                if (old != null)
+                    desc = old;
+            }
+        }
+
+        return desc;
+    }
+
+    /**
+     * @param clsName Class name.
+     * @param mapper Mapper.
+     * @return Type ID.
+     */
+    private static int resolveTypeId(String clsName, OptimizedMarshallerIdMapper mapper) {
+        int typeId;
+
+        if (mapper != null) {
+            typeId = mapper.typeId(clsName);
+
+            if (typeId == 0)
+                typeId = clsName.hashCode();
+        }
+        else
+            typeId = clsName.hashCode();
+
+        return typeId;
+    }
+
+    /**
+     * Gets descriptor for provided ID.
+     *
+     * @param clsMap Class descriptors by class map.
+     * @param typeId ID.
+     * @param ldr Class loader.
+     * @param ctx Context.
+     * @param mapper ID mapper.
+     * @return Descriptor.
+     * @throws IOException In case of error.
+     * @throws ClassNotFoundException If class was not found.
+     */
+    static OptimizedClassDescriptor classDescriptor(
+        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+        int typeId,
+        ClassLoader ldr,
+        MarshallerContext ctx,
+        OptimizedMarshallerIdMapper mapper) throws IOException, ClassNotFoundException {
+        Class cls;
+
+        try {
+            cls = ctx.getClass(typeId, ldr);
+        }
+        catch (IgniteCheckedException e) {
+            throw new IOException("Failed to resolve class for ID: " + typeId, e);
+        }
+
+        OptimizedClassDescriptor desc = clsMap.get(cls);
+
+        if (desc == null) {
+            OptimizedClassDescriptor old = clsMap.putIfAbsent(cls, desc =
+                new OptimizedClassDescriptor(cls, resolveTypeId(cls.getName(), mapper), clsMap, ctx, mapper));
+
+            if (old != null)
+                desc = old;
+        }
+
+        return desc;
+    }
+
+    /**
+     * Computes the serial version UID value for the given class. The code is taken from {@link
+     * ObjectStreamClass#computeDefaultSUID(Class)}.
+     *
+     * @param cls A class.
+     * @param fields Fields.
+     * @return A serial version UID.
+     * @throws IOException If failed.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    static short computeSerialVersionUid(Class cls, List<Field> fields) throws IOException {
+        if (Serializable.class.isAssignableFrom(cls) && !Enum.class.isAssignableFrom(cls)) {
+            try {
+                Field field = cls.getDeclaredField("serialVersionUID");
+
+                if (field.getType() == long.class) {
+                    int mod = field.getModifiers();
+
+                    if (Modifier.isStatic(mod) && Modifier.isFinal(mod)) {
+                        field.setAccessible(true);
+
+                        return (short)field.getLong(null);
+                    }
+                }
+            }
+            catch (NoSuchFieldException ignored) {
+                // No-op.
+            }
+            catch (IllegalAccessException e) {
+                throw new IOException(e);
+            }
+
+            if (OptimizedMarshaller.USE_DFLT_SUID)
+                return (short)ObjectStreamClass.lookup(cls).getSerialVersionUID();
+        }
+
+        MessageDigest md;
+
+        try {
+            md = MessageDigest.getInstance("SHA");
+        }
+        catch (NoSuchAlgorithmException e) {
+            throw new IOException("Failed to get digest for SHA.", e);
+        }
+
+        md.update(cls.getName().getBytes(UTF_8));
+
+        if (!F.isEmpty(fields)) {
+            for (int i = 0; i < fields.size(); i++) {
+                Field f = fields.get(i);
+
+                md.update(f.getName().getBytes(UTF_8));
+                md.update(f.getType().getName().getBytes(UTF_8));
+            }
+        }
+
+        byte[] hashBytes = md.digest();
+
+        long hash = 0;
+
+        // Composes a single-long hash from the byte[] hash.
+        for (int i = Math.min(hashBytes.length, 8) - 1; i >= 0; i--)
+            hash = (hash << 8) | (hashBytes[i] & 0xFF);
+
+        return (short)hash;
+    }
+
+    /**
+     * Gets byte field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Byte value.
+     */
+    static byte getByte(Object obj, long off) {
+        return GridUnsafe.getByteField(obj, off);
+    }
+
+    /**
+     * Sets byte field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setByte(Object obj, long off, byte val) {
+        GridUnsafe.putByteField(obj, off, val);
+    }
+
+    /**
+     * Gets short field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Short value.
+     */
+    static short getShort(Object obj, long off) {
+        return GridUnsafe.getShortField(obj, off);
+    }
+
+    /**
+     * Sets short field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setShort(Object obj, long off, short val) {
+        GridUnsafe.putShortField(obj, off, val);
+    }
+
+    /**
+     * Gets integer field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Integer value.
+     */
+    static int getInt(Object obj, long off) {
+        return GridUnsafe.getIntField(obj, off);
+    }
+
+    /**
+     * Sets integer field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setInt(Object obj, long off, int val) {
+        GridUnsafe.putIntField(obj, off, val);
+    }
+
+    /**
+     * Gets long field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Long value.
+     */
+    static long getLong(Object obj, long off) {
+        return GridUnsafe.getLongField(obj, off);
+    }
+
+    /**
+     * Sets long field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setLong(Object obj, long off, long val) {
+        GridUnsafe.putLongField(obj, off, val);
+    }
+
+    /**
+     * Gets float field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Float value.
+     */
+    static float getFloat(Object obj, long off) {
+        return GridUnsafe.getFloatField(obj, off);
+    }
+
+    /**
+     * Sets float field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setFloat(Object obj, long off, float val) {
+        GridUnsafe.putFloatField(obj, off, val);
+    }
+
+    /**
+     * Gets double field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Double value.
+     */
+    static double getDouble(Object obj, long off) {
+        return GridUnsafe.getDoubleField(obj, off);
+    }
+
+    /**
+     * Sets double field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setDouble(Object obj, long off, double val) {
+        GridUnsafe.putDoubleField(obj, off, val);
+    }
+
+    /**
+     * Gets char field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Char value.
+     */
+    static char getChar(Object obj, long off) {
+        return GridUnsafe.getCharField(obj, off);
+    }
+
+    /**
+     * Sets char field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setChar(Object obj, long off, char val) {
+        GridUnsafe.putCharField(obj, off, val);
+    }
+
+    /**
+     * Gets boolean field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Boolean value.
+     */
+    static boolean getBoolean(Object obj, long off) {
+        return GridUnsafe.getBooleanField(obj, off);
+    }
+
+    /**
+     * Sets boolean field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setBoolean(Object obj, long off, boolean val) {
+        GridUnsafe.putBooleanField(obj, off, val);
+    }
+
+    /**
+     * Gets field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @return Value.
+     */
+    static Object getObject(Object obj, long off) {
+        return GridUnsafe.getObjectField(obj, off);
+    }
+
+    /**
+     * Sets field value.
+     *
+     * @param obj Object.
+     * @param off Field offset.
+     * @param val Value.
+     */
+    static void setObject(Object obj, long off, Object val) {
+        GridUnsafe.putObjectField(obj, off, val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
new file mode 100644
index 0000000..be0e115
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
@@ -0,0 +1,1231 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.NotActiveException;
+import java.io.ObjectInputStream;
+import java.io.ObjectInputValidation;
+import java.io.ObjectStreamClass;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.io.GridDataInput;
+import org.apache.ignite.internal.util.typedef.internal.SB;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.MarshallerContext;
+
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BYTE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BYTE_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CHAR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CHAR_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.CLS;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DATE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.DOUBLE_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ENUM;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.EXTERNALIZABLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.FLOAT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.FLOAT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HANDLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_MAP;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HASH_SET_MAP_OFF;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.INT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.INT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.JDK;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.JDK_MARSH;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_MAP;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_HASH_SET;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LINKED_LIST;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LONG;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.LONG_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.NULL;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.OBJ_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.PROPS;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.PROXY;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SERIALIZABLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SHORT;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.SHORT_ARR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.STR;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.UUID;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setBoolean;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setByte;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setChar;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setDouble;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setFloat;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setInt;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setLong;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setObject;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.setShort;
+
+/**
+ * Optimized object input stream.
+ */
+class OptimizedObjectInputStream extends ObjectInputStream {
+    /** Dummy object for HashSet. */
+    private static final Object DUMMY = new Object();
+
+    /** */
+    private final HandleTable handles = new HandleTable(10);
+
+    /** */
+    private MarshallerContext ctx;
+
+    /** */
+    private OptimizedMarshallerIdMapper mapper;
+
+    /** */
+    private ClassLoader clsLdr;
+
+    /** */
+    private GridDataInput in;
+
+    /** */
+    private Object curObj;
+
+    /** */
+    private OptimizedClassDescriptor.ClassFields curFields;
+
+    /** */
+    private Class<?> curCls;
+
+    /** */
+    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
+
+    /**
+     * @param in Input.
+     * @throws IOException In case of error.
+     */
+    OptimizedObjectInputStream(GridDataInput in) throws IOException {
+        this.in = in;
+    }
+
+    /**
+     * @param clsMap Class descriptors by class map.
+     * @param ctx Context.
+     * @param mapper ID mapper.
+     * @param clsLdr Class loader.
+     */
+    void context(
+        ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+        MarshallerContext ctx,
+        OptimizedMarshallerIdMapper mapper,
+        ClassLoader clsLdr)
+    {
+        this.clsMap = clsMap;
+        this.ctx = ctx;
+        this.mapper = mapper;
+        this.clsLdr = clsLdr;
+    }
+
+    /**
+     * @return Input.
+     */
+    public GridDataInput in() {
+        return in;
+    }
+
+    /**
+     * @param in Input.
+     */
+    public void in(GridDataInput in) {
+        this.in = in;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void close() throws IOException {
+        reset();
+
+        ctx = null;
+        clsLdr = null;
+        clsMap = null;
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("NonSynchronizedMethodOverridesSynchronizedMethod")
+    @Override public void reset() throws IOException {
+        in.reset();
+        handles.clear();
+
+        curObj = null;
+        curFields = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Object readObjectOverride() throws ClassNotFoundException, IOException {
+        curObj = null;
+        curFields = null;
+
+        byte ref = in.readByte();
+
+        switch (ref) {
+            case NULL:
+                return null;
+
+            case HANDLE:
+                return handles.lookup(readInt());
+
+            case JDK:
+                try {
+                    return JDK_MARSH.unmarshal(this, clsLdr);
+                }
+                catch (IgniteCheckedException e) {
+                    IOException ioEx = e.getCause(IOException.class);
+
+                    if (ioEx != null)
+                        throw ioEx;
+                    else
+                        throw new IOException("Failed to deserialize object with JDK marshaller.", e);
+                }
+
+            case BYTE:
+                return readByte();
+
+            case SHORT:
+                return readShort();
+
+            case INT:
+                return readInt();
+
+            case LONG:
+                return readLong();
+
+            case FLOAT:
+                return readFloat();
+
+            case DOUBLE:
+                return readDouble();
+
+            case CHAR:
+                return readChar();
+
+            case BOOLEAN:
+                return readBoolean();
+
+            case BYTE_ARR:
+                return readByteArray();
+
+            case SHORT_ARR:
+                return readShortArray();
+
+            case INT_ARR:
+                return readIntArray();
+
+            case LONG_ARR:
+                return readLongArray();
+
+            case FLOAT_ARR:
+                return readFloatArray();
+
+            case DOUBLE_ARR:
+                return readDoubleArray();
+
+            case CHAR_ARR:
+                return readCharArray();
+
+            case BOOLEAN_ARR:
+                return readBooleanArray();
+
+            case OBJ_ARR:
+                return readArray(readClass());
+
+            case STR:
+                return readString();
+
+            case UUID:
+                return readUuid();
+
+            case PROPS:
+                return readProperties();
+
+            case ARRAY_LIST:
+                return readArrayList();
+
+            case HASH_MAP:
+                return readHashMap(false);
+
+            case HASH_SET:
+                return readHashSet(HASH_SET_MAP_OFF);
+
+            case LINKED_LIST:
+                return readLinkedList();
+
+            case LINKED_HASH_MAP:
+                return readLinkedHashMap(false);
+
+            case LINKED_HASH_SET:
+                return readLinkedHashSet(HASH_SET_MAP_OFF);
+
+            case DATE:
+                return readDate();
+
+            case CLS:
+                return readClass();
+
+            case PROXY:
+                Class<?>[] intfs = new Class<?>[readInt()];
+
+                for (int i = 0; i < intfs.length; i++)
+                    intfs[i] = readClass();
+
+                InvocationHandler ih = (InvocationHandler)readObject();
+
+                return Proxy.newProxyInstance(clsLdr != null ? clsLdr : U.gridClassLoader(), intfs, ih);
+
+            case ENUM:
+            case EXTERNALIZABLE:
+            case SERIALIZABLE:
+                int typeId = readInt();
+
+                OptimizedClassDescriptor desc = typeId == 0 ?
+                    classDescriptor(clsMap, U.forName(readUTF(), clsLdr), ctx, mapper):
+                    classDescriptor(clsMap, typeId, clsLdr, ctx, mapper);
+
+                curCls = desc.describedClass();
+
+                return desc.read(this);
+
+            default:
+                SB msg = new SB("Unexpected error occurred during unmarshalling");
+
+                if (curCls != null)
+                    msg.a(" of an instance of the class: ").a(curCls.getName());
+
+                msg.a(". Check that all nodes are running the same version of Ignite and that all nodes have " +
+                    "GridOptimizedMarshaller configured with identical optimized classes lists, if any " +
+                    "(see setClassNames and setClassNamesPath methods). If your serialized classes implement " +
+                    "java.io.Externalizable interface, verify that serialization logic is correct.");
+
+                throw new IOException(msg.toString());
+        }
+    }
+
+    /**
+     * @return Class.
+     * @throws ClassNotFoundException If class was not found.
+     * @throws IOException In case of other error.
+     */
+    private Class<?> readClass() throws ClassNotFoundException, IOException {
+        int compTypeId = readInt();
+
+        return compTypeId == 0 ? U.forName(readUTF(), clsLdr) :
+            classDescriptor(clsMap, compTypeId, clsLdr, ctx, mapper).describedClass();
+    }
+
+    /**
+     * Reads array from this stream.
+     *
+     * @param compType Array component type.
+     * @return Array.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("unchecked")
+    <T> T[] readArray(Class<T> compType) throws ClassNotFoundException, IOException {
+        int len = in.readInt();
+
+        T[] arr = (T[])Array.newInstance(compType, len);
+
+        handles.assign(arr);
+
+        for (int i = 0; i < len; i++)
+            arr[i] = (T)readObject();
+
+        return arr;
+    }
+
+    /**
+     * Reads {@link UUID} from this stream.
+     *
+     * @return UUID.
+     * @throws IOException In case of error.
+     */
+    UUID readUuid() throws IOException {
+        UUID uuid = new UUID(readLong(), readLong());
+
+        handles.assign(uuid);
+
+        return uuid;
+    }
+
+    /**
+     * Reads {@link Properties} from this stream.
+     *
+     * @return Properties.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    Properties readProperties() throws ClassNotFoundException, IOException {
+        Properties dflts = readBoolean() ? null : (Properties)readObject();
+
+        Properties props = new Properties(dflts);
+
+        int size = in.readInt();
+
+        for (int i = 0; i < size; i++)
+            props.setProperty(readUTF(), readUTF());
+
+        handles.assign(props);
+
+        return props;
+    }
+
+    /**
+     * Reads and sets all non-static and non-transient field values from this stream.
+     *
+     * @param obj Object.
+     * @param fieldOffs Field offsets.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    void readFields(Object obj, OptimizedClassDescriptor.ClassFields fieldOffs) throws ClassNotFoundException,
+        IOException {
+        for (int i = 0; i < fieldOffs.size(); i++) {
+            OptimizedClassDescriptor.FieldInfo t = fieldOffs.get(i);
+
+            switch ((t.type())) {
+                case BYTE:
+                    byte resByte = readByte();
+
+                    if (t.field() != null)
+                        setByte(obj, t.offset(), resByte);
+
+                    break;
+
+                case SHORT:
+                    short resShort = readShort();
+
+                    if (t.field() != null)
+                        setShort(obj, t.offset(), resShort);
+
+                    break;
+
+                case INT:
+                    int resInt = readInt();
+
+                    if (t.field() != null)
+                        setInt(obj, t.offset(), resInt);
+
+                    break;
+
+                case LONG:
+                    long resLong = readLong();
+
+                    if (t.field() != null)
+                        setLong(obj, t.offset(), resLong);
+
+                    break;
+
+                case FLOAT:
+                    float resFloat = readFloat();
+
+                    if (t.field() != null)
+                        setFloat(obj, t.offset(), resFloat);
+
+                    break;
+
+                case DOUBLE:
+                    double resDouble = readDouble();
+
+                    if (t.field() != null)
+                        setDouble(obj, t.offset(), resDouble);
+
+                    break;
+
+                case CHAR:
+                    char resChar = readChar();
+
+                    if (t.field() != null)
+                        setChar(obj, t.offset(), resChar);
+
+                    break;
+
+                case BOOLEAN:
+                    boolean resBoolean = readBoolean();
+
+                    if (t.field() != null)
+                        setBoolean(obj, t.offset(), resBoolean);
+
+                    break;
+
+                case OTHER:
+                    Object resObject = readObject();
+
+                    if (t.field() != null)
+                        setObject(obj, t.offset(), resObject);
+            }
+        }
+    }
+
+    /**
+     * Reads {@link Externalizable} object.
+     *
+     * @param constructor Constructor.
+     * @param readResolveMtd {@code readResolve} method.
+     * @return Object.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    Object readExternalizable(Constructor<?> constructor, Method readResolveMtd)
+        throws ClassNotFoundException, IOException {
+        Object obj;
+
+        try {
+            obj = constructor.newInstance();
+        }
+        catch (InstantiationException | InvocationTargetException | IllegalAccessException e) {
+            throw new IOException(e);
+        }
+
+        int handle = handles.assign(obj);
+
+        Externalizable extObj = ((Externalizable)obj);
+
+        extObj.readExternal(this);
+
+        if (readResolveMtd != null) {
+            try {
+                obj = readResolveMtd.invoke(obj);
+
+                handles.set(handle, obj);
+            }
+            catch (IllegalAccessException | InvocationTargetException e) {
+                throw new IOException(e);
+            }
+        }
+
+        return obj;
+    }
+
+    /**
+     * Reads serializable object.
+     *
+     * @param cls Class.
+     * @param mtds {@code readObject} methods.
+     * @param readResolveMtd {@code readResolve} method.
+     * @param fields class fields details.
+     * @return Object.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    Object readSerializable(Class<?> cls, List<Method> mtds, Method readResolveMtd,
+        OptimizedClassDescriptor.Fields fields) throws ClassNotFoundException, IOException {
+        Object obj;
+
+        try {
+            obj = GridUnsafe.allocateInstance(cls);
+        }
+        catch (InstantiationException e) {
+            throw new IOException(e);
+        }
+
+        int handle = handles.assign(obj);
+
+        for (int i = 0; i < mtds.size(); i++) {
+            Method mtd = mtds.get(i);
+
+            if (mtd != null) {
+                curObj = obj;
+                curFields = fields.fields(i);
+
+                try {
+                    mtd.invoke(obj, this);
+                }
+                catch (IllegalAccessException | InvocationTargetException e) {
+                    throw new IOException(e);
+                }
+            }
+            else
+                readFields(obj, fields.fields(i));
+        }
+
+        if (readResolveMtd != null) {
+            try {
+                obj = readResolveMtd.invoke(obj);
+
+                handles.set(handle, obj);
+            }
+            catch (IllegalAccessException | InvocationTargetException e) {
+                throw new IOException(e);
+            }
+        }
+
+        return obj;
+    }
+
+    /**
+     * Reads {@link ArrayList}.
+     *
+     * @return List.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    ArrayList<?> readArrayList() throws ClassNotFoundException, IOException {
+        int size = readInt();
+
+        ArrayList<Object> list = new ArrayList<>(size);
+
+        handles.assign(list);
+
+        for (int i = 0; i < size; i++)
+            list.add(readObject());
+
+        return list;
+    }
+
+    /**
+     * Reads {@link HashMap}.
+     *
+     * @param set Whether reading underlying map from {@link HashSet}.
+     * @return Map.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    HashMap<?, ?> readHashMap(boolean set) throws ClassNotFoundException, IOException {
+        int size = readInt();
+        float loadFactor = readFloat();
+
+        HashMap<Object, Object> map = new HashMap<>(size, loadFactor);
+
+        if (!set)
+            handles.assign(map);
+
+        for (int i = 0; i < size; i++) {
+            Object key = readObject();
+            Object val = !set ? readObject() : DUMMY;
+
+            map.put(key, val);
+        }
+
+        return map;
+    }
+
+    /**
+     * Reads {@link HashSet}.
+     *
+     * @param mapFieldOff Map field offset.
+     * @return Set.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("unchecked")
+    HashSet<?> readHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
+        try {
+            HashSet<Object> set = (HashSet<Object>)GridUnsafe.allocateInstance(HashSet.class);
+
+            handles.assign(set);
+
+            setObject(set, mapFieldOff, readHashMap(true));
+
+            return set;
+        }
+        catch (InstantiationException e) {
+            throw new IOException(e);
+        }
+    }
+
+    /**
+     * Reads {@link LinkedList}.
+     *
+     * @return List.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    LinkedList<?> readLinkedList() throws ClassNotFoundException, IOException {
+        int size = readInt();
+
+        LinkedList<Object> list = new LinkedList<>();
+
+        handles.assign(list);
+
+        for (int i = 0; i < size; i++)
+            list.add(readObject());
+
+        return list;
+    }
+
+    /**
+     * Reads {@link LinkedHashMap}.
+     *
+     * @param set Whether reading underlying map from {@link LinkedHashSet}.
+     * @return Map.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    LinkedHashMap<?, ?> readLinkedHashMap(boolean set) throws ClassNotFoundException, IOException {
+        int size = readInt();
+        float loadFactor = readFloat();
+        boolean accessOrder = readBoolean();
+
+        LinkedHashMap<Object, Object> map = new LinkedHashMap<>(size, loadFactor, accessOrder);
+
+        if (!set)
+            handles.assign(map);
+
+        for (int i = 0; i < size; i++) {
+            Object key = readObject();
+            Object val = !set ? readObject() : DUMMY;
+
+            map.put(key, val);
+        }
+
+        return map;
+    }
+
+    /**
+     * Reads {@link LinkedHashSet}.
+     *
+     * @param mapFieldOff Map field offset.
+     * @return Set.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("unchecked")
+    LinkedHashSet<?> readLinkedHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
+        try {
+            LinkedHashSet<Object> set = (LinkedHashSet<Object>)GridUnsafe.allocateInstance(LinkedHashSet.class);
+
+            handles.assign(set);
+
+            setObject(set, mapFieldOff, readLinkedHashMap(true));
+
+            return set;
+        }
+        catch (InstantiationException e) {
+            throw new IOException(e);
+        }
+    }
+
+    /**
+     * Reads {@link Date}.
+     *
+     * @return Date.
+     * @throws ClassNotFoundException If class not found.
+     * @throws IOException In case of error.
+     */
+    Date readDate() throws ClassNotFoundException, IOException {
+        Date date = new Date(readLong());
+
+        handles.assign(date);
+
+        return date;
+    }
+
+    /**
+     * Reads array of {@code byte}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    byte[] readByteArray() throws IOException {
+        byte[] arr = in.readByteArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code short}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    short[] readShortArray() throws IOException {
+        short[] arr = in.readShortArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code int}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    int[] readIntArray() throws IOException {
+        int[] arr = in.readIntArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code long}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    long[] readLongArray() throws IOException {
+        long[] arr = in.readLongArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code float}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    float[] readFloatArray() throws IOException {
+        float[] arr = in.readFloatArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code double}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    double[] readDoubleArray() throws IOException {
+        double[] arr = in.readDoubleArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code char}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    char[] readCharArray() throws IOException {
+        char[] arr = in.readCharArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads array of {@code boolean}s.
+     *
+     * @return Array.
+     * @throws IOException In case of error.
+     */
+    boolean[] readBooleanArray() throws IOException {
+        boolean[] arr = in.readBooleanArray();
+
+        handles.assign(arr);
+
+        return arr;
+    }
+
+    /**
+     * Reads {@link String}.
+     *
+     * @return String.
+     * @throws IOException In case of error.
+     */
+    public String readString() throws IOException {
+        String str = in.readUTF();
+
+        handles.assign(str);
+
+        return str;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readFully(byte[] b) throws IOException {
+        in.readFully(b);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readFully(byte[] b, int off, int len) throws IOException {
+        in.readFully(b, off, len);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int skipBytes(int n) throws IOException {
+        return in.skipBytes(n);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean readBoolean() throws IOException {
+        return in.readBoolean();
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte readByte() throws IOException {
+        return in.readByte();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int readUnsignedByte() throws IOException {
+        return in.readUnsignedByte();
+    }
+
+    /** {@inheritDoc} */
+    @Override public short readShort() throws IOException {
+        return in.readShort();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int readUnsignedShort() throws IOException {
+        return in.readUnsignedShort();
+    }
+
+    /** {@inheritDoc} */
+    @Override public char readChar() throws IOException {
+        return in.readChar();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int readInt() throws IOException {
+        return in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long readLong() throws IOException {
+        return in.readLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public float readFloat() throws IOException {
+        return in.readFloat();
+    }
+
+    /** {@inheritDoc} */
+    @Override public double readDouble() throws IOException {
+        return in.readDouble();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read() throws IOException {
+        return in.read();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read(byte[] b) throws IOException {
+        return in.read(b);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int read(byte[] b, int off, int len) throws IOException {
+        return in.read(b, off, len);
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("deprecation")
+    @Override public String readLine() throws IOException {
+        return in.readLine();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String readUTF() throws IOException {
+        return in.readUTF();
+    }
+
+    /** {@inheritDoc} */
+    @Override public Object readUnshared() throws IOException, ClassNotFoundException {
+        return readObject();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void defaultReadObject() throws IOException, ClassNotFoundException {
+        if (curObj == null)
+            throw new NotActiveException("Not in readObject() call.");
+
+        readFields(curObj, curFields);
+    }
+
+    /** {@inheritDoc} */
+    @Override public ObjectInputStream.GetField readFields() throws IOException, ClassNotFoundException {
+        if (curObj == null)
+            throw new NotActiveException("Not in readObject() call.");
+
+        return new GetFieldImpl(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void registerValidation(ObjectInputValidation obj, int pri) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public int available() throws IOException {
+        return -1;
+    }
+
+    /**
+     * Returns objects that were added to handles table.
+     * Used ONLY for test purposes.
+     *
+     * @return Handled objects.
+     */
+    Object[] handledObjects() {
+        return handles.entries;
+    }
+
+    /**
+     * Lightweight identity hash table which maps objects to integer handles,
+     * assigned in ascending order.
+     */
+    private static class HandleTable {
+        /** Array mapping handle -> object/exception (depending on status). */
+        private Object[] entries;
+
+        /** Number of handles in table. */
+        private int size;
+
+        /**
+         * Creates handle table with the given initial capacity.
+         *
+         * @param initCap Initial capacity.
+         */
+        HandleTable(int initCap) {
+            entries = new Object[initCap];
+        }
+
+        /**
+         * Assigns next available handle to given object, and returns assigned
+         * handle.
+         *
+         * @param obj Object.
+         * @return Handle.
+         */
+        int assign(Object obj) {
+            if (size >= entries.length)
+                grow();
+
+            entries[size] = obj;
+
+            return size++;
+        }
+
+        /**
+         * Assigns new object to existing handle. Old object is forgotten.
+         *
+         * @param handle Handle.
+         * @param obj Object.
+         */
+        void set(int handle, Object obj) {
+            entries[handle] = obj;
+        }
+
+        /**
+         * Looks up and returns object associated with the given handle.
+         *
+         * @param handle Handle.
+         * @return Object.
+         */
+        Object lookup(int handle) {
+            return entries[handle];
+        }
+
+        /**
+         * Resets table to its initial state.
+         */
+        void clear() {
+            Arrays.fill(entries, 0, size, null);
+
+            size = 0;
+        }
+
+        /**
+         * Expands capacity of internal arrays.
+         */
+        private void grow() {
+            int newCap = (entries.length << 1) + 1;
+
+            Object[] newEntries = new Object[newCap];
+
+            System.arraycopy(entries, 0, newEntries, 0, size);
+
+            entries = newEntries;
+        }
+    }
+
+    /**
+     * {@link GetField} implementation.
+     */
+    private static class GetFieldImpl extends GetField {
+        /** Field info. */
+        private final OptimizedClassDescriptor.ClassFields fieldInfo;
+
+        /** Values. */
+        private final Object[] objs;
+
+        /**
+         * @param in Stream.
+         * @throws IOException In case of error.
+         * @throws ClassNotFoundException If class not found.
+         */
+        @SuppressWarnings("ForLoopReplaceableByForEach")
+        private GetFieldImpl(OptimizedObjectInputStream in) throws IOException, ClassNotFoundException {
+            fieldInfo = in.curFields;
+
+            objs = new Object[fieldInfo.size()];
+
+            for (int i = 0; i < fieldInfo.size(); i++) {
+                OptimizedClassDescriptor.FieldInfo t = fieldInfo.get(i);
+
+                Object obj = null;
+
+                switch (t.type()) {
+                    case BYTE:
+                        obj = in.readByte();
+
+                        break;
+
+                    case SHORT:
+                        obj = in.readShort();
+
+                        break;
+
+                    case INT:
+                        obj = in.readInt();
+
+                        break;
+
+                    case LONG:
+                        obj = in.readLong();
+
+                        break;
+
+                    case FLOAT:
+                        obj = in.readFloat();
+
+                        break;
+
+                    case DOUBLE:
+                        obj = in.readDouble();
+
+                        break;
+
+                    case CHAR:
+                        obj = in.readChar();
+
+                        break;
+
+                    case BOOLEAN:
+                        obj = in.readBoolean();
+
+                        break;
+
+                    case OTHER:
+                        obj = in.readObject();
+                }
+
+                objs[i] = obj;
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override public ObjectStreamClass getObjectStreamClass() {
+            throw new UnsupportedOperationException();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean defaulted(String name) throws IOException {
+            return objs[fieldInfo.getIndex(name)] == null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean get(String name, boolean dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public byte get(String name, byte dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public char get(String name, char dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public short get(String name, short dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int get(String name, int dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public long get(String name, long dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public float get(String name, float dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public double get(String name, double dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Object get(String name, Object dflt) throws IOException {
+            return value(name, dflt);
+        }
+
+        /**
+         * @param name Field name.
+         * @param dflt Default value.
+         * @return Value.
+         */
+        @SuppressWarnings("unchecked")
+        private <T> T value(String name, T dflt) {
+            return objs[fieldInfo.getIndex(name)] != null ? (T)objs[fieldInfo.getIndex(name)] : dflt;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
new file mode 100644
index 0000000..bdb1b2f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
@@ -0,0 +1,875 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.NotActiveException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.util.GridHandleTable;
+import org.apache.ignite.internal.util.io.GridDataOutput;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.lang.IgniteBiTuple;
+import org.apache.ignite.marshaller.MarshallerContext;
+
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.HANDLE;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.JDK;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.JDK_MARSH;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.NULL;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.classDescriptor;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getBoolean;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getByte;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getChar;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getDouble;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getFloat;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getInt;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getLong;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getObject;
+import static org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.getShort;
+
+/**
+ * Optimized object output stream.
+ */
+class OptimizedObjectOutputStream extends ObjectOutputStream {
+    /** */
+    private final GridHandleTable handles = new GridHandleTable(10, 3.00f);
+
+    /** */
+    private final GridDataOutput out;
+
+    /** */
+    private MarshallerContext ctx;
+
+    /** */
+    private OptimizedMarshallerIdMapper mapper;
+
+    /** */
+    private boolean requireSer;
+
+    /** */
+    private Object curObj;
+
+    /** */
+    private OptimizedClassDescriptor.ClassFields curFields;
+
+    /** */
+    private PutFieldImpl curPut;
+
+    /** */
+    private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
+
+    /**
+     * @param out Output.
+     * @throws IOException In case of error.
+     */
+    OptimizedObjectOutputStream(GridDataOutput out) throws IOException {
+        this.out = out;
+    }
+
+    /**
+     * @param clsMap Class descriptors by class map.
+     * @param ctx Context.
+     * @param mapper ID mapper.
+     * @param requireSer Require {@link Serializable} flag.
+     */
+    void context(ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+        MarshallerContext ctx,
+        OptimizedMarshallerIdMapper mapper,
+        boolean requireSer) {
+        this.clsMap = clsMap;
+        this.ctx = ctx;
+        this.mapper = mapper;
+        this.requireSer = requireSer;
+    }
+
+    /**
+     * @return Require {@link Serializable} flag.
+     */
+    boolean requireSerializable() {
+        return requireSer;
+    }
+
+    /**
+     * @return Output.
+     */
+    public GridDataOutput out() {
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void close() throws IOException {
+        reset();
+
+        ctx = null;
+        clsMap = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void write(byte[] b) throws IOException {
+        out.write(b);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void write(byte[] b, int off, int len) throws IOException {
+        out.write(b, off, len);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeObjectOverride(Object obj) throws IOException {
+        writeObject0(obj);
+    }
+
+    /**
+     * Writes object to stream.
+     *
+     * @param obj Object.
+     * @throws IOException In case of error.
+     */
+    private void writeObject0(Object obj) throws IOException {
+        curObj = null;
+        curFields = null;
+        curPut = null;
+
+        if (obj == null)
+            writeByte(NULL);
+        else {
+            if (obj instanceof Throwable && !(obj instanceof Externalizable)) {
+                writeByte(JDK);
+
+                try {
+                    JDK_MARSH.marshal(obj, this);
+                }
+                catch (IgniteCheckedException e) {
+                    IOException ioEx = e.getCause(IOException.class);
+
+                    if (ioEx != null)
+                        throw ioEx;
+                    else
+                        throw new IOException("Failed to serialize object with JDK marshaller: " + obj, e);
+                }
+            }
+            else {
+                OptimizedClassDescriptor desc = classDescriptor(
+                    clsMap,
+                    obj instanceof Object[] ? Object[].class : obj.getClass(),
+                    ctx,
+                    mapper);
+
+                if (desc.excluded()) {
+                    writeByte(NULL);
+
+                    return;
+                }
+
+                Object obj0 = desc.replace(obj);
+
+                if (obj0 == null) {
+                    writeByte(NULL);
+
+                    return;
+                }
+
+                int handle = -1;
+
+                if (!desc.isPrimitive() && !desc.isEnum() && !desc.isClass() && !desc.isProxy())
+                    handle = handles.lookup(obj);
+
+                if (obj0 != obj) {
+                    obj = obj0;
+
+                    desc = classDescriptor(clsMap,
+                        obj instanceof Object[] ? Object[].class : obj.getClass(),
+                        ctx,
+                        mapper);
+                }
+
+                if (handle >= 0) {
+                    writeByte(HANDLE);
+                    writeInt(handle);
+                }
+                else
+                    desc.write(this, obj);
+            }
+        }
+    }
+
+    /**
+     * Writes array to this stream.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    void writeArray(Object[] arr) throws IOException {
+        int len = arr.length;
+
+        writeInt(len);
+
+        for (int i = 0; i < len; i++) {
+            Object obj = arr[i];
+
+            writeObject0(obj);
+        }
+    }
+
+    /**
+     * Writes {@link UUID} to this stream.
+     *
+     * @param uuid UUID.
+     * @throws IOException In case of error.
+     */
+    void writeUuid(UUID uuid) throws IOException {
+        writeLong(uuid.getMostSignificantBits());
+        writeLong(uuid.getLeastSignificantBits());
+    }
+
+    /**
+     * Writes {@link Properties} to this stream.
+     *
+     * @param props Properties.
+     * @param dfltsFieldOff Defaults field offset.
+     * @throws IOException In case of error.
+     */
+    void writeProperties(Properties props, long dfltsFieldOff) throws IOException {
+        Properties dflts = (Properties)getObject(props, dfltsFieldOff);
+
+        if (dflts == null)
+            writeBoolean(true);
+        else {
+            writeBoolean(false);
+
+            writeObject0(dflts);
+        }
+
+        Set<String> names = props.stringPropertyNames();
+
+        writeInt(names.size());
+
+        for (String name : names) {
+            writeUTF(name);
+            writeUTF(props.getProperty(name));
+        }
+    }
+
+    /**
+     * Writes externalizable object.
+     *
+     * @param obj Object.
+     * @throws IOException In case of error.
+     */
+    void writeExternalizable(Object obj) throws IOException {
+        Externalizable extObj = (Externalizable)obj;
+
+        extObj.writeExternal(this);
+    }
+
+    /**
+     * Writes serializable object.
+     *
+     * @param obj Object.
+     * @param mtds {@code writeObject} methods.
+     * @param fields class fields details.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    void writeSerializable(Object obj, List<Method> mtds, OptimizedClassDescriptor.Fields fields)
+        throws IOException {
+        for (int i = 0; i < mtds.size(); i++) {
+            Method mtd = mtds.get(i);
+
+            if (mtd != null) {
+                curObj = obj;
+                curFields = fields.fields(i);
+
+                try {
+                    mtd.invoke(obj, this);
+                }
+                catch (IllegalAccessException e) {
+                    throw new IOException(e);
+                }
+                catch (InvocationTargetException e) {
+                    throw new IOException(e.getCause());
+                }
+            }
+            else
+                writeFields(obj, fields.fields(i));
+        }
+    }
+
+    /**
+     * Writes {@link ArrayList}.
+     *
+     * @param list List.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings({"ForLoopReplaceableByForEach", "TypeMayBeWeakened"})
+    void writeArrayList(ArrayList<?> list) throws IOException {
+        int size = list.size();
+
+        writeInt(size);
+
+        for (int i = 0; i < size; i++)
+            writeObject0(list.get(i));
+    }
+
+    /**
+     * Writes {@link HashMap}.
+     *
+     * @param map Map.
+     * @param loadFactorFieldOff Load factor field offset.
+     * @param set Whether writing underlying map from {@link HashSet}.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("TypeMayBeWeakened")
+    void writeHashMap(HashMap<?, ?> map, long loadFactorFieldOff, boolean set) throws IOException {
+        int size = map.size();
+
+        writeInt(size);
+        writeFloat(getFloat(map, loadFactorFieldOff));
+
+        for (Map.Entry<?, ?> e : map.entrySet()) {
+            writeObject0(e.getKey());
+
+            if (!set)
+                writeObject0(e.getValue());
+        }
+    }
+
+    /**
+     * Writes {@link HashSet}.
+     *
+     * @param set Set.
+     * @param mapFieldOff Map field offset.
+     * @param loadFactorFieldOff Load factor field offset.
+     * @throws IOException In case of error.
+     */
+    void writeHashSet(HashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException {
+        writeHashMap((HashMap<?, ?>)getObject(set, mapFieldOff), loadFactorFieldOff, true);
+    }
+
+    /**
+     * Writes {@link LinkedList}.
+     *
+     * @param list List.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("TypeMayBeWeakened")
+    void writeLinkedList(LinkedList<?> list) throws IOException {
+        int size = list.size();
+
+        writeInt(size);
+
+        for (Object obj : list)
+            writeObject0(obj);
+    }
+
+    /**
+     * Writes {@link LinkedHashMap}.
+     *
+     * @param map Map.
+     * @param loadFactorFieldOff Load factor field offset.
+     * @param accessOrderFieldOff access order field offset.
+     * @param set Whether writing underlying map from {@link LinkedHashSet}.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("TypeMayBeWeakened")
+    void writeLinkedHashMap(LinkedHashMap<?, ?> map, long loadFactorFieldOff, long accessOrderFieldOff, boolean set)
+        throws IOException {
+        int size = map.size();
+
+        writeInt(size);
+        writeFloat(getFloat(map, loadFactorFieldOff));
+
+        if (accessOrderFieldOff >= 0)
+            writeBoolean(getBoolean(map, accessOrderFieldOff));
+        else
+            writeBoolean(false);
+
+        for (Map.Entry<?, ?> e : map.entrySet()) {
+            writeObject0(e.getKey());
+
+            if (!set)
+                writeObject0(e.getValue());
+        }
+    }
+
+    /**
+     * Writes {@link LinkedHashSet}.
+     *
+     * @param set Set.
+     * @param mapFieldOff Map field offset.
+     * @param loadFactorFieldOff Load factor field offset.
+     * @throws IOException In case of error.
+     */
+    void writeLinkedHashSet(LinkedHashSet<?> set, long mapFieldOff, long loadFactorFieldOff) throws IOException {
+        LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>)getObject(set, mapFieldOff);
+
+        writeLinkedHashMap(map, loadFactorFieldOff, -1, true);
+    }
+
+    /**
+     * Writes {@link Date}.
+     *
+     * @param date Date.
+     * @throws IOException In case of error.
+     */
+    void writeDate(Date date) throws IOException {
+        writeLong(date.getTime());
+    }
+
+    /**
+     * Writes all non-static and non-transient field values to this stream.
+     *
+     * @param obj Object.
+     * @param fields Fields.
+     * @throws IOException In case of error.
+     */
+    @SuppressWarnings("ForLoopReplaceableByForEach")
+    private void writeFields(Object obj, OptimizedClassDescriptor.ClassFields fields) throws IOException {
+        for (int i = 0; i < fields.size(); i++) {
+            OptimizedClassDescriptor.FieldInfo t = fields.get(i);
+
+            switch (t.type()) {
+                case BYTE:
+                    if (t.field() != null)
+                        writeByte(getByte(obj, t.offset()));
+
+                    break;
+
+                case SHORT:
+                    if (t.field() != null)
+                        writeShort(getShort(obj, t.offset()));
+
+                    break;
+
+                case INT:
+                    if (t.field() != null)
+                        writeInt(getInt(obj, t.offset()));
+
+                    break;
+
+                case LONG:
+                    if (t.field() != null)
+                        writeLong(getLong(obj, t.offset()));
+
+                    break;
+
+                case FLOAT:
+                    if (t.field() != null)
+                        writeFloat(getFloat(obj, t.offset()));
+
+                    break;
+
+                case DOUBLE:
+                    if (t.field() != null)
+                        writeDouble(getDouble(obj, t.offset()));
+
+                    break;
+
+                case CHAR:
+                    if (t.field() != null)
+                        writeChar(getChar(obj, t.offset()));
+
+                    break;
+
+                case BOOLEAN:
+                    if (t.field() != null)
+                        writeBoolean(getBoolean(obj, t.offset()));
+
+                    break;
+
+                case OTHER:
+                    if (t.field() != null)
+                        writeObject0(getObject(obj, t.offset()));
+            }
+        }
+    }
+
+    /**
+     * Writes array of {@code byte}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeByteArray(byte[] arr) throws IOException {
+        out.writeByteArray(arr);
+    }
+
+    /**
+     * Writes array of {@code short}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeShortArray(short[] arr) throws IOException {
+        out.writeShortArray(arr);
+    }
+
+    /**
+     * Writes array of {@code int}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeIntArray(int[] arr) throws IOException {
+        out.writeIntArray(arr);
+    }
+
+    /**
+     * Writes array of {@code long}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeLongArray(long[] arr) throws IOException {
+        out.writeLongArray(arr);
+    }
+
+    /**
+     * Writes array of {@code float}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeFloatArray(float[] arr) throws IOException {
+        out.writeFloatArray(arr);
+    }
+
+    /**
+     * Writes array of {@code double}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeDoubleArray(double[] arr) throws IOException {
+        out.writeDoubleArray(arr);
+    }
+
+    /**
+     * Writes array of {@code char}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeCharArray(char[] arr) throws IOException {
+        out.writeCharArray(arr);
+    }
+
+    /**
+     * Writes array of {@code boolean}s.
+     *
+     * @param arr Array.
+     * @throws IOException In case of error.
+     */
+    void writeBooleanArray(boolean[] arr) throws IOException {
+        out.writeBooleanArray(arr);
+    }
+
+    /**
+     * Writes {@link String}.
+     *
+     * @param str String.
+     * @throws IOException In case of error.
+     */
+    void writeString(String str) throws IOException {
+        out.writeUTF(str);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeBoolean(boolean v) throws IOException {
+        out.writeBoolean(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeByte(int v) throws IOException {
+        out.writeByte(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeShort(int v) throws IOException {
+        out.writeShort(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeChar(int v) throws IOException {
+        out.writeChar(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeInt(int v) throws IOException {
+        out.writeInt(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeLong(long v) throws IOException {
+        out.writeLong(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeFloat(float v) throws IOException {
+        out.writeFloat(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeDouble(double v) throws IOException {
+        out.writeDouble(v);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void write(int b) throws IOException {
+        writeByte(b);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeBytes(String s) throws IOException {
+        out.writeBytes(s);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeChars(String s) throws IOException {
+        out.writeChars(s);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeUTF(String s) throws IOException {
+        out.writeUTF(s);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void useProtocolVersion(int ver) throws IOException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeUnshared(Object obj) throws IOException {
+        writeObject0(obj);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void defaultWriteObject() throws IOException {
+        if (curObj == null)
+            throw new NotActiveException("Not in writeObject() call.");
+
+        writeFields(curObj, curFields);
+    }
+
+    /** {@inheritDoc} */
+    @Override public ObjectOutputStream.PutField putFields() throws IOException {
+        if (curObj == null)
+            throw new NotActiveException("Not in writeObject() call or fields already written.");
+
+        if (curPut == null)
+            curPut = new PutFieldImpl(this);
+
+        return curPut;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeFields() throws IOException {
+        if (curObj == null)
+            throw new NotActiveException("Not in writeObject() call.");
+
+        if (curPut == null)
+            throw new NotActiveException("putFields() was not called.");
+
+        for (IgniteBiTuple<OptimizedFieldType, Object> t : curPut.objs) {
+            switch (t.get1()) {
+                case BYTE:
+                    writeByte((Byte)t.get2());
+
+                    break;
+
+                case SHORT:
+                    writeShort((Short)t.get2());
+
+                    break;
+
+                case INT:
+                    writeInt((Integer)t.get2());
+
+                    break;
+
+                case LONG:
+                    writeLong((Long)t.get2());
+
+                    break;
+
+                case FLOAT:
+                    writeFloat((Float)t.get2());
+
+                    break;
+
+                case DOUBLE:
+                    writeDouble((Double)t.get2());
+
+                    break;
+
+                case CHAR:
+                    writeChar((Character)t.get2());
+
+                    break;
+
+                case BOOLEAN:
+                    writeBoolean((Boolean)t.get2());
+
+                    break;
+
+                case OTHER:
+                    writeObject0(t.get2());
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void reset() throws IOException {
+        out.reset();
+        handles.clear();
+
+        curObj = null;
+        curFields = null;
+        curPut = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void flush() throws IOException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void drain() throws IOException {
+        // No-op.
+    }
+
+    /**
+     * Returns objects that were added to handles table.
+     * Used ONLY for test purposes.
+     *
+     * @return Handled objects.
+     */
+    Object[] handledObjects() {
+        return handles.objects();
+    }
+
+    /**
+     * {@link PutField} implementation.
+     */
+    private static class PutFieldImpl extends PutField {
+        /** Stream. */
+        private final OptimizedObjectOutputStream out;
+
+        /** Fields info. */
+        private final OptimizedClassDescriptor.ClassFields curFields;
+        /** Values. */
+        private final IgniteBiTuple<OptimizedFieldType, Object>[] objs;
+
+        /**
+         * @param out Output stream.
+         */
+        @SuppressWarnings("unchecked")
+        private PutFieldImpl(OptimizedObjectOutputStream out) {
+            this.out = out;
+
+            curFields = out.curFields;
+
+            objs = new IgniteBiTuple[curFields.size()];
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, boolean val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, byte val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, char val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, short val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, int val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, long val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, float val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, double val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void put(String name, Object val) {
+            value(name, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void write(ObjectOutput out) throws IOException {
+            if (out != this.out)
+                throw new IllegalArgumentException("Wrong stream.");
+
+            this.out.writeFields();
+        }
+
+        /**
+         * @param name Field name.
+         * @param val Value.
+         */
+        private void value(String name, Object val) {
+            int i = curFields.getIndex(name);
+
+            OptimizedClassDescriptor.FieldInfo info = curFields.get(i);
+
+            objs[i] = F.t(info.type(), val);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
new file mode 100644
index 0000000..cc31a9f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
@@ -0,0 +1,244 @@
+/*
+ * 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.internal.marshaller.optimized;
+
+import java.io.IOException;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
+import org.apache.ignite.internal.util.io.GridUnsafeDataInput;
+import org.apache.ignite.internal.util.io.GridUnsafeDataOutput;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+/**
+ * Storage for object streams.
+ */
+class OptimizedObjectStreamRegistry {
+    /** Holders. */
+    private static final ThreadLocal<StreamHolder> holders = new ThreadLocal<>();
+
+    /** Output streams pool. */
+    private static BlockingQueue<OptimizedObjectOutputStream> outPool;
+
+    /** Input streams pool. */
+    private static BlockingQueue<OptimizedObjectInputStream> inPool;
+
+    /**
+     * Ensures singleton.
+     */
+    private OptimizedObjectStreamRegistry() {
+        // No-op.
+    }
+
+    /**
+     * Sets streams pool size.
+     *
+     * @param size Streams pool size.
+     */
+    static void poolSize(int size) {
+        if (size > 0) {
+            outPool = new LinkedBlockingQueue<>(size);
+            inPool = new LinkedBlockingQueue<>(size);
+
+            for (int i = 0; i < size; i++) {
+                outPool.offer(createOut());
+                inPool.offer(createIn());
+            }
+        }
+        else {
+            outPool = null;
+            inPool = null;
+        }
+    }
+
+    /**
+     * Gets output stream.
+     *
+     * @return Object output stream.
+     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
+     */
+    static OptimizedObjectOutputStream out() throws IgniteInterruptedCheckedException {
+        if (outPool != null) {
+            try {
+                return outPool.take();
+            }
+            catch (InterruptedException e) {
+                throw new IgniteInterruptedCheckedException(
+                    "Failed to take output object stream from pool (thread interrupted).", e);
+            }
+        }
+        else
+            return holder().acquireOut();
+    }
+
+    /**
+     * Gets input stream.
+     *
+     * @return Object input stream.
+     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
+     */
+    static OptimizedObjectInputStream in() throws IgniteInterruptedCheckedException {
+        if (inPool != null) {
+            try {
+                return inPool.take();
+            }
+            catch (InterruptedException e) {
+                throw new IgniteInterruptedCheckedException(
+                    "Failed to take input object stream from pool (thread interrupted).", e);
+            }
+        }
+        else
+            return holder().acquireIn();
+    }
+
+    /**
+     * Closes and releases output stream.
+     *
+     * @param out Object output stream.
+     */
+    static void closeOut(OptimizedObjectOutputStream out) {
+        U.close(out, null);
+
+        if (outPool != null) {
+            boolean b = outPool.offer(out);
+
+            assert b;
+        }
+        else {
+            StreamHolder holder = holders.get();
+
+            if (holder != null)
+                holder.releaseOut();
+        }
+    }
+
+    /**
+     * Closes and releases input stream.
+     *
+     * @param in Object input stream.
+     */
+    @SuppressWarnings("TypeMayBeWeakened")
+    static void closeIn(OptimizedObjectInputStream in) {
+        U.close(in, null);
+
+        if (inPool != null) {
+            boolean b = inPool.offer(in);
+
+            assert b;
+        }
+        else {
+            StreamHolder holder = holders.get();
+
+            if (holder != null)
+                holder.releaseIn();
+        }
+    }
+
+    /**
+     * Gets holder from pool or thread local.
+     *
+     * @return Stream holder.
+     * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If thread is interrupted while trying to take holder from pool.
+     */
+    private static StreamHolder holder() throws IgniteInterruptedCheckedException {
+        StreamHolder holder = holders.get();
+
+        if (holder == null)
+            holders.set(holder = new StreamHolder());
+
+        return holder;
+    }
+
+    /**
+     * Creates output stream.
+     *
+     * @return Object output stream.
+     */
+    private static OptimizedObjectOutputStream createOut() {
+        try {
+            return new OptimizedObjectOutputStream(new GridUnsafeDataOutput(4 * 1024));
+        }
+        catch (IOException e) {
+            throw new IgniteException("Failed to create object output stream.", e);
+        }
+    }
+
+    /**
+     * Creates input stream.
+     *
+     * @return Object input stream.
+     */
+    private static OptimizedObjectInputStream createIn() {
+        try {
+            return new OptimizedObjectInputStream(new GridUnsafeDataInput());
+        }
+        catch (IOException e) {
+            throw new IgniteException("Failed to create object input stream.", e);
+        }
+    }
+
+    /**
+     * Streams holder.
+     */
+    private static class StreamHolder {
+        /** Output stream. */
+        private final OptimizedObjectOutputStream out = createOut();
+
+        /** Input stream. */
+        private final OptimizedObjectInputStream in = createIn();
+
+        /** Output streams counter. */
+        private int outAcquireCnt;
+
+        /** Input streams counter. */
+        private int inAcquireCnt;
+
+        /**
+         * Gets output stream.
+         *
+         * @return Object output stream.
+         */
+        OptimizedObjectOutputStream acquireOut() {
+            return outAcquireCnt++ > 0 ? createOut() : out;
+        }
+
+        /**
+         * Gets input stream.
+         *
+         * @return Object input stream.
+         */
+        OptimizedObjectInputStream acquireIn() {
+            return inAcquireCnt++ > 0 ? createIn() : in;
+        }
+
+        /**
+         * Releases output stream.
+         */
+        void releaseOut() {
+            outAcquireCnt--;
+        }
+
+        /**
+         * Releases input stream.
+         */
+        void releaseIn() {
+            inAcquireCnt--;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/package-info.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
new file mode 100644
index 0000000..7f58f9c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * 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 description. -->
+ * Contains Optimized marshaller.
+ */
+package org.apache.ignite.internal.marshaller.optimized;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa8681a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
index e99ca35..3ab27ac 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/Marshaller.java
@@ -19,7 +19,6 @@ package org.apache.ignite.marshaller;
 
 import java.io.InputStream;
 import java.io.OutputStream;
-
 import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.IgniteCheckedException;
 import org.jetbrains.annotations.Nullable;
@@ -33,7 +32,6 @@ import org.jetbrains.annotations.Nullable;
  * <ul>
  * <li>Default binary marshaller. Will be used when no other marshaller is explicitly set to the
  * configuration. For more information, see {@link IgniteBinary}.</li>
- * <li>{@link org.apache.ignite.marshaller.optimized.OptimizedMarshaller}</li>
  * <li>{@link org.apache.ignite.marshaller.jdk.JdkMarshaller}</li>
  * </ul>
  * <p>