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