Skip to content

Commit 1267fe1

Browse files
committed
replace threadlocal
1 parent 83ddc61 commit 1267fe1

File tree

9 files changed

+47
-37
lines changed

9 files changed

+47
-37
lines changed

.gitignore

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
ui/node_modules/
2-
src/main/resources/static/
3-
out/
4-
build/
5-
gradle/
6-
.gradle/
1+
ui/node_modules
2+
src/main/resources/static
3+
out
4+
build
5+
gradle
6+
.gradle
77
gradlew*
8-
**/.idea/
8+
**/.idea
99
**/*.log*
1010
**/*.ipr
1111
**/*.iml

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ build
55

66
```fish
77
gradle ui build
8+
bash build/libs/*.jar
89
```
910

1011
backend development

build.gradle

+5
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,8 @@ build.shouldRunAfter ui
3838
task wrapper(type: Wrapper) {
3939
gradleVersion = '3.0'
4040
}
41+
42+
// bash build/libs/*.jar
43+
springBoot {
44+
executable = true
45+
}

src/main/java/daggerok/react/React.java

+17-15
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package daggerok.react;
22

3-
import jdk.nashorn.api.scripting.NashornScriptEngine;
43
import lombok.SneakyThrows;
54
import lombok.val;
65
import org.springframework.stereotype.Component;
76

87
import javax.annotation.PostConstruct;
8+
import javax.script.Invocable;
99
import javax.script.ScriptEngineManager;
1010
import java.io.InputStreamReader;
1111
import java.io.Reader;
@@ -16,31 +16,33 @@
1616
@Component
1717
public class React {
1818

19-
private ThreadLocal<NashornScriptEngine> engineHolder;
19+
private Invocable nashorn;
2020

21+
@SneakyThrows
2122
@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;
3431
}
3532

3633
@SneakyThrows
3734
public String renderApp() {
3835

39-
val html = engineHolder.get().invokeFunction("renderServer");
36+
val html = call("renderServer");
4037

4138
return String.valueOf(html);
4239
}
4340

41+
@SneakyThrows
42+
public Object call(String function, Object... arguments) {
43+
return nashorn.invokeFunction(function, arguments);
44+
}
45+
4446
@SneakyThrows
4547
private Reader read(String path) {
4648

src/main/resources/nashorn/polyfill.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
var window = this;
2-
var global = this;
32
var console = {};
43

54
console.error = print;

src/main/resources/templates/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<body>
88
<!-- 1) render data from backend server side (see daggerok.react.ReactServerSideRenderingController.index) -->
99
<div id="app">{{{data}}}</div>
10-
<script type="text/javascript" src="/app.js"></script>
11-
<!-- 2) up and running dynamic part of site after it static initial page pf app was loader -->
10+
<script src="/app.js"></script>
11+
<!-- 2) up and running dynamic part of application after it static initial page was loader -->
1212
<script type="text/javascript">
1313
$(function() {
1414
renderClient();

ui/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"json-server": "*",
4848
"less": "*",
4949
"less-loader": "*",
50-
"npm-run-all": "^3.1.0",
50+
"npm-run-all": "*",
5151
"opn-cli": "*",
5252
"postcss-loader": "*",
5353
"rimraf": "*",

ui/src/assets/index.hbs

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
<head>
44
<meta charset="UTF-8">
55
<title>fast-react-starter</title>
6+
{{htmlWebpackPlugin.options.files.css}}
67
</head>
78
<body>
8-
<div id="app"></div>
9-
<!--
9+
<!-- 1) render data from backend server side (see daggerok.react.ReactServerSideRenderingController.index) -->
10+
<div id="app">{{{data}}}</div>
11+
{{htmlWebpackPlugin.options.files.js}}
12+
<!-- 2) up and running dynamic part of application after it static initial page was loader -->
1013
<script type="text/javascript">
11-
$(function () {
14+
$(function() {
15+
// renderClient({{response}});
1216
renderClient();
1317
});
1418
</script>
15-
-->
1619
</body>
1720
</html>

ui/src/main.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ class App extends Component {
4040
}
4141
}
4242

43-
window.renderClient = function() {
44-
// const renderClient = (comments) => {
45-
// const data = comments || [];
43+
global.renderClient = function() {
44+
// const renderClient = (data) => {
45+
// const data = data || [];
4646
return render(
4747
<Router history={browserHistory}>
4848
<Route path="/" component={App}>
@@ -56,10 +56,10 @@ window.renderClient = function() {
5656
};
5757

5858
import { renderToString } from 'react-dom/server'
59-
window.renderServer = function() {
60-
// const renderServer = (comments) => {
61-
// const data = Java.from(comments);
62-
return renderToString(<App><NotFound/></App>);
59+
global.renderServer = function() {
60+
// const renderServer = (data) => {
61+
// const data = Java.from(data);
62+
return renderToString(<App><Main/></App>);
6363
};
6464

6565
import $ from 'jquery';

0 commit comments

Comments
 (0)