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

incubator-ignite git commit: #ignite-964: renaming.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-964 06d3a2969 -> 382397010


#ignite-964: renaming.


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

Branch: refs/heads/ignite-964
Commit: 38239701076ad8e1938910e057643b32fec1dffe
Parents: 06d3a29
Author: ivasilinets <iv...@gridgain.com>
Authored: Fri Jul 10 12:57:55 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Fri Jul 10 12:57:55 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/GridKernalContext.java      |   2 +-
 .../ignite/internal/GridKernalContextImpl.java  |   8 +-
 .../apache/ignite/internal/IgniteKernal.java    |   2 +-
 .../IgniteScriptingCommandHandler.java          |  14 +-
 .../rest/handlers/scripting/NodeJSIgnite.java   |  65 -----
 .../rest/handlers/scripting/NodeJsCache.java    | 259 ------------------
 .../handlers/scripting/NodeJsClusterNode.java   |  42 ---
 .../rest/handlers/scripting/RestEntry.java      |  57 ----
 .../handlers/scripting/RestJSONCacheObject.java | 166 ------------
 .../scripting/ScriptingJSONCacheObject.java     | 166 ++++++++++++
 .../scripting/IgniteScriptProcessor.java        | 147 -----------
 .../scripting/IgniteScriptingProcessor.java     | 147 +++++++++++
 .../processors/scripting/JSONCacheObject.java   | 108 --------
 .../scripting/ScriptingCacheEntry.java          |  59 +++++
 .../scripting/ScriptingClusterNode.java         |  42 +++
 .../processors/scripting/ScriptingJSIgnite.java |  65 +++++
 .../processors/scripting/ScriptingJsCache.java  | 260 +++++++++++++++++++
 .../org/apache/ignite/json/JSONCacheObject.java | 108 ++++++++
 .../ignite/internal/NodeJsCacheApiSelfTest.java | 227 ----------------
 .../internal/ScriptingJsCacheApiSelfTest.java   | 227 ++++++++++++++++
 .../testsuites/IgniteNodeJsTestSuite.java       |   2 +-
 .../http/jetty/GridJettyRestHandler.java        |   9 +-
 22 files changed, 1090 insertions(+), 1092 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
index 16615fa..dad144c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
@@ -240,7 +240,7 @@ public interface GridKernalContext extends Iterable<GridComponent> {
      *
      * @return Scripting processor.
      */
-    public IgniteScriptProcessor scripting();
+    public IgniteScriptingProcessor scripting();
 
     /**
      * Gets segmentation processor.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
index 5f8ba6c..caa34a8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
@@ -199,7 +199,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
 
     /** */
     @GridToStringInclude
-    private IgniteScriptProcessor scriptProc;
+    private IgniteScriptingProcessor scriptProc;
 
     /** */
     @GridToStringInclude
@@ -482,8 +482,8 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
             dataStructuresProc = (DataStructuresProcessor)comp;
         else if (comp instanceof ClusterProcessor)
             cluster = (ClusterProcessor)comp;
-        else if (comp instanceof IgniteScriptProcessor)
-            scriptProc = (IgniteScriptProcessor) comp;
+        else if (comp instanceof IgniteScriptingProcessor)
+            scriptProc = (IgniteScriptingProcessor) comp;
         else if (!(comp instanceof DiscoveryNodeValidationProcessor))
             assert (comp instanceof GridPluginComponent) : "Unknown manager class: " + comp.getClass();
 
@@ -664,7 +664,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
     }
 
     /** {@inheritDoc} */
-    @Override public IgniteScriptProcessor scripting() {
+    @Override public IgniteScriptingProcessor scripting() {
         return scriptProc;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 1de6f5a..6fab5f9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -776,7 +776,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
             startProcessor(new GridTaskProcessor(ctx));
             startProcessor((GridProcessor)SCHEDULE.createOptional(ctx));
             startProcessor(new GridRestProcessor(ctx));
-            startProcessor(new IgniteScriptProcessor(ctx));
+            startProcessor(new IgniteScriptingProcessor(ctx));
             startProcessor(new DataStreamProcessor(ctx));
             startProcessor((GridProcessor)IGFS.create(ctx, F.isEmpty(cfg.getFileSystemConfiguration())));
             startProcessor(new GridContinuousProcessor(ctx));

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/IgniteScriptingCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/IgniteScriptingCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/IgniteScriptingCommandHandler.java
index d3f26da..8469e1c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/IgniteScriptingCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/IgniteScriptingCommandHandler.java
@@ -28,6 +28,7 @@ import org.apache.ignite.internal.processors.scripting.*;
 import org.apache.ignite.internal.util.future.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.json.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.resources.*;
 import org.jetbrains.annotations.*;
@@ -57,23 +58,16 @@ public class IgniteScriptingCommandHandler extends GridRestCommandHandlerAdapter
         super(ctx);
 
         try {
-            IgniteScriptProcessor script = ctx.scripting();
+            IgniteScriptingProcessor script = ctx.scripting();
 
             String emitFunction = "function emit(f, args, nodeId) {" +
                 "__emitResult.add(f.toString(), args, nodeId);}";
 
             script.addEngineFunction(emitFunction);
 
-            String entryFunction = "CacheEntry = function(key, val) {" +
-                    "this.key = key; this.value = val}";
-
-            script.addEngineFunction(entryFunction);
-
             emitRes = new IgniteJsEmitResult();
 
             script.addBinding("__emitResult", emitRes);
-
-            script.addBinding("ignite", new NodeJSIgnite(ctx.grid()));
         }
         catch (IgniteCheckedException e) {
             ctx.log().error(e.getMessage());
@@ -102,7 +96,7 @@ public class IgniteScriptingCommandHandler extends GridRestCommandHandlerAdapter
             case AFFINITY_RUN_SCRIPT: {
                 assert req instanceof RestRunScriptRequest : "Invalid type of run script request.";
 
-                return ctx.closure().callLocalSafe(new AffinityRunScriptCallable(ctx, (RestRunScriptRequest)req));
+                return ctx.closure().callLocalSafe(new AffinityRunScriptCallable(ctx, (RestRunScriptRequest) req));
             }
 
             case EXECUTE_MAP_REDUCE_SCRIPT: {
@@ -220,7 +214,7 @@ public class IgniteScriptingCommandHandler extends GridRestCommandHandlerAdapter
         public JsCallFunctionJob(String func, Object argv) {
             this.func = func;
 
-            this.argv = RestJSONCacheObject.convertToRestObject(
+            this.argv = ScriptingJSONCacheObject.convertToRestObject(
                 JSONCacheObject.toSimpleObject(argv));
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJSIgnite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJSIgnite.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJSIgnite.java
deleted file mode 100644
index 3e1ef4e..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJSIgnite.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.rest.handlers.scripting;
-
-import org.apache.ignite.*;
-
-/**
- * Node js ignite.
- */
-public class NodeJSIgnite {
-    /** Ignite. */
-    private Ignite ignite;
-
-    /**
-     * @param ignite Ignite.
-     */
-    public NodeJSIgnite(Ignite ignite) {
-        this.ignite = ignite;
-    }
-
-    /**
-     * @param cache Cache name.
-     * @return Node js cache.
-     */
-    public NodeJsCache cache(String cache) {
-        return new NodeJsCache(ignite.cache(cache));
-    }
-
-    /**
-     * @param cache Cache name.
-     * @return Node js cache.
-     */
-    public NodeJsCache getOrCreateCache(String cache) {
-        return new NodeJsCache(ignite.getOrCreateCache(cache));
-    }
-
-    /**
-     * @return Local node.
-     */
-    public NodeJsClusterNode localNode() {
-        return new NodeJsClusterNode(ignite.cluster().localNode());
-    }
-
-    /**
-     * @return Ignite name.
-     */
-    public String name() {
-        return ignite.name();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsCache.java
deleted file mode 100644
index 5c21e28..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsCache.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.rest.handlers.scripting;
-
-import org.apache.ignite.*;
-import org.apache.ignite.internal.processors.scripting.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-
-import java.util.*;
-
-/**
- * Node js cache.
- */
-public class NodeJsCache {
-    /** Ignite cache. */
-    private IgniteCache<Object, Object> cache;
-
-    /**
-     * @param cache Ignite cache.
-     */
-    public NodeJsCache(IgniteCache cache) {
-        this.cache = cache;
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     */
-    public void put(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        cache.put(cacheKey, cacheVal);
-    }
-
-    /**
-     * @param key Key.
-     */
-    public Object get(Object key) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-
-        return RestJSONCacheObject.convertToRestObject(cache.get(cacheKey));
-    }
-
-    /**
-     * @param key Key
-     * @return True if cache contains key.
-     */
-    public boolean containsKey(Object key) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-
-        return cache.containsKey(cacheKey);
-    }
-
-    /**
-     * @param keys Keys
-     * @return True if cache contains key.
-     */
-    public boolean containsKeys(List keys) {
-        List<Object> cacheKeys = (List<Object>)JSONCacheObject.toSimpleObject(keys);
-
-        return cache.containsKeys(new HashSet<>(cacheKeys));
-    }
-
-    /**
-     * @param keys Keys.
-     * @return Cache entries.
-     */
-    public List<RestEntry> getAll(List keys) {
-        List cacheKeys = (List)JSONCacheObject.toSimpleObject(keys);
-
-        Map<Object, Object> entries = cache.getAll(new HashSet<>(cacheKeys));
-
-        List<RestEntry> res = new ArrayList<>();
-
-        for (Map.Entry<Object, Object> e : entries.entrySet())
-            res.add(new RestEntry(
-                RestJSONCacheObject.convertToRestObject(e.getKey()),
-                RestJSONCacheObject.convertToRestObject(e.getValue())));
-
-        return res;
-    }
-
-    /**
-     * @param keys Keys.
-     */
-    public void removeAll(List keys) {
-        List cacheKeys = (List)JSONCacheObject.toSimpleObject(keys);
-
-        cache.removeAll(new HashSet<>(cacheKeys));
-    }
-
-    /**
-     * @param entries Entries.
-     */
-    public void putAll(List entries) {
-        List cacheKeys = (List)JSONCacheObject.toSimpleObject(entries);
-
-        Map<Object, Object> cacheEntries = U.newHashMap(entries.size());
-
-        for (Object e : cacheKeys) {
-            JSONCacheObject e0 = (JSONCacheObject)e;
-            cacheEntries.put(e0.getField("key"), e0.getField("value"));
-        }
-
-        cache.putAll(cacheEntries);
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return Previous value.
-     */
-    public Object getAndPut(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        return RestJSONCacheObject.convertToRestObject(cache.getAndPut(cacheKey, cacheVal));
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return Previous value.
-     */
-    public Object getAndReplace(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        Object o = RestJSONCacheObject.convertToRestObject(cache.getAndReplace(cacheKey, cacheVal));
-
-        return o;
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return Previous value.
-     */
-    public Object getAndPutIfAbsent(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        return RestJSONCacheObject.convertToRestObject(cache.getAndPutIfAbsent(cacheKey, cacheVal));
-    }
-
-    /**
-     * @param key Key.
-     * @return Previous value.
-     */
-    public Object getAndRemove(Object key) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-
-        return RestJSONCacheObject.convertToRestObject(cache.getAndRemove(cacheKey));
-    }
-
-    /**
-     * @param key Key.
-     * @return If operation success.
-     */
-    public boolean remove(Object key) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-
-        return cache.remove(cacheKey);
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return If operation success.
-     */
-    public boolean removeValue(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        return cache.remove(cacheKey, cacheVal);
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return If operation success.
-     */
-    public boolean replace(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        return cache.replace(cacheKey, cacheVal);
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @param oldVal Old value.
-     * @return If operation success.
-     */
-    public boolean replaceValue(Object key, Object val, Object oldVal) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-        Object oldCacheVal = JSONCacheObject.toSimpleObject(oldVal);
-
-        return cache.replace(cacheKey, oldCacheVal, cacheVal);
-    }
-
-    /**
-     * Removes all from cache.
-     */
-    public void removeAllFromCache() {
-        cache.removeAll();
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @return Previous value.
-     */
-    public Object putIfAbsent(Object key, Object val) {
-        Object cacheKey = JSONCacheObject.toSimpleObject(key);
-        Object cacheVal = JSONCacheObject.toSimpleObject(val);
-
-        return cache.putIfAbsent(cacheKey, cacheVal);
-    }
-
-    /**
-     * @return Cache name.
-     */
-    public String getName() {
-        return cache.getName();
-    }
-
-    /**
-     * @return Local size.
-     */
-    public int localSize() {
-        return cache.localSize();
-    }
-
-    /**
-     * @return Size.
-     */
-    public int size() {
-        return cache.size();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsClusterNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsClusterNode.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsClusterNode.java
deleted file mode 100644
index fb513fb..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/NodeJsClusterNode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.rest.handlers.scripting;
-
-import org.apache.ignite.cluster.*;
-
-/**
- * Node js cluster node.
- */
-public class NodeJsClusterNode {
-    /** Cluster node. */
-    private String id;
-
-    /**
-     * @param node Cluster node.
-     */
-    public NodeJsClusterNode(ClusterNode node) {
-       this.id = node.id().toString();
-    }
-
-    /**
-     * @return Node id.
-     */
-    public String id() {
-        return id;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestEntry.java
deleted file mode 100644
index c4f9fd1..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestEntry.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.apache.ignite.internal.processors.rest.handlers.scripting;
-
-
-/**
- * Rest entry.
- */
-public class RestEntry {
-    /** Key. */
-    private Object key;
-
-    /** Value. */
-    private Object val;
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     */
-    public RestEntry(Object key, Object val) {
-        if (key instanceof RestJSONCacheObject)
-            this.key = ((RestJSONCacheObject)key).getFields();
-        else
-            this.key = key;
-
-        if (val instanceof RestJSONCacheObject)
-            this.val = ((RestJSONCacheObject)val).getFields();
-        else
-            this.val = val;
-    }
-
-    /**
-     * @return Key.
-     */
-    public Object getKey() {
-        return key;
-    }
-
-    /**
-     * @param key Key.
-     */
-    public void setKey(Object key) {
-        this.key = key;
-    }
-
-    /**
-     * @return Value.
-     */
-    public Object getValue() {
-        return val;
-    }
-
-    /**
-     * @param val Value.
-     */
-    public void setValue(Object val) {
-        this.val = val;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestJSONCacheObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestJSONCacheObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestJSONCacheObject.java
deleted file mode 100644
index 3bb615c..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/RestJSONCacheObject.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.rest.handlers.scripting;
-
-import jdk.nashorn.api.scripting.*;
-import org.apache.ignite.internal.processors.scripting.*;
-import org.apache.ignite.internal.util.typedef.internal.U;
-
-import java.util.*;
-
-/**
- * Json cache object.
- */
-public class RestJSONCacheObject implements JSObject {
-    /** Fields. */
-    private final JSONCacheObject fields;
-
-    /**
-     * @param o JSON object.
-     */
-    private RestJSONCacheObject(JSONCacheObject o) {
-        fields = o;
-    }
-
-    /**
-     * @param o Object.
-     * @return Rest JSON cache object.
-     */
-    public static Object convertToRestObject(Object o) {
-        if (o instanceof JSONCacheObject)
-            return new RestJSONCacheObject((JSONCacheObject)o);
-
-        return o;
-    }
-
-    /**
-     * @return Fields.
-     */
-    public Map<Object, Object> getFields() {
-        return fields;
-    }
-
-    /**
-     * @param key Field name.
-     * @return Field value.
-     */
-    public Object getField(Object key) {
-        return fields.get(key);
-    }
-
-    @Override public Object call(Object o, Object... objects) {
-        System.out.println("!!!!CALL");
-        return null;
-    }
-
-    @Override public Object newObject(Object... objects) {
-        System.out.println("!!!!newObject");
-        return null;
-    }
-
-    @Override public Object eval(String s) {
-        System.out.println("!!!!eval");
-        return null;
-    }
-
-    @Override public Object getMember(String s) {
-        System.out.println("!!!!getMember + " + s);
-        return fields.get(s);
-    }
-
-    @Override public Object getSlot(int i) {
-        System.out.println("!!!!getSlot");
-        return null;
-    }
-
-    @Override public boolean hasMember(String s) {
-        System.out.println("!!!!hasMember");
-        return fields.containsKey(s);
-    }
-
-    @Override public boolean hasSlot(int i) {
-        System.out.println("!!!!hasSlot");
-        return false;
-    }
-
-    @Override public void removeMember(String s) {
-        System.out.println("!!!!removeMember");
-        fields.remove(s);
-    }
-
-    @Override public void setMember(String s, Object o) {
-        System.out.println("!!!!setMember");
-        fields.put(s, o);
-    }
-
-    @Override public void setSlot(int i, Object o) {
-        System.out.println("!!!!setSlot");
-
-    }
-
-    @Override public Set<String> keySet() {
-        System.out.println("!!!!keySet");
-        Set<String> keys = new HashSet<>();
-
-        for (Object o : fields.keySet()) {
-            if (!(o instanceof RestJSONCacheObject))
-                keys.add(o.toString());
-        }
-
-        return keys;
-    }
-
-    @Override public Collection<Object> values() {
-        System.out.println("!!!!values");
-        return fields.values();
-    }
-
-    @Override public boolean isInstance(Object o) {
-        System.out.println("!!!!isInstance");
-        return false;
-    }
-
-    @Override public boolean isInstanceOf(Object o) {
-        System.out.println("!!!!isInstanceOf");
-        return false;
-    }
-
-    @Override public String getClassName() {
-        System.out.println("!!!!getClassName");
-        return U.getSimpleName(RestJSONCacheObject.class);
-    }
-
-    @Override public boolean isFunction() {
-        System.out.println("!!!!isFunction");
-        return false;
-    }
-
-    @Override public boolean isStrictFunction() {
-        System.out.println("!!!!isStrictFunction");
-        return false;
-    }
-
-    @Override public boolean isArray() {
-        System.out.println("!!!!isArray");
-        return false;
-    }
-
-    @Override public double toNumber() {
-        return 0;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/ScriptingJSONCacheObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/ScriptingJSONCacheObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/ScriptingJSONCacheObject.java
new file mode 100644
index 0000000..8d446ba
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/scripting/ScriptingJSONCacheObject.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.handlers.scripting;
+
+import jdk.nashorn.api.scripting.*;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.json.*;
+
+import java.util.*;
+
+/**
+ * Json cache object.
+ */
+public class ScriptingJSONCacheObject implements JSObject {
+    /** Fields. */
+    private final JSONCacheObject fields;
+
+    /**
+     * @param o JSON object.
+     */
+    private ScriptingJSONCacheObject(JSONCacheObject o) {
+        fields = o;
+    }
+
+    /**
+     * @param o Object.
+     * @return Rest JSON cache object.
+     */
+    public static Object convertToRestObject(Object o) {
+        if (o instanceof JSONCacheObject)
+            return new ScriptingJSONCacheObject((JSONCacheObject)o);
+
+        return o;
+    }
+
+    /**
+     * @return Fields.
+     */
+    public Map<Object, Object> getFields() {
+        return fields;
+    }
+
+    /**
+     * @param key Field name.
+     * @return Field value.
+     */
+    public Object getField(Object key) {
+        return fields.get(key);
+    }
+
+    @Override public Object call(Object o, Object... objects) {
+        System.out.println("!!!!CALL");
+        return null;
+    }
+
+    @Override public Object newObject(Object... objects) {
+        System.out.println("!!!!newObject");
+        return null;
+    }
+
+    @Override public Object eval(String s) {
+        System.out.println("!!!!eval");
+        return null;
+    }
+
+    @Override public Object getMember(String s) {
+        System.out.println("!!!!getMember + " + s);
+        return fields.get(s);
+    }
+
+    @Override public Object getSlot(int i) {
+        System.out.println("!!!!getSlot");
+        return null;
+    }
+
+    @Override public boolean hasMember(String s) {
+        System.out.println("!!!!hasMember");
+        return fields.containsKey(s);
+    }
+
+    @Override public boolean hasSlot(int i) {
+        System.out.println("!!!!hasSlot");
+        return false;
+    }
+
+    @Override public void removeMember(String s) {
+        System.out.println("!!!!removeMember");
+        fields.remove(s);
+    }
+
+    @Override public void setMember(String s, Object o) {
+        System.out.println("!!!!setMember");
+        fields.put(s, o);
+    }
+
+    @Override public void setSlot(int i, Object o) {
+        System.out.println("!!!!setSlot");
+
+    }
+
+    @Override public Set<String> keySet() {
+        System.out.println("!!!!keySet");
+        Set<String> keys = new HashSet<>();
+
+        for (Object o : fields.keySet()) {
+            if (!(o instanceof ScriptingJSONCacheObject))
+                keys.add(o.toString());
+        }
+
+        return keys;
+    }
+
+    @Override public Collection<Object> values() {
+        System.out.println("!!!!values");
+        return fields.values();
+    }
+
+    @Override public boolean isInstance(Object o) {
+        System.out.println("!!!!isInstance");
+        return false;
+    }
+
+    @Override public boolean isInstanceOf(Object o) {
+        System.out.println("!!!!isInstanceOf");
+        return false;
+    }
+
+    @Override public String getClassName() {
+        System.out.println("!!!!getClassName");
+        return U.getSimpleName(ScriptingJSONCacheObject.class);
+    }
+
+    @Override public boolean isFunction() {
+        System.out.println("!!!!isFunction");
+        return false;
+    }
+
+    @Override public boolean isStrictFunction() {
+        System.out.println("!!!!isStrictFunction");
+        return false;
+    }
+
+    @Override public boolean isArray() {
+        System.out.println("!!!!isArray");
+        return false;
+    }
+
+    @Override public double toNumber() {
+        return 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java
deleted file mode 100644
index 1f6dfbc..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.scripting;
-
-import org.apache.ignite.*;
-import org.apache.ignite.internal.*;
-import org.apache.ignite.internal.processors.*;
-
-import javax.script.*;
-
-import static javax.script.ScriptContext.*;
-
-/**
- * Ignite scripting processor.
- */
-public class IgniteScriptProcessor extends GridProcessorAdapter {
-    /** Javascript engine name. */
-    public static final String JAVA_SCRIPT_ENGINE_NAME = "nashorn";
-
-    /** Javascript engine. */
-    private ScriptEngine jsEngine;
-
-    /**
-     * @param ctx Kernal context.
-     */
-    public IgniteScriptProcessor(GridKernalContext ctx) {
-        super(ctx);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void start() throws IgniteCheckedException {
-        ScriptEngineManager factory = new ScriptEngineManager();
-
-        jsEngine = factory.getEngineByName(JAVA_SCRIPT_ENGINE_NAME);
-
-        Bindings bind = jsEngine.createBindings();
-
-        bind.put("ignite", ctx.grid());
-
-        jsEngine.setBindings(bind, ENGINE_SCOPE);
-
-        String createJSFunction = "function __createJSFunction(mapFunc) {" +
-                "return eval('(function() { return ' + mapFunc.trim() + '})()'); }";
-
-        String internalCall = "function __internalCall(funcSource, arg1, arg2) { " +
-            "var func = __createJSFunction(funcSource); " +
-            "return func.apply(null, [arg1, arg2]); }";
-
-        String internalJSCall = "function __internalJSCall(funcSource, arg1, arg2) { " +
-                "var func = __createJSFunction(funcSource); " +
-                "return func.apply(null, [JSON.parse(arg1), arg2]); }";
-
-        addEngineFunction(createJSFunction);
-        addEngineFunction(internalCall);
-        addEngineFunction(internalJSCall);
-    }
-
-    /**
-     * Add function to scope.
-     *
-     * @param script Function script.
-     * @throws IgniteCheckedException If script failed.
-     */
-    public void addEngineFunction(String script)  throws IgniteCheckedException {
-        try {
-            jsEngine.eval(script);
-        }
-        catch (ScriptException e) {
-            throw new IgniteCheckedException("Script evaluation failed [script=" + script + "].", e);
-        }
-    }
-
-    /**
-     * Add binding.
-     *
-     * @param name Binding name.
-     * @param o Object to bind.
-     */
-    public void addBinding(String name, Object o) {
-        Bindings b = jsEngine.getBindings(ENGINE_SCOPE);
-
-        b.put(name, o);
-
-        jsEngine.setBindings(b, ENGINE_SCOPE);
-    }
-
-    /**
-     * @param src Script src.
-     * @return Result of the function.
-     * @throws IgniteCheckedException If script failed.
-     */
-    public Object invokeFunction(String src) throws IgniteCheckedException {
-        try {
-            return jsEngine.eval("(" + src + ")()");
-        }
-        catch (ScriptException e) {
-            throw new IgniteCheckedException("Function evaluation failed [funcName=" + src + "].");
-        }
-    }
-
-    /**
-     * @param src Script src.
-     * @param arg Argument.
-     * @return Result of the function.
-     * @throws IgniteCheckedException If script failed.
-     */
-    public Object invokeFunction(String src, Object arg) throws IgniteCheckedException {
-        return invokeFunction(src, arg, null);
-    }
-
-    /**
-     * @param src Script src.
-     * @param arg Argument.
-     * @return Result of the function.
-     * @throws IgniteCheckedException If script failed.
-     */
-    public Object invokeFunction(String src, Object arg, Object arg2) throws IgniteCheckedException {
-        try {
-            Invocable invocable = (Invocable) jsEngine;
-
-            return invocable.invokeFunction("__internalCall", src, arg, arg2);
-        }
-        catch (ScriptException e) {
-            throw new IgniteCheckedException("Function evaluation failed [funcName=" + src +
-                    ", err= " + e.getMessage() + "].");
-        }
-        catch (NoSuchMethodException e) {
-            throw new IgniteCheckedException("Cannot find function [func=__internalCall" +
-                    ", err= " + e.getMessage() + "].");
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
new file mode 100644
index 0000000..4224b22
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.scripting;
+
+import org.apache.ignite.*;
+import org.apache.ignite.internal.*;
+import org.apache.ignite.internal.processors.*;
+
+import javax.script.*;
+
+import static javax.script.ScriptContext.*;
+
+/**
+ * Ignite scripting processor.
+ */
+public class IgniteScriptingProcessor extends GridProcessorAdapter {
+    /** Javascript engine name. */
+    public static final String JAVA_SCRIPT_ENGINE_NAME = "nashorn";
+
+    /** Javascript engine. */
+    private ScriptEngine jsEngine;
+
+    /**
+     * @param ctx Kernal context.
+     */
+    public IgniteScriptingProcessor(GridKernalContext ctx) {
+        super(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void start() throws IgniteCheckedException {
+        ScriptEngineManager factory = new ScriptEngineManager();
+
+        jsEngine = factory.getEngineByName(JAVA_SCRIPT_ENGINE_NAME);
+
+        addBinding("ignite", new ScriptingJSIgnite(ctx.grid()));
+
+        String createJSFunction = "function __createJSFunction(mapFunc) {" +
+                "return eval('(function() { return ' + mapFunc.trim() + '})()'); }";
+
+        String internalCall = "function __internalCall(funcSource, arg1, arg2) { " +
+            "var func = __createJSFunction(funcSource); " +
+            "return func.apply(null, [arg1, arg2]); }";
+
+        String internalJSCall = "function __internalJSCall(funcSource, arg1, arg2) { " +
+                "var func = __createJSFunction(funcSource); " +
+                "return func.apply(null, [JSON.parse(arg1), arg2]); }";
+
+        String entryFunction = "CacheEntry = function(key, val) {" +
+            "this.key = key; this.value = val}";
+
+        addEngineFunction(entryFunction);
+        addEngineFunction(createJSFunction);
+        addEngineFunction(internalCall);
+        addEngineFunction(internalJSCall);
+    }
+
+    /**
+     * Add function to scope.
+     *
+     * @param script Function script.
+     * @throws IgniteCheckedException If script failed.
+     */
+    public void addEngineFunction(String script)  throws IgniteCheckedException {
+        try {
+            jsEngine.eval(script);
+        }
+        catch (ScriptException e) {
+            throw new IgniteCheckedException("Script evaluation failed [script=" + script + "].", e);
+        }
+    }
+
+    /**
+     * Add binding.
+     *
+     * @param name Binding name.
+     * @param o Object to bind.
+     */
+    public void addBinding(String name, Object o) {
+        Bindings b = jsEngine.getBindings(ENGINE_SCOPE);
+
+        b.put(name, o);
+
+        jsEngine.setBindings(b, ENGINE_SCOPE);
+    }
+
+    /**
+     * @param src Script src.
+     * @return Result of the function.
+     * @throws IgniteCheckedException If script failed.
+     */
+    public Object invokeFunction(String src) throws IgniteCheckedException {
+        try {
+            return jsEngine.eval("(" + src + ")()");
+        }
+        catch (ScriptException e) {
+            throw new IgniteCheckedException("Function evaluation failed [funcName=" + src + "].");
+        }
+    }
+
+    /**
+     * @param src Script src.
+     * @param arg Argument.
+     * @return Result of the function.
+     * @throws IgniteCheckedException If script failed.
+     */
+    public Object invokeFunction(String src, Object arg) throws IgniteCheckedException {
+        return invokeFunction(src, arg, null);
+    }
+
+    /**
+     * @param src Script src.
+     * @param arg Argument.
+     * @return Result of the function.
+     * @throws IgniteCheckedException If script failed.
+     */
+    public Object invokeFunction(String src, Object arg, Object arg2) throws IgniteCheckedException {
+        try {
+            Invocable invocable = (Invocable) jsEngine;
+
+            return invocable.invokeFunction("__internalCall", src, arg, arg2);
+        }
+        catch (ScriptException e) {
+            throw new IgniteCheckedException("Function evaluation failed [funcName=" + src +
+                    ", err= " + e.getMessage() + "].");
+        }
+        catch (NoSuchMethodException e) {
+            throw new IgniteCheckedException("Cannot find function [func=__internalCall" +
+                    ", err= " + e.getMessage() + "].");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java
deleted file mode 100644
index 8116fa0..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/JSONCacheObject.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.scripting;
-
-import java.util.*;
-
-/**
- * JSON cache object.
- */
-public class JSONCacheObject extends HashMap<Object, Object> {
-    /**
-     * Empty constructor.
-     */
-    public JSONCacheObject() {
-        // No-op.
-    }
-
-    /**
-     * @param o Map.
-     */
-    public JSONCacheObject(Map o) {
-        for (Object key : o.keySet())
-            addField(JSONCacheObject.toSimpleObject(key), JSONCacheObject.toSimpleObject(o.get(key)));
-    }
-
-    /**
-     * @param key Field name.
-     * @param val Field value.
-     */
-    public void addField(Object key, Object val) {
-        put(key, val);
-    }
-
-    /**
-     * @param key Field name.
-     * @return Field value.
-     */
-    public Object getField(Object key) {
-        return get(key);
-    }
-
-    /**
-     * Convert JSON object to RestJSONCacheObject
-     *
-     * @param o Object to convert.
-     * @return Converted object.
-     */
-    public static Object toSimpleObject(Object o) {
-        if (o == null)
-            return null;
-
-        if (o instanceof Map) {
-            Map o1 = (Map)o;
-
-            JSONCacheObject res = new JSONCacheObject();
-
-            for (Object key : o1.keySet())
-                res.addField(toSimpleObject(key), toSimpleObject(o1.get(key)));
-
-            return res;
-        }
-        else if (o instanceof List) {
-            List o1 = (List) o;
-
-            List<Object> val = new ArrayList<>();
-
-            for (Object v : o1)
-                val.add(toSimpleObject(v));
-
-            return val;
-        }
-        else if (o.getClass().isArray()) {
-            Object[] o1 = (Object[]) o;
-
-            List<Object> val = new ArrayList<>();
-
-            for (Object v : o1)
-                val.add(toSimpleObject(v));
-
-            return val;
-        }
-
-        return o;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof JSONCacheObject))
-            return false;
-
-        return super.equals(obj);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingCacheEntry.java
new file mode 100644
index 0000000..96c98d0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingCacheEntry.java
@@ -0,0 +1,59 @@
+package org.apache.ignite.internal.processors.scripting;
+
+
+import org.apache.ignite.internal.processors.rest.handlers.scripting.*;
+
+/**
+ * Scripting cache entry.
+ */
+public class ScriptingCacheEntry {
+    /** Key. */
+    private Object key;
+
+    /** Value. */
+    private Object val;
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     */
+    public ScriptingCacheEntry(Object key, Object val) {
+        if (key instanceof ScriptingJSONCacheObject)
+            this.key = ((ScriptingJSONCacheObject)key).getFields();
+        else
+            this.key = key;
+
+        if (val instanceof ScriptingJSONCacheObject)
+            this.val = ((ScriptingJSONCacheObject)val).getFields();
+        else
+            this.val = val;
+    }
+
+    /**
+     * @return Key.
+     */
+    public Object getKey() {
+        return key;
+    }
+
+    /**
+     * @param key Key.
+     */
+    public void setKey(Object key) {
+        this.key = key;
+    }
+
+    /**
+     * @return Value.
+     */
+    public Object getValue() {
+        return val;
+    }
+
+    /**
+     * @param val Value.
+     */
+    public void setValue(Object val) {
+        this.val = val;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingClusterNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingClusterNode.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingClusterNode.java
new file mode 100644
index 0000000..7c42274
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingClusterNode.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.scripting;
+
+import org.apache.ignite.cluster.*;
+
+/**
+ * Node js cluster node.
+ */
+public class ScriptingClusterNode {
+    /** Cluster node. */
+    private String id;
+
+    /**
+     * @param node Cluster node.
+     */
+    public ScriptingClusterNode(ClusterNode node) {
+       this.id = node.id().toString();
+    }
+
+    /**
+     * @return Node id.
+     */
+    public String id() {
+        return id;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJSIgnite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJSIgnite.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJSIgnite.java
new file mode 100644
index 0000000..1c89318
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJSIgnite.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.scripting;
+
+import org.apache.ignite.*;
+
+/**
+ * Node js ignite.
+ */
+public class ScriptingJSIgnite {
+    /** Ignite. */
+    private Ignite ignite;
+
+    /**
+     * @param ignite Ignite.
+     */
+    public ScriptingJSIgnite(Ignite ignite) {
+        this.ignite = ignite;
+    }
+
+    /**
+     * @param cache Cache name.
+     * @return Node js cache.
+     */
+    public ScriptingJsCache cache(String cache) {
+        return new ScriptingJsCache(ignite.cache(cache));
+    }
+
+    /**
+     * @param cache Cache name.
+     * @return Node js cache.
+     */
+    public ScriptingJsCache getOrCreateCache(String cache) {
+        return new ScriptingJsCache(ignite.getOrCreateCache(cache));
+    }
+
+    /**
+     * @return Local node.
+     */
+    public ScriptingClusterNode localNode() {
+        return new ScriptingClusterNode(ignite.cluster().localNode());
+    }
+
+    /**
+     * @return Ignite name.
+     */
+    public String name() {
+        return ignite.name();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
new file mode 100644
index 0000000..cc1dd18
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
@@ -0,0 +1,260 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.scripting;
+
+import org.apache.ignite.*;
+import org.apache.ignite.internal.processors.rest.handlers.scripting.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.json.*;
+
+import java.util.*;
+
+/**
+ * Scripting cache.
+ */
+public class ScriptingJsCache {
+    /** Ignite cache. */
+    private IgniteCache<Object, Object> cache;
+
+    /**
+     * @param cache Ignite cache.
+     */
+    public ScriptingJsCache(IgniteCache cache) {
+        this.cache = cache;
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     */
+    public void put(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        cache.put(cacheKey, cacheVal);
+    }
+
+    /**
+     * @param key Key.
+     */
+    public Object get(Object key) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+
+        return ScriptingJSONCacheObject.convertToRestObject(cache.get(cacheKey));
+    }
+
+    /**
+     * @param key Key
+     * @return True if cache contains key.
+     */
+    public boolean containsKey(Object key) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+
+        return cache.containsKey(cacheKey);
+    }
+
+    /**
+     * @param keys Keys
+     * @return True if cache contains key.
+     */
+    public boolean containsKeys(List keys) {
+        List<Object> cacheKeys = (List<Object>)JSONCacheObject.toSimpleObject(keys);
+
+        return cache.containsKeys(new HashSet<>(cacheKeys));
+    }
+
+    /**
+     * @param keys Keys.
+     * @return Cache entries.
+     */
+    public List<ScriptingCacheEntry> getAll(List keys) {
+        List cacheKeys = (List)JSONCacheObject.toSimpleObject(keys);
+
+        Map<Object, Object> entries = cache.getAll(new HashSet<>(cacheKeys));
+
+        List<ScriptingCacheEntry> res = new ArrayList<>();
+
+        for (Map.Entry<Object, Object> e : entries.entrySet())
+            res.add(new ScriptingCacheEntry(
+                ScriptingJSONCacheObject.convertToRestObject(e.getKey()),
+                ScriptingJSONCacheObject.convertToRestObject(e.getValue())));
+
+        return res;
+    }
+
+    /**
+     * @param keys Keys.
+     */
+    public void removeAll(List keys) {
+        List cacheKeys = (List)JSONCacheObject.toSimpleObject(keys);
+
+        cache.removeAll(new HashSet<>(cacheKeys));
+    }
+
+    /**
+     * @param entries Entries.
+     */
+    public void putAll(List entries) {
+        List cacheKeys = (List)JSONCacheObject.toSimpleObject(entries);
+
+        Map<Object, Object> cacheEntries = U.newHashMap(entries.size());
+
+        for (Object e : cacheKeys) {
+            JSONCacheObject e0 = (JSONCacheObject)e;
+            cacheEntries.put(e0.getField("key"), e0.getField("value"));
+        }
+
+        cache.putAll(cacheEntries);
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return Previous value.
+     */
+    public Object getAndPut(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        return ScriptingJSONCacheObject.convertToRestObject(cache.getAndPut(cacheKey, cacheVal));
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return Previous value.
+     */
+    public Object getAndReplace(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        Object o = ScriptingJSONCacheObject.convertToRestObject(cache.getAndReplace(cacheKey, cacheVal));
+
+        return o;
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return Previous value.
+     */
+    public Object getAndPutIfAbsent(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        return ScriptingJSONCacheObject.convertToRestObject(cache.getAndPutIfAbsent(cacheKey, cacheVal));
+    }
+
+    /**
+     * @param key Key.
+     * @return Previous value.
+     */
+    public Object getAndRemove(Object key) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+
+        return ScriptingJSONCacheObject.convertToRestObject(cache.getAndRemove(cacheKey));
+    }
+
+    /**
+     * @param key Key.
+     * @return If operation success.
+     */
+    public boolean remove(Object key) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+
+        return cache.remove(cacheKey);
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return If operation success.
+     */
+    public boolean removeValue(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        return cache.remove(cacheKey, cacheVal);
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return If operation success.
+     */
+    public boolean replace(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        return cache.replace(cacheKey, cacheVal);
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @param oldVal Old value.
+     * @return If operation success.
+     */
+    public boolean replaceValue(Object key, Object val, Object oldVal) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+        Object oldCacheVal = JSONCacheObject.toSimpleObject(oldVal);
+
+        return cache.replace(cacheKey, oldCacheVal, cacheVal);
+    }
+
+    /**
+     * Removes all from cache.
+     */
+    public void removeAllFromCache() {
+        cache.removeAll();
+    }
+
+    /**
+     * @param key Key.
+     * @param val Value.
+     * @return Previous value.
+     */
+    public Object putIfAbsent(Object key, Object val) {
+        Object cacheKey = JSONCacheObject.toSimpleObject(key);
+        Object cacheVal = JSONCacheObject.toSimpleObject(val);
+
+        return cache.putIfAbsent(cacheKey, cacheVal);
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getName() {
+        return cache.getName();
+    }
+
+    /**
+     * @return Local size.
+     */
+    public int localSize() {
+        return cache.localSize();
+    }
+
+    /**
+     * @return Size.
+     */
+    public int size() {
+        return cache.size();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/core/src/main/java/org/apache/ignite/json/JSONCacheObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/json/JSONCacheObject.java b/modules/core/src/main/java/org/apache/ignite/json/JSONCacheObject.java
new file mode 100644
index 0000000..9f1b601
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/json/JSONCacheObject.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.json;
+
+import java.util.*;
+
+/**
+ * JSON cache object.
+ */
+public class JSONCacheObject extends HashMap<Object, Object> {
+    /**
+     * Empty constructor.
+     */
+    public JSONCacheObject() {
+        // No-op.
+    }
+
+    /**
+     * @param o Map.
+     */
+    public JSONCacheObject(Map o) {
+        for (Object key : o.keySet())
+            addField(JSONCacheObject.toSimpleObject(key), JSONCacheObject.toSimpleObject(o.get(key)));
+    }
+
+    /**
+     * @param key Field name.
+     * @param val Field value.
+     */
+    public void addField(Object key, Object val) {
+        put(key, val);
+    }
+
+    /**
+     * @param key Field name.
+     * @return Field value.
+     */
+    public Object getField(Object key) {
+        return get(key);
+    }
+
+    /**
+     * Convert JSON object to RestJSONCacheObject
+     *
+     * @param o Object to convert.
+     * @return Converted object.
+     */
+    public static Object toSimpleObject(Object o) {
+        if (o == null)
+            return null;
+
+        if (o instanceof Map) {
+            Map o1 = (Map)o;
+
+            JSONCacheObject res = new JSONCacheObject();
+
+            for (Object key : o1.keySet())
+                res.addField(toSimpleObject(key), toSimpleObject(o1.get(key)));
+
+            return res;
+        }
+        else if (o instanceof List) {
+            List o1 = (List) o;
+
+            List<Object> val = new ArrayList<>();
+
+            for (Object v : o1)
+                val.add(toSimpleObject(v));
+
+            return val;
+        }
+        else if (o.getClass().isArray()) {
+            Object[] o1 = (Object[]) o;
+
+            List<Object> val = new ArrayList<>();
+
+            for (Object v : o1)
+                val.add(toSimpleObject(v));
+
+            return val;
+        }
+
+        return o;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object obj) {
+        if (obj == null || !(obj instanceof JSONCacheObject))
+            return false;
+
+        return super.equals(obj);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java
deleted file mode 100644
index cd55500..0000000
--- a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal;
-
-/**
- * Test node js client put/get.
- */
-public class NodeJsCacheApiSelfTest extends NodeJsAbstractTest {
-    /**
-     * Constructor.
-     */
-    public NodeJsCacheApiSelfTest() {
-        super("test-cache-api.js");
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        startGrid(0);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        stopAllGrids();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        grid(0).cache(NodeJsAbstractTest.CACHE_NAME).removeAll();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutGet() throws Exception {
-        runJsScript("testPutGet");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutGetObject() throws Exception {
-        runJsScript("testPutGetObject");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testIncorrectCache() throws Exception {
-        runJsScript("testIncorrectCacheName");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetOrCreateCacheName() throws Exception {
-        runJsScript("testGetOrCreateCacheName");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemove() throws Exception {
-        runJsScript("testRemove");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveNoKey() throws Exception {
-        runJsScript("testRemoveNoKey");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveAll() throws Exception {
-        runJsScript("testRemoveAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutAllGetAll() throws Exception {
-        runJsScript("testPutAllGetAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutAllObjectGetAll() throws Exception {
-        runJsScript("testPutAllObjectGetAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveAllObjectGetAll() throws Exception {
-        runJsScript("testRemoveAllObjectGetAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testContains() throws Exception {
-        runJsScript("testContains");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutContains() throws Exception {
-        runJsScript("testPutContains");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutContainsAll() throws Exception {
-        runJsScript("testPutContainsAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testNotContainsAll() throws Exception {
-        runJsScript("testNotContainsAll");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetAndPut() throws Exception {
-        runJsScript("testGetAndPut");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetAndPutIfAbsent() throws Exception {
-        runJsScript("testGetAndPutIfAbsent");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutIfAbsent() throws Exception {
-        runJsScript("testPutIfAbsent");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetAndRemove() throws Exception {
-        runJsScript("testGetAndRemove");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveValue() throws Exception {
-        runJsScript("testRemoveValue");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveAllFromCache() throws Exception {
-        runJsScript("testRemoveAllFromCache");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplace() throws Exception {
-        runJsScript("testReplace");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testIncorrectReplaceObject() throws Exception {
-        runJsScript("testIncorrectReplaceObject");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplaceObject() throws Exception {
-        runJsScript("testReplaceObject");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetAndReplaceObject() throws Exception {
-        runJsScript("testGetAndReplaceObject");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplaceValueObject() throws Exception {
-        runJsScript("testReplaceValueObject");
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testSize() throws Exception {
-        runJsScript("testSize");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/nodejs/src/test/java/org/apache/ignite/internal/ScriptingJsCacheApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/ScriptingJsCacheApiSelfTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/ScriptingJsCacheApiSelfTest.java
new file mode 100644
index 0000000..445d6d3
--- /dev/null
+++ b/modules/nodejs/src/test/java/org/apache/ignite/internal/ScriptingJsCacheApiSelfTest.java
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+/**
+ * Test node js client put/get.
+ */
+public class ScriptingJsCacheApiSelfTest extends NodeJsAbstractTest {
+    /**
+     * Constructor.
+     */
+    public ScriptingJsCacheApiSelfTest() {
+        super("test-cache-api.js");
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        startGrid(0);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        grid(0).cache(NodeJsAbstractTest.CACHE_NAME).removeAll();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutGet() throws Exception {
+        runJsScript("testPutGet");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutGetObject() throws Exception {
+        runJsScript("testPutGetObject");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIncorrectCache() throws Exception {
+        runJsScript("testIncorrectCacheName");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetOrCreateCacheName() throws Exception {
+        runJsScript("testGetOrCreateCacheName");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemove() throws Exception {
+        runJsScript("testRemove");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveNoKey() throws Exception {
+        runJsScript("testRemoveNoKey");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveAll() throws Exception {
+        runJsScript("testRemoveAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutAllGetAll() throws Exception {
+        runJsScript("testPutAllGetAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutAllObjectGetAll() throws Exception {
+        runJsScript("testPutAllObjectGetAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveAllObjectGetAll() throws Exception {
+        runJsScript("testRemoveAllObjectGetAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testContains() throws Exception {
+        runJsScript("testContains");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutContains() throws Exception {
+        runJsScript("testPutContains");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutContainsAll() throws Exception {
+        runJsScript("testPutContainsAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNotContainsAll() throws Exception {
+        runJsScript("testNotContainsAll");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndPut() throws Exception {
+        runJsScript("testGetAndPut");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndPutIfAbsent() throws Exception {
+        runJsScript("testGetAndPutIfAbsent");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutIfAbsent() throws Exception {
+        runJsScript("testPutIfAbsent");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndRemove() throws Exception {
+        runJsScript("testGetAndRemove");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveValue() throws Exception {
+        runJsScript("testRemoveValue");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveAllFromCache() throws Exception {
+        runJsScript("testRemoveAllFromCache");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReplace() throws Exception {
+        runJsScript("testReplace");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIncorrectReplaceObject() throws Exception {
+        runJsScript("testIncorrectReplaceObject");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReplaceObject() throws Exception {
+        runJsScript("testReplaceObject");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndReplaceObject() throws Exception {
+        runJsScript("testGetAndReplaceObject");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReplaceValueObject() throws Exception {
+        runJsScript("testReplaceValueObject");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSize() throws Exception {
+        runJsScript("testSize");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/nodejs/src/test/java/org/apache/ignite/testsuites/IgniteNodeJsTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/java/org/apache/ignite/testsuites/IgniteNodeJsTestSuite.java b/modules/nodejs/src/test/java/org/apache/ignite/testsuites/IgniteNodeJsTestSuite.java
index f6ab879..c52799c 100644
--- a/modules/nodejs/src/test/java/org/apache/ignite/testsuites/IgniteNodeJsTestSuite.java
+++ b/modules/nodejs/src/test/java/org/apache/ignite/testsuites/IgniteNodeJsTestSuite.java
@@ -32,7 +32,7 @@ public class IgniteNodeJsTestSuite extends TestSuite {
         TestSuite suite = new TestSuite("Ignite Node JS Test Suite");
 
         suite.addTest(new TestSuite(NodeJsIgnitionSelfTest.class));
-        suite.addTest(new TestSuite(NodeJsCacheApiSelfTest.class));
+        suite.addTest(new TestSuite(ScriptingJsCacheApiSelfTest.class));
         suite.addTest(new TestSuite(NodeJsSecretKeySelfTest.class));
         suite.addTest(new TestSuite(NodeJsComputeSelfTest.class));
         suite.addTest(new TestSuite(NodeJsIgniteSelfTest.class));

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38239701/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index cad7cc2..3d662e5 100644
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -27,6 +27,7 @@ import org.apache.ignite.internal.processors.rest.request.*;
 import org.apache.ignite.internal.processors.scripting.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.json.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.plugin.security.*;
 import org.eclipse.jetty.server.*;
@@ -330,10 +331,10 @@ public class GridJettyRestHandler extends AbstractHandler {
         if (cmd == CACHE_GET_ALL) {
             Map o = (Map)cmdRes.getResponse();
 
-            List<RestEntry> res = new ArrayList<>();
+            List<ScriptingCacheEntry> res = new ArrayList<>();
 
             for (Object k : o.keySet())
-                res.add(new RestEntry(k, o.get(k)));
+                res.add(new ScriptingCacheEntry(k, o.get(k)));
 
             cmdRes.setResponse(res);
 
@@ -341,8 +342,8 @@ public class GridJettyRestHandler extends AbstractHandler {
         else {
             Object o = cmdRes.getResponse();
 
-            if (o instanceof RestJSONCacheObject)
-                cmdRes.setResponse(((RestJSONCacheObject)o).getFields());
+            if (o instanceof ScriptingJSONCacheObject)
+                cmdRes.setResponse(((ScriptingJSONCacheObject)o).getFields());
         }
     }