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