Browse Source

init

master
lizw-2015 6 months ago
parent
commit
670e4ee137
  1. 1
      servo/src/main/java/com/yvan/workbench/StartWorkbench.java
  2. 49
      servo/src/main/java/com/yvan/workbench/controller/JsDemo.java

1
servo/src/main/java/com/yvan/workbench/StartWorkbench.java

@ -19,6 +19,7 @@ import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
)
public class StartWorkbench {
public static void main(String[] args) {
System.setProperty("polyglot.engine.WarnInterpreterOnly", "false");
SpringApplication application = new SpringApplication(StartWorkbench.class);
application.run(args);
}

49
servo/src/main/java/com/yvan/workbench/controller/JsDemo.java

@ -1,4 +1,53 @@
package com.yvan.workbench.controller;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.clever.core.AppShutdownHook;
import org.clever.core.Conv;
import org.clever.js.api.ScriptEngineInstance;
import org.clever.js.api.ScriptObject;
import org.clever.js.api.folder.FileSystemFolder;
import org.clever.js.api.folder.Folder;
import org.clever.js.api.pool.GenericEngineInstancePool;
import org.clever.js.graaljs.pool.GraalSingleEngineFactory;
import org.clever.js.graaljs.utils.InteropScriptToJavaUtils;
import org.clever.web.mvc.annotation.RequestBody;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;
import java.io.File;
import java.time.Duration;
import java.util.Map;
public class JsDemo {
private static final GenericEngineInstancePool<Context, Value> pool;
static {
String basePath = new File("./yvan-lcc-bench/servo/src/test/resources/javascript").getAbsolutePath();
Folder rootFolder = FileSystemFolder.createRootPath(basePath);
// 创建对象池配置
GenericObjectPoolConfig<ScriptEngineInstance<Context, Value>> config = new GenericObjectPoolConfig<>();
config.setMaxWait(Duration.ofMillis(-1));
config.setMaxTotal(8);
config.setMinIdle(2);
// 创建对象工厂
GraalSingleEngineFactory factory = GraalSingleEngineFactory.create(rootFolder);
// 创建对象池
pool = new GenericEngineInstancePool<>(factory, config);
AppShutdownHook.addShutdownHook(() -> {
factory.close();
pool.close();
});
}
public static Object runJs(@RequestBody Map<String, Object> params) throws Exception {
String jsCode = Conv.asString(params.get("jsCode"));
ScriptEngineInstance<Context, Value> engineInstance = pool.borrowObject();
try {
ScriptObject<Value> fun = engineInstance.wrapFunction(jsCode);
Object res = fun.execute();
return InteropScriptToJavaUtils.INSTANCE.toJavaObject(res);
} finally {
pool.returnObject(engineInstance);
}
}
}

Loading…
Cancel
Save