You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/11/05 04:28:10 UTC

[18/66] [abbrv] ignite git commit: IGNITE-950 - Renaming.

IGNITE-950 - Renaming.


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

Branch: refs/heads/ignite-1753-1282
Commit: 20f5b9cd75f59aaac4cc4720e3b5aba5494820ab
Parents: 71d18bb
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Mon Nov 2 20:21:16 2015 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Mon Nov 2 20:21:18 2015 +0300

----------------------------------------------------------------------
 .../ignite/examples/portable/Address.java       |   16 +-
 ...mputeClientPortableTaskExecutionExample.java |    4 +-
 .../portable/computegrid/ComputeClientTask.java |   16 +-
 .../CacheClientPortablePutGetExample.java       |   12 +-
 .../CacheClientPortableQueryExample.java        |   30 +-
 .../java/org/apache/ignite/IgniteCache.java     |   12 +-
 .../java/org/apache/ignite/IgniteObjects.java   |   58 +-
 .../org/apache/ignite/binary/BinaryField.java   |   39 +
 .../binary/BinaryInvalidTypeException.java      |   58 +
 .../org/apache/ignite/binary/BinaryObject.java  |  162 +
 .../ignite/binary/BinaryObjectBuilder.java      |  136 +
 .../ignite/binary/BinaryObjectException.java    |   57 +
 .../apache/ignite/binary/BinaryRawReader.java   |  240 ++
 .../apache/ignite/binary/BinaryRawWriter.java   |  225 ++
 .../org/apache/ignite/binary/BinaryReader.java  |  291 ++
 .../apache/ignite/binary/BinarySerializer.java  |   49 +
 .../ignite/binary/BinaryTypeConfiguration.java  |  155 +
 .../ignite/binary/BinaryTypeIdMapper.java       |   56 +
 .../ignite/binary/BinaryTypeMetadata.java       |   60 +
 .../org/apache/ignite/binary/BinaryWriter.java  |  273 ++
 .../org/apache/ignite/binary/Binarylizable.java |   48 +
 .../org/apache/ignite/binary/package-info.java  |   22 +
 .../ignite/igniteobject/IgniteObject.java       |  163 --
 .../igniteobject/IgniteObjectBuilder.java       |  136 -
 .../igniteobject/IgniteObjectConfiguration.java |  155 -
 .../igniteobject/IgniteObjectException.java     |   57 -
 .../igniteobject/IgniteObjectIdMapper.java      |   56 -
 .../IgniteObjectInvalidClassException.java      |   58 -
 .../igniteobject/IgniteObjectMarshalAware.java  |   48 -
 .../igniteobject/IgniteObjectMetadata.java      |   60 -
 .../ignite/igniteobject/IgniteObjectReader.java |  291 --
 .../igniteobject/IgniteObjectSerializer.java    |   49 -
 .../ignite/igniteobject/IgniteObjectWriter.java |  273 --
 .../ignite/igniteobject/package-info.java       |   22 -
 .../communication/GridIoMessageFactory.java     |    4 +-
 .../internal/portable/BinaryFieldImpl.java      |   82 +
 .../portable/BinaryMetaDataCollector.java       |  263 ++
 .../internal/portable/BinaryMetaDataImpl.java   |  150 +
 .../internal/portable/BinaryObjectEx.java       |  245 ++
 .../internal/portable/BinaryObjectImpl.java     |  538 ++++
 .../portable/BinaryObjectOffheapImpl.java       |  304 ++
 .../internal/portable/BinaryRawReaderEx.java    |   33 +
 .../internal/portable/BinaryRawWriterEx.java    |   60 +
 .../internal/portable/BinaryReaderExImpl.java   | 2765 ++++++++++++++++++
 .../internal/portable/BinaryWriterExImpl.java   | 1855 ++++++++++++
 .../portable/GridPortableMarshaller.java        |   30 +-
 .../internal/portable/IgniteObjectEx.java       |  245 --
 .../internal/portable/IgniteObjectImpl.java     |  538 ----
 .../portable/IgniteObjectMetaDataCollector.java |  263 --
 .../portable/IgniteObjectMetaDataImpl.java      |  150 -
 .../portable/IgniteObjectOffheapImpl.java       |  304 --
 .../portable/IgniteObjectRawReaderEx.java       |   33 -
 .../portable/IgniteObjectRawWriterEx.java       |   60 -
 .../portable/IgniteObjectReaderExImpl.java      | 2765 ------------------
 .../portable/IgniteObjectWriterExImpl.java      | 1855 ------------
 .../portable/PortableClassDescriptor.java       |  153 +-
 .../internal/portable/PortableContext.java      |  124 +-
 .../internal/portable/PortableFieldImpl.java    |   82 -
 .../portable/PortableMetaDataHandler.java       |   12 +-
 .../portable/PortableReaderContext.java         |    8 +-
 .../ignite/internal/portable/PortableUtils.java |   14 +-
 .../builder/BinaryObjectBuilderImpl.java        |  551 ++++
 .../builder/IgniteObjectBuilderImpl.java        |  551 ----
 .../portable/builder/PortableBuilderEnum.java   |    8 +-
 .../portable/builder/PortableBuilderReader.java |   56 +-
 .../PortableBuilderSerializationAware.java      |    2 +-
 .../builder/PortableBuilderSerializer.java      |   30 +-
 .../builder/PortableEnumArrayLazyValue.java     |   12 +-
 .../portable/builder/PortableLazyArrayList.java |    2 +-
 .../builder/PortableLazyLinkedList.java         |    2 +-
 .../portable/builder/PortableLazyMap.java       |    2 +-
 .../portable/builder/PortableLazyMapEntry.java  |    2 +-
 .../portable/builder/PortableLazySet.java       |    4 +-
 .../builder/PortableModifiableLazyValue.java    |    2 +-
 .../builder/PortableObjectArrayLazyValue.java   |    8 +-
 .../builder/PortablePlainLazyValue.java         |    2 +-
 .../builder/PortablePlainPortableObject.java    |   22 +-
 .../portable/builder/PortableValueWithType.java |    4 +-
 .../streams/PortableAbstractInputStream.java    |    6 +-
 .../affinity/GridAffinityAssignmentCache.java   |    4 +-
 .../affinity/GridAffinityProcessor.java         |    6 +-
 .../processors/cache/CacheOperationContext.java |   22 +-
 .../cache/GridCacheConcurrentMap.java           |    2 +-
 .../processors/cache/GridCacheContext.java      |    2 +-
 .../processors/cache/GridCacheMapEntry.java     |    2 +-
 .../processors/cache/GridCacheProxyImpl.java    |    4 +-
 .../processors/cache/IgniteCacheProxy.java      |    6 +-
 .../processors/cache/IgniteInternalCache.java   |    4 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |    4 +-
 .../dht/atomic/GridDhtAtomicCache.java          |    5 +-
 .../dht/colocated/GridDhtColocatedCache.java    |    2 +-
 .../near/GridNearTransactionalCache.java        |    2 +-
 .../local/atomic/GridLocalAtomicCache.java      |   27 +-
 .../CacheDefaultPortableAffinityKeyMapper.java  |    6 +-
 .../portable/CacheObjectPortableProcessor.java  |   20 +-
 .../CacheObjectPortableProcessorImpl.java       |  192 +-
 .../cache/portable/IgniteObjectsImpl.java       |   24 +-
 .../transactions/IgniteTxLocalAdapter.java      |    6 +-
 .../platform/PlatformAbstractTarget.java        |   30 +-
 .../processors/platform/PlatformContext.java    |   26 +-
 .../platform/PlatformContextImpl.java           |   46 +-
 .../platform/PlatformExtendedException.java     |    4 +-
 .../platform/PlatformProcessorImpl.java         |    4 +-
 .../platform/cache/PlatformCache.java           |   42 +-
 .../cache/PlatformCacheEntryFilterImpl.java     |    6 +-
 .../cache/PlatformCacheEntryProcessorImpl.java  |   12 +-
 .../platform/cache/PlatformCacheIterator.java   |    4 +-
 .../PlatformCachePartialUpdateException.java    |    4 +-
 .../cache/affinity/PlatformAffinity.java        |    8 +-
 .../query/PlatformAbstractQueryCursor.java      |   10 +-
 .../PlatformContinuousQueryRemoteFilter.java    |    4 +-
 .../cache/query/PlatformFieldsQueryCursor.java  |    4 +-
 .../cache/query/PlatformQueryCursor.java        |    4 +-
 .../cache/store/PlatformCacheStoreCallback.java |    6 +-
 .../platform/cluster/PlatformClusterGroup.java  |   12 +-
 .../cluster/PlatformClusterNodeFilterImpl.java  |    4 +-
 .../platform/compute/PlatformAbstractJob.java   |    4 +-
 .../platform/compute/PlatformAbstractTask.java  |    6 +-
 .../platform/compute/PlatformClosureJob.java    |    4 +-
 .../platform/compute/PlatformCompute.java       |   24 +-
 .../platform/compute/PlatformFullJob.java       |    6 +-
 .../platform/compute/PlatformFullTask.java      |   12 +-
 .../datastreamer/PlatformDataStreamer.java      |    4 +-
 .../PlatformStreamReceiverImpl.java             |    4 +-
 .../dotnet/PlatformDotNetCacheStore.java        |   50 +-
 .../PlatformDotNetConfigurationClosure.java     |   14 +-
 .../events/PlatformEventFilterListenerImpl.java |    6 +-
 .../platform/events/PlatformEvents.java         |   18 +-
 .../messaging/PlatformMessageFilterImpl.java    |    6 +-
 .../messaging/PlatformMessageLocalFilter.java   |    4 +-
 .../platform/messaging/PlatformMessaging.java   |    8 +-
 .../services/PlatformAbstractService.java       |   16 +-
 .../platform/services/PlatformServices.java     |   20 +-
 .../transactions/PlatformTransactions.java      |    4 +-
 .../platform/utils/PlatformFutureUtils.java     |   10 +-
 .../platform/utils/PlatformReaderBiClosure.java |    4 +-
 .../platform/utils/PlatformReaderClosure.java   |    4 +-
 .../platform/utils/PlatformUtils.java           |   60 +-
 .../platform/utils/PlatformWriterBiClosure.java |    4 +-
 .../platform/utils/PlatformWriterClosure.java   |    4 +-
 .../processors/query/GridQueryProcessor.java    |    6 +-
 .../marshaller/portable/PortableMarshaller.java |   41 +-
 .../apache/ignite/portable/PortableField.java   |   41 -
 ...idBinaryObjectBuilderAdditionalSelfTest.java | 1289 ++++++++
 .../GridBinaryObjectBuilderSelfTest.java        | 1069 +++++++
 ...tBuilderStringAsCharsAdditionalSelfTest.java |   28 +
 ...inaryObjectBuilderStringAsCharsSelfTest.java |   28 +
 ...idIgniteObjectBuilderAdditionalSelfTest.java | 1289 --------
 .../GridIgniteObjectBuilderSelfTest.java        | 1069 -------
 ...tBuilderStringAsCharsAdditionalSelfTest.java |   28 -
 ...gniteObjectBuilderStringAsCharsSelfTest.java |   28 -
 .../GridPortableAffinityKeySelfTest.java        |    4 +-
 ...idPortableMarshallerCtxDisabledSelfTest.java |   24 +-
 .../GridPortableMarshallerSelfTest.java         |  440 +--
 .../GridPortableMetaDataDisabledSelfTest.java   |   36 +-
 .../portable/GridPortableMetaDataSelfTest.java  |   36 +-
 .../portable/GridPortableWildcardsSelfTest.java |   70 +-
 .../GridBinaryMarshalerAwareTestClass.java      |   67 +
 ...GridIgniteObjectMarshalerAwareTestClass.java |   67 -
 .../mutabletest/GridPortableTestClasses.java    |    6 +-
 ...naryObjectsAbstractDataStreamerSelfTest.java |  190 ++
 ...aryObjectsAbstractMultiThreadedSelfTest.java |  231 ++
 .../GridCacheBinaryObjectsAbstractSelfTest.java |  981 +++++++
 ...ntNodeBinaryObjectMetadataMultinodeTest.java |  295 ++
 ...CacheClientNodeBinaryObjectMetadataTest.java |  290 ++
 ...ntNodeIgniteObjectMetadataMultinodeTest.java |  295 --
 ...CacheClientNodeIgniteObjectMetadataTest.java |  290 --
 ...niteObjectsAbstractDataStreamerSelfTest.java |  190 --
 ...iteObjectsAbstractMultiThreadedSelfTest.java |  231 --
 .../GridCacheIgniteObjectsAbstractSelfTest.java |  981 -------
 ...GridCachePortableStorePortablesSelfTest.java |    6 +-
 ...ridPortableCacheEntryMemorySizeSelfTest.java |    8 +-
 ...leDuplicateIndexObjectsAbstractSelfTest.java |    8 +-
 .../GridDataStreamerImplSelfTest.java           |   26 +-
 ...ridCacheAffinityRoutingPortableSelfTest.java |    4 +-
 ...rtableDataStreamerMultithreadedSelfTest.java |    4 +-
 ...tionedOnlyPortableMultithreadedSelfTest.java |    4 +-
 ...AtomicNearDisabledOffheapTieredSelfTest.java |   29 +
 ...BinaryObjectsAtomicNearDisabledSelfTest.java |   51 +
 ...inaryObjectsAtomicOffheapTieredSelfTest.java |   29 +
 .../GridCacheBinaryObjectsAtomicSelfTest.java   |   51 +
 ...tionedNearDisabledOffheapTieredSelfTest.java |   30 +
 ...yObjectsPartitionedNearDisabledSelfTest.java |   51 +
 ...ObjectsPartitionedOffheapTieredSelfTest.java |   30 +
 ...idCacheBinaryObjectsPartitionedSelfTest.java |   51 +
 ...AtomicNearDisabledOffheapTieredSelfTest.java |   29 -
 ...IgniteObjectsAtomicNearDisabledSelfTest.java |   51 -
 ...gniteObjectsAtomicOffheapTieredSelfTest.java |   29 -
 .../GridCacheIgniteObjectsAtomicSelfTest.java   |   51 -
 ...tionedNearDisabledOffheapTieredSelfTest.java |   30 -
 ...eObjectsPartitionedNearDisabledSelfTest.java |   51 -
 ...ObjectsPartitionedOffheapTieredSelfTest.java |   30 -
 ...idCacheIgniteObjectsPartitionedSelfTest.java |   51 -
 ...eapTieredEvictionAtomicPortableSelfTest.java |    6 +-
 ...heOffHeapTieredEvictionPortableSelfTest.java |    6 +-
 ...ridCacheBinaryObjectsReplicatedSelfTest.java |   51 +
 ...ridCacheIgniteObjectsReplicatedSelfTest.java |   51 -
 ...idCacheBinaryObjectsAtomicLocalSelfTest.java |   32 +
 ...BinaryObjectsLocalOffheapTieredSelfTest.java |   29 +
 .../GridCacheBinaryObjectsLocalSelfTest.java    |   51 +
 ...idCacheIgniteObjectsAtomicLocalSelfTest.java |   32 -
 ...IgniteObjectsLocalOffheapTieredSelfTest.java |   29 -
 .../GridCacheIgniteObjectsLocalSelfTest.java    |   51 -
 .../PlatformComputePortableArgTask.java         |    8 +-
 .../platform/PlatformEventsWriteEventTask.java  |    4 +-
 .../IgnitePortableObjectsTestSuite.java         |   72 +-
 .../Config/Compute/compute-grid1.xml            |    6 +-
 parent/pom.xml                                  |    4 +-
 208 files changed, 14840 insertions(+), 14390 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/examples/src/main/java/org/apache/ignite/examples/portable/Address.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/portable/Address.java b/examples/src/main/java/org/apache/ignite/examples/portable/Address.java
index 1c23e41..77278aa 100644
--- a/examples/src/main/java/org/apache/ignite/examples/portable/Address.java
+++ b/examples/src/main/java/org/apache/ignite/examples/portable/Address.java
@@ -17,19 +17,19 @@
 
 package org.apache.ignite.examples.portable;
 
-import org.apache.ignite.igniteobject.IgniteObjectException;
-import org.apache.ignite.igniteobject.IgniteObjectMarshalAware;
-import org.apache.ignite.igniteobject.IgniteObjectReader;
-import org.apache.ignite.igniteobject.IgniteObjectWriter;
+import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.binary.Binarylizable;
+import org.apache.ignite.binary.BinaryReader;
+import org.apache.ignite.binary.BinaryWriter;
 
 /**
  * Employee address.
  * <p>
- * This class implements {@link org.apache.ignite.igniteobject.IgniteObjectMarshalAware} only for example purposes,
+ * This class implements {@link org.apache.ignite.binary.Binarylizable} only for example purposes,
  * in order to show how to customize serialization and deserialization of
  * portable objects.
  */
-public class Address implements IgniteObjectMarshalAware {
+public class Address implements Binarylizable {
     /** Street. */
     private String street;
 
@@ -53,13 +53,13 @@ public class Address implements IgniteObjectMarshalAware {
     }
 
     /** {@inheritDoc} */
-    @Override public void writePortable(IgniteObjectWriter writer) throws IgniteObjectException {
+    @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException {
         writer.writeString("street", street);
         writer.writeInt("zip", zip);
     }
 
     /** {@inheritDoc} */
-    @Override public void readPortable(IgniteObjectReader reader) throws IgniteObjectException {
+    @Override public void readBinary(BinaryReader reader) throws BinaryObjectException {
         street = reader.readString("street");
         zip = reader.readInt("zip");
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientPortableTaskExecutionExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientPortableTaskExecutionExample.java b/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientPortableTaskExecutionExample.java
index 15eed07..b281655 100644
--- a/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientPortableTaskExecutionExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientPortableTaskExecutionExample.java
@@ -25,7 +25,7 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.examples.portable.Address;
 import org.apache.ignite.examples.portable.Employee;
 import org.apache.ignite.examples.portable.ExamplePortableNodeStartup;
-import org.apache.ignite.igniteobject.IgniteObject;
+import org.apache.ignite.binary.BinaryObject;
 
 /**
  * This example demonstrates use of portable objects with task execution.
@@ -74,7 +74,7 @@ public class ComputeClientPortableTaskExecutionExample {
             // Convert collection of employees to collection of portable objects.
             // This allows to send objects across nodes without requiring to have
             // Employee class on classpath of these nodes.
-            Collection<IgniteObject> portables = ignite.portables().toPortable(employees);
+            Collection<BinaryObject> portables = ignite.portables().toPortable(employees);
 
             // Execute task and get average salary.
             Long avgSalary = ignite.compute(ignite.cluster().forRemotes()).execute(new ComputeClientTask(), portables);

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientTask.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientTask.java b/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientTask.java
index 94b4e0c..c83dbf2 100644
--- a/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientTask.java
+++ b/examples/src/main/java/org/apache/ignite/examples/portable/computegrid/ComputeClientTask.java
@@ -25,7 +25,7 @@ import org.apache.ignite.compute.ComputeJobAdapter;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
 import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.igniteobject.IgniteObject;
+import org.apache.ignite.binary.BinaryObject;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -37,19 +37,19 @@ import org.jetbrains.annotations.Nullable;
  * for each batch. After all jobs are executed, there results are reduced to
  * get the average salary.
  */
-public class ComputeClientTask extends ComputeTaskSplitAdapter<Collection<IgniteObject>, Long> {
+public class ComputeClientTask extends ComputeTaskSplitAdapter<Collection<BinaryObject>, Long> {
     /** {@inheritDoc} */
     @Override protected Collection<? extends ComputeJob> split(
         int gridSize,
-        Collection<IgniteObject> arg
+        Collection<BinaryObject> arg
     ) {
         Collection<ComputeClientJob> jobs = new ArrayList<>();
 
-        Collection<IgniteObject> employees = new ArrayList<>();
+        Collection<BinaryObject> employees = new ArrayList<>();
 
         // Split provided collection into batches and
         // create a job for each batch.
-        for (IgniteObject employee : arg) {
+        for (BinaryObject employee : arg) {
             employees.add(employee);
 
             if (employees.size() == 3) {
@@ -85,12 +85,12 @@ public class ComputeClientTask extends ComputeTaskSplitAdapter<Collection<Ignite
      */
     private static class ComputeClientJob extends ComputeJobAdapter {
         /** Collection of employees. */
-        private final Collection<IgniteObject> employees;
+        private final Collection<BinaryObject> employees;
 
         /**
          * @param employees Collection of employees.
          */
-        private ComputeClientJob(Collection<IgniteObject> employees) {
+        private ComputeClientJob(Collection<BinaryObject> employees) {
             this.employees = employees;
         }
 
@@ -99,7 +99,7 @@ public class ComputeClientTask extends ComputeTaskSplitAdapter<Collection<Ignite
             long sum = 0;
             int cnt = 0;
 
-            for (IgniteObject employee : employees) {
+            for (BinaryObject employee : employees) {
                 System.out.println(">>> Processing employee: " + employee.field("name"));
 
                 // Get salary from portable object. Note that object

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortablePutGetExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortablePutGetExample.java b/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortablePutGetExample.java
index 793bfbf..0adb5b7 100644
--- a/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortablePutGetExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortablePutGetExample.java
@@ -32,7 +32,7 @@ import org.apache.ignite.examples.portable.Address;
 import org.apache.ignite.examples.portable.ExamplePortableNodeStartup;
 import org.apache.ignite.examples.portable.Organization;
 import org.apache.ignite.examples.portable.OrganizationType;
-import org.apache.ignite.igniteobject.IgniteObject;
+import org.apache.ignite.binary.BinaryObject;
 
 /**
  * This example demonstrates use of portable objects with Ignite cache.
@@ -133,10 +133,10 @@ public class CacheClientPortablePutGetExample {
         cache.put(1, org);
 
         // Get cache that will get values as portable objects.
-        IgniteCache<Integer, IgniteObject> portableCache = cache.withKeepBinary();
+        IgniteCache<Integer, BinaryObject> portableCache = cache.withKeepBinary();
 
         // Get recently created organization as a portable object.
-        IgniteObject po = portableCache.get(1);
+        BinaryObject po = portableCache.get(1);
 
         // Get organization's name from portable object (note that
         // object doesn't need to be fully deserialized).
@@ -212,16 +212,16 @@ public class CacheClientPortablePutGetExample {
         cache.putAll(map);
 
         // Get cache that will get values as portable objects.
-        IgniteCache<Integer, IgniteObject> portableCache = cache.withKeepBinary();
+        IgniteCache<Integer, BinaryObject> portableCache = cache.withKeepBinary();
 
         // Get recently created organizations as portable objects.
-        Map<Integer, IgniteObject> poMap = portableCache.getAll(map.keySet());
+        Map<Integer, BinaryObject> poMap = portableCache.getAll(map.keySet());
 
         Collection<String> names = new ArrayList<>();
 
         // Get organizations' names from portable objects (note that
         // objects don't need to be fully deserialized).
-        for (IgniteObject po : poMap.values())
+        for (BinaryObject po : poMap.values())
             names.add(po.<String>field("name"));
 
         System.out.println();

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortableQueryExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortableQueryExample.java b/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortableQueryExample.java
index cbeed12..0975c29 100644
--- a/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortableQueryExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/portable/datagrid/CacheClientPortableQueryExample.java
@@ -39,7 +39,7 @@ import org.apache.ignite.examples.portable.EmployeeKey;
 import org.apache.ignite.examples.portable.ExamplePortableNodeStartup;
 import org.apache.ignite.examples.portable.Organization;
 import org.apache.ignite.examples.portable.OrganizationType;
-import org.apache.ignite.igniteobject.IgniteObject;
+import org.apache.ignite.binary.BinaryObject;
 
 /**
  * This example demonstrates use of portable objects with cache queries.
@@ -98,7 +98,7 @@ public class CacheClientPortableQueryExample {
                 populateCache(orgCache, employeeCache);
 
                 // Get cache that will work with portable objects.
-                IgniteCache<IgniteObject, IgniteObject> portableCache = employeeCache.withKeepBinary();
+                IgniteCache<BinaryObject, BinaryObject> portableCache = employeeCache.withKeepBinary();
 
                 // Run SQL query example.
                 sqlQuery(portableCache);
@@ -180,17 +180,17 @@ public class CacheClientPortableQueryExample {
      *
      * @param cache Ignite cache.
      */
-    private static void sqlQuery(IgniteCache<IgniteObject, IgniteObject> cache) {
-        SqlQuery<IgniteObject, IgniteObject> query = new SqlQuery<>(Employee.class, "zip = ?");
+    private static void sqlQuery(IgniteCache<BinaryObject, BinaryObject> cache) {
+        SqlQuery<BinaryObject, BinaryObject> query = new SqlQuery<>(Employee.class, "zip = ?");
 
         int zip = 94109;
 
-        QueryCursor<Cache.Entry<IgniteObject, IgniteObject>> employees = cache.query(query.setArgs(zip));
+        QueryCursor<Cache.Entry<BinaryObject, BinaryObject>> employees = cache.query(query.setArgs(zip));
 
         System.out.println();
         System.out.println(">>> Employees with zip " + zip + ':');
 
-        for (Cache.Entry<IgniteObject, IgniteObject> e : employees.getAll())
+        for (Cache.Entry<BinaryObject, BinaryObject> e : employees.getAll())
             System.out.println(">>>     " + e.getValue().deserialize());
     }
 
@@ -199,20 +199,20 @@ public class CacheClientPortableQueryExample {
      *
      * @param cache Ignite cache.
      */
-    private static void sqlJoinQuery(IgniteCache<IgniteObject, IgniteObject> cache) {
-        SqlQuery<IgniteObject, IgniteObject> query = new SqlQuery<>(Employee.class,
+    private static void sqlJoinQuery(IgniteCache<BinaryObject, BinaryObject> cache) {
+        SqlQuery<BinaryObject, BinaryObject> query = new SqlQuery<>(Employee.class,
             "from Employee, \"" + ORGANIZATION_CACHE_NAME + "\".Organization as org " +
                 "where Employee.organizationId = org._key and org.name = ?");
 
         String organizationName = "GridGain";
 
-        QueryCursor<Cache.Entry<IgniteObject, IgniteObject>> employees =
+        QueryCursor<Cache.Entry<BinaryObject, BinaryObject>> employees =
             cache.query(query.setArgs(organizationName));
 
         System.out.println();
         System.out.println(">>> Employees working for " + organizationName + ':');
 
-        for (Cache.Entry<IgniteObject, IgniteObject> e : employees.getAll())
+        for (Cache.Entry<BinaryObject, BinaryObject> e : employees.getAll())
             System.out.println(">>>     " + e.getValue());
     }
 
@@ -221,7 +221,7 @@ public class CacheClientPortableQueryExample {
      *
      * @param cache Ignite cache.
      */
-    private static void sqlFieldsQuery(IgniteCache<IgniteObject, IgniteObject> cache) {
+    private static void sqlFieldsQuery(IgniteCache<BinaryObject, BinaryObject> cache) {
         SqlFieldsQuery query = new SqlFieldsQuery("select name, salary from Employee");
 
         QueryCursor<List<?>> employees = cache.query(query);
@@ -238,15 +238,15 @@ public class CacheClientPortableQueryExample {
      *
      * @param cache Ignite cache.
      */
-    private static void textQuery(IgniteCache<IgniteObject, IgniteObject> cache) {
-        TextQuery<IgniteObject, IgniteObject> query = new TextQuery<>(Employee.class, "TX");
+    private static void textQuery(IgniteCache<BinaryObject, BinaryObject> cache) {
+        TextQuery<BinaryObject, BinaryObject> query = new TextQuery<>(Employee.class, "TX");
 
-        QueryCursor<Cache.Entry<IgniteObject, IgniteObject>> employees = cache.query(query);
+        QueryCursor<Cache.Entry<BinaryObject, BinaryObject>> employees = cache.query(query);
 
         System.out.println();
         System.out.println(">>> Employees living in Texas:");
 
-        for (Cache.Entry<IgniteObject, IgniteObject> e : employees.getAll())
+        for (Cache.Entry<BinaryObject, BinaryObject> e : employees.getAll())
             System.out.println(">>>     " + e.getValue().deserialize());
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/IgniteCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java
index d58ba30..099a3f4 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java
@@ -132,9 +132,9 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS
     public IgniteCache<K, V> withNoRetries();
 
     /**
-     * Returns cache that will operate with portable objects.
+     * Returns cache that will operate with binary objects.
      * <p>
-     * Cache returned by this method will not be forced to deserialize portable objects,
+     * Cache returned by this method will not be forced to deserialize binary objects,
      * so keys and values will be returned from cache API methods without changes. Therefore,
      * signature of the cache can contain only following types:
      * <ul>
@@ -153,16 +153,16 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS
      * </ul>
      * <p>
      * For example, if you use {@link Integer} as a key and {@code Value} class as a value
-     * (which will be stored in portable format), you should acquire following projection
+     * (which will be stored in binary format), you should acquire following projection
      * to avoid deserialization:
      * <pre>
-     * IgniteCache<Integer, PortableObject> prj = cache.withKeepBinary();
+     * IgniteCache<Integer, BinaryObject> prj = cache.withKeepBinary();
      *
      * // Value is not deserialized and returned in portable format.
-     * PortableObject po = prj.get(1);
+     * BinaryObject po = prj.get(1);
      * </pre>
      * <p>
-     * Note that this method makes sense only if cache is working in portable mode ({@link PortableMarshaller} is used).
+     * Note that this method makes sense only if cache is working in binary mode ({@link PortableMarshaller} is used).
      * If not, this method is no-op and will return current cache.
      *
      * @return New cache instance for portable objects.

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/IgniteObjects.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteObjects.java b/modules/core/src/main/java/org/apache/ignite/IgniteObjects.java
index 4afd15b..ace9865 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteObjects.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteObjects.java
@@ -26,10 +26,10 @@ import java.util.LinkedList;
 import java.util.TreeMap;
 import java.util.UUID;
 import org.apache.ignite.marshaller.portable.PortableMarshaller;
-import org.apache.ignite.igniteobject.IgniteObjectBuilder;
-import org.apache.ignite.igniteobject.IgniteObjectException;
-import org.apache.ignite.igniteobject.IgniteObjectMetadata;
-import org.apache.ignite.igniteobject.IgniteObject;
+import org.apache.ignite.binary.BinaryObjectBuilder;
+import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.binary.BinaryTypeMetadata;
+import org.apache.ignite.binary.BinaryObject;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -42,7 +42,7 @@ import org.jetbrains.annotations.Nullable;
  * <li>Automatically convert collections and maps between Java, .NET, and C++.</li>
  * <li>
  *      Optionally avoid deserialization of objects on the server side
- *      (objects are stored in {@link org.apache.ignite.igniteobject.IgniteObject} format).
+ *      (objects are stored in {@link org.apache.ignite.binary.BinaryObject} format).
  * </li>
  * <li>Avoid need to have concrete class definitions on the server side.</li>
  * <li>Dynamically change structure of the classes without having to restart the cluster.</li>
@@ -86,7 +86,7 @@ import org.jetbrains.annotations.Nullable;
  * IgniteCache&lt;Integer.class, PortableObject&gt; prj = cache.withKeepBinary();
  * </pre>
  * <h1 class="header">Automatic Portable Types</h1>
- * Note that only portable classes are converted to {@link org.apache.ignite.igniteobject.IgniteObject} format. Following
+ * Note that only portable classes are converted to {@link org.apache.ignite.binary.BinaryObject} format. Following
  * classes are never converted (e.g., {@link #toPortable(Object)} method will return original
  * object, and instances of these classes will be stored in cache without changes):
  * <ul>
@@ -110,7 +110,7 @@ import org.jetbrains.annotations.Nullable;
  * in Java is {@code Dictionary} in C#, and {@link TreeMap} in Java becomes {@code SortedDictionary}
  * in C#, etc.
  * <h1 class="header">Building Portable Objects</h1>
- * Ignite comes with {@link org.apache.ignite.igniteobject.IgniteObjectBuilder} which allows to build portable objects dynamically:
+ * Ignite comes with {@link org.apache.ignite.binary.BinaryObjectBuilder} which allows to build portable objects dynamically:
  * <pre name=code class=java>
  * PortableBuilder builder = Ignition.ignite().portables().builder();
  *
@@ -188,7 +188,7 @@ import org.jetbrains.annotations.Nullable;
  *
  * cfg.setMarshaller(marsh);
  * </pre>
- * You can also specify class name for a portable object via {@link org.apache.ignite.igniteobject.IgniteObjectConfiguration}.
+ * You can also specify class name for a portable object via {@link org.apache.ignite.binary.BinaryTypeConfiguration}.
  * Do it in case if you need to override other configuration properties on per-type level, like
  * ID-mapper, or serializer.
  * <h1 class="header">Custom Affinity Keys</h1>
@@ -215,7 +215,7 @@ import org.jetbrains.annotations.Nullable;
  * </pre>
  * <h1 class="header">Serialization</h1>
  * Serialization and deserialization works out-of-the-box in Ignite. However, you can provide your own custom
- * serialization logic by optionally implementing {@link org.apache.ignite.igniteobject.IgniteObjectMarshalAware} interface, like so:
+ * serialization logic by optionally implementing {@link org.apache.ignite.binary.Binarylizable} interface, like so:
  * <pre name=code class=java>
  * public class Address implements PortableMarshalAware {
  *     private String street;
@@ -224,20 +224,20 @@ import org.jetbrains.annotations.Nullable;
  *     // Empty constructor required for portable deserialization.
  *     public Address() {}
  *
- *     &#64;Override public void writePortable(PortableWriter writer) throws PortableException {
+ *     &#64;Override public void writeBinary(PortableWriter writer) throws PortableException {
  *         writer.writeString("street", street);
  *         writer.writeInt("zip", zip);
  *     }
  *
- *     &#64;Override public void readPortable(PortableReader reader) throws PortableException {
+ *     &#64;Override public void readBinary(PortableReader reader) throws PortableException {
  *         street = reader.readString("street");
  *         zip = reader.readInt("zip");
  *     }
  * }
  * </pre>
  * Alternatively, if you cannot change class definitions, you can provide custom serialization
- * logic in {@link org.apache.ignite.igniteobject.IgniteObjectSerializer} either globally in {@link PortableMarshaller} or
- * for a specific type via {@link org.apache.ignite.igniteobject.IgniteObjectConfiguration} instance.
+ * logic in {@link org.apache.ignite.binary.BinarySerializer} either globally in {@link PortableMarshaller} or
+ * for a specific type via {@link org.apache.ignite.binary.BinaryTypeConfiguration} instance.
  * <p>
  * Similar to java serialization you can use {@code writeReplace()} and {@code readResolve()} methods.
  * <ul>
@@ -254,10 +254,10 @@ import org.jetbrains.annotations.Nullable;
  * <h1 class="header">Custom ID Mappers</h1>
  * Ignite implementation uses name hash codes to generate IDs for class names or field names
  * internally. However, in cases when you want to provide your own ID mapping schema,
- * you can provide your own {@link org.apache.ignite.igniteobject.IgniteObjectIdMapper} implementation.
+ * you can provide your own {@link org.apache.ignite.binary.BinaryTypeIdMapper} implementation.
  * <p>
  * ID-mapper may be provided either globally in {@link PortableMarshaller},
- * or for a specific type via {@link org.apache.ignite.igniteobject.IgniteObjectConfiguration} instance.
+ * or for a specific type via {@link org.apache.ignite.binary.BinaryTypeConfiguration} instance.
  * <h1 class="header">Query Indexing</h1>
  * Portable objects can be indexed for querying by specifying index fields in
  * {@link org.apache.ignite.cache.CacheTypeMetadata} inside of specific
@@ -297,13 +297,13 @@ public interface IgniteObjects {
     public int typeId(String typeName);
 
     /**
-     * Converts provided object to instance of {@link org.apache.ignite.igniteobject.IgniteObject}.
+     * Converts provided object to instance of {@link org.apache.ignite.binary.BinaryObject}.
      *
      * @param obj Object to convert.
      * @return Converted object.
-     * @throws org.apache.ignite.igniteobject.IgniteObjectException In case of error.
+     * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    public <T> T toPortable(@Nullable Object obj) throws IgniteObjectException;
+    public <T> T toPortable(@Nullable Object obj) throws BinaryObjectException;
 
     /**
      * Creates new portable builder.
@@ -311,7 +311,7 @@ public interface IgniteObjects {
      * @param typeId ID of the type.
      * @return Newly portable builder.
      */
-    public IgniteObjectBuilder builder(int typeId);
+    public BinaryObjectBuilder builder(int typeId);
 
     /**
      * Creates new portable builder.
@@ -319,7 +319,7 @@ public interface IgniteObjects {
      * @param typeName Type name.
      * @return Newly portable builder.
      */
-    public IgniteObjectBuilder builder(String typeName);
+    public BinaryObjectBuilder builder(String typeName);
 
     /**
      * Creates portable builder initialized by existing portable object.
@@ -327,40 +327,40 @@ public interface IgniteObjects {
      * @param portableObj Portable object to initialize builder.
      * @return Portable builder.
      */
-    public IgniteObjectBuilder builder(IgniteObject portableObj);
+    public BinaryObjectBuilder builder(BinaryObject portableObj);
 
     /**
      * Gets metadata for provided class.
      *
      * @param cls Class.
      * @return Metadata.
-     * @throws org.apache.ignite.igniteobject.IgniteObjectException In case of error.
+     * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @Nullable public IgniteObjectMetadata metadata(Class<?> cls) throws IgniteObjectException;
+    @Nullable public BinaryTypeMetadata metadata(Class<?> cls) throws BinaryObjectException;
 
     /**
      * Gets metadata for provided class name.
      *
      * @param typeName Type name.
      * @return Metadata.
-     * @throws org.apache.ignite.igniteobject.IgniteObjectException In case of error.
+     * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @Nullable public IgniteObjectMetadata metadata(String typeName) throws IgniteObjectException;
+    @Nullable public BinaryTypeMetadata metadata(String typeName) throws BinaryObjectException;
 
     /**
      * Gets metadata for provided type ID.
      *
      * @param typeId Type ID.
      * @return Metadata.
-     * @throws org.apache.ignite.igniteobject.IgniteObjectException In case of error.
+     * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @Nullable public IgniteObjectMetadata metadata(int typeId) throws IgniteObjectException;
+    @Nullable public BinaryTypeMetadata metadata(int typeId) throws BinaryObjectException;
 
     /**
      * Gets metadata for all known types.
      *
      * @return Metadata.
-     * @throws org.apache.ignite.igniteobject.IgniteObjectException In case of error.
+     * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    public Collection<IgniteObjectMetadata> metadata() throws IgniteObjectException;
+    public Collection<BinaryTypeMetadata> metadata() throws BinaryObjectException;
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryField.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryField.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryField.java
new file mode 100644
index 0000000..efc5a7a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryField.java
@@ -0,0 +1,39 @@
+/*
+ * 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.binary;
+
+/**
+ * Portable object field. Can be used to speed object field lookup.
+ */
+public interface BinaryField {
+    /**
+     * Check whether field exists in the object.
+     *
+     * @param obj Object.
+     * @return {@code True} if exists.
+     */
+    public boolean exists(BinaryObject obj);
+
+    /**
+     * Get field's value from the given object.
+     *
+     * @param obj Object.
+     * @return Value.
+     */
+    public <T> T value(BinaryObject obj);
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryInvalidTypeException.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryInvalidTypeException.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryInvalidTypeException.java
new file mode 100644
index 0000000..63f7be6
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryInvalidTypeException.java
@@ -0,0 +1,58 @@
+/*
+ * 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.binary;
+
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Exception indicating that class needed for deserialization of portable object does not exist.
+ * <p>
+ * Thrown from {@link BinaryObject#deserialize()} method.
+ */
+public class BinaryInvalidTypeException extends BinaryObjectException {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /**
+     * Creates invalid class exception with error message.
+     *
+     * @param msg Error message.
+     */
+    public BinaryInvalidTypeException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Creates invalid class exception with {@link Throwable} as a cause.
+     *
+     * @param cause Cause.
+     */
+    public BinaryInvalidTypeException(Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * Creates invalid class exception with error message and {@link Throwable} as a cause.
+     *
+     * @param msg Error message.
+     * @param cause Cause.
+     */
+    public BinaryInvalidTypeException(String msg, @Nullable Throwable cause) {
+        super(msg, cause);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java
new file mode 100644
index 0000000..3a00a77
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java
@@ -0,0 +1,162 @@
+/*
+ * 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.binary;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.TreeMap;
+import org.apache.ignite.marshaller.portable.PortableMarshaller;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Wrapper for portable object in portable binary format. Once an object is defined as portable,
+ * Ignite will always store it in memory in the portable (i.e. binary) format.
+ * User can choose to work either with the portable format or with the deserialized form
+ * (assuming that class definitions are present in the classpath).
+ * <p>
+ * <b>NOTE:</b> user does not need to (and should not) implement this interface directly.
+ * <p>
+ * To work with the portable format directly, user should create a cache projection
+ * over {@code PortableObject} class and then retrieve individual fields as needed:
+ * <pre name=code class=java>
+ * IgniteCache&lt;PortableObject, PortableObject&gt; prj = cache.withKeepBinary();
+ *
+ * // Convert instance of MyKey to portable format.
+ * // We could also use GridPortableBuilder to create the key in portable format directly.
+ * PortableObject key = grid.portables().toPortable(new MyKey());
+ *
+ * PortableObject val = prj.get(key);
+ *
+ * String field = val.field("myFieldName");
+ * </pre>
+ * Alternatively, if we have class definitions in the classpath, we may choose to work with deserialized
+ * typed objects at all times. In this case we do incur the deserialization cost. However, if
+ * {@link PortableMarshaller#isKeepDeserialized()} is {@code true} then Ignite will only deserialize on the first access
+ * and will cache the deserialized object, so it does not have to be deserialized again:
+ * <pre name=code class=java>
+ * IgniteCache&lt;MyKey.class, MyValue.class&gt; cache = grid.cache(null);
+ *
+ * MyValue val = cache.get(new MyKey());
+ *
+ * // Normal java getter.
+ * String fieldVal = val.getMyFieldName();
+ * </pre>
+ * <h1 class="header">Working With Maps and Collections</h1>
+ * All maps and collections in the portable objects are serialized automatically. When working
+ * with different platforms, e.g. C++ or .NET, Ignite will automatically pick the most
+ * adequate collection or map in either language. For example, {@link ArrayList} in Java will become
+ * {@code List} in C#, {@link LinkedList} in Java is {@link LinkedList} in C#, {@link HashMap}
+ * in Java is {@code Dictionary} in C#, and {@link TreeMap} in Java becomes {@code SortedDictionary}
+ * in C#, etc.
+ * <h1 class="header">Dynamic Structure Changes</h1>
+ * Since objects are always cached in the portable binary format, server does not need to
+ * be aware of the class definitions. Moreover, if class definitions are not present or not
+ * used on the server, then clients can continuously change the structure of the portable
+ * objects without having to restart the cluster. For example, if one client stores a
+ * certain class with fields A and B, and another client stores the same class with
+ * fields B and C, then the server-side portable object will have the fields A, B, and C.
+ * As the structure of a portable object changes, the new fields become available for SQL queries
+ * automatically.
+ * <h1 class="header">Building Portable Objects</h1>
+ * Ignite comes with {@link BinaryObjectBuilder} which allows to build portable objects dynamically:
+ * <pre name=code class=java>
+ * PortableBuilder builder = Ignition.ignite().portables().builder("org.project.MyObject");
+ *
+ * builder.setField("fieldA", "A");
+ * builder.setField("fieldB", "B");
+ *
+ * PortableObject portableObj = builder.build();
+ * </pre>
+ * For the cases when class definition is present
+ * in the class path, it is also possible to populate a standard POJO and then
+ * convert it to portable format, like so:
+ * <pre name=code class=java>
+ * MyObject obj = new MyObject();
+ *
+ * obj.setFieldA("A");
+ * obj.setFieldB(123);
+ *
+ * PortableObject portableObj = Ignition.ignite().portables().toPortable(obj);
+ * </pre>
+ * <h1 class="header">Portable Metadata</h1>
+ * Even though Ignite portable protocol only works with hash codes for type and field names
+ * to achieve better performance, Ignite provides metadata for all portable types which
+ * can be queried ar runtime via any of the {@link org.apache.ignite.IgniteObjects#metadata(Class)}
+ * methods. Having metadata also allows for proper formatting of {@code PortableObject.toString()} method,
+ * even when portable objects are kept in binary format only, which may be necessary for audit reasons.
+ */
+public interface BinaryObject extends Serializable, Cloneable {
+    /**
+     * Gets portable object type ID.
+     *
+     * @return Type ID.
+     */
+    public int typeId();
+
+    /**
+     * Gets meta data for this portable object.
+     *
+     * @return Meta data.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public BinaryTypeMetadata metaData() throws BinaryObjectException;
+
+    /**
+     * Gets field value.
+     *
+     * @param fieldName Field name.
+     * @return Field value.
+     * @throws BinaryObjectException In case of any other error.
+     */
+    @Nullable public <F> F field(String fieldName) throws BinaryObjectException;
+
+    /**
+     * Checks whether field is set.
+     *
+     * @param fieldName Field name.
+     * @return {@code true} if field is set.
+     */
+    public boolean hasField(String fieldName);
+
+    /**
+     * Gets field descriptor.
+     *
+     * @param fieldName Field name.
+     * @return Field descriptor.
+     * @throws BinaryObjectException If failed.
+     */
+    public BinaryField fieldDescriptor(String fieldName) throws BinaryObjectException;
+
+    /**
+     * Gets fully deserialized instance of portable object.
+     *
+     * @return Fully deserialized instance of portable object.
+     * @throws BinaryInvalidTypeException If class doesn't exist.
+     * @throws BinaryObjectException In case of any other error.
+     */
+    @Nullable public <T> T deserialize() throws BinaryObjectException;
+
+    /**
+     * Copies this portable object.
+     *
+     * @return Copy of this portable object.
+     */
+    public BinaryObject clone() throws CloneNotSupportedException;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectBuilder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectBuilder.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectBuilder.java
new file mode 100644
index 0000000..014f256
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectBuilder.java
@@ -0,0 +1,136 @@
+/*
+ * 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.binary;
+
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Portable object builder. Provides ability to build portable objects dynamically without having class definitions.
+ * <p>
+ * Here is an example of how a portable object can be built dynamically:
+ * <pre name=code class=java>
+ * PortableBuilder builder = Ignition.ignite().portables().builder("org.project.MyObject");
+ *
+ * builder.setField("fieldA", "A");
+ * builder.setField("fieldB", "B");
+ *
+ * PortableObject portableObj = builder.build();
+ * </pre>
+ *
+ * <p>
+ * Also builder can be initialized by existing portable object. This allows changing some fields without affecting
+ * other fields.
+ * <pre name=code class=java>
+ * PortableBuilder builder = Ignition.ignite().portables().builder(person);
+ *
+ * builder.setField("name", "John");
+ *
+ * person = builder.build();
+ * </pre>
+ * </p>
+ *
+ * If you need to modify nested portable object you can get builder for nested object using
+ * {@link #getField(String)}, changes made on nested builder will affect parent object,
+ * for example:
+ *
+ * <pre name=code class=java>
+ * PortableBuilder personBuilder = grid.portables().createBuilder(personPortableObj);
+ * PortableBuilder addressBuilder = personBuilder.setField("address");
+ *
+ * addressBuilder.setField("city", "New York");
+ *
+ * personPortableObj = personBuilder.build();
+ *
+ * // Should be "New York".
+ * String city = personPortableObj.getField("address").getField("city");
+ * </pre>
+ *
+ * @see org.apache.ignite.IgniteObjects#builder(int)
+ * @see org.apache.ignite.IgniteObjects#builder(String)
+ * @see org.apache.ignite.IgniteObjects#builder(BinaryObject)
+ */
+public interface BinaryObjectBuilder {
+    /**
+     * Returns value assigned to the specified field.
+     * If the value is a portable object instance of {@code GridPortableBuilder} will be returned,
+     * which can be modified.
+     * <p>
+     * Collections and maps returned from this method are modifiable.
+     *
+     * @param name Field name.
+     * @return Filed value.
+     */
+    public <T> T getField(String name);
+
+    /**
+     * Sets field value.
+     *
+     * @param name Field name.
+     * @param val Field value (cannot be {@code null}).
+     * @see BinaryObject#metaData()
+     */
+    public BinaryObjectBuilder setField(String name, Object val);
+
+    /**
+     * Sets field value with value type specification.
+     * <p>
+     * Field type is needed for proper metadata update.
+     *
+     * @param name Field name.
+     * @param val Field value.
+     * @param type Field type.
+     * @see BinaryObject#metaData()
+     */
+    public <T> BinaryObjectBuilder setField(String name, @Nullable T val, Class<? super T> type);
+
+    /**
+     * Sets field value.
+     * <p>
+     * This method should be used if field is portable object.
+     *
+     * @param name Field name.
+     * @param builder Builder for object field.
+     */
+    public BinaryObjectBuilder setField(String name, @Nullable BinaryObjectBuilder builder);
+
+    /**
+     * Removes field from this builder.
+     *
+     * @param fieldName Field name.
+     * @return {@code this} instance for chaining.
+     */
+    public BinaryObjectBuilder removeField(String fieldName);
+
+    /**
+     * Sets hash code for resulting portable object returned by {@link #build()} method.
+     * <p>
+     * If not set {@code 0} is used.
+     *
+     * @param hashCode Hash code.
+     * @return {@code this} instance for chaining.
+     */
+    public BinaryObjectBuilder hashCode(int hashCode);
+
+    /**
+     * Builds portable object.
+     *
+     * @return Portable object.
+     * @throws BinaryObjectException In case of error.
+     */
+    public BinaryObject build() throws BinaryObjectException;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectException.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectException.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectException.java
new file mode 100644
index 0000000..124f267
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObjectException.java
@@ -0,0 +1,57 @@
+/*
+ * 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.binary;
+
+import org.apache.ignite.IgniteException;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Exception indicating portable object serialization error.
+ */
+public class BinaryObjectException extends IgniteException {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /**
+     * Creates portable exception with error message.
+     *
+     * @param msg Error message.
+     */
+    public BinaryObjectException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Creates portable exception with {@link Throwable} as a cause.
+     *
+     * @param cause Cause.
+     */
+    public BinaryObjectException(Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * Creates portable exception with error message and {@link Throwable} as a cause.
+     *
+     * @param msg Error message.
+     * @param cause Cause.
+     */
+    public BinaryObjectException(String msg, @Nullable Throwable cause) {
+        super(msg, cause);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawReader.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawReader.java
new file mode 100644
index 0000000..665b5ea
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawReader.java
@@ -0,0 +1,240 @@
+/*
+ * 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.binary;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
+import java.util.UUID;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Raw reader for portable objects. Raw reader does not use field name hash codes, therefore,
+ * making the format even more compact. However, if the raw reader is used,
+ * dynamic structure changes to the portable objects are not supported.
+ */
+public interface BinaryRawReader {
+    /**
+     * @return Byte value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public byte readByte() throws BinaryObjectException;
+
+    /**
+     * @return Short value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public short readShort() throws BinaryObjectException;
+
+    /**
+     * @return Integer value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public int readInt() throws BinaryObjectException;
+
+    /**
+     * @return Long value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public long readLong() throws BinaryObjectException;
+
+    /**
+     * @return Float value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public float readFloat() throws BinaryObjectException;
+
+    /**
+     * @return Double value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public double readDouble() throws BinaryObjectException;
+
+    /**
+     * @return Char value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public char readChar() throws BinaryObjectException;
+
+    /**
+     * @return Boolean value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public boolean readBoolean() throws BinaryObjectException;
+
+    /**
+     * @return Decimal value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public BigDecimal readDecimal() throws BinaryObjectException;
+
+    /**
+     * @return String value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public String readString() throws BinaryObjectException;
+
+    /**
+     * @return UUID.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public UUID readUuid() throws BinaryObjectException;
+
+    /**
+     * @return Date.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Date readDate() throws BinaryObjectException;
+
+    /**
+     * @return Timestamp.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Timestamp readTimestamp() throws BinaryObjectException;
+
+    /**
+     * @return Object.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> T readObject() throws BinaryObjectException;
+
+    /**
+     * @return Byte array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public byte[] readByteArray() throws BinaryObjectException;
+
+    /**
+     * @return Short array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public short[] readShortArray() throws BinaryObjectException;
+
+    /**
+     * @return Integer array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public int[] readIntArray() throws BinaryObjectException;
+
+    /**
+     * @return Long array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public long[] readLongArray() throws BinaryObjectException;
+
+    /**
+     * @return Float array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public float[] readFloatArray() throws BinaryObjectException;
+
+    /**
+     * @return Byte array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public double[] readDoubleArray() throws BinaryObjectException;
+
+    /**
+     * @return Char array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public char[] readCharArray() throws BinaryObjectException;
+
+    /**
+     * @return Boolean array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public boolean[] readBooleanArray() throws BinaryObjectException;
+
+    /**
+     * @return Decimal array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public BigDecimal[] readDecimalArray() throws BinaryObjectException;
+
+    /**
+     * @return String array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public String[] readStringArray() throws BinaryObjectException;
+
+    /**
+     * @return UUID array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public UUID[] readUuidArray() throws BinaryObjectException;
+
+    /**
+     * @return Date array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Date[] readDateArray() throws BinaryObjectException;
+
+    /**
+     * @return Timestamp array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Timestamp[] readTimestampArray() throws BinaryObjectException;
+
+    /**
+     * @return Object array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Object[] readObjectArray() throws BinaryObjectException;
+
+    /**
+     * @return Collection.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> Collection<T> readCollection() throws BinaryObjectException;
+
+    /**
+     * @param colCls Collection class.
+     * @return Collection.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> Collection<T> readCollection(Class<? extends Collection<T>> colCls)
+        throws BinaryObjectException;
+
+    /**
+     * @return Map.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <K, V> Map<K, V> readMap() throws BinaryObjectException;
+
+    /**
+     * @param mapCls Map class.
+     * @return Map.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <K, V> Map<K, V> readMap(Class<? extends Map<K, V>> mapCls) throws BinaryObjectException;
+
+    /**
+     * @return Value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T extends Enum<?>> T readEnum() throws BinaryObjectException;
+
+    /**
+     * @return Value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T extends Enum<?>> T[] readEnumArray() throws BinaryObjectException;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawWriter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawWriter.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawWriter.java
new file mode 100644
index 0000000..2081774
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryRawWriter.java
@@ -0,0 +1,225 @@
+/*
+ * 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.binary;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
+import java.util.UUID;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Raw writer for portable object. Raw writer does not write field name hash codes, therefore,
+ * making the format even more compact. However, if the raw writer is used,
+ * dynamic structure changes to the portable objects are not supported.
+ */
+public interface BinaryRawWriter {
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeByte(byte val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeShort(short val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeInt(int val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeLong(long val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeFloat(float val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDouble(double val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeChar(char val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeBoolean(boolean val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDecimal(@Nullable BigDecimal val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeString(@Nullable String val) throws BinaryObjectException;
+
+    /**
+     * @param val UUID to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeUuid(@Nullable UUID val) throws BinaryObjectException;
+
+    /**
+     * @param val Date to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDate(@Nullable Date val) throws BinaryObjectException;
+
+    /**
+     * @param val Timestamp to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeTimestamp(@Nullable Timestamp val) throws BinaryObjectException;
+
+    /**
+     * @param obj Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeObject(@Nullable Object obj) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeByteArray(@Nullable byte[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeShortArray(@Nullable short[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeIntArray(@Nullable int[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeLongArray(@Nullable long[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeFloatArray(@Nullable float[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDoubleArray(@Nullable double[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeCharArray(@Nullable char[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeBooleanArray(@Nullable boolean[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDecimalArray(@Nullable BigDecimal[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeStringArray(@Nullable String[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeUuidArray(@Nullable UUID[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeDateArray(@Nullable Date[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeTimestampArray(@Nullable Timestamp[] val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public void writeObjectArray(@Nullable Object[] val) throws BinaryObjectException;
+
+    /**
+     * @param col Collection to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public <T> void writeCollection(@Nullable Collection<T> col) throws BinaryObjectException;
+
+    /**
+     * @param map Map to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public <K, V> void writeMap(@Nullable Map<K, V> map) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public <T extends Enum<?>> void writeEnum(T val) throws BinaryObjectException;
+
+    /**
+     * @param val Value to write.
+     * @throws BinaryObjectException In case of error.
+     */
+    public <T extends Enum<?>> void writeEnumArray(T[] val) throws BinaryObjectException;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/20f5b9cd/modules/core/src/main/java/org/apache/ignite/binary/BinaryReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryReader.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryReader.java
new file mode 100644
index 0000000..3881b49
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryReader.java
@@ -0,0 +1,291 @@
+/*
+ * 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.binary;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
+import java.util.UUID;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Reader for portable objects used in {@link Binarylizable} implementations.
+ * Useful for the cases when user wants a fine-grained control over serialization.
+ * <p>
+ * Note that Ignite never writes full strings for field or type names. Instead,
+ * for performance reasons, Ignite writes integer hash codes for type and field names.
+ * It has been tested that hash code conflicts for the type names or the field names
+ * within the same type are virtually non-existent and, to gain performance, it is safe
+ * to work with hash codes. For the cases when hash codes for different types or fields
+ * actually do collide, Ignite provides {@link BinaryTypeIdMapper} which
+ * allows to override the automatically generated hash code IDs for the type and field names.
+ */
+public interface BinaryReader {
+    /**
+     * @param fieldName Field name.
+     * @return Byte value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public byte readByte(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Short value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public short readShort(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Integer value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public int readInt(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Long value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public long readLong(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @throws BinaryObjectException In case of error.
+     * @return Float value.
+     */
+    public float readFloat(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Double value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public double readDouble(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Char value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public char readChar(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Boolean value.
+     * @throws BinaryObjectException In case of error.
+     */
+    public boolean readBoolean(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Decimal value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public BigDecimal readDecimal(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return String value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public String readString(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return UUID.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public UUID readUuid(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Date.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Date readDate(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Timestamp.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Timestamp readTimestamp(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Object.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> T readObject(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Byte array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public byte[] readByteArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Short array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public short[] readShortArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Integer array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public int[] readIntArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Long array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public long[] readLongArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Float array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public float[] readFloatArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Byte array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public double[] readDoubleArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Char array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public char[] readCharArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Boolean array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public boolean[] readBooleanArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Decimal array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public BigDecimal[] readDecimalArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return String array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public String[] readStringArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return UUID array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public UUID[] readUuidArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Date array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Date[] readDateArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Timestamp array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Timestamp[] readTimestampArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Object array.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public Object[] readObjectArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Collection.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> Collection<T> readCollection(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @param colCls Collection class.
+     * @return Collection.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T> Collection<T> readCollection(String fieldName, Class<? extends Collection<T>> colCls)
+        throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Map.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <K, V> Map<K, V> readMap(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @param mapCls Map class.
+     * @return Map.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <K, V> Map<K, V> readMap(String fieldName, Class<? extends Map<K, V>> mapCls)
+        throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T extends Enum<?>> T readEnum(String fieldName) throws BinaryObjectException;
+
+    /**
+     * @param fieldName Field name.
+     * @return Value.
+     * @throws BinaryObjectException In case of error.
+     */
+    @Nullable public <T extends Enum<?>> T[] readEnumArray(String fieldName) throws BinaryObjectException;
+
+    /**
+     * Gets raw reader. Raw reader does not use field name hash codes, therefore,
+     * making the format even more compact. However, if the raw reader is used,
+     * dynamic structure changes to the portable objects are not supported.
+     *
+     * @return Raw reader.
+     */
+    public BinaryRawReader rawReader();
+}
\ No newline at end of file