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"
|
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
|
||||||
|
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
|
- 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
|
||||||
|
```
|
||||||
|
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() {
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user