Add Java processBuilder demo

This commit is contained in:
Hui, Chunyang 2021-06-03 02:48:21 +00:00 committed by Zongmin.Gu
parent 41bbb3763d
commit c4d2d8b802
5 changed files with 75 additions and 2 deletions

@ -103,7 +103,13 @@ jobs:
run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && occlum-javac ./hello_world/Main.java" run: docker exec java_support_test bash -c "cd /root/occlum/demos/java && occlum-javac ./hello_world/Main.java"
- name: Run hello world - 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: Fish_test:
runs-on: ubuntu-18.04 runs-on: ubuntu-18.04

@ -288,6 +288,12 @@ jobs:
- name: Run hello world - name: Run hello world
run: docker exec $java_support_test bash -c "cd /root/occlum/demos/java && ./run_java_on_occlum.sh hello" 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 - name: Clean the environment
if: ${{ always() }} if: ${{ always() }}
run: docker stop $java_support_test run: docker stop $java_support_test

@ -50,3 +50,23 @@ curl http://localhost:8080
in another terminal. 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/). 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
```

@ -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() { show_usage() {
echo "Error: invalid arguments" echo "Error: invalid arguments"
echo "Usage: $0 web_app/hello" echo "Usage: $0 web_app/hello/processBuilder"
exit 1 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 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 arg=$1
case "$arg" in case "$arg" in
web_app) web_app)
@ -80,6 +103,9 @@ case "$arg" in
hello) hello)
run_hello run_hello
;; ;;
processBuilder)
run_processBuilder
;;
*) *)
show_usage show_usage
esac esac