engines = new ConcurrentHashMap<>();
-
- /**
- * 获取脚本引擎
- *
- * @param type 脚本类型
- * @return 脚本引擎
- */
- public ScriptEngine getEngine(String type) {
- // 从缓存中获取引擎
- return engines.computeIfAbsent(type, this::createEngine);
- }
-
- /**
- * 创建脚本引擎
- *
- * @param type 脚本类型
- * @return 脚本引擎
- */
- private ScriptEngine createEngine(String type) {
- try {
- if (JsScriptEngine.TYPE.equals(type)) {
- log.info("创建 GraalJS 脚本引擎");
- return new JsScriptEngine(new JsSandbox());
- }
-
- log.warn("不支持的脚本类型: {}", type);
- return null;
- } catch (Exception e) {
- log.error("创建脚本引擎 [{}] 失败: {}", type, e.getMessage(), e);
- throw new RuntimeException("创建脚本引擎失败: " + e.getMessage(), e);
- }
- }
-
- /**
- * 释放指定类型的引擎资源
- *
- * @param type 脚本类型
- */
- public void releaseEngine(String type) {
- ScriptEngine engine = engines.remove(type);
- if (engine instanceof AutoCloseable) {
- try {
- ((AutoCloseable) engine).close();
- log.info("已释放脚本引擎资源: {}", type);
- } catch (Exception e) {
- log.warn("释放脚本引擎 [{}] 资源时发生错误: {}", type, e.getMessage());
- }
- }
- }
-
- /**
- * 清理所有引擎资源
- */
- public void releaseAllEngines() {
- engines.keySet().forEach(this::releaseEngine);
- log.info("已清理所有脚本引擎资源");
- }
-
- @Override
- public void destroy() {
- log.info("应用关闭,释放所有脚本引擎资源...");
- releaseAllEngines();
- }
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/script/example/GraalJsExample.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/script/example/GraalJsExample.java
deleted file mode 100644
index 636f96b72d..0000000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/script/example/GraalJsExample.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package cn.iocoder.yudao.module.iot.script.example;
-
-import cn.hutool.core.map.MapUtil;
-import cn.iocoder.yudao.module.iot.script.context.DefaultScriptContext;
-import cn.iocoder.yudao.module.iot.script.context.ScriptContext;
-import cn.iocoder.yudao.module.iot.script.service.ScriptService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-// TODO @haohao:搞到 test 里面哈;
-/**
- * GraalJS 脚本引擎示例
- *
- * 展示了如何使用 GraalJS 脚本引擎的各种功能
- */
-@Slf4j
-@Component
-public class GraalJsExample {
-
- @Autowired
- private ScriptService scriptService;
-
- /**
- * 执行简单的 JavaScript 脚本
- *
- * @return 执行结果
- */
- public Object executeSimpleScript() {
- // 简单的脚本内容
- String script = "var result = a + b; result;";
-
- // 创建参数
- Map params = MapUtil.newHashMap();
- params.put("a", 10);
- params.put("b", 20);
-
- // 执行脚本
- return scriptService.executeJavaScript(script, params);
- }
-
- /**
- * 执行现代 JavaScript 语法(ES6+)
- *
- * @return 执行结果
- */
- public Object executeModernJavaScript() {
- // 使用现代 JavaScript 语法
- String script = "// 使用箭头函数\n" +
- "const add = (a, b) => a + b;\n" +
- "\n" +
- "// 使用解构赋值\n" +
- "const {c, d} = params;\n" +
- "\n" +
- "// 使用模板字符串\n" +
- "const result = `计算结果: ${add(c, d)}`;\n" +
- "\n" +
- "// 使用可选链操作符\n" +
- "const value = params?.e?.value ?? 'default';\n" +
- "\n" +
- "// 返回一个对象\n" +
- "({\n" +
- " sum: add(c, d),\n" +
- " message: result,\n" +
- " defaultValue: value\n" +
- "})";
-
- // 创建参数
- Map params = MapUtil.newHashMap();
- params.put("params", MapUtil.builder()
- .put("c", 30)
- .put("d", 40)
- .build());
-
- // 执行脚本
- return scriptService.executeJavaScript(script, params);
- }
-
- /**
- * 执行带错误处理的脚本
- *
- * @return 执行结果
- */
- public Object executeWithErrorHandling() {
- // 包含错误处理的脚本
- String script = "try {\n" +
- " // 故意制造错误\n" +
- " if (!nonExistentVar) {\n" +
- " throw new Error('手动抛出的错误');\n" +
- " }\n" +
- "} catch (error) {\n" +
- " console.error('捕获到错误: ' + error.message);\n" +
- " return { success: false, error: error.message };\n" +
- "}\n" +
- "\n" +
- "return { success: true, data: 'No error' };";
-
- // 执行脚本
- return scriptService.executeJavaScript(script, MapUtil.newHashMap());
- }
-
- /**
- * 演示超时控制
- *
- * @return 执行结果
- */
- public Object executeWithTimeout() {
- // 这个脚本会导致无限循环
- String script = "// 无限循环\n" +
- "var counter = 0;\n" +
- "while(true) {\n" +
- " counter++;\n" +
- " if (counter % 1000000 === 0) {\n" +
- " console.log('Still running: ' + counter);\n" +
- " }\n" +
- "}\n" +
- "return counter;";
-
- // 使用 CompletableFuture 和超时控制
- CompletableFuture