You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/03/05 09:55:42 UTC

[44/50] [abbrv] incubator-ignite git commit: # ignite-51

# ignite-51


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

Branch: refs/heads/ignite-user-req
Commit: b876320ecac810f592920a3c7a2b6b7c781565b4
Parents: 832d1ee
Author: sboikov <sb...@gridgain.com>
Authored: Wed Mar 4 23:12:24 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Mar 4 23:23:40 2015 +0300

----------------------------------------------------------------------
 .../communication/GridIoMessageFactory.java     |   2 +-
 .../affinity/GridAffinityAssignmentCache.java   |  11 +-
 .../affinity/GridAffinityProcessor.java         |  35 +++--
 .../cache/CacheEntryPredicateContainsValue.java |   5 +-
 .../processors/cache/CacheEvictionEntry.java    |   2 +-
 .../cache/CacheInvokeDirectResult.java          |   4 +-
 .../internal/processors/cache/CacheObject.java  |   8 +-
 .../processors/cache/CacheObjectAdapter.java    |   4 +-
 .../processors/cache/CacheObjectContext.java    |  42 ++++-
 .../processors/cache/CacheObjectImpl.java       |  18 +--
 .../processors/cache/EvictableEntryImpl.java    |  10 +-
 .../processors/cache/GridCacheAdapter.java      |  22 +--
 .../cache/GridCacheConcurrentMap.java           |   2 +-
 .../processors/cache/GridCacheContext.java      |  28 ++--
 .../GridCacheDefaultAffinityKeyMapper.java      |  44 +++---
 .../cache/GridCacheDeploymentManager.java       |   2 +-
 .../processors/cache/GridCacheEntryInfo.java    |   4 +-
 .../processors/cache/GridCacheEventManager.java |   6 +-
 .../cache/GridCacheEvictionRequest.java         |   2 +-
 .../processors/cache/GridCacheMapEntry.java     |  58 ++++---
 .../processors/cache/GridCacheMessage.java      |  10 +-
 .../processors/cache/GridCacheProcessor.java    |  29 ++--
 .../processors/cache/GridCacheStoreManager.java |  20 +--
 .../processors/cache/GridCacheSwapManager.java  |  65 +++++---
 .../processors/cache/GridCacheUtils.java        |   7 +-
 .../processors/cache/KeyCacheObjectImpl.java    |  14 +-
 .../cache/KeyCacheObjectTransferImpl.java       |   8 +-
 .../processors/cache/UserCacheObjectImpl.java   |   4 +-
 .../cache/UserKeyCacheObjectImpl.java           |  12 +-
 .../cache/affinity/GridCacheAffinityImpl.java   |  10 +-
 .../CacheDataStructuresManager.java             |   2 +-
 .../distributed/dht/GridDhtCacheAdapter.java    |   2 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |   4 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  14 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |   4 +-
 .../atomic/GridNearAtomicUpdateResponse.java    |   2 +-
 .../distributed/near/CacheVersionedValue.java   | 157 +++++++++++++++++++
 .../distributed/near/GridNearCacheEntry.java    |   2 +-
 .../distributed/near/GridNearGetFuture.java     |   4 +-
 .../cache/distributed/near/GridNearTxLocal.java |   4 +-
 .../near/GridNearTxPrepareFuture.java           |   6 +-
 .../near/GridNearTxPrepareResponse.java         |  18 +--
 .../near/NearTxPrepareResponseOwnedValue.java   | 157 -------------------
 .../local/atomic/GridLocalAtomicCache.java      |  13 +-
 .../cache/query/GridCacheQueryManager.java      |   2 +-
 .../continuous/CacheContinuousQueryEntry.java   |   6 +-
 .../continuous/CacheContinuousQueryEvent.java   |   2 +-
 .../continuous/CacheContinuousQueryManager.java |   6 +-
 .../cache/transactions/IgniteTxAdapter.java     |   2 +-
 .../cache/transactions/IgniteTxEntry.java       |   2 +-
 .../cache/transactions/IgniteTxKey.java         |   2 +-
 .../transactions/IgniteTxLocalAdapter.java      |  28 +---
 .../cache/transactions/TxEntryValueHolder.java  |   2 +-
 .../dataload/GridDataLoadUpdateJob.java         |   4 +-
 .../dataload/IgniteDataLoaderEntry.java         |   4 +-
 .../dataload/IgniteDataLoaderImpl.java          |  11 +-
 .../datastructures/DataStructuresProcessor.java |   4 +-
 .../IgniteCacheObjectProcessorAdapter.java      |  19 ++-
 .../cache/GridCacheAbstractFullApiSelfTest.java |   3 +-
 .../cache/GridCacheOffHeapSelfTest.java         |   2 +-
 ...actQueueFailoverDataConsistencySelfTest.java |   2 +-
 ...achePartitionedMultiNodeCounterSelfTest.java |   4 +-
 .../processors/query/h2/IgniteH2Indexing.java   |   3 +-
 .../cache/GridCacheOffHeapAndSwapSelfTest.java  |   4 +-
 .../cache/spring/SpringDynamicCacheManager.java |   2 +-
 65 files changed, 526 insertions(+), 465 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
index 7c4f949..05679ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
@@ -560,7 +560,7 @@ public class GridIoMessageFactory implements MessageFactory {
                 break;
 
             case 102:
-                msg = new NearTxPrepareResponseOwnedValue();
+                msg = new CacheVersionedValue();
 
                 break;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
index 40fa43a..316aefc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
@@ -93,6 +93,10 @@ public class GridAffinityAssignmentCache {
         CacheAffinityKeyMapper affMapper,
         int backups)
     {
+        assert ctx != null;
+        assert aff != null;
+        assert affMapper != null;
+
         this.ctx = ctx;
         this.aff = aff;
         this.affMapper = affMapper;
@@ -296,10 +300,6 @@ public class GridAffinityAssignmentCache {
      * @return Partition.
      */
     public int partition(Object key) {
-        // TODO IGNITE-51.
-        if (key instanceof CacheObject)
-            key = ((CacheObject)key).value(ctx, false);
-
         return aff.partition(affinityKey(key));
     }
 
@@ -311,6 +311,9 @@ public class GridAffinityAssignmentCache {
      * @return Affinity key.
      */
     private Object affinityKey(Object key) {
+        if (key instanceof CacheObject)
+            key = ((CacheObject)key).value(ctx.cacheObjectContext(), false);
+
         return (key instanceof GridCacheInternal ? ctx.defaultAffMapper() : affMapper).affinityKey(key);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
index d7d0391..7458078 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
@@ -225,8 +225,8 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
         if (affInfo == null || affInfo.mapper == null)
             return null;
 
-        if (affInfo.portableEnabled)
-            key = ctx.portable().marshalToPortable(key);
+        if (key instanceof CacheObject)
+            key = ((CacheObject)key).value(affInfo.cacheObjCtx, false);
 
         return affInfo.mapper.affinityKey(key);
     }
@@ -282,6 +282,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
 
     /**
      * @param cacheName Cache name.
+     * @param topVer Topology version.
      * @return Affinity cache.
      * @throws IgniteCheckedException In case of error.
      */
@@ -304,7 +305,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
                 cctx.config().getAffinity(),
                 cctx.config().getAffinityMapper(),
                 new GridAffinityAssignment(topVer, cctx.affinity().assignments(topVer)),
-                cctx.portableEnabled());
+                cctx.cacheObjectContext());
 
             IgniteInternalFuture<AffinityInfo> old = affMap.putIfAbsent(key, new GridFinishedFuture<>(ctx, info));
 
@@ -402,6 +403,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
      * {@link CacheAffinityKeyMapper} from remote node.
      *
      * @param cacheName Name of cache on which affinity is requested.
+     * @param topVer Topology version.
      * @param n Node from which affinity is requested.
      * @return Affinity cached function.
      * @throws IgniteCheckedException If either local or remote node cannot get deployment for affinity objects.
@@ -420,9 +422,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
         f.reset();
         m.reset();
 
-        Boolean portableEnabled = ctx.portable().portableEnabled(n, cacheName);
-
-        return new AffinityInfo(f, m, t.get3(), portableEnabled != null && portableEnabled);
+        return new AffinityInfo(f, m, t.get3(), ctx.portable().contextForCache(n, cacheName));
     }
 
     /**
@@ -471,6 +471,9 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
      * @throws IgniteCheckedException In case of error.
      */
     private <K> ClusterNode primary(AffinityInfo aff, K key) throws IgniteCheckedException {
+        if (key instanceof CacheObject)
+            key = ((CacheObject)key).value(aff.cacheObjCtx, false);
+
         int part = aff.affFunc.partition(aff.mapper.affinityKey(key));
 
         Collection<ClusterNode> nodes = aff.assignment.get(part);
@@ -487,6 +490,9 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
      * @return Primary and backup nodes.
      */
     private <K> List<ClusterNode> primaryAndBackups(AffinityInfo aff, K key) {
+        if (key instanceof CacheObject)
+            key = ((CacheObject) key).value(aff.cacheObjCtx, false);
+
         int part = aff.affFunc.partition(aff.mapper.affinityKey(key));
 
         return aff.assignment.get(part);
@@ -512,21 +518,23 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
         /** Assignment. */
         private GridAffinityAssignment assignment;
 
-        /** Portable enabled flag. */
-        private boolean portableEnabled;
+        /** */
+        private CacheObjectContext cacheObjCtx;
 
         /**
          * @param affFunc Affinity function.
          * @param mapper Affinity key mapper.
          * @param assignment Partition assignment.
-         * @param portableEnabled Portable enabled flag.
+         * @param cacheObjCtx Cache objects context.
          */
-        private AffinityInfo(CacheAffinityFunction affFunc, CacheAffinityKeyMapper mapper,
-            GridAffinityAssignment assignment, boolean portableEnabled) {
+        private AffinityInfo(CacheAffinityFunction affFunc,
+            CacheAffinityKeyMapper mapper,
+            GridAffinityAssignment assignment,
+            CacheObjectContext cacheObjCtx) {
             this.affFunc = affFunc;
             this.mapper = mapper;
             this.assignment = assignment;
-            this.portableEnabled = portableEnabled;
+            this.cacheObjCtx = cacheObjCtx;
         }
 
         /**
@@ -745,6 +753,9 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
             ctx.gateway().readLock();
 
             try {
+                if (key instanceof CacheObject)
+                    key = ((CacheObject)key).value(cache().cacheObjCtx, false);
+
                 return cache().keyMapper().affinityKey(key);
             }
             catch (IgniteCheckedException e) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
index 412b685..0765930 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
@@ -55,7 +55,8 @@ public class CacheEntryPredicateContainsValue implements CacheEntryPredicate {
         try {
             CacheObject val = entry.rawGetOrUnmarshal(true);
 
-            return F.eq(this.val.value(entry.context(), false), CU.value(val, entry.context(), false));
+            return F.eq(this.val.value(entry.context().cacheObjectContext(), false),
+                CU.value(val, entry.context(), false));
         }
         catch (IgniteCheckedException e) {
             throw new IgniteException(e);
@@ -64,7 +65,7 @@ public class CacheEntryPredicateContainsValue implements CacheEntryPredicate {
 
     /** {@inheritDoc} */
     @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
-        val.finishUnmarshal(ctx, ldr);
+        val.finishUnmarshal(ctx.cacheObjectContext(), ldr);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictionEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictionEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictionEntry.java
index a5576f9..da3d975 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictionEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictionEntry.java
@@ -97,7 +97,7 @@ public class CacheEvictionEntry implements Message {
      * @throws IgniteCheckedException If failed.
      */
     public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
-        key.finishUnmarshal(ctx, ldr);
+        key.finishUnmarshal(ctx.cacheObjectContext(), ldr);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
index 02a297f..3c5c5c7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
@@ -105,13 +105,13 @@ public class CacheInvokeDirectResult implements Message {
 
     /** {@inheritDoc} */
     public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
-        key.finishUnmarshal(ctx, ldr);
+        key.finishUnmarshal(ctx.cacheObjectContext(), ldr);
 
         if (errBytes != null)
             err = ctx.marshaller().unmarshal(errBytes, ldr);
 
         if (res != null)
-            res.finishUnmarshal(ctx, ldr);
+            res.finishUnmarshal(ctx.cacheObjectContext(), ldr);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObject.java
index ba5a1fe..b231d89 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObject.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObject.java
@@ -30,7 +30,7 @@ public interface CacheObject extends Message {
      * @param cpy If {@code true} need to copy value.
      * @return Value.
      */
-    @Nullable public <T> T value(GridCacheContext ctx, boolean cpy);
+    @Nullable public <T> T value(CacheObjectContext ctx, boolean cpy);
 
     /**
      * @param name Field name.
@@ -54,19 +54,19 @@ public interface CacheObject extends Message {
      * @return Value bytes.
      * @throws IgniteCheckedException If failed.
      */
-    public byte[] valueBytes(GridCacheContext ctx) throws IgniteCheckedException;
+    public byte[] valueBytes(CacheObjectContext ctx) throws IgniteCheckedException;
 
     /**
      * @param ctx Context.
      * @param ldr Class loader.
      * @throws IgniteCheckedException If failed.
      */
-    public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException;
+    public void finishUnmarshal(CacheObjectContext ctx, ClassLoader ldr) throws IgniteCheckedException;
 
     /**
      * @param ctx Cache context.
      *
      * @return Instance to store in cache.
      */
-    public CacheObject prepareForCache(GridCacheContext ctx);
+    public CacheObject prepareForCache(CacheObjectContext ctx);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
index b8ca690..4d8572a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
@@ -46,8 +46,8 @@ public abstract class CacheObjectAdapter implements CacheObject, Externalizable
      * @param ctx Context.
      * @return {@code True} need to copy value returned to user.
      */
-    protected boolean needCopy(GridCacheContext ctx) {
-        return ctx.config().isCopyOnGet() && val != null && !ctx.portable().immutable(val);
+    protected boolean needCopy(CacheObjectContext ctx) {
+        return ctx.copyOnGet() && val != null && !ctx.processor().immutable(val);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
index b2a79f2..a61be98 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import org.apache.ignite.cache.affinity.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.processors.portable.*;
 
@@ -30,16 +31,55 @@ public class CacheObjectContext {
     /** */
     private GridPortableProcessor proc;
 
+    /** */
+    private CacheAffinityKeyMapper dfltAffMapper;
+
+    /** */
+    private boolean cpyOnGet;
+
+    /** */
+    private boolean unmarshalVals;
+
     /**
      * @param kernalCtx Kernal context.
+     * @param dfltAffMapper Default affinity mapper.
+     * @param cpyOnGet Copy on get flag.
+     * @param unmarshalVals Unmarshal values flag.
      */
-    public CacheObjectContext(GridKernalContext kernalCtx) {
+    public CacheObjectContext(GridKernalContext kernalCtx,
+        CacheAffinityKeyMapper dfltAffMapper,
+        boolean cpyOnGet,
+        boolean unmarshalVals) {
         this.kernalCtx = kernalCtx;
+        this.dfltAffMapper = dfltAffMapper;
+        this.cpyOnGet = cpyOnGet;
+        this.unmarshalVals = unmarshalVals;
 
         proc = kernalCtx.portable();
     }
 
     /**
+     * @return Copy on get flag.
+     */
+    public boolean copyOnGet() {
+        return cpyOnGet;
+    }
+
+    /**
+     * @return Unmarshal values flag.
+     */
+    public boolean unmarshalValues() {
+        return unmarshalVals;
+    }
+
+    /**
+     * @return Default affinity mapper.
+     */
+    public CacheAffinityKeyMapper defaultAffMapper() {
+        return dfltAffMapper;
+    }
+
+    /**
      * @return Kernal context.
      */
     public GridKernalContext kernalContext() {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
index 87ff779..ebc5de7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
@@ -49,7 +49,7 @@ public class CacheObjectImpl extends CacheObjectAdapter {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Nullable @Override public <T> T value(GridCacheContext ctx, boolean cpy) {
+    @Nullable @Override public <T> T value(CacheObjectContext ctx, boolean cpy) {
         cpy = cpy && needCopy(ctx);
 
         try {
@@ -59,7 +59,7 @@ public class CacheObjectImpl extends CacheObjectAdapter {
                 if (byteArray())
                     return (T)Arrays.copyOf(bytes, bytes.length);
                 else
-                    return (T)ctx.portable().unmarshal(ctx.cacheObjectContext(), valBytes, U.gridClassLoader());
+                    return (T)ctx.processor().unmarshal(ctx, valBytes, ctx.kernalContext().config().getClassLoader());
             }
 
             if (val != null)
@@ -67,7 +67,7 @@ public class CacheObjectImpl extends CacheObjectAdapter {
 
             assert valBytes != null;
 
-            val = ctx.portable().unmarshal(ctx.cacheObjectContext(), valBytes, U.gridClassLoader());
+            val = ctx.processor().unmarshal(ctx, valBytes, ctx.kernalContext().config().getClassLoader());
         }
         catch (IgniteCheckedException e) {
             throw new IgniteException("Failed to unmarshal object.", e);
@@ -82,12 +82,12 @@ public class CacheObjectImpl extends CacheObjectAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] valueBytes(GridCacheContext ctx) throws IgniteCheckedException {
+    @Override public byte[] valueBytes(CacheObjectContext ctx) throws IgniteCheckedException {
         if (byteArray())
             return (byte[])val;
 
         if (valBytes == null)
-            valBytes = ctx.portable().marshal(ctx.cacheObjectContext(), val);
+            valBytes = ctx.processor().marshal(ctx, val);
 
         return valBytes;
     }
@@ -101,11 +101,11 @@ public class CacheObjectImpl extends CacheObjectAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
+    @Override public void finishUnmarshal(CacheObjectContext ctx, ClassLoader ldr) throws IgniteCheckedException {
         assert val != null || valBytes != null;
 
-        if (val == null && ctx.isUnmarshalValues())
-            val = ctx.portable().unmarshal(ctx.cacheObjectContext(), valBytes, ldr);
+        if (val == null && ctx.unmarshalValues())
+            val = ctx.processor().unmarshal(ctx, valBytes, ldr);
     }
 
     /** {@inheritDoc} */
@@ -201,7 +201,7 @@ public class CacheObjectImpl extends CacheObjectAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObject prepareForCache(GridCacheContext ctx) {
+    @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
         return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/EvictableEntryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/EvictableEntryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/EvictableEntryImpl.java
index 81abb7c..8f451a8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/EvictableEntryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/EvictableEntryImpl.java
@@ -46,7 +46,7 @@ public class EvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
 
     /** {@inheritDoc} */
     @Override public K getKey() throws IllegalStateException {
-        return cached.key().value(cached.context(), false);
+        return cached.key().value(cached.context().cacheObjectContext(), false);
     }
 
     /** {@inheritDoc} */
@@ -79,7 +79,7 @@ public class EvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
         try {
             CacheObject val = cached.peek(GridCachePeekMode.GLOBAL);
 
-            return val != null ? val.<V>value(cached.context(), false) : null;
+            return val != null ? val.<V>value(cached.context().cacheObjectContext(), false) : null;
         }
         catch (GridCacheEntryRemovedException e) {
             return null;
@@ -96,13 +96,13 @@ public class EvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
                 GridTuple<CacheObject> peek = tx.peek(cached.context(), false, cached.key(), null);
 
                 if (peek != null)
-                    return peek.get().value(cached.context(), false);
+                    return peek.get().value(cached.context().cacheObjectContext(), false);
             }
 
             if (cached.detached()) {
                 CacheObject val = cached.rawGet();
 
-                return val != null ? val.<V>value(cached.context(), false) : null;
+                return val != null ? val.<V>value(cached.context().cacheObjectContext(), false) : null;
             }
 
             for (;;) {
@@ -114,7 +114,7 @@ public class EvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
                 try {
                     CacheObject val = e.peek(GridCachePeekMode.GLOBAL, CU.empty0());
 
-                    return val != null ? val.<V>value(cached.context(), false) : null;
+                    return val != null ? val.<V>value(cached.context().cacheObjectContext(), false) : null;
                 }
                 catch (GridCacheEntryRemovedException ignored) {
                     // No-op.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 98a5cb4..c897477 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -839,7 +839,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
             else
                 cacheVal = localCachePeek0(cacheKey, modes.heap, modes.offheap, modes.swap, plc);
 
-            Object val = cacheVal != null ? cacheVal.value(ctx, true) : null;
+            Object val = CU.value(cacheVal, ctx, true);
 
             if (ctx.portableEnabled())
                 val = ctx.unwrapPortableIfNeeded(val, ctx.keepPortable());
@@ -948,7 +948,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
                 if (peek != null) {
                     CacheObject v = peek.get();
 
-                    Object val0 = v.value(ctx, true);
+                    Object val0 = v.value(ctx.cacheObjectContext(), true);
 
                     if (ctx.portableEnabled())
                         val0 = ctx.unwrapPortableIfNeeded(v, ctx.keepPortable());
@@ -1038,7 +1038,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
                 }
 
                 if (val != null)
-                    return F.t((V)val.get().value(ctx, true));
+                    return F.t((V)val.get().value(ctx.cacheObjectContext(), true));
             }
         }
         catch (GridCacheEntryRemovedException ignore) {
@@ -1751,11 +1751,11 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
 
                                     if (map != null) {
                                         if (set || wasNew)
-                                            map.put(key.<K>value(ctx, false), (V)val);
+                                            map.put(key.<K>value(ctx.cacheObjectContext(), false), (V)val);
                                         else {
                                             try {
                                                 // TODO IGNITE-51.
-                                                K k = key.<K>value(ctx, false);
+                                                K k = key.<K>value(ctx.cacheObjectContext(), false);
 
                                                 GridTuple<V> v = peek0(false, k, GLOBAL);
 
@@ -4057,7 +4057,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
         long topVer,
         boolean replicate,
         long ttl) {
-        if (p != null && !p.apply(key.value(ctx, false), val))
+        if (p != null && !p.apply(key.value(ctx.cacheObjectContext(), false), val))
             return;
 
         CacheObject cacheVal = ctx.toCacheObject(val);
@@ -4487,7 +4487,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
 
         CacheObject val = unswapped.value();
 
-        Object val0 = val != null ? val.value(ctx, true) : null;
+        Object val0 = val != null ? val.value(ctx.cacheObjectContext(), true) : null;
 
         if (ctx.portableEnabled())
             return (V)ctx.unwrapPortableIfNeeded(val0, !deserializePortable);
@@ -5302,7 +5302,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
 
                 CacheObject val = entryEx(cacheKey).innerReload();
 
-                return (V)(val != null ? val.value(ctx, true) : null);
+                return (V)(val != null ? val.value(ctx.cacheObjectContext(), true) : null);
             }
             catch (GridCacheEntryRemovedException ignored) {
                 if (log.isDebugEnabled())
@@ -5535,8 +5535,8 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
 
             KeyCacheObject key = entry.key();
 
-            Object key0 = key.value(ctx, true);
-            Object val0 = val.value(ctx, true);
+            Object key0 = key.value(ctx.cacheObjectContext(), true);
+            Object val0 = val.value(ctx.cacheObjectContext(), true);
 
             if (deserializePortable && ctx.portableEnabled()) {
                 key0 = ctx.unwrapPortableIfNeeded(key0, true);
@@ -6287,7 +6287,7 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>,
         {
             assert ver != null;
 
-            if (p != null && !p.apply(key.<K>value(ctx, false), (V)val))
+            if (p != null && !p.apply(key.<K>value(ctx.cacheObjectContext(), false), (V)val))
                 return;
 
             long ttl = 0;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMap.java
index d9dce4d..eb1124f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMap.java
@@ -2174,7 +2174,7 @@ public class GridCacheConcurrentMap {
 
         /** {@inheritDoc} */
         @Override public K next() {
-            return it.next().key().value(it.ctx, true);
+            return it.next().key().value(it.ctx.cacheObjectContext(), true);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index be22b85..0827ef7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -156,9 +156,6 @@ public class GridCacheContext<K, V> implements Externalizable {
     /** Cached local rich node. */
     private ClusterNode locNode;
 
-    /** Default cache affinity mapper. */
-    private CacheAffinityKeyMapper affMapper;
-
     /**
      * Thread local projection. If it's set it means that method call was initiated
      * by child projection of initial cache.
@@ -292,8 +289,6 @@ public class GridCacheContext<K, V> implements Externalizable {
 
         cacheName = cacheCfg.getName();
 
-        cacheObjCtx = ctx.portable().contextForCache(null, cacheName);
-
         if (cacheName != null) {
             int hash = cacheName.hashCode();
 
@@ -1003,14 +998,16 @@ public class GridCacheContext<K, V> implements Externalizable {
      * @return Default affinity key mapper.
      */
     public CacheAffinityKeyMapper defaultAffMapper() {
-        return affMapper;
+        return cacheObjCtx.defaultAffMapper();
     }
 
     /**
-     * Sets default affinity key mapper.
+     * Sets cache object context.
+     *
+     * @param cacheObjCtx Cache object context.
      */
-    public void defaultAffMapper(CacheAffinityKeyMapper dfltAffMapper) {
-        this.affMapper = dfltAffMapper;
+    public void cacheObjectContext(CacheObjectContext cacheObjCtx) {
+        this.cacheObjCtx = cacheObjCtx;
     }
 
     /**
@@ -1421,13 +1418,6 @@ public class GridCacheContext<K, V> implements Externalizable {
     }
 
     /**
-     * @return {@code True} if values should be always unmarshalled.
-     */
-    public boolean isUnmarshalValues() {
-        return cacheCfg.isQueryIndexEnabled();
-    }
-
-    /**
      * @return {@code True} if deployment enabled.
      */
     public boolean deploymentEnabled() {
@@ -1871,8 +1861,8 @@ public class GridCacheContext<K, V> implements Externalizable {
         assert val != null;
 
         if (!keepCacheObjects) {
-            Object key0 = key.value(this, false);
-            Object val0 = skipVals ? true : val.value(this, cpy);
+            Object key0 = key.value(cacheObjCtx, false);
+            Object val0 = skipVals ? true : val.value(cacheObjCtx, cpy);
 
             if (portableEnabled() && deserializePortable) {
                 key0 = unwrapPortableIfNeeded(key0, false);
@@ -1899,7 +1889,7 @@ public class GridCacheContext<K, V> implements Externalizable {
         evictMgr = null;
         qryMgr = null;
         dataStructuresMgr = null;
-        affMapper = null;
+        cacheObjCtx = null;
 
         mgrs.clear();
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDefaultAffinityKeyMapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDefaultAffinityKeyMapper.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDefaultAffinityKeyMapper.java
index 2b6bfc9..f52bf46 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDefaultAffinityKeyMapper.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDefaultAffinityKeyMapper.java
@@ -46,7 +46,7 @@ public class GridCacheDefaultAffinityKeyMapper implements CacheAffinityKeyMapper
 
     /** Injected ignite instance. */
     @IgniteInstanceResource
-    private Ignite ignite;
+    protected Ignite ignite;
 
     /** Reflection cache. */
     private GridReflectionCache reflectCache = new GridReflectionCache(
@@ -76,7 +76,7 @@ public class GridCacheDefaultAffinityKeyMapper implements CacheAffinityKeyMapper
 
     /** Logger. */
     @LoggerResource
-    private transient IgniteLogger log;
+    protected transient IgniteLogger log;
 
     /**
      * If key class has annotation {@link CacheAffinityKeyMapped},
@@ -89,32 +89,26 @@ public class GridCacheDefaultAffinityKeyMapper implements CacheAffinityKeyMapper
     @Override public Object affinityKey(Object key) {
         GridArgumentCheck.notNull(key, "key");
 
-        IgniteKernal kernal = (IgniteKernal)ignite;
+        try {
+            Object o = reflectCache.firstFieldValue(key);
 
-        if (kernal.context().portable().isPortableObject(key))
-            return kernal.context().portable().affinityKey(key);
-        else {
-            try {
-                Object o = reflectCache.firstFieldValue(key);
-
-                if (o != null)
-                    return o;
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to access affinity field for key [field=" +
-                    reflectCache.firstField(key.getClass()) + ", key=" + key + ']', e);
-            }
+            if (o != null)
+                return o;
+        }
+        catch (IgniteCheckedException e) {
+            U.error(log, "Failed to access affinity field for key [field=" +
+                reflectCache.firstField(key.getClass()) + ", key=" + key + ']', e);
+        }
 
-            try {
-                Object o = reflectCache.firstMethodValue(key);
+        try {
+            Object o = reflectCache.firstMethodValue(key);
 
-                if (o != null)
-                    return o;
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to invoke affinity method for key [mtd=" +
-                    reflectCache.firstMethod(key.getClass()) + ", key=" + key + ']', e);
-            }
+            if (o != null)
+                return o;
+        }
+        catch (IgniteCheckedException e) {
+            U.error(log, "Failed to invoke affinity method for key [mtd=" +
+                reflectCache.firstMethod(key.getClass()) + ", key=" + key + ']', e);
         }
 
         return key;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
index b365b45..8485f28 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
@@ -316,7 +316,7 @@ public class GridCacheDeploymentManager<K, V> extends GridCacheSharedManagerAdap
 
         assert key != null : "Key cannot be null for cache entry: " + e;
 
-        Object key0 = key.value(cache.context(), false);
+        Object key0 = key.value(cache.context().cacheObjectContext(), false);
         Object val0 = CU.value(v, cache.context(), false);
 
         ClassLoader keyLdr = U.detectObjectClassLoader(key0);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
index 0179ad0..9b08714 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
@@ -351,10 +351,10 @@ public class GridCacheEntryInfo implements Externalizable, Message {
      * @throws IgniteCheckedException If unmarshalling failed.
      */
     public void unmarshal(GridCacheContext ctx, ClassLoader clsLdr) throws IgniteCheckedException {
-        key.finishUnmarshal(ctx, clsLdr);
+        key.finishUnmarshal(ctx.cacheObjectContext(), clsLdr);
 
         if (val != null)
-            val.finishUnmarshal(ctx, clsLdr);
+            val.finishUnmarshal(ctx.cacheObjectContext(), clsLdr);
 // TODO IGNITE-51
 //        Marshaller mrsh = ctx.marshaller();
 //

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
index d87a224..90ae04b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
@@ -244,12 +244,12 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
                 type,
                 part,
                 cctx.isNear(),
-                key.value(cctx, false),
+                key.value(cctx.cacheObjectContext(), false),
                 xid,
                 lockId,
-                newVal != null ? newVal.value(cctx, false) : null,
+                CU.value(newVal, cctx, false),
                 hasNewVal,
-                oldVal != null ? oldVal.value(cctx, false) : null,
+                CU.value(oldVal, cctx, false),
                 hasOldVal,
                 subjId,
                 cloClsName,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionRequest.java
index 661bb06..c892148 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionRequest.java
@@ -88,7 +88,7 @@ public class GridCacheEvictionRequest extends GridCacheMessage implements GridCa
                 e.prepareMarshal(cctx);
 
                 if (depEnabled)
-                    prepareObject(e.key().value(cctx, false), ctx);
+                    prepareObject(e.key().value(cctx.cacheObjectContext(), false), ctx);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index b2a2e04..0c492d9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -186,7 +186,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
         assert Thread.holdsLock(this);
 
         // In case we deal with IGFS cache, count updated data
-        if (cctx.cache().isIgfsDataCache() && cctx.kernalContext().igfsHelper().isIgfsBlockKey(key.value(cctx, false))) {
+        if (cctx.cache().isIgfsDataCache() &&
+            cctx.kernalContext().igfsHelper().isIgfsBlockKey(key.value(cctx.cacheObjectContext(), false))) {
             int newSize = valueLength0(val, null);
             int oldSize = valueLength0(this.val, (this.val == null && valPtr != 0) ? valueBytes0() : null);
 
@@ -207,7 +208,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
                     Object val0 = null;
 
                     if (val != null) {
-                        val0 = val.value(cctx, false);
+                        val0 = val.value(cctx.cacheObjectContext(), false);
 
                         if (val0 != null)
                             cctx.gridDeploy().deploy(val0.getClass(), val0.getClass().getClassLoader());
@@ -226,7 +227,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
                 if (val != null) {
                     boolean valIsByteArr = val.byteArray();
 
-                    valPtr = mem.putOffHeap(valPtr, val.valueBytes(cctx), valIsByteArr);
+                    valPtr = mem.putOffHeap(valPtr, val.valueBytes(cctx.cacheObjectContext()), valIsByteArr);
                 }
                 else {
                     mem.removeOffHeap(valPtr);
@@ -263,7 +264,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
      * @return Length of value.
      */
     private int valueLength0(@Nullable CacheObject val, @Nullable IgniteBiTuple<byte[], Boolean> valBytes) {
-        byte[] bytes = val != null ? (byte[])val.value(cctx, false) : null;
+        byte[] bytes = val != null ? (byte[])val.value(cctx.cacheObjectContext(), false) : null;
 
         return bytes != null ? bytes.length :
             (valBytes == null) ? 0 : valBytes.get1().length - (valBytes.get2() ? 0 : 6);
@@ -551,8 +552,10 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
 
             IgniteUuid valClsLdrId = null;
 
-            if (val != null)
-                valClsLdrId = cctx.deploy().getClassLoaderId(val.value(cctx, false).getClass().getClassLoader());
+            if (val != null) {
+                valClsLdrId = cctx.deploy().getClassLoaderId(
+                    val.value(cctx.cacheObjectContext(), false).getClass().getClassLoader());
+            }
 
             IgniteBiTuple<byte[], Boolean> valBytes = valueBytes0();
 
@@ -562,7 +565,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
                 ver,
                 ttlExtras(),
                 expireTime,
-                cctx.deploy().getClassLoaderId(U.detectObjectClassLoader(key.value(cctx, false))),
+                cctx.deploy().getClassLoaderId(U.detectObjectClassLoader(key.value(cctx.cacheObjectContext(), false))),
                 valClsLdrId);
 
             if (log.isDebugEnabled())
@@ -585,7 +588,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
             assert val != null;
 
             try {
-                byte[] bytes = val.valueBytes(cctx);
+                byte[] bytes = val.valueBytes(cctx.cacheObjectContext());
 
                 boolean plain = val.byteArray();
 
@@ -1030,7 +1033,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
             old = (retval || intercept) ? rawGetOrUnmarshalUnlocked(!retval) : this.val;
 
             if (intercept) {
-                key0 = key.value(cctx, false);
+                key0 = key.value(cctx.cacheObjectContext(), false);
                 val0 = CU.value(val, cctx, false);
 
                 Object interceptorVal = cctx.config().getInterceptor().onBeforePut(key0,
@@ -1181,7 +1184,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
             old = (retval || intercept) ? rawGetOrUnmarshalUnlocked(!retval) : val;
 
             if (intercept) {
-                key0 = key.value(cctx, false);
+                key0 = key.value(cctx.cacheObjectContext(), false);
                 old0 = CU.value(old, cctx, false);
 
                 interceptRes = cctx.config().getInterceptor().onBeforeRemove(key0, old0);
@@ -1422,7 +1425,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
 
                 assert entryProcessor != null;
 
-                key0 = key.value(cctx, false);
+                key0 = key.value(cctx.cacheObjectContext(), false);
                 old0 = value(old0, old, false);
 
                 CacheInvokeEntry<Object, Object> entry = new CacheInvokeEntry<>(cctx, key0, old0);
@@ -1876,7 +1879,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
 
                 EntryProcessor<Object, Object, ?> entryProcessor = (EntryProcessor<Object, Object, ?>)writeObj;
 
-                key0 = key.value(cctx, false);
+                key0 = key.value(cctx.cacheObjectContext(), false);
                 old0 = value(old0, oldVal, false);
 
                 CacheInvokeEntry<Object, Object> entry = new CacheInvokeEntry<>(cctx, key0, old0);
@@ -2214,7 +2217,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
         if (val != null)
             return val;
 
-        return cacheObj != null ? cacheObj.value(cctx, cpy) : null;
+        return cacheObj != null ? cacheObj.value(cctx.cacheObjectContext(), cpy) : null;
     }
 
     /**
@@ -3720,9 +3723,14 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
         try {
             GridCacheQueryManager qryMgr = cctx.queries();
 
-            // TODO IGNITE-51.
-            if (qryMgr != null)
-                qryMgr.store(key.value(cctx, false), null, CU.value(val, cctx, false), null, ver, expireTime);
+            if (qryMgr != null) {
+                qryMgr.store(key.value(cctx.cacheObjectContext(), false),
+                    null,
+                    CU.value(val, cctx, false),
+                    null,
+                    ver,
+                    expireTime);
+            }
         }
         catch (IgniteCheckedException e) {
             throw new GridCacheIndexUpdateException(e);
@@ -3741,9 +3749,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
         try {
             GridCacheQueryManager<?, ?> qryMgr = cctx.queries();
 
-            // TODO IGNITE-51.
             if (qryMgr != null)
-                qryMgr.remove(key().value(cctx, false));
+                qryMgr.remove(key().value(cctx.cacheObjectContext(), false));
         }
         catch (IgniteCheckedException e) {
             throw new GridCacheIndexUpdateException(e);
@@ -3782,7 +3789,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
             else
                 val = rawGetOrUnmarshal(false);
 
-            return new CacheEntryImpl<>(key.<K>value(cctx, false), val != null ? val.<V>value(cctx, false) : null);
+            return new CacheEntryImpl<>(key.<K>value(cctx.cacheObjectContext(), false),
+                CU.<V>value(val, cctx, false));
         }
         catch (GridCacheFilterFailedException ignored) {
             throw new IgniteException("Should never happen.");
@@ -3801,7 +3809,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
     @Override public <K, V> Cache.Entry<K, V> wrapFilterLocked() throws IgniteCheckedException {
         CacheObject val = rawGetOrUnmarshal(true);
 
-        return new CacheEntryImpl<>(key.<K>value(cctx, false), val != null ? val.<V>value(cctx, false) : null) ;
+        return new CacheEntryImpl<>(key.<K>value(cctx.cacheObjectContext(), false),
+            CU.<V>value(val, cctx, false));
     }
 
     /** {@inheritDoc} */
@@ -3811,7 +3820,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
 
     /** {@inheritDoc} */
     @Override public synchronized <K, V> CacheVersionedEntryImpl<K, V> wrapVersioned() {
-        return new CacheVersionedEntryImpl<>(key.<K>value(cctx, false), null, ver);
+        return new CacheVersionedEntryImpl<>(key.<K>value(cctx.cacheObjectContext(), false), null, ver);
     }
 
     /** {@inheritDoc} */
@@ -3923,7 +3932,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
                     IgniteUuid valClsLdrId = null;
 
                     if (val != null)
-                        valClsLdrId = cctx.deploy().getClassLoaderId(U.detectObjectClassLoader(val.value(cctx, false)));
+                        valClsLdrId = cctx.deploy().getClassLoaderId(
+                            U.detectObjectClassLoader(val.value(cctx.cacheObjectContext(), false)));
 
                     IgniteBiTuple<byte[], Boolean> valBytes = valueBytes0();
 
@@ -3934,7 +3944,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
                         ver,
                         ttlExtras(),
                         expireTimeExtras(),
-                        cctx.deploy().getClassLoaderId(U.detectObjectClassLoader(key.value(cctx, false))),
+                        cctx.deploy().getClassLoaderId(U.detectObjectClassLoader(key.value(cctx.cacheObjectContext(), false))),
                         valClsLdrId);
                 }
 
@@ -4339,7 +4349,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
 
         /** {@inheritDoc} */
         @Override public K getKey() {
-            return key.value(cctx, false);
+            return key.value(cctx.cacheObjectContext(), false);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java
index ec9ca1a..b67ccc6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java
@@ -254,7 +254,7 @@ public abstract class GridCacheMessage implements Message {
             info.marshal(ctx);
 
             if (ctx.deploymentEnabled()) {
-                prepareObject(info.key().value(ctx, false), ctx.shared());
+                prepareObject(info.key().value(ctx.cacheObjectContext(), false), ctx.shared());
                 prepareObject(CU.value(info.value(), ctx, false), ctx.shared());
             }
         }
@@ -457,7 +457,7 @@ public abstract class GridCacheMessage implements Message {
                 obj.prepareMarshal(ctx.cacheObjectContext());
 
                 if (depEnabled)
-                    prepareObject(obj.value(ctx, false), ctx.shared());
+                    prepareObject(obj.value(ctx.cacheObjectContext(), false), ctx.shared());
             }
         }
     }
@@ -479,7 +479,7 @@ public abstract class GridCacheMessage implements Message {
                 obj.prepareMarshal(ctx.cacheObjectContext());
 
                 if (depEnabled)
-                    prepareObject(obj.value(ctx, false), ctx.shared());
+                    prepareObject(obj.value(ctx.cacheObjectContext(), false), ctx.shared());
             }
         }
     }
@@ -505,7 +505,7 @@ public abstract class GridCacheMessage implements Message {
             CacheObject obj = col.get(i);
 
             if (obj != null)
-                obj.finishUnmarshal(ctx, ldr);
+                obj.finishUnmarshal(ctx.cacheObjectContext(), ldr);
         }
     }
 
@@ -525,7 +525,7 @@ public abstract class GridCacheMessage implements Message {
 
         for (CacheObject obj : col) {
             if (obj != null)
-                obj.finishUnmarshal(ctx, ldr);
+                obj.finishUnmarshal(ctx.cacheObjectContext(), ldr);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index d88f83b..122281c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -122,7 +122,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @throws IgniteCheckedException If configuration is not valid.
      */
     @SuppressWarnings("unchecked")
-    private void initialize(CacheConfiguration cfg) throws IgniteCheckedException {
+    private void initialize(CacheConfiguration cfg, CacheObjectContext cacheObjCtx) throws IgniteCheckedException {
         if (cfg.getCacheMode() == null)
             cfg.setCacheMode(DFLT_CACHE_MODE);
 
@@ -164,7 +164,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             cfg.setBackups(Integer.MAX_VALUE);
 
         if (cfg.getAffinityMapper() == null)
-            cfg.setAffinityMapper(new GridCacheDefaultAffinityKeyMapper());
+            cfg.setAffinityMapper(cacheObjCtx.defaultAffMapper());
 
         ctx.igfsHelper().preProcessCacheConfiguration(cfg);
 
@@ -580,8 +580,10 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         for (int i = 0; i < cfgs.length; i++) {
             CacheConfiguration<?, ?> cfg = new CacheConfiguration(cfgs[i]);
 
+            CacheObjectContext cacheObjCtx = ctx.portable().contextForCache(null, cfg.getName());
+
             // Initialize defaults.
-            initialize(cfg);
+            initialize(cfg, cacheObjCtx);
 
             CacheStore cfgStore = cfg.getCacheStoreFactory() != null ? cfg.getCacheStoreFactory().create() : null;
 
@@ -599,6 +601,10 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             toPrepare.add(jta.tmLookup());
             toPrepare.add(cfgStore);
+            toPrepare.add(cfg.getAffinityMapper());
+
+            if (cfg.getAffinityMapper() != cacheObjCtx.defaultAffMapper())
+                toPrepare.add(cacheObjCtx.defaultAffMapper());
 
             if (cfgStore instanceof GridCacheLoaderWriterStore) {
                 toPrepare.add(((GridCacheLoaderWriterStore)cfgStore).loader());
@@ -609,17 +615,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             U.startLifecycleAware(lifecycleAwares(cfg, jta.tmLookup(), cfgStore));
 
-            // Init default key mapper.
-            CacheAffinityKeyMapper dfltAffMapper;
-
-            if (cfg.getAffinityMapper().getClass().equals(GridCacheDefaultAffinityKeyMapper.class))
-                dfltAffMapper = cfg.getAffinityMapper();
-            else {
-                dfltAffMapper = new GridCacheDefaultAffinityKeyMapper();
-
-                prepare(cfg, dfltAffMapper, false);
-            }
-
             cfgs[i] = cfg; // Replace original configuration value.
 
             GridCacheAffinityManager affMgr = new GridCacheAffinityManager();
@@ -657,7 +652,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 drMgr,
                 jta);
 
-            cacheCtx.defaultAffMapper(dfltAffMapper);
+            cacheCtx.cacheObjectContext(cacheObjCtx);
 
             GridCacheAdapter cache = null;
 
@@ -797,7 +792,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                     drMgr,
                     jta);
 
-                cacheCtx.defaultAffMapper(dfltAffMapper);
+                cacheCtx.cacheObjectContext(cacheObjCtx);
 
                 GridDhtCacheAdapter dht = null;
 
@@ -1492,7 +1487,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 try {
                     KeyCacheObject key = cctx.toCacheKeyObject(null, keyBytes, false);
 
-                    qryMgr.remove(key.value(cctx, false));
+                    qryMgr.remove(key.value(cctx.cacheObjectContext(), false));
                 }
                 catch (IgniteCheckedException e) {
                     U.error(log, "Failed to unmarshal key evicted from swap [swapSpaceName=" + spaceName + ']', e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
index 0933c48..a6dd765 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
@@ -266,7 +266,7 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
                 // Never load internal keys from store as they are never persisted.
                 return null;
 
-            Object storeKey = key.value(cctx, false);
+            Object storeKey = key.value(cctx.cacheObjectContext(), false);
 
             if (convertPortable)
                 storeKey = cctx.unwrapPortableIfNeeded(storeKey, false);
@@ -411,14 +411,14 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
             if (convertPortable) {
                 keys0 = F.viewReadOnly(keys, new C1<KeyCacheObject, Object>() {
                     @Override public Object apply(KeyCacheObject key) {
-                        return cctx.unwrapPortableIfNeeded(key.value(cctx, false), false);
+                        return cctx.unwrapPortableIfNeeded(key.value(cctx.cacheObjectContext(), false), false);
                     }
                 });
             }
             else {
                 keys0 = F.viewReadOnly(keys, new C1<KeyCacheObject, Object>() {
                     @Override public Object apply(KeyCacheObject key) {
-                        return key.value(cctx, false);
+                        return key.value(cctx.cacheObjectContext(), false);
                     }
                 });
             }
@@ -561,8 +561,8 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
             if (key.internal())
                 return true;
 
-            Object storeKey = key.value(cctx, false);
-            Object storeVal = val.value(cctx, false);
+            Object storeKey = key.value(cctx.cacheObjectContext(), false);
+            Object storeVal = val.value(cctx.cacheObjectContext(), false);
 
             if (convertPortable) {
                 storeKey = cctx.unwrapPortableIfNeeded(storeKey, false);
@@ -677,7 +677,7 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
             if (key.internal())
                 return false;
 
-            Object storeKey = key.value(cctx, false);
+            Object storeKey = key.value(cctx.cacheObjectContext(), false);
 
             if (convertPortable)
                 storeKey = cctx.unwrapPortableIfNeeded(storeKey, false);
@@ -737,14 +737,14 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
             if (convertPortable) {
                 keys0 = F.viewReadOnly(keys, new C1<KeyCacheObject, Object>() {
                     @Override public Object apply(KeyCacheObject key) {
-                        return cctx.unwrapPortableIfNeeded(key.value(cctx, false), false);
+                        return cctx.unwrapPortableIfNeeded(key.value(cctx.cacheObjectContext(), false), false);
                     }
                 });
             }
             else {
                 keys0 = F.viewReadOnly(keys, new C1<KeyCacheObject, Object>() {
                     @Override public Object apply(KeyCacheObject key) {
-                        return key.value(cctx, false);
+                        return key.value(cctx.cacheObjectContext(), false);
                     }
                 });
             }
@@ -1053,8 +1053,8 @@ public class GridCacheStoreManager extends GridCacheManagerAdapter {
                         if (rmvd != null && rmvd.contains(k))
                             continue;
 
-                        Object storeKey = e.getKey().value(cctx, false);
-                        Object storeVal = e.getValue().get1().value(cctx, false);
+                        Object storeKey = e.getKey().value(cctx.cacheObjectContext(), false);
+                        Object storeVal = CU.value(e.getValue().get1(), cctx, false);
 
                         if (convertPortable) {
                             storeKey = cctx.unwrapPortableIfNeeded(storeKey, false);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
index 6d1ae6f..36d33ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
@@ -458,14 +458,14 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         // First check off-heap store.
         if (offheapEnabled)
-            if (offheap.contains(spaceName, part, key, key.valueBytes(cctx)))
+            if (offheap.contains(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext())))
                 return true;
 
         if (swapEnabled) {
             assert key != null;
 
             byte[] valBytes = swapMgr.read(spaceName,
-                new SwapKey(key.value(cctx, false), part, key.valueBytes(cctx)),
+                new SwapKey(key.value(cctx.cacheObjectContext(), false), part, key.valueBytes(cctx.cacheObjectContext())),
                 cctx.deploy().globalLoader());
 
             return valBytes != null;
@@ -523,7 +523,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             assert key != null;
 
             byte[] bytes = swapMgr.read(spaceName,
-                new SwapKey(key.value(cctx, false), part, keyBytes),
+                new SwapKey(key.value(cctx.cacheObjectContext(), false), part, keyBytes),
                 cctx.deploy().globalLoader());
 
             if (bytes == null && lsnr != null)
@@ -554,7 +554,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         // First try removing from offheap.
         if (offheapEnabled) {
-            byte[] entryBytes = offheap.remove(spaceName, part, key, key.valueBytes(cctx));
+            byte[] entryBytes = offheap.remove(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
 
             if (entryBytes != null) {
                 GridCacheSwapEntry entry = swapEntry(unmarshalSwapEntry(entryBytes));
@@ -608,7 +608,11 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
         final GridTuple<GridCacheSwapEntry> t = F.t1();
         final GridTuple<IgniteCheckedException> err = F.t1();
 
-        swapMgr.remove(spaceName, new SwapKey(key.value(cctx, false), part, key.valueBytes(cctx)), new CI1<byte[]>() {
+        SwapKey swapKey = new SwapKey(key.value(cctx.cacheObjectContext(), false),
+            part,
+            key.valueBytes(cctx.cacheObjectContext()));
+
+        swapMgr.remove(spaceName, swapKey, new CI1<byte[]>() {
             @Override public void apply(byte[] rmv) {
                 if (rmv != null) {
                     try {
@@ -678,7 +682,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             return null;
 
         return read(entry.key(),
-            entry.key().valueBytes(cctx),
+            entry.key().valueBytes(cctx.cacheObjectContext()),
             entry.partition(),
             locked,
             readOffheap,
@@ -698,7 +702,8 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         int part = cctx.affinity().partition(key);
 
-        IgniteBiTuple<Long, Integer> ptr = offheap.valuePointer(spaceName, part, key, key.valueBytes(cctx));
+        IgniteBiTuple<Long, Integer> ptr =
+            offheap.valuePointer(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
 
         if (ptr != null) {
             assert ptr.get1() != null;
@@ -727,7 +732,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         int part = cctx.affinity().partition(key);
 
-        return read(key, key.valueBytes(cctx), part, false, readOffheap, readSwap);
+        return read(key, key.valueBytes(cctx.cacheObjectContext()), part, false, readOffheap, readSwap);
     }
 
     /**
@@ -764,7 +769,8 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             for (KeyCacheObject key : keys) {
                 int part = cctx.affinity().partition(key);
 
-                byte[] entryBytes = offheap.remove(spaceName, part, key, key.valueBytes(cctx));
+                byte[] entryBytes =
+                    offheap.remove(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
 
                 if (entryBytes != null) {
                     GridCacheSwapEntry entry = swapEntry(unmarshalSwapEntry(entryBytes));
@@ -801,9 +807,9 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
                     if (unprocessedKeys == null)
                         unprocessedKeys = new ArrayList<>(keys.size());
 
-                    SwapKey swapKey = new SwapKey(key.value(cctx, false),
+                    SwapKey swapKey = new SwapKey(key.value(cctx.cacheObjectContext(), false),
                         cctx.affinity().partition(key),
-                        key.valueBytes(cctx));
+                        key.valueBytes(cctx.cacheObjectContext()));
 
                     unprocessedKeys.add(swapKey);
                 }
@@ -816,9 +822,9 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             unprocessedKeys = new ArrayList<>(keys.size());
 
             for (KeyCacheObject key : keys) {
-                SwapKey swapKey = new SwapKey(key.value(cctx, false),
+                SwapKey swapKey = new SwapKey(key.value(cctx.cacheObjectContext(), false),
                     cctx.affinity().partition(key),
-                    key.valueBytes(cctx));
+                    key.valueBytes(cctx.cacheObjectContext()));
 
                 unprocessedKeys.add(swapKey);
             }
@@ -906,7 +912,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         int part = cctx.affinity().partition(key);
 
-        return offheap.removex(spaceName, part, key, key.valueBytes(cctx));
+        return offheap.removex(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
     }
 
     /**
@@ -930,7 +936,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         int part = cctx.affinity().partition(key);
 
-        offheap.enableEviction(spaceName, part, key, key.valueBytes(cctx));
+        offheap.enableEviction(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
     }
 
     /**
@@ -968,7 +974,10 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         // First try offheap.
         if (offheapEnabled) {
-            byte[] val = offheap.remove(spaceName, part, key.value(cctx, false), key.valueBytes(cctx));
+            byte[] val = offheap.remove(spaceName,
+                part,
+                key.value(cctx.cacheObjectContext(), false),
+                key.valueBytes(cctx.cacheObjectContext()));
 
             if (val != null) {
                 if (c != null)
@@ -979,8 +988,12 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
         }
 
         if (swapEnabled) {
+            SwapKey swapKey = new SwapKey(key.value(cctx.cacheObjectContext(), false),
+                part,
+                key.valueBytes(cctx.cacheObjectContext()));
+
             swapMgr.remove(spaceName,
-                new SwapKey(key.value(cctx, false), part, key.valueBytes(cctx)),
+                swapKey,
                 c,
                 cctx.deploy().globalLoader());
         }
@@ -1024,7 +1037,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             valClsLdrId);
 
         if (offheapEnabled) {
-            offheap.put(spaceName, part, key, key.valueBytes(cctx), entry.marshal());
+            offheap.put(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()), entry.marshal());
 
             if (cctx.events().isRecordable(EVT_CACHE_OBJECT_TO_OFFHEAP))
                 cctx.events().addEvent(part, key, cctx.nodeId(), (IgniteUuid)null, null,
@@ -1057,7 +1070,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
                 offheap.put(spaceName,
                     swapEntry.partition(),
                     swapEntry.key(),
-                    swapEntry.key().valueBytes(cctx),
+                    swapEntry.key().valueBytes(cctx.cacheObjectContext()),
                     swapEntry.marshal());
 
                 if (cctx.events().isRecordable(EVT_CACHE_OBJECT_TO_OFFHEAP))
@@ -1072,9 +1085,9 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
             Map<SwapKey, byte[]> batch = new LinkedHashMap<>();
 
             for (GridCacheBatchSwapEntry entry : swapped) {
-                SwapKey swapKey = new SwapKey(entry.key().value(cctx, false),
+                SwapKey swapKey = new SwapKey(entry.key().value(cctx.cacheObjectContext(), false),
                     entry.partition(),
-                    entry.key().valueBytes(cctx));
+                    entry.key().valueBytes(cctx.cacheObjectContext()));
 
                 batch.put(swapKey, entry.marshal());
             }
@@ -1109,7 +1122,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
         checkIteratorQueue();
 
         swapMgr.write(spaceName,
-            new SwapKey(key.value(cctx, false), part, key.valueBytes(cctx)),
+            new SwapKey(key.value(cctx.cacheObjectContext(), false), part, key.valueBytes(cctx.cacheObjectContext())),
             entry,
             cctx.deploy().globalLoader());
 
@@ -1295,7 +1308,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
                     int part = cctx.affinity().partition(key);
 
-                    offheap.removex(spaceName, part, key, key.valueBytes(cctx));
+                    offheap.removex(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
                 }
                 else
                     it.removeX();
@@ -1421,7 +1434,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
                         try {
                             KeyCacheObject key = cctx.toCacheKeyObject(null, cur0.getKey(), false);
 
-                            return key.value(cctx, false);
+                            return key.value(cctx.cacheObjectContext(), false);
                         }
                         catch (IgniteCheckedException e) {
                             throw new IgniteException(e);
@@ -1434,7 +1447,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
                             swapEntry(e);
 
-                            return e.value().value(cctx, false);
+                            return e.value().value(cctx.cacheObjectContext(), false);
                         }
                         catch (IgniteCheckedException ex) {
                             throw new IgniteException(ex);
@@ -1615,7 +1628,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
                 int part = cctx.affinity().partition(key);
 
-                offheap.removex(spaceName, part, key, key.valueBytes(cctx));
+                offheap.removex(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()));
             }
 
             @Override protected void onClose() throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index e4243ab..7700fa4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -906,7 +906,7 @@ public class GridCacheUtils {
 
                     return val != null &&
                         valType.isAssignableFrom(val.getClass()) &&
-                        keyType.isAssignableFrom(e.key().value(e.context(), false).getClass());
+                        keyType.isAssignableFrom(e.key().value(e.context().cacheObjectContext(), false).getClass());
                 }
                 catch (IgniteCheckedException err) {
                     throw new IgniteException(err);
@@ -1825,7 +1825,7 @@ public class GridCacheUtils {
     ) {
         return new CacheEntryPredicateAdapter() {
             @Override public boolean apply(GridCacheEntryEx e) {
-                return aff.isPrimary(n, e.key().value(e.context(), false));
+                return aff.isPrimary(n, e.key().value(e.context().cacheObjectContext(), false));
             }
         };
     }
@@ -1870,9 +1870,10 @@ public class GridCacheUtils {
     /**
      * @param cacheObj Cache object.
      * @param ctx Cache context.
+     * @param cpy Copy flag.
      * @return Cache object value.
      */
     @Nullable public static <T> T value(@Nullable CacheObject cacheObj, GridCacheContext ctx, boolean cpy) {
-        return cacheObj != null ? cacheObj.<T>value(ctx, cpy) : null;
+        return cacheObj != null ? cacheObj.<T>value(ctx.cacheObjectContext(), cpy) : null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
index 981da1f..91958a3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
@@ -65,7 +65,7 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter implements KeyCacheOb
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] valueBytes(GridCacheContext ctx) throws IgniteCheckedException {
+    @Override public byte[] valueBytes(CacheObjectContext ctx) throws IgniteCheckedException {
         assert valBytes != null : this;
 
         return valBytes;
@@ -80,14 +80,14 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter implements KeyCacheOb
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Nullable @Override public <T> T value(GridCacheContext ctx, boolean cpy) {
+    @Nullable @Override public <T> T value(CacheObjectContext ctx, boolean cpy) {
         cpy = cpy && needCopy(ctx);
 
         if (cpy) {
             try {
-                return (T)ctx.portable().unmarshal(ctx.cacheObjectContext(),
+                return (T)ctx.processor().unmarshal(ctx,
                     valBytes,
-                    ctx.deploy().globalLoader());
+                    ctx.kernalContext().config().getClassLoader());
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException("Failed to unmarshal object.", e);
@@ -98,7 +98,7 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter implements KeyCacheOb
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObject prepareForCache(GridCacheContext ctx) {
+    @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
         return this;
     }
 
@@ -170,11 +170,11 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter implements KeyCacheOb
     }
 
     /** {@inheritDoc} */
-    @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
+    @Override public void finishUnmarshal(CacheObjectContext ctx, ClassLoader ldr) throws IgniteCheckedException {
         if (val == null) {
             assert valBytes != null;
 
-            val = ctx.kernalContext().portable().unmarshal(ctx.cacheObjectContext(), valBytes, ldr);
+            val = ctx.kernalContext().portable().unmarshal(ctx, valBytes, ldr);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectTransferImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectTransferImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectTransferImpl.java
index 267b957..b243e62 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectTransferImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectTransferImpl.java
@@ -45,7 +45,7 @@ public class KeyCacheObjectTransferImpl implements KeyCacheObject {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public <T> T value(GridCacheContext ctx, boolean cpy) {
+    @Nullable @Override public <T> T value(CacheObjectContext ctx, boolean cpy) {
         throw new IllegalStateException();
     }
 
@@ -65,17 +65,17 @@ public class KeyCacheObjectTransferImpl implements KeyCacheObject {
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] valueBytes(GridCacheContext ctx) throws IgniteCheckedException {
+    @Override public byte[] valueBytes(CacheObjectContext ctx) throws IgniteCheckedException {
         throw new IllegalStateException();
     }
 
     /** {@inheritDoc} */
-    @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException {
+    @Override public void finishUnmarshal(CacheObjectContext ctx, ClassLoader ldr) throws IgniteCheckedException {
         throw new IllegalStateException();
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObject prepareForCache(GridCacheContext ctx) {
+    @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
         throw new IllegalStateException();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java
index 41d47db..4c38f18 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java
@@ -41,7 +41,7 @@ public class UserCacheObjectImpl extends CacheObjectImpl {
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObject prepareForCache(GridCacheContext ctx) {
+    @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
         if (needCopy(ctx)) {
             if (val instanceof byte[]) {
                 byte[] byteArr = (byte[])val;
@@ -51,7 +51,7 @@ public class UserCacheObjectImpl extends CacheObjectImpl {
             else {
                 try {
                     if (valBytes == null)
-                        valBytes = ctx.portable().marshal(ctx.cacheObjectContext(), val);
+                        valBytes = ctx.processor().marshal(ctx, val);
 
                     return new CacheObjectImpl(null, valBytes);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b876320e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserKeyCacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserKeyCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserKeyCacheObjectImpl.java
index eb5d748..d052f94 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserKeyCacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserKeyCacheObjectImpl.java
@@ -40,23 +40,23 @@ public class UserKeyCacheObjectImpl extends KeyCacheObjectImpl {
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] valueBytes(GridCacheContext ctx) throws IgniteCheckedException {
+    @Override public byte[] valueBytes(CacheObjectContext ctx) throws IgniteCheckedException {
         if (valBytes == null)
-            valBytes = ctx.portable().marshal(ctx.cacheObjectContext(), val);
+            valBytes = ctx.processor().marshal(ctx, val);
 
         return valBytes;
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObject prepareForCache(GridCacheContext ctx) {
+    @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
         try {
             if (valBytes == null)
-                valBytes = ctx.portable().marshal(ctx.cacheObjectContext(), val);
+                valBytes = ctx.processor().marshal(ctx, val);
 
             if (needCopy(ctx)) {
-                Object val = ctx.portable().unmarshal(ctx.cacheObjectContext(),
+                Object val = ctx.processor().unmarshal(ctx,
                     valBytes,
-                    ctx.deploy().globalLoader());
+                    ctx.kernalContext().config().getClassLoader());
 
                 return new KeyCacheObjectImpl(val, valBytes);
             }