|
1 | 1 | package daggerok.react;
|
2 | 2 |
|
3 |
| -import jdk.nashorn.api.scripting.NashornScriptEngine; |
4 | 3 | import lombok.SneakyThrows;
|
5 | 4 | import lombok.val;
|
6 | 5 | import org.springframework.stereotype.Component;
|
7 | 6 |
|
8 | 7 | import javax.annotation.PostConstruct;
|
| 8 | +import javax.script.Invocable; |
9 | 9 | import javax.script.ScriptEngineManager;
|
10 | 10 | import java.io.InputStreamReader;
|
11 | 11 | import java.io.Reader;
|
|
16 | 16 | @Component
|
17 | 17 | public class React {
|
18 | 18 |
|
19 |
| - private ThreadLocal<NashornScriptEngine> engineHolder; |
| 19 | + private Invocable nashorn; |
20 | 20 |
|
| 21 | + @SneakyThrows |
21 | 22 | @PostConstruct
|
22 |
| - public void init() { |
23 |
| - |
24 |
| - val nashornScriptEngine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn"); |
25 |
| - |
26 |
| - engineHolder = new ThreadLocal<NashornScriptEngine>() { |
27 |
| - @Override @SneakyThrows |
28 |
| - protected NashornScriptEngine initialValue() { |
29 |
| - nashornScriptEngine.eval(read("nashorn/polyfill.js")); |
30 |
| - nashornScriptEngine.eval(read("static/app.js")); |
31 |
| - return nashornScriptEngine; |
32 |
| - } |
33 |
| - }; |
| 23 | + private void init() { |
| 24 | + // val engine = new ScriptEngineManager().getEngineByExtension("js"); |
| 25 | + val engine = new ScriptEngineManager().getEngineByName("nashorn"); |
| 26 | + |
| 27 | + engine.eval(read("nashorn/polyfill.js")); |
| 28 | + engine.eval(read("static/app.js")); |
| 29 | + |
| 30 | + this.nashorn = (Invocable) engine; |
34 | 31 | }
|
35 | 32 |
|
36 | 33 | @SneakyThrows
|
37 | 34 | public String renderApp() {
|
38 | 35 |
|
39 |
| - val html = engineHolder.get().invokeFunction("renderServer"); |
| 36 | + val html = call("renderServer"); |
40 | 37 |
|
41 | 38 | return String.valueOf(html);
|
42 | 39 | }
|
43 | 40 |
|
| 41 | + @SneakyThrows |
| 42 | + public Object call(String function, Object... arguments) { |
| 43 | + return nashorn.invokeFunction(function, arguments); |
| 44 | + } |
| 45 | + |
44 | 46 | @SneakyThrows
|
45 | 47 | private Reader read(String path) {
|
46 | 48 |
|
|
0 commit comments