回答編集履歴

1

同一のJVMで、との前提がありましたね。取り消します。

2020/01/28 12:07

投稿

shiketa
shiketa

スコア3971

test CHANGED
@@ -1,145 +1 @@
1
- WASから起動するとどうなるのか、そのあたりはよくよく御検討ください。いいかわるいかは気にせず、実装してみました。
2
-
3
-
4
-
5
- システムプロパティを共有、というか、親プログラムのシステムプロパティを引き継いで、単に子プログラムを実行したい、というはなしであれば、javaコマンド使って子プログラムを動かせばいいでしょう。
6
-
7
-
8
-
9
- ```java
10
-
11
- import java.io.BufferedReader;
12
-
13
- import java.io.InputStreamReader;
14
-
15
- import java.util.ArrayList;
1
+ 同一のJVMで、との前提がありましたね。取り消します。
16
-
17
- import java.util.Arrays;
18
-
19
- import java.util.List;
20
-
21
- import java.util.UUID;
22
-
23
- import java.util.stream.Collectors;
24
-
25
-
26
-
27
- public class MainApp {
28
-
29
- public static void main(final String[] args) throws Exception {
30
-
31
- // 親側でシステムプロパティを追加する
32
-
33
- for (int i = 0; i < 10; i++) {
34
-
35
- final String key = String.format("xx.%s", UUID.randomUUID().toString());
36
-
37
- final String value = String.format("%s", key.hashCode());
38
-
39
- System.setProperty(key, value);
40
-
41
- }
42
-
43
-
44
-
45
- //
46
-
47
- String classPath = System.getProperty("java.class.path");
48
-
49
- // System.out.println(classPath);
50
-
51
-
52
-
53
- final List<String> cmd = new ArrayList<>();
54
-
55
- cmd.addAll(Arrays.asList("java", "-cp", classPath));
56
-
57
- // 子に渡すシステムプロパティを取得する
58
-
59
- System.getProperties().keySet().stream()
60
-
61
- .map(it -> it.toString())
62
-
63
- .filter(it -> it.startsWith("xx."))
64
-
65
- .forEach(key ->
66
-
67
- cmd.add(String.format("-D%s=%s", key, System.getProperty(key))));
68
-
69
- cmd.add(SubApp.class.getName());
70
-
71
-
72
-
73
- System.out.println(cmd.stream().collect(Collectors.joining(" ")));
74
-
75
-
76
-
77
- // 子を起動
78
-
79
- final Process proc = Runtime.getRuntime().exec(cmd.toArray(new String[0]));
80
-
81
- System.out.println(proc);
82
-
83
- proc.waitFor();
84
-
85
-
86
-
87
- {
88
-
89
- BufferedReader br = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
90
-
91
- while (br.ready()) {
92
-
93
- System.out.println(String.format("err: %s", br.readLine()));
94
-
95
- }
96
-
97
- }
98
-
99
-
100
-
101
- {
102
-
103
- BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
104
-
105
- while (br.ready()) {
106
-
107
- System.out.println(String.format("out: %s", br.readLine()));
108
-
109
- }
110
-
111
- }
112
-
113
- System.out.println(proc.exitValue());
114
-
115
- }
116
-
117
-
118
-
119
- //
120
-
121
- public static class SubApp {
122
-
123
- public static void main(final String[] args) throws Exception {
124
-
125
- System.out.println(SubApp.class);
126
-
127
- System.getProperties().keySet().stream()
128
-
129
- .map(it -> it.toString())
130
-
131
- .filter(it -> it.startsWith("xx."))
132
-
133
- .forEach(key -> {
134
-
135
- System.out.println(String.format("%s = <%s>", key, System.getProperty(key)));
136
-
137
- });
138
-
139
- }
140
-
141
- }
142
-
143
- }
144
-
145
- ```