13.2. 创建服务器脚本

创建自定义脚本并将其添加到 Data Grid 服务器中。

13.2.1. 服务器脚本

Data Grid 服务器脚本基于 javax.script API,兼容任何基于 JVM 的 ScriptEngine 实施。

hello World 脚本示例

以下是在单个 Data Grid 服务器上运行的简单示例,具有一个参数,并使用 JavaScript:

// mode=local,language=javascript,parameters=[greetee]
"Hello " + greetee

运行前面的脚本时,您将传递 greetee 参数的值,Data Grid 返回 "Hello ${value}"

13.2.1.1. 脚本元数据

元数据提供有关在运行脚本时数据网格服务器使用的脚本的附加信息。

脚本元数据是添加到脚本第一行中的注释的 property=value 对,如下例所示:

// name=test, language=javascript
// mode=local, parameters=[a,b,c]
  • 使用与脚本语言(//;;, #)匹配的注释样式。
  • 使用逗号分隔 property=value 对。
  • 使用单引号(')或双引号(")分隔值。

表 13.1. 元数据属性

属性描述

模式

定义执行模式并具有以下值:

local 仅处理请求的节点执行该脚本。虽然脚本仍然可以调用集群操作。

分布式 数据网格使用集群 executors 在节点间运行脚本。

语言

指定执行脚本的 ScriptEngine。

extension

指定文件名扩展作为设置 ScriptEngine 的替代方法。

role

指定用户必须执行脚本的角色。

parameters

指定此脚本的有效参数名称数组。指定此列表中不包含的参数的调用会导致异常。

datatype

(可选)设置用于存储数据的 MediaType (MIME 类型),以及参数和返回值。此属性仅适用于仅支持特定数据格式的远程客户端。

目前,您只能设置 text/plain;charset=utf-8 使用 String UTF-8 格式进行数据。

13.2.1.2. 脚本绑定

Data Grid 将内部对象公开为脚本执行的绑定。

绑定描述

缓存

指定运行脚本的缓存。

marshaller

指定用于将数据序列化到缓存的 marshaller。

cacheManager

指定缓存的 cacheManager

scriptingManager

指定运行脚本的脚本管理器的实例。您可以使用此绑定从脚本运行其他脚本。

13.2.1.3. 脚本参数

借助 Data Grid,您可以将命名参数作为运行脚本的绑定传递。

参数是 name,value 对,其中 name 是字符串,value 是 marshaller 可以解释的任何值。

以下示例脚本有两个参数,即 multiplicandmultiplier。脚本采用 multiplicand 的值,并将该值乘以 倍数

// mode=local,language=javascript
multiplicand * multiplier

运行前面的脚本时,Data Grid 会以表达式评估的结果进行响应。

13.2.2. 将脚本添加到 Data Grid 服务器

使用命令行界面向 Data Grid 服务器添加脚本。

前提条件

Data Grid 服务器将脚本存储在 ___script_cache 缓存中。如果启用缓存授权,用户必须有 CREATE 权限才能添加到 ___script_cache 中。

如果使用默认授权设置,请至少为用户分配 deployer 角色。

流程

  1. 根据需要定义脚本。

    例如,创建一个名为 multiplication.js 的文件,该文件在单一 Data Grid 服务器上运行,有两个参数,并使用 JavaScript 来多次使用给定值:

    // mode=local,language=javascript
    multiplicand * multiplier
  2. 创建与 Data Grid 的 CLI 连接。
  3. 使用 task 命令上传脚本,如下例所示:

    [//containers/default]> task upload --file=multiplication.js multiplication
  4. 验证您的脚本是否可用。

    [//containers/default]> ls tasks
    multiplication

13.2.3. 以编程方式创建脚本

使用 Hot Rod RemoteCache 接口添加脚本,如下例所示:

RemoteCache<String, String> scriptCache = cacheManager.getCache("___script_cache");
scriptCache.put("multiplication.js",
  "// mode=local,language=javascript\n" +
  "multiplicand * multiplier\n");