Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-51-filters [created] 6febd89af


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
index 4e769e4..8a8fb5c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
@@ -82,7 +82,7 @@ public final class GridLocalLockFuture<K, V> extends 
GridFutureAdapter<Boolean>
     private IgniteLogger log;
 
     /** Filter. */
-    private IgnitePredicate<Cache.Entry<K, V>>[] filter;
+    private CacheEntryPredicate[] filter;
 
     /** Transaction. */
     private IgniteTxLocalEx tx;
@@ -111,7 +111,7 @@ public final class GridLocalLockFuture<K, V> extends 
GridFutureAdapter<Boolean>
         IgniteTxLocalEx tx,
         GridLocalCache<K, V> cache,
         long timeout,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        CacheEntryPredicate[] filter) {
         super(cctx.kernalContext());
 
         assert keys != null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
index 588d987..a4a586f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
@@ -110,7 +110,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         V val,
         @Nullable GridCacheEntryEx cached,
         long ttl,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate[] filter) throws IgniteCheckedException {
         A.notNull(key, "key", val, "val");
 
         ctx.denyOnLocalRead();
@@ -132,7 +132,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         V val,
         @Nullable GridCacheEntryEx cached,
         long ttl,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate... filter) throws IgniteCheckedException 
{
         A.notNull(key, "key", val, "val");
 
         ctx.denyOnLocalRead();
@@ -151,7 +151,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     /** {@inheritDoc} */
     @Override public boolean putx(K key,
         V val,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
IgniteCheckedException {
+        CacheEntryPredicate[] filter) throws IgniteCheckedException {
         A.notNull(key, "key", val, "val");
 
         ctx.denyOnLocalRead();
@@ -173,7 +173,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         V val,
         @Nullable GridCacheEntryEx entry,
         long ttl,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         A.notNull(key, "key", val, "val");
 
         ctx.denyOnLocalRead();
@@ -192,7 +192,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         V val,
         @Nullable GridCacheEntryEx entry,
         long ttl,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         A.notNull(key, "key", val, "val");
 
         ctx.denyOnLocalRead();
@@ -208,61 +208,55 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
     @Override public V putIfAbsent(K key, V val) throws IgniteCheckedException 
{
-        return put(key, val, ctx.<K, V>noPeekArray());
+        return put(key, val, ctx.noValArray());
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<V> putIfAbsentAsync(K key, V val) {
-        return putAsync(key, val, ctx.<K, V>noPeekArray());
+        return putAsync(key, val, ctx.noValArray());
     }
 
     /** {@inheritDoc} */
     @Override public boolean putxIfAbsent(K key, V val) throws 
IgniteCheckedException {
-        return putx(key, val, ctx.<K, V>noPeekArray());
+        return putx(key, val, ctx.noValArray());
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> putxIfAbsentAsync(K key, V 
val) {
-        return putxAsync(key, val, ctx.<K, V>noPeekArray());
+        return putxAsync(key, val, ctx.noValArray());
     }
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
     @Override public V replace(K key, V val) throws IgniteCheckedException {
-        return put(key, val, ctx.hasPeekArray());
+        return put(key, val, ctx.hasValArray());
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<V> replaceAsync(K key, V val) {
-        return putAsync(key, val, ctx.hasPeekArray());
+        return putAsync(key, val, ctx.hasValArray());
     }
 
     /** {@inheritDoc} */
     @Override public boolean replacex(K key, V val) throws 
IgniteCheckedException {
-        return putx(key, val, ctx.hasPeekArray());
+        return putx(key, val, ctx.hasValArray());
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> replacexAsync(K key, V val) 
{
-        return putxAsync(key, val, ctx.hasPeekArray());
+        return putxAsync(key, val, ctx.hasValArray());
     }
 
     /** {@inheritDoc} */
     @Override public boolean replace(K key, V oldVal, V newVal) throws 
IgniteCheckedException {
         A.notNull(oldVal, "oldVal");
 
-        if (ctx.portableEnabled())
-            oldVal = (V)ctx.marshalToPortable(oldVal);
-
-        return putx(key, newVal, ctx.equalsPeekArray(oldVal));
+        return putx(key, newVal, ctx.equalsValArray(oldVal));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> replaceAsync(K key, V 
oldVal, V newVal) {
-        if (ctx.portableEnabled())
-            oldVal = (V)ctx.marshalToPortable(oldVal);
-
-        return putxAsync(key, newVal, ctx.equalsPeekArray(oldVal));
+        return putxAsync(key, newVal, ctx.equalsValArray(oldVal));
     }
 
     /** {@inheritDoc} */
@@ -272,9 +266,6 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
         ctx.denyOnLocalRead();
 
-        if (ctx.portableEnabled())
-            oldVal = (V)ctx.marshalToPortable(oldVal);
-
         return (GridCacheReturn<V>)updateAllInternal(UPDATE,
             Collections.singleton(key),
             Collections.singleton(newVal),
@@ -282,7 +273,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
             expiryPerCall(),
             true,
             true,
-            ctx.equalsPeekArray(oldVal),
+            ctx.equalsValArray(oldVal),
             ctx.writeThrough());
     }
 
@@ -293,9 +284,6 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
         ctx.denyOnLocalRead();
 
-        if (ctx.portableEnabled())
-            val = (V)ctx.marshalToPortable(val);
-
         return (GridCacheReturn<V>)updateAllInternal(DELETE,
             Collections.singleton(key),
             null,
@@ -303,7 +291,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
             expiryPerCall(),
             true,
             true,
-            ctx.equalsPeekArray(val),
+            ctx.equalsValArray(val),
             ctx.writeThrough());
     }
 
@@ -314,10 +302,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
         ctx.denyOnLocalRead();
 
-        if (ctx.portableEnabled())
-            val = (V)ctx.marshalToPortable(val);
-
-        return removeAllAsync0(F.asList(key), true, true, 
ctx.equalsPeekArray(val));
+        return removeAllAsync0(F.asList(key), true, true, 
ctx.equalsValArray(val));
     }
 
     /** {@inheritDoc} */
@@ -327,20 +312,17 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
         ctx.denyOnLocalRead();
 
-        if (ctx.portableEnabled())
-            oldVal = (V)ctx.marshalToPortable(oldVal);
-
         return updateAllAsync0(F.asMap(key, newVal),
             null,
             null,
             true,
             true,
-            ctx.equalsPeekArray(oldVal));
+            ctx.equalsValArray(oldVal));
     }
 
     /** {@inheritDoc} */
     @Override public void putAll(Map<? extends K, ? extends V> m,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
IgniteCheckedException {
+        CacheEntryPredicate[] filter) throws IgniteCheckedException {
         ctx.denyOnLocalRead();
 
         updateAllInternal(UPDATE,
@@ -356,7 +338,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> putAllAsync(Map<? extends K, ? 
extends V> m,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        @Nullable CacheEntryPredicate[] filter) {
         ctx.denyOnLocalRead();
 
         return updateAllAsync0(m,
@@ -371,7 +353,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     @SuppressWarnings("unchecked")
     @Override public V remove(K key,
         @Nullable GridCacheEntryEx entry,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate... filter) throws IgniteCheckedException 
{
         ctx.denyOnLocalRead();
 
         return (V)updateAllInternal(DELETE,
@@ -389,7 +371,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<V> removeAsync(K key,
         @Nullable GridCacheEntryEx entry,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         ctx.denyOnLocalRead();
 
         return removeAllAsync0(Collections.singletonList(key), true, false, 
filter);
@@ -398,7 +380,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
     @Override public void removeAll(Collection<? extends K> keys,
-        IgnitePredicate<Cache.Entry<K, V>>... filter) throws 
IgniteCheckedException {
+        CacheEntryPredicate... filter) throws IgniteCheckedException {
         ctx.denyOnLocalRead();
 
         updateAllInternal(DELETE,
@@ -414,7 +396,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> removeAllAsync(Collection<? 
extends K> keys,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        CacheEntryPredicate[] filter) {
         ctx.denyOnLocalRead();
 
         return removeAllAsync0(keys, false, false, filter);
@@ -424,7 +406,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     @SuppressWarnings("unchecked")
     @Override public boolean removex(K key,
         @Nullable GridCacheEntryEx entry,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate... filter) throws IgniteCheckedException 
{
         boolean statsEnabled = ctx.config().isStatisticsEnabled();
 
         long start = statsEnabled ? System.nanoTime() : 0L;
@@ -453,7 +435,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<Boolean> removexAsync(K key,
         @Nullable GridCacheEntryEx entry,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         A.notNull(key, "key");
 
         ctx.denyOnLocalRead();
@@ -467,9 +449,6 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
         ctx.denyOnLocalRead();
 
-        if (ctx.portableEnabled())
-            val = (V)ctx.marshalToPortable(val);
-
         return (Boolean)updateAllInternal(DELETE,
             Collections.singleton(key),
             null,
@@ -477,16 +456,13 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
             expiryPerCall(),
             false,
             false,
-            ctx.equalsPeekArray(val),
+            ctx.equalsValArray(val),
             ctx.writeThrough());
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> removeAsync(K key, V val) {
-        if (ctx.portableEnabled())
-            val = (V)ctx.marshalToPortable(val);
-
-        return removexAsync(key, ctx.equalsPeekArray(val));
+        return removexAsync(key, ctx.equalsValArray(val));
     }
 
     /** {@inheritDoc} */
@@ -862,7 +838,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         @Nullable final Object[] invokeArgs,
         final boolean retval,
         final boolean rawRetval,
-        @Nullable final IgnitePredicate<Cache.Entry<K, V>>[] filter
+        @Nullable final CacheEntryPredicate[] filter
     ) {
         final GridCacheOperation op = invokeMap != null ? TRANSFORM : UPDATE;
 
@@ -903,7 +879,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         @Nullable final Collection<? extends K> keys,
         final boolean retval,
         final boolean rawRetval,
-        @Nullable final IgnitePredicate<Cache.Entry<K, V>>[] filter
+        @Nullable final CacheEntryPredicate[] filter
     ) {
         final boolean writeThrough = ctx.writeThrough();
 
@@ -956,7 +932,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         @Nullable ExpiryPolicy expiryPlc,
         boolean retval,
         boolean rawRetval,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter,
+        CacheEntryPredicate[] filter,
         boolean storeEnabled) throws IgniteCheckedException {
         if (keyCheck)
             validateCacheKeys(keys);
@@ -966,8 +942,6 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         else
             ctx.checkSecurity(GridSecurityPermission.CACHE_PUT);
 
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter0 = 
(IgnitePredicate[])filter;
-
         String taskName = ctx.kernalContext().job().currentTaskName();
 
         GridCacheVersion ver = ctx.versions().next();
@@ -1024,7 +998,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
                         expiryPlc,
                         true,
                         true,
-                        filter0,
+                        filter,
                         intercept,
                         subjId,
                         taskName);
@@ -1107,7 +1081,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         @Nullable Object[] invokeArgs,
         @Nullable ExpiryPolicy expiryPlc,
         GridCacheVersion ver,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter,
+        @Nullable CacheEntryPredicate[] filter,
         UUID subjId,
         String taskName
     ) throws IgniteCheckedException {
@@ -1141,7 +1115,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
                 try {
                     try {
-                        if (!ctx.isAll(entry.<K, V>wrapFilterLocked(), 
filter)) {
+                        if (!ctx.isAll(entry, filter)) {
                             if (log.isDebugEnabled())
                                 log.debug("Entry did not pass the filter (will 
skip write) [entry=" + entry +
                                     ", filter=" + Arrays.toString(filter) + 
']');
@@ -1563,7 +1537,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
         TransactionIsolation isolation,
         boolean invalidate,
         long accessTtl,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        CacheEntryPredicate[] filter) {
         return new GridFinishedFutureEx<>(new 
UnsupportedOperationException("Locks are not supported for " +
             "CacheAtomicityMode.ATOMIC mode (use 
CacheAtomicityMode.TRANSACTIONAL instead)"));
     }
@@ -1572,7 +1546,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<Boolean> lockAllAsync(@Nullable 
Collection<? extends K> keys,
         long timeout,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         return new GridFinishedFutureEx<>(new 
UnsupportedOperationException("Locks are not supported for " +
             "CacheAtomicityMode.ATOMIC mode (use 
CacheAtomicityMode.TRANSACTIONAL instead)"));
     }
@@ -1580,7 +1554,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
     @Override public void unlockAll(@Nullable Collection<? extends K> keys,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>... filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate... filter) throws IgniteCheckedException 
{
         throw new UnsupportedOperationException("Locks are not supported for " 
+
             "CacheAtomicityMode.ATOMIC mode (use 
CacheAtomicityMode.TRANSACTIONAL instead)");
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
index f6b4819..afc969f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
@@ -23,6 +23,7 @@ import org.apache.ignite.events.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.cluster.*;
 import org.apache.ignite.internal.managers.eventstorage.*;
+import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.query.*;
 import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.typedef.*;
@@ -195,8 +196,7 @@ public class GridCacheDistributedQueryManager<K, V> extends 
GridCacheQueryManage
      * @return Query info.
      */
     @Nullable private GridCacheQueryInfo distributedQueryInfo(UUID sndId, 
GridCacheQueryRequest req) {
-        IgnitePredicate<Cache.Entry<Object, Object>> prjPred = 
req.projectionFilter() == null ?
-            F.<Cache.Entry<Object, Object>>alwaysTrue() : 
req.projectionFilter();
+        CacheEntryPredicate prjPred = req.projectionFilter();
 
         IgniteReducer<Object, Object> rdc = req.reducer();
         IgniteClosure<Object, Object> trans = req.transformer();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryFuture.java
index 3d8efbf..f6816e4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryFuture.java
@@ -112,8 +112,7 @@ public class GridCacheLocalQueryFuture<K, V, R> extends 
GridCacheQueryFutureAdap
         private GridCacheQueryInfo localQueryInfo() throws 
IgniteCheckedException {
             GridCacheQueryBean qry = query();
 
-            IgnitePredicate<Cache.Entry<Object, Object>> prjPred = 
qry.query().projectionFilter() == null ?
-                F.<Cache.Entry<Object, Object>>alwaysTrue() : 
qry.query().projectionFilter();
+            CacheEntryPredicate prjPred = qry.query().projectionFilter();
 
             Marshaller marsh = cctx.marshaller();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueriesImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueriesImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueriesImpl.java
index cb8921e..2e9f88f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueriesImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueriesImpl.java
@@ -233,8 +233,8 @@ public class GridCacheQueriesImpl<K, V> implements 
GridCacheQueriesEx<K, V>, Ext
      * @return Optional projection filter.
      */
     @SuppressWarnings("unchecked")
-    @Nullable private IgnitePredicate<Cache.Entry<Object, Object>> filter() {
-        return prj == null ? null : ((GridCacheProjectionImpl<Object, 
Object>)prj).predicate();
+    @Nullable private CacheEntryPredicate filter() {
+        return prj == null ? null : prj.predicate();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index 0c81e5e..57d3a11 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -43,7 +43,7 @@ public class GridCacheQueryAdapter<T> implements 
CacheQuery<T> {
     private final GridCacheContext<?, ?> cctx;
 
     /** */
-    private final IgnitePredicate<Cache.Entry<Object, Object>> prjPred;
+    private final CacheEntryPredicate prjPred;
 
     /** */
     private final GridCacheQueryType type;
@@ -105,7 +105,7 @@ public class GridCacheQueryAdapter<T> implements 
CacheQuery<T> {
      */
     public GridCacheQueryAdapter(GridCacheContext<?, ?> cctx,
         GridCacheQueryType type,
-        @Nullable IgnitePredicate<Cache.Entry<Object, Object>> prjPred,
+        @Nullable CacheEntryPredicate prjPred,
         @Nullable String clsName,
         @Nullable String clause,
         @Nullable IgniteBiPredicate<Object, Object> filter,
@@ -148,7 +148,7 @@ public class GridCacheQueryAdapter<T> implements 
CacheQuery<T> {
      * @param taskHash Task hash.
      */
     public GridCacheQueryAdapter(GridCacheContext<?, ?> cctx,
-        IgnitePredicate<Cache.Entry<Object, Object>> prjPred,
+        CacheEntryPredicate prjPred,
         GridCacheQueryType type,
         IgniteLogger log,
         int pageSize,
@@ -186,7 +186,7 @@ public class GridCacheQueryAdapter<T> implements 
CacheQuery<T> {
     /**
      * @return cache projection filter.
      */
-    @Nullable public IgnitePredicate<Cache.Entry<Object, Object>> 
projectionFilter() {
+    @Nullable public CacheEntryPredicate projectionFilter() {
         return prjPred;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryInfo.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryInfo.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryInfo.java
index 52a4723..865d431 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryInfo.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryInfo.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.cache.query;
 
+import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.jetbrains.annotations.*;
@@ -32,7 +33,7 @@ class GridCacheQueryInfo {
     private boolean loc;
 
     /** */
-    private IgnitePredicate<Cache.Entry<Object, Object>> prjPred;
+    private CacheEntryPredicate prjPred;
 
     /** */
     private IgniteClosure<Object, Object> trans;
@@ -76,7 +77,7 @@ class GridCacheQueryInfo {
      */
     GridCacheQueryInfo(
         boolean loc,
-        IgnitePredicate<Cache.Entry<Object, Object>> prjPred,
+        CacheEntryPredicate prjPred,
         IgniteClosure<Object, Object> trans,
         IgniteReducer<Object, Object> rdc,
         GridCacheQueryAdapter<?> qry,
@@ -124,7 +125,7 @@ class GridCacheQueryInfo {
     /**
      * @return Projection predicate.
      */
-    IgnitePredicate<Cache.Entry<Object, Object>> projectionPredicate() {
+    CacheEntryPredicate projectionPredicate() {
         return prjPred;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index d1f6d0f..fa74020 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -734,15 +734,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
     @SuppressWarnings({"unchecked"})
     private GridCloseableIterator<IgniteBiTuple<K, V>> scanIterator(final 
GridCacheQueryAdapter<?> qry)
         throws IgniteCheckedException {
-        IgnitePredicate<Cache.Entry<K, V>> filter = null;
-
-        if (qry.projectionFilter() != null) {
-            filter = new P1<Cache.Entry<K, V>>() {
-                @Override public boolean apply(Cache.Entry<K, V> e) {
-                    return qry.projectionFilter().apply((Cache.Entry<Object, 
Object>)e);
-                }
-            };
-        }
+        CacheEntryPredicate filter = qry.projectionFilter();
 
         CacheProjection<K, V> prj0 = filter != null ? 
cctx.cache().projection(filter) : cctx.cache();
 
@@ -899,7 +891,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
      */
     private GridIterator<IgniteBiTuple<K, V>> 
swapIterator(GridCacheQueryAdapter<?> qry)
         throws IgniteCheckedException {
-        IgnitePredicate<Cache.Entry<Object, Object>> prjPred = 
qry.projectionFilter();
+        CacheEntryPredicate prjPred = qry.projectionFilter();
 
         IgniteBiPredicate<K, V> filter = qry.scanFilter();
 
@@ -913,7 +905,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
      * @return Offheap iterator.
      */
     private GridIterator<IgniteBiTuple<K, V>> 
offheapIterator(GridCacheQueryAdapter<?> qry) {
-        IgnitePredicate<Cache.Entry<Object, Object>> prjPred = 
qry.projectionFilter();
+        CacheEntryPredicate prjPred = qry.projectionFilter();
 
         IgniteBiPredicate<K, V> filter = qry.scanFilter();
 
@@ -938,7 +930,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
      */
     private GridIteratorAdapter<IgniteBiTuple<K, V>> scanIterator(
         @Nullable final Iterator<Map.Entry<byte[], byte[]>> it,
-        @Nullable final IgnitePredicate<Cache.Entry<Object, Object>> prjPred,
+        @Nullable final CacheEntryPredicate prjPred,
         @Nullable final IgniteBiPredicate<K, V> filter,
         final boolean keepPortable) {
         if (it == null)
@@ -979,8 +971,9 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
                     if (prjPred != null) {
                         Cache.Entry<K, V> Entry = new 
GridCacheScanSwapEntry(e);
 
-                        if (!prjPred.apply((Cache.Entry<Object, Object>)Entry))
-                            continue;
+// TODO IGNITE-51.
+//                        if (!prjPred.apply((Cache.Entry<Object, 
Object>)Entry))
+//                            continue;
                     }
 
                     if (filter != null) {
@@ -1043,7 +1036,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
 
             try {
                 // Preparing query closures.
-                IgnitePredicate<Cache.Entry<Object, Object>> prjFilter = 
qryInfo.projectionPredicate();
+                CacheEntryPredicate prjFilter = qryInfo.projectionPredicate();
                 IgniteClosure<Object, Object> trans = (IgniteClosure<Object, 
Object>)qryInfo.transformer();
                 IgniteReducer<Object, Object> rdc = (IgniteReducer<Object, 
Object>)qryInfo.reducer();
 
@@ -1220,7 +1213,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
 
             try {
                 // Preparing query closures.
-                IgnitePredicate<Cache.Entry<Object, Object>> prjFilter = 
qryInfo.projectionPredicate();
+                CacheEntryPredicate prjFilter = qryInfo.projectionPredicate();
                 IgniteClosure<Map.Entry<K, V>, Object> trans = 
(IgniteClosure<Map.Entry<K, V>, Object>)qryInfo.transformer();
                 IgniteReducer<Map.Entry<K, V>, Object> rdc = 
(IgniteReducer<Map.Entry<K, V>, Object>)qryInfo.reducer();
 
@@ -1820,7 +1813,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
     @Nullable private IndexingQueryFilter 
projectionFilter(GridCacheQueryAdapter<?> qry) {
         assert qry != null;
 
-        final IgnitePredicate<Cache.Entry<Object, Object>> prjFilter = 
qry.projectionFilter();
+        final CacheEntryPredicate prjFilter = qry.projectionFilter();
 
         if (prjFilter == null || F.isAlwaysTrue(prjFilter))
             return null;
@@ -1833,9 +1826,9 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
                 return new IgniteBiPredicate<K, V>() {
                     @Override public boolean apply(K k, V v) {
                         try {
-                            Cache.Entry<K, V> entry = 
context().cache().entry(k);
+                            GridCacheEntryEx entry = 
context().cache().peekEx(cctx.toCacheKeyObject(k));
 
-                            return entry != null && 
prjFilter.apply((Cache.Entry<Object, Object>)entry);
+                            return entry != null && prjFilter.apply(entry);
                         }
                         catch (GridDhtInvalidPartitionException ignore) {
                             return false;
@@ -2341,7 +2334,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
                 if (key != null)
                     return key;
 
-                key = cctx.marshaller().unmarshal(keyBytes(), 
cctx.deploy().globalLoader());
+                key = cctx.toCacheKeyObject(null, keyBytes(), 
false).value(cctx, false);
 
                 return key;
             }
@@ -2502,7 +2495,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
         private static final long serialVersionUID = 7410163202728985912L;
 
         /** */
-        private IgnitePredicate<Cache.Entry<Object, Object>> prjPred;
+        private CacheEntryPredicate prjPred;
 
         /** */
         private IgniteBiPredicate<K, V> filter;
@@ -2516,7 +2509,7 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
          * @param keepPortable Keep portable flag.
          */
         private OffheapIteratorClosure(
-            @Nullable IgnitePredicate<Cache.Entry<Object, Object>> prjPred,
+            @Nullable CacheEntryPredicate prjPred,
             @Nullable IgniteBiPredicate<K, V> filter,
             boolean keepPortable) {
             assert prjPred != null || filter != null;
@@ -2535,8 +2528,9 @@ public abstract class GridCacheQueryManager<K, V> extends 
GridCacheManagerAdapte
             if (prjPred != null) {
                 Cache.Entry<K, V> entry = new GridCacheScanSwapEntry(e);
 
-                if (!prjPred.apply((Cache.Entry<Object, Object>)entry))
-                    return null;
+// TODO IGNITE-51.
+//                if (!prjPred.apply((Cache.Entry<Object, Object>)entry))
+//                    return null;
             }
 
             if (filter != null) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
index c15286e..c5f55d4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
@@ -67,7 +67,7 @@ public class GridCacheQueryRequest extends GridCacheMessage 
implements GridCache
 
     /** */
     @GridDirectTransient
-    private IgnitePredicate<Cache.Entry<Object, Object>> prjFilter;
+    private CacheEntryPredicate prjFilter;
 
     /** */
     private byte[] prjFilterBytes;
@@ -198,7 +198,7 @@ public class GridCacheQueryRequest extends GridCacheMessage 
implements GridCache
         String clause,
         String clsName,
         IgniteBiPredicate<Object, Object> keyValFilter,
-        IgnitePredicate<Cache.Entry<Object, Object>> prjFilter,
+        CacheEntryPredicate prjFilter,
         IgniteReducer<Object, Object> rdc,
         IgniteClosure<Object, Object> trans,
         int pageSize,
@@ -373,7 +373,7 @@ public class GridCacheQueryRequest extends GridCacheMessage 
implements GridCache
     }
 
     /** {@inheritDoc} */
-    public IgnitePredicate<Cache.Entry<Object, Object>> projectionFilter() {
+    public CacheEntryPredicate projectionFilter() {
         return prjFilter;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
index 6ba6c55..c072bfb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
@@ -501,7 +501,7 @@ public interface IgniteInternalTx extends AutoCloseable, 
GridTimeoutObject {
          GridCacheContext ctx,
          boolean failFast,
          KeyCacheObject key,
-         @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
GridCacheFilterFailedException;
+         @Nullable CacheEntryPredicate[] filter) throws 
GridCacheFilterFailedException;
 
     /**
      * @return Start version.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index 1cd4521..31a8d69 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -1919,7 +1919,7 @@ public abstract class IgniteTxAdapter extends 
GridMetadataAwareAdapter
         @Nullable @Override public <K, V> GridTuple<CacheObject> 
peek(GridCacheContext ctx,
             boolean failFast,
             KeyCacheObject key,
-            @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+            @Nullable CacheEntryPredicate[] filter) {
             return null;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
index db166fb..82376b2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
@@ -103,7 +103,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, 
Externalizable, Optim
 
     /** Put filters. */
     @GridToStringInclude
-    private IgnitePredicate<Cache.Entry<Object, Object>>[] filters;
+    private CacheEntryPredicate[] filters;
 
     /** Flag indicating whether filters passed. Used for fast-commit 
transactions. */
     private boolean filtersPassed;
@@ -211,7 +211,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, 
Externalizable, Optim
         Object[] invokeArgs,
         long ttl,
         GridCacheEntryEx entry,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filters,
+        CacheEntryPredicate[] filters,
         GridCacheVersion conflictVer) {
         assert ctx != null;
         assert tx != null;
@@ -637,14 +637,14 @@ public class IgniteTxEntry implements 
GridPeerDeployAware, Externalizable, Optim
     /**
      * @return Put filters.
      */
-    public IgnitePredicate<Cache.Entry<Object, Object>>[] filters() {
+    public CacheEntryPredicate[] filters() {
         return filters;
     }
 
     /**
      * @param filters Put filters.
      */
-    public void filters(IgnitePredicate<Cache.Entry<Object, Object>>[] 
filters) {
+    public void filters(CacheEntryPredicate[] filters) {
         filterBytes = null;
 
         this.filters = filters;
@@ -732,7 +732,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, 
Externalizable, Optim
                 filters = ctx.marshaller().unmarshal(filterBytes, clsLdr);
 
                 if (filters == null)
-                    filters = CU.empty();
+                    filters = CU.empty0();
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
index 699e239..0f24ad6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
@@ -323,7 +323,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         GridCacheContext cacheCtx,
         boolean failFast,
         KeyCacheObject key,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter
+        CacheEntryPredicate[] filter
     ) throws GridCacheFilterFailedException {
         IgniteTxEntry e = txMap == null ? null : 
txMap.get(cacheCtx.txKey(key));
 
@@ -331,7 +331,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
             // We should look at tx entry previous value. If this is a user 
peek then previous
             // value is the same as value. If this is a filter evaluation peek 
then previous value holds
             // value visible to filter while value contains value enlisted for 
write.
-            if (!F.isEmpty(filter) && !F.isAll(e.cached().<K, 
V>wrapLazyValue(), filter))
+            if (!F.isEmpty(filter) && !F.isAll(e.cached(), filter))
                 return e.hasPreviousValue() ? 
F.t(CU.<CacheObject>failed(failFast, e.previousValue())) : null;
 
             return e.hasPreviousValue() ? F.t(e.previousValue()) : null;
@@ -841,7 +841,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                                                 false,
                                                 metrics,
                                                 topVer,
-                                                CU.empty(),
+                                                CU.empty0(),
                                                 DR_NONE,
                                                 txEntry.conflictExpireTime(),
                                                 null,
@@ -874,7 +874,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                                                 false,
                                                 metrics,
                                                 topVer,
-                                                CU.empty(),
+                                                CU.empty0(),
                                                 DR_NONE,
                                                 null,
                                                 CU.subjectId(this, cctx),
@@ -1322,7 +1322,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                                 null,
                                 entry,
                                 expiryPlc,
-                                CU.empty(),
+                                CU.empty0(),
                                 false,
                                 -1L,
                                 -1L,
@@ -1638,7 +1638,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                     isolation,
                     isInvalidate(),
                     accessTtl,
-                    CU.empty());
+                    CU.empty0());
 
                 PLC2<Map<K, V>> plc2 = new PLC2<Map<K, V>>() {
                     @Override public IgniteInternalFuture<Map<K, V>> 
postLock() throws IgniteCheckedException {
@@ -1871,7 +1871,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         boolean retval,
         @Nullable GridCacheEntryEx cached,
         long ttl,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter
+        CacheEntryPredicate[] filter
     ) {
         return 
(IgniteInternalFuture<GridCacheReturn<CacheObject>>)putAllAsync0(cacheCtx,
             map,
@@ -1932,7 +1932,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
      * @throws IgniteCheckedException If failed.
      */
     private <K, V> boolean filter(GridCacheEntryEx cached,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
IgniteCheckedException {
+        CacheEntryPredicate[] filter) throws IgniteCheckedException {
         return pessimistic() || (optimistic() && implicit()) || 
cached.context().isAll(cached, filter);
     }
 
@@ -1967,7 +1967,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         @Nullable Object[] invokeArgs,
         boolean retval,
         boolean lockOnly,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        CacheEntryPredicate[] filter,
         final GridCacheReturn<CacheObject> ret,
         Collection<KeyCacheObject> enlisted,
         @Nullable Map<? extends K, GridCacheDrInfo<V>> drPutMap,
@@ -2117,7 +2117,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                                         null,
                                         entry,
                                         null,
-                                        CU.empty(),
+                                        CU.empty0(),
                                         false,
                                         -1L,
                                         -1L,
@@ -2329,7 +2329,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         boolean retval,
         boolean read,
         long accessTtl,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        CacheEntryPredicate[] filter,
         boolean computeInvoke
     ) throws IgniteCheckedException {
         for (KeyCacheObject k : keys) {
@@ -2420,7 +2420,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
 
                         // Revert operation to previous. (if no - NOOP, so 
entry will be unlocked).
                         txEntry.setAndMarkValid(txEntry.previousOperation(), 
(CacheObject)ret.value());
-                        txEntry.filters(CU.empty());
+                        txEntry.filters(CU.empty0());
                         txEntry.filtersSet(false);
 
                         updateTtl = filter != cacheCtx.noPeekArray();
@@ -2511,14 +2511,12 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         @Nullable final Map<? extends K, GridCacheDrInfo<V>> drMap,
         final boolean retval,
         @Nullable GridCacheEntryEx cached,
-        @Nullable final IgnitePredicate<Cache.Entry<K, V>>[] filter
+        @Nullable final CacheEntryPredicate[] filter
     ) {
         assert filter == null || invokeMap == null;
 
         cacheCtx.checkSecurity(GridSecurityPermission.CACHE_PUT);
 
-        final IgnitePredicate<Cache.Entry<Object, Object>>[] filter0 = 
((IgnitePredicate[])filter);
-
         if (retval)
             needReturnValue(true);
 
@@ -2627,7 +2625,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                 invokeArgs,
                 retval,
                 false,
-                filter0,
+                filter,
                 ret,
                 enlisted,
                 drMap,
@@ -2664,7 +2662,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                     isolation,
                     isInvalidate(),
                     -1L,
-                    CU.<K, V>empty());
+                    CU.empty0());
 
                 PLC1<GridCacheReturn<CacheObject>> plc1 = new 
PLC1<GridCacheReturn<CacheObject>>(ret) {
                     @Override public GridCacheReturn<CacheObject> 
postLock(GridCacheReturn<CacheObject> ret)
@@ -2681,7 +2679,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                             retval,
                             /*read*/false,
                             -1L,
-                            filter0,
+                            filter,
                             /*computeInvoke*/true);
 
                         return ret;
@@ -2754,7 +2752,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         Collection<? extends K> keys,
         @Nullable GridCacheEntryEx cached,
         boolean retval,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter
+        CacheEntryPredicate[] filter
     ) {
         return removeAllAsync0(cacheCtx, keys, null, cached, retval, filter);
     }
@@ -2775,11 +2773,9 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         @Nullable Map<? extends  K, GridCacheVersion> drMap,
         @Nullable GridCacheEntryEx cached,
         final boolean retval,
-        @Nullable final IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        @Nullable final CacheEntryPredicate[] filter) {
         cacheCtx.checkSecurity(GridSecurityPermission.CACHE_REMOVE);
 
-        final IgnitePredicate<Cache.Entry<Object, Object>>[] filter0 = 
((IgnitePredicate[])filter);
-
         if (retval)
             needReturnValue(true);
 
@@ -2866,7 +2862,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                 /** invoke arguments */null,
                 retval,
                 /** lock only */false,
-                filter0,
+                filter,
                 ret,
                 enlisted,
                 null,
@@ -2894,7 +2890,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                     isolation,
                     isInvalidate(),
                     -1L,
-                    CU.<K, V>empty());
+                    CU.empty0());
 
                 PLC1<GridCacheReturn<CacheObject>> plc1 = new 
PLC1<GridCacheReturn<CacheObject>>(ret) {
                     @Override protected GridCacheReturn<CacheObject> 
postLock(GridCacheReturn<CacheObject> ret)
@@ -2911,7 +2907,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                             retval,
                             /*read*/false,
                             -1L,
-                            filter0,
+                            filter,
                             /*computeInvoke*/false);
 
                         return ret;
@@ -3059,7 +3055,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                 /** invoke arguments */null,
                 /** retval */false,
                 /** lock only */true,
-                CU.empty(),
+                CU.empty0(),
                 ret,
                 enlisted,
                 null,
@@ -3079,7 +3075,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
                     isolation,
                     isInvalidate(),
                     -1L,
-                    CU.empty()) :
+                    CU.empty0()) :
                 new GridFinishedFuture<>(cctx.kernalContext());
         }
         catch (IgniteCheckedException e) {
@@ -3193,7 +3189,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         Object[] invokeArgs,
         GridCacheEntryEx entry,
         @Nullable ExpiryPolicy expiryPlc,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        CacheEntryPredicate[] filter,
         boolean filtersSet,
         long drTtl,
         long drExpireTime,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalEx.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalEx.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalEx.java
index 43737e4..1af6378 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalEx.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalEx.java
@@ -96,7 +96,7 @@ public interface IgniteTxLocalEx extends IgniteInternalTx {
         boolean retval,
         @Nullable GridCacheEntryEx cached,
         long ttl,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter);
+        CacheEntryPredicate[] filter);
 
     /**
      * @param cacheCtx Cache context.
@@ -122,7 +122,7 @@ public interface IgniteTxLocalEx extends IgniteInternalTx {
         Collection<? extends K> keys,
         @Nullable GridCacheEntryEx cached,
         boolean retval,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter);
+        CacheEntryPredicate[] filter);
 
     /**
      * @param cacheCtx Cache context.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/util/F0.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/F0.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/F0.java
index 92a2789..ce3815c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/F0.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/F0.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.util;
 
+import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.util.lang.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
@@ -103,6 +104,17 @@ public class F0 {
         };
     }
 
+    public static CacheEntryPredicate and0(@Nullable final 
CacheEntryPredicate[] p1,
+        @Nullable final CacheEntryPredicate... p2) {
+        return null;
+    }
+
+    public static CacheEntryPredicate and0(
+        @Nullable final CacheEntryPredicate p,
+        @Nullable final CacheEntryPredicate... ps) {
+        return null;
+    }
+
     /**
      * Get a predicate (non peer-deployable) that evaluates to {@code true} if 
each of its component predicates
      * evaluates to {@code true}. The components are evaluated in order they 
are supplied.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
index 5b99f58..50009c0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
@@ -390,30 +390,6 @@ public class GridFunc {
     };
 
     /** */
-    private static final IgnitePredicate CACHE_ENTRY_HAS_GET_VAL = new 
IgnitePredicate() {
-        @SuppressWarnings({"unchecked"})
-        @Override public boolean apply(Object o) {
-            return ((Cache.Entry)o).getValue() != null;
-        }
-
-        @Override public String toString() {
-            return "Cache entry has-get-value predicate.";
-        }
-    };
-
-    /** */
-    private static final IgnitePredicate CACHE_ENTRY_NO_GET_VAL = new 
IgnitePredicate() {
-        @SuppressWarnings({"unchecked"})
-        @Override public boolean apply(Object o) {
-            return ((Cache.Entry)o).getValue() == null;
-        }
-
-        @Override public String toString() {
-            return "Cache entry no-get-value predicate.";
-        }
-    };
-
-    /** */
     private static final IgnitePredicate CACHE_ENTRY_HAS_PEEK_VAL = new 
IgnitePredicate() {
         @SuppressWarnings({"unchecked"})
         @Override public boolean apply(Object o) {
@@ -7907,34 +7883,6 @@ public class GridFunc {
     }
 
     /**
-     * Gets predicate which returns {@code true} if {@link 
org.apache.ignite.cache.Entry#get()}
-     * method returns {@code non-null} value.
-     *
-     * @param <K> Cache key type.
-     * @param <V> Cache value type.
-     * @return Predicate which returns {@code true} if {@link 
org.apache.ignite.cache.Entry#get()}
-     *      method returns {@code non-null} value.
-     */
-    @SuppressWarnings({"unchecked"})
-    public static <K, V> IgnitePredicate<Cache.Entry<K, V>> cacheHasGetValue() 
{
-        return (IgnitePredicate<Cache.Entry<K, V>>)CACHE_ENTRY_HAS_GET_VAL;
-    }
-
-    /**
-     * Gets predicate which returns {@code true} if {@link 
org.apache.ignite.cache.Entry#get()}
-     * method returns {@code null} value.
-     *
-     * @param <K> Cache key type.
-     * @param <V> Cache value type.
-     * @return Predicate which returns {@code true} if {@link 
org.apache.ignite.cache.Entry#get()}
-     *      method returns {@code null} value.
-     */
-    @SuppressWarnings({"unchecked"})
-    public static <K, V> IgnitePredicate<Cache.Entry<K, V>> cacheNoGetValue() {
-        return (IgnitePredicate<Cache.Entry<K, V>>)CACHE_ENTRY_NO_GET_VAL;
-    }
-
-    /**
      * Gets predicate which returns {@code true} if
      * {@link org.apache.ignite.cache.Entry#peek() Entry.peek()} method
      * returns {@code non-null} value.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
index 8e4c7cd..f816d75 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
@@ -3439,9 +3439,9 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
 
             info("Local keys (primary): " + locKeys);
 
-            locKeys.addAll(cache.keySet(new 
IgnitePredicate<Cache.Entry<String, Integer>>() {
-                @Override public boolean apply(Cache.Entry<String, Integer> e) 
{
-                    return 
grid(0).affinity(null).isBackup(grid(0).localNode(), e.getKey());
+            locKeys.addAll(cache.keySet(new CacheEntryPredicateAdapter() {
+                @Override public boolean apply(GridCacheEntryEx e) {
+                    return 
grid(0).affinity(null).isBackup(grid(0).localNode(), e.key());
                 }
             }));
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
index 56eb096..264542f 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
@@ -386,7 +386,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public <K, V> boolean invalidate(@Nullable 
IgnitePredicate<Cache.Entry<K, V>>[] filter)
+    @Override public <K, V> boolean invalidate(@Nullable CacheEntryPredicate[] 
filter)
         throws GridCacheEntryRemovedException, IgniteCheckedException {
         assert false;
 
@@ -394,7 +394,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public <K, V> boolean compact(@Nullable 
IgnitePredicate<Cache.Entry<K, V>>[] filter)
+    @Override public <K, V> boolean compact(@Nullable CacheEntryPredicate[] 
filter)
         throws GridCacheEntryRemovedException, IgniteCheckedException {
         assert false;
 
@@ -403,7 +403,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
 
     /** @inheritDoc */
     @Override public <K, V> boolean evictInternal(boolean swap, 
GridCacheVersion obsoleteVer,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+        @Nullable CacheEntryPredicate[] filter) {
         assert false;
 
         return false;
@@ -459,7 +459,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
         boolean evt,
         boolean metrics,
         long topVer,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter, GridDrType 
drType,
+        CacheEntryPredicate[] filter, GridDrType drType,
         long drExpireTime, @Nullable GridCacheVersion drVer, UUID subjId, 
String taskName) throws IgniteCheckedException,
         GridCacheEntryRemovedException {
         return new GridCacheUpdateTxResult(true, rawPut(val, ttl));
@@ -476,7 +476,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
         @Nullable ExpiryPolicy expiryPlc,
         boolean evt,
         boolean metrics,
-        @Nullable IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        @Nullable CacheEntryPredicate[] filter,
         boolean intercept,
         UUID subjId,
         String taskName)
@@ -499,7 +499,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
         boolean metrics,
         boolean primary,
         boolean checkVer,
-        @Nullable IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        @Nullable CacheEntryPredicate[] filter,
         GridDrType drType,
         long conflictTtl,
         long conflictExpireTime,
@@ -523,7 +523,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
         boolean evt,
         boolean metrics,
         long topVer,
-        IgnitePredicate<Cache.Entry<Object, Object>>[] filter,
+        CacheEntryPredicate[] filter,
         GridDrType drType,
         @Nullable GridCacheVersion drVer,
         UUID subjId,
@@ -540,7 +540,7 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
 
     /** @inheritDoc */
     @Override public <K, V> boolean clear(GridCacheVersion ver, boolean 
readers,
-        @Nullable IgnitePredicate<Cache.Entry<K, V>>[] filter) throws 
IgniteCheckedException {
+        @Nullable CacheEntryPredicate[] filter) throws IgniteCheckedException {
         if (ver == null || ver.equals(this.ver)) {
             val = null;
 
@@ -612,20 +612,20 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public <K, V> CacheObject peek(GridCachePeekMode mode, 
IgnitePredicate<Cache.Entry<K, V>>[] filter) {
+    @Override public <K, V> CacheObject peek(GridCachePeekMode mode, 
CacheEntryPredicate[] filter) {
         return val;
     }
 
     /** @inheritDoc */
     @Override public <K, V> GridTuple<CacheObject> peek0(boolean failFast, 
GridCachePeekMode mode,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter, IgniteInternalTx tx)
+        CacheEntryPredicate[] filter, IgniteInternalTx tx)
         throws GridCacheEntryRemovedException, GridCacheFilterFailedException, 
IgniteCheckedException {
         return F.t(val);
     }
 
     /** @inheritDoc */
     @Override public <K, V> CacheObject peek(Collection<GridCachePeekMode> 
modes,
-        IgnitePredicate<Cache.Entry<K, V>>[] filter)
+        CacheEntryPredicate[] filter)
         throws GridCacheEntryRemovedException {
         return val;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java
index 24cd202..dc39376 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheEventAbstractTest.java
@@ -631,8 +631,8 @@ public abstract class GridCacheEventAbstractTest extends 
GridCacheAbstractSelfTe
 
                 assert e != null;
 
-                IgnitePredicate<Cache.Entry<String, Integer>> noPeekVal = 
F.cacheNoPeekValue();
-                IgnitePredicate<Cache.Entry<String, Integer>> hasPeekVal = 
F.cacheHasPeekValue();
+                CacheEntryPredicate noPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateNoValue());
+                CacheEntryPredicate hasPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateHasValue());
 
                 String key = e.getKey();
                 Integer val = e.getValue();
@@ -662,8 +662,8 @@ public abstract class GridCacheEventAbstractTest extends 
GridCacheAbstractSelfTe
 
                 assert e != null;
 
-                IgnitePredicate<Cache.Entry<String, Integer>> noPeekVal = 
F.cacheNoPeekValue();
-                IgnitePredicate<Cache.Entry<String, Integer>> hasPeekVal = 
F.cacheHasPeekValue();
+                CacheEntryPredicate noPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateNoValue());
+                CacheEntryPredicate hasPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateHasValue());
 
                 String key = e.getKey();
                 Integer val = e.getValue();
@@ -698,8 +698,8 @@ public abstract class GridCacheEventAbstractTest extends 
GridCacheAbstractSelfTe
 
                 assert e != null;
 
-                IgnitePredicate<Cache.Entry<String, Integer>> noPeekVal = 
F.cacheNoPeekValue();
-                IgnitePredicate<Cache.Entry<String, Integer>> hasPeekVal = 
F.cacheHasPeekValue();
+                CacheEntryPredicate noPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateNoValue());
+                CacheEntryPredicate hasPeekVal = new 
CacheEntrySerializablePredicate(new CacheEntryPredicateHasValue());
 
                 String key = e.getKey();
                 Integer val = e.getValue();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
index c7903df..8ba2047 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
@@ -23,7 +23,9 @@ import org.apache.ignite.cache.affinity.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
+import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 
 import java.util.*;
@@ -321,9 +323,11 @@ public class GridCachePartitionedMultiNodeFullApiSelfTest 
extends GridCacheParti
         assertEquals(nearEnabled() ? 2 : 0, cache2.nearSize());
         assertEquals(0, cache2.size() - cache2.nearSize());
 
-        IgniteBiPredicate<String, Integer> prjFilter = new P2<String, 
Integer>() {
-            @Override public boolean apply(String key, Integer val) {
-                return val >= 1 && val <= 3;
+        CacheEntryPredicateAdapter prjFilter = new 
CacheEntryPredicateAdapter() {
+            @Override public boolean apply(GridCacheEntryEx e) {
+                Integer val = CU.value(e.rawGet(), e.context(), false);
+
+                return val != null && val >= 1 && val <= 3;
             }
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/reducefields/GridCacheAbstractReduceFieldsQuerySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/reducefields/GridCacheAbstractReduceFieldsQuerySelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/reducefields/GridCacheAbstractReduceFieldsQuerySelfTest.java
index 0c48643..95e43a7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/reducefields/GridCacheAbstractReduceFieldsQuerySelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/reducefields/GridCacheAbstractReduceFieldsQuerySelfTest.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.cache.query.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.spi.discovery.*;
@@ -222,9 +223,11 @@ public abstract class 
GridCacheAbstractReduceFieldsQuerySelfTest extends GridCom
      * @throws Exception If failed.
      */
     public void testOnProjection() throws Exception {
-        P2<CacheAffinityKey<String>, Person> p = new 
P2<CacheAffinityKey<String>, Person>() {
-            @Override public boolean apply(CacheAffinityKey<String> key, 
Person val) {
-                return val.orgId == 1;
+        CacheEntryPredicateAdapter p = new CacheEntryPredicateAdapter() {
+            @Override public boolean apply(GridCacheEntryEx e) {
+                Person val = CU.value(e.rawGet(), e.context(), false);
+
+                return val != null && val.orgId == 1;
             }
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFieldsQuerySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFieldsQuerySelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFieldsQuerySelfTest.java
index 37b5c08..de1ac5c 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFieldsQuerySelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFieldsQuerySelfTest.java
@@ -1037,40 +1037,6 @@ public abstract class 
GridCacheAbstractFieldsQuerySelfTest extends GridCommonAbs
         assert res.get(1).equals(25);
     }
 
-    /** @throws Exception If failed. */
-    public void testOnProjection() throws Exception {
-        P2<Integer, Integer> p = new P2<Integer, Integer>() {
-            @Override public boolean apply(Integer key, Integer val) {
-                return val < 30;
-            }
-        };
-
-        CacheProjection<Integer, Integer> cachePrj = ((IgniteKernal)grid(0))
-            .<Integer, Integer>cache(null).projection(p);
-
-        CacheQuery<List<?>> q = cachePrj.queries()
-            .createSqlFieldsQuery("select _key, _val from Integer where _key 
>= 20 and _val < 40");
-
-        List<List<?>> list = new ArrayList<>(q.execute().get());
-
-        dedup(list);
-
-        Collections.sort(list, new Comparator<List<?>>() {
-            @Override public int compare(List<?> r1, List<?> r2) {
-                return ((Integer)r1.get(0)).compareTo((Integer)r2.get(0));
-            }
-        });
-
-        assertEquals(10, list.size());
-
-        for (int i = 20; i < 30; i++) {
-            List<?> row = list.get(i - 20);
-
-            assertEquals(i, row.get(0));
-            assertEquals(i, row.get(1));
-        }
-    }
-
     /**
      * Dedups result.
      *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractQuerySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractQuerySelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractQuerySelfTest.java
index a3173bf..6c9ca23 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractQuerySelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractQuerySelfTest.java
@@ -470,11 +470,13 @@ public abstract class GridCacheAbstractQuerySelfTest 
extends GridCommonAbstractT
         cache.putx(1, new ObjectValue("test", 1));
         cache.putx(2, new ObjectValue("test", 2));
 
-        P2<Integer, ObjectValue> p = new P2<Integer, ObjectValue>() {
-            @Override public boolean apply(Integer key, ObjectValue val) {
-                return val.intVal == 1;
+        CacheEntryPredicate p = new  CacheEntrySerializablePredicate(new 
CacheEntryPredicateAdapter() {
+            @Override public boolean apply(GridCacheEntryEx e) {
+                ObjectValue val = CU.value(e.rawGet(), e.context(), false);
+
+                return val != null && val.intVal == 1;
             }
-        };
+        });
 
         CacheProjection<Integer, ObjectValue> cachePrj = 
((IgniteKernal)grid(0))
             .<Integer, ObjectValue>cache(null).projection(p);
@@ -858,11 +860,13 @@ public abstract class GridCacheAbstractQuerySelfTest 
extends GridCommonAbstractT
         assert c.putx("key5", 5);
 
         // Filter values less than 3.
-        P2<String, Integer> p = new P2<String, Integer>() {
-            @Override public boolean apply(String key, Integer val) {
-                return val > 3;
+        CacheEntryPredicate p = new  CacheEntrySerializablePredicate(new 
CacheEntryPredicateAdapter() {
+            @Override public boolean apply(GridCacheEntryEx e) {
+                Integer val = CU.value(e.rawGet(), e.context(), false);
+
+                return val != null && val > 3;
             }
-        };
+        });
 
         CacheProjection<String, Integer> cachePrj = 
((IgniteKernal)ignite).<String, Integer>cache(null).projection(p);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheCrossCacheQuerySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheCrossCacheQuerySelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheCrossCacheQuerySelfTest.java
index aa408f4..5bd3621 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheCrossCacheQuerySelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheCrossCacheQuerySelfTest.java
@@ -171,23 +171,6 @@ public class GridCacheCrossCacheQuerySelfTest extends 
GridCommonAbstractTest {
         }
     }
 
-    /** @throws Exception If failed. */
-    public void testOnProjection() throws Exception {
-        fillCaches();
-
-        CacheProjection<Integer, FactPurchase> prj = ((IgniteKernal)ignite)
-            .<Integer, FactPurchase>cache("partitioned").projection(
-            new IgnitePredicate<Cache.Entry<Integer, FactPurchase>>() {
-                @Override public boolean apply(Cache.Entry<Integer, 
FactPurchase> e) {
-                    return e.getKey() > 12;
-                }
-            });
-
-        List<Map.Entry<Integer, FactPurchase>> res = body(prj);
-
-        check(res);
-    }
-
     /**
      * @throws IgniteCheckedException If failed.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6febd89a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringDynamicCacheManager.java
----------------------------------------------------------------------
diff --git 
a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringDynamicCacheManager.java
 
b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringDynamicCacheManager.java
index fc37f09..0a538a0 100644
--- 
a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringDynamicCacheManager.java
+++ 
b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringDynamicCacheManager.java
@@ -120,7 +120,9 @@ public class SpringDynamicCacheManager extends 
SpringCacheManager {
             cache = metaCache.get(key);
 
             if (cache == null) {
-                cache = new SpringCache(name, grid, dataCache.projection(new 
ProjectionFilter(name)),
+                cache = new SpringCache(name,
+                    grid,
+                    dataCache.projection(new 
CacheEntrySerializablePredicate(new ProjectionFilter(name))),
                     new DataKeyFactory(name));
 
                 org.springframework.cache.Cache old = 
metaCache.putIfAbsent(key, cache);
@@ -294,7 +296,7 @@ public class SpringDynamicCacheManager extends 
SpringCacheManager {
     /**
      * Projection filter.
      */
-    private static class ProjectionFilter implements 
IgniteBiPredicate<DataKey, Object>, Externalizable {
+    private static class ProjectionFilter extends CacheEntryPredicateAdapter 
implements Externalizable {
         /** Cache name. */
         private String name;
 
@@ -313,7 +315,9 @@ public class SpringDynamicCacheManager extends 
SpringCacheManager {
         }
 
         /** {@inheritDoc} */
-        @Override public boolean apply(DataKey key, Object val) {
+        @Override public boolean apply(GridCacheEntryEx e) {
+            DataKey key = e.key().value(e.context(), false);
+
             return name != null ? name.equals(key.name) : key.name == null;
         }
 

Reply via email to