Add Java processBuilder demo
This commit is contained in:
parent
41bbb3763d
commit
c4d2d8b802
8
.github/workflows/demo_test.yml
vendored
8
.github/workflows/demo_test.yml
vendored
@ -103,7 +103,13 @@ jobs:
|
||||
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && occlum-javac ./hello_world/Main.java"
|
||||
|
||||
- name: Run hello world
|
||||
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && SGX_MODE=SIM ./run_java_on_occlum.sh hello" &
|
||||
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && SGX_MODE=SIM ./run_java_on_occlum.sh hello"
|
||||
|
||||
- name: Compile processBuilder demo
|
||||
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && occlum-javac ./processBuilder/processBuilder.java"
|
||||
|
||||
- name: Run processBuilder
|
||||
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && SGX_MODE=SIM ./run_java_on_occlum.sh processBuilder"
|
||||
|
||||
Fish_test:
|
||||
runs-on: ubuntu-18.04
|
||||
|
6
.github/workflows/hw_mode_test.yml
vendored
6
.github/workflows/hw_mode_test.yml
vendored
@ -288,6 +288,12 @@ jobs:
|
||||
- name: Run hello world
|
||||
run: docker exec $java_support_test bash -c "cd /root/occlum/demos/java && ./run_java_on_occlum.sh hello"
|
||||
|
||||
- name: Compile processBuilder demo
|
||||
run: docker exec $java_support_test bash -c "cd /root/occlum/demos/java && occlum-javac ./processBuilder/processBuilder.java"
|
||||
|
||||
- name: Run processBuilder
|
||||
run: docker exec $java_support_test bash -c "cd /root/occlum/demos/java && SGX_MODE=SIM ./run_java_on_occlum.sh processBuilder"
|
||||
|
||||
- name: Clean the environment
|
||||
if: ${{ always() }}
|
||||
run: docker stop $java_support_test
|
||||
|
@ -50,3 +50,23 @@ curl http://localhost:8080
|
||||
in another terminal.
|
||||
|
||||
It is recommended to access the web application in a Web browser. You have to manually map port 8080 of the Docker container to a port on the host OS. Check out how to use [the `-p` argument of `docker run` command](https://docs.docker.com/engine/reference/commandline/run/).
|
||||
|
||||
# Demo: ProcessBuilder application
|
||||
This demo shows that Occlum has enabled support for `ProcessBuilder` class and multiprocess in Java.
|
||||
|
||||
# How to Run
|
||||
Step 1: Compile the source code with `occlum-javac`
|
||||
```
|
||||
occlum-javac ./processBuilder/processBuilder.java
|
||||
```
|
||||
When completed, the resulting file can be found at `./processBuilder/processBuilder.java`.
|
||||
|
||||
Try to run it on native Linux with:
|
||||
```
|
||||
cd processBuilder && occlum-java processBuilder
|
||||
```
|
||||
|
||||
Step 2: Start JVM to run the processBuilder demo
|
||||
```
|
||||
./run_java_on_occlum.sh processBuilder
|
||||
```
|
||||
|
15
demos/java/processBuilder/processBuilder.java
Normal file
15
demos/java/processBuilder/processBuilder.java
Normal file
@ -0,0 +1,15 @@
|
||||
import java.io.IOException;
|
||||
|
||||
public class processBuilder {
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
|
||||
ProcessBuilder pb = new ProcessBuilder("date");
|
||||
Process process = pb.start();
|
||||
|
||||
String result = new String(process.getInputStream().readAllBytes());
|
||||
System.out.printf("%s", result);
|
||||
|
||||
var ret = process.waitFor();
|
||||
System.out.printf("Child process exited with code: %d\n", ret);
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ NC='\033[0m'
|
||||
|
||||
show_usage() {
|
||||
echo "Error: invalid arguments"
|
||||
echo "Usage: $0 web_app/hello"
|
||||
echo "Usage: $0 web_app/hello/processBuilder"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@ -72,6 +72,29 @@ run_hello() {
|
||||
occlum run /usr/lib/jvm/java-11-alibaba-dragonwell/jre/bin/java -Xmx512m -XX:-UseCompressedOops -XX:MaxMetaspaceSize=64m -Dos.name=Linux Main
|
||||
}
|
||||
|
||||
build_processBuilder() {
|
||||
# Copy JVM and class file into Occlum instance and build
|
||||
mkdir -p image/usr/lib/jvm
|
||||
cp -r /opt/occlum/toolchains/jvm/java-11-alibaba-dragonwell image/usr/lib/jvm
|
||||
cp /usr/local/occlum/x86_64-linux-musl/lib/libz.so.1 image/lib
|
||||
cp ../${app} image
|
||||
cp /bin/date image/bin/
|
||||
# Need bigger user space size for multiprocess
|
||||
new_json="$(jq '.resource_limits.user_space_size = "6000MB"' Occlum.json)" && \
|
||||
echo "${new_json}" > Occlum.json
|
||||
occlum build
|
||||
}
|
||||
|
||||
run_processBuilder() {
|
||||
app=./processBuilder/processBuilder.class
|
||||
check_file_exist ${app}
|
||||
init_instance
|
||||
build_processBuilder
|
||||
echo -e "${BLUE}occlum run JVM processBuilder${NC}"
|
||||
occlum run /usr/lib/jvm/java-11-alibaba-dragonwell/jre/bin/java -Xmx512m -XX:-UseCompressedOops -XX:MaxMetaspaceSize=64m -Dos.name=Linux \
|
||||
-Djdk.lang.Process.launchMechanism=posix_spawn processBuilder
|
||||
}
|
||||
|
||||
arg=$1
|
||||
case "$arg" in
|
||||
web_app)
|
||||
@ -80,6 +103,9 @@ case "$arg" in
|
||||
hello)
|
||||
run_hello
|
||||
;;
|
||||
processBuilder)
|
||||
run_processBuilder
|
||||
;;
|
||||
*)
|
||||
show_usage
|
||||
esac
|
||||
|
Loading…
Reference in New Issue
Block a user