├── .gitignore ├── README.md ├── installs ├── .gitkeep └── README.md ├── projects ├── greeting-javaee │ ├── .gitignore │ ├── LICENSE │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ ├── ApplicationConfig.java │ │ │ ├── Greeting.java │ │ │ └── GreetingEndpoint.java │ │ └── webapp │ │ └── WEB-INF │ │ └── jboss-web.xml ├── greeting-spring-boot │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── example │ │ └── demo │ │ ├── BoosterApplication.java │ │ └── service │ │ ├── Greeting.java │ │ ├── GreetingController.java │ │ └── GreetingProperties.java ├── greeting-spring │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ ├── BoosterApplication.java │ │ │ ├── ServletInitializer.java │ │ │ └── service │ │ │ ├── Greeting.java │ │ │ ├── GreetingController.java │ │ │ └── GreetingProperties.java │ │ └── webapp │ │ └── WEB-INF │ │ └── jboss-web.xml ├── greeting-thorntail │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── example │ │ └── demo │ │ └── rest │ │ ├── HelloWorldEndpoint.java │ │ └── RestApplication.java ├── greeting-vertx │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── example │ │ └── demo │ │ └── App.java └── pom.xml ├── run.sh └── ttfr.sh /.gitignore: -------------------------------------------------------------------------------- 1 | performance.txt 2 | warmup.txt 3 | installs/*.zip 4 | target/* 5 | *.log 6 | .vscode/* 7 | .vscode 8 | .classpath 9 | .project 10 | .settings 11 | .idea 12 | *.iml 13 | .DS_Store 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Modern Java Runtimes Basic Performance 2 | ============================== 3 | This project contains several applications written using a collection of modern Java-based runtimes. It is intended to use this for rough 4 | comparisons of app disk footprint, memory, and throughput for basic "Hello World"-type applications using the default settings for each of the runtimes. 5 | 6 | This is not a rigorous test of all application performance characteristics, and is not intended to be the "final say" in runtime performance - careful tuning based on expected workloads must be done. 7 | 8 | Scenarios Included 9 | ---------------------- 10 | * [Red Hat JBoss EAP](https://developers.redhat.com/products/eap/overview/) 7.2 using a basic [Java EE 8](https://www.oracle.com/technetwork/java/javaee/overview/index.html) REST application 11 | * [Red Hat JBoss EAP](https://developers.redhat.com/products/eap/overview/) 7.2 using a basic [Spring](https://spring.io/) REST application 12 | * [Red Hat JBoss Web Server](https://developers.redhat.com/products/webserver/overview/) 5.0 (based on [Apache Tomcat](https://tomcat.apache.org/index.html) 9.x) using a basic Spring REST application 13 | * [Spring Boot](https://spring.io/projects/spring-boot) 2.x REST application deployed as a Fat JAR 14 | * [Eclipse Vert.x](https://vertx.io/) 3.6 REST application deployed as a Fat JAR 15 | * [Thorntail](https://thorntail.io/) 2.3 REST application deployed as a Fat JAR 16 | 17 | Prerequisites 18 | ---------------------- 19 | To run these commands you need: 20 | 21 | - A Bash or Bourne Shell console (e.g. on Linux or Mac) 22 | - A Java development environment (JDK 8 or greater, such as [Red Hat OpenJDK](https://developers.redhat.com/products/openjdk/overview/)) with commands like `java`, `javac`, `jconsole` on your `$PATH` 23 | - Typical web development utilities [`curl`](https://curl.haxx.se/), `unzip` on your `$PATH` 24 | - [Maven](https://maven.apache.org) 3.5.3+ 25 | - [Apache Bench](https://httpd.apache.org/docs/2.4/programs/ab.html) 2.3+ 26 | - To test JBoss products, you'll need to download and copy production zip files to the `installs/` directory. See the [`installs/README.md`](installs/README.md) for more detail on which zip files you'll need. 27 | 28 | Running the tests 29 | ------------------ 30 | Clone this repo using [`git`](https://git-scm.com/) or some other [Git](https://git-scm.com/)-compatible environment, and then run the following command to output the available tests: 31 | 32 | ```sh 33 | ./run.sh 34 | Valid commands: 35 | run.sh spring-boot # [Runs as a Spring Boot Fat JAR] 36 | run.sh vertx # [Runs as a Eclipse Vert.x Fat JAR] 37 | run.sh jws # [Runs JBoss Web Server] 38 | run.sh thorntail # [Runs Thorntail] 39 | run.sh jboss-eap-spring # [Runs JBoss EAP with Spring app] 40 | run.sh jboss-eap-javaee # [Runs JBoss EAP with Java EE app] 41 | run.sh kill-all # [Stops all servers] 42 | ``` 43 | 44 | Each test will: 45 | 46 | 1. Install any necessary products 47 | 1. Start the server or Fat JAR 48 | 1. Open `jconsole` (you'll need to accept the _Insecure Connection_ Dialog box) 49 | 1. Run a warm-up test 50 | 1. Run the actual performance using Apache Bench with the specified iterations and concurrency specified at the top of `run.sh` 51 | 1. Wait for the test to finish 52 | 1. Stop the server or Fat JAR 53 | 54 | After the test completes, you can find throughput information in `performance.txt` and log files from various runtimes in `*.log`. You can also watch the memory and other VM usage patterns in JConsole. 55 | 56 | -------------------------------------------------------------------------------- /installs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tqvarnst/eap-vs-tomcat-vs-spring-boot/53fd6d2923349699ca260f3234faceeb2b61eb8f/installs/.gitkeep -------------------------------------------------------------------------------- /installs/README.md: -------------------------------------------------------------------------------- 1 | Product Downloads 2 | ==================== 3 | 4 | To run performance tests on JBoss products, download the following zip files from the [Red Hat Customer Portal](https://access.redhat.com/downloads/): 5 | 6 | - `jboss-eap-7.2.0.zip` - JBoss Enterprise Application Server 7.2.0 7 | - `jws-application-server-5.0.0.zip` - JBoss Web Server 5.0 8 | 9 | Place these `.zip` files in this directory before running the tests. -------------------------------------------------------------------------------- /projects/greeting-javaee/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .idea 3 | *.iml 4 | -------------------------------------------------------------------------------- /projects/greeting-javaee/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /projects/greeting-javaee/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 22 | 4.0.0 23 | com.example.demo 24 | greeting-javaee 25 | 1.0.0 26 | war 27 | Greeting App Java EE 28 | Greetings application implemented in Java EE and JAX-RS 29 | 30 | 31 | javax 32 | javaee-api 33 | 8.0 34 | provided 35 | 36 | 37 | 38 | ${project.artifactId} 39 | 40 | 41 | maven-war-plugin 42 | 43 | false 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /projects/greeting-javaee/src/main/java/com/example/demo/ApplicationConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | * 17 | */ 18 | 19 | package com.example.demo; 20 | 21 | import javax.ws.rs.ApplicationPath; 22 | import javax.ws.rs.core.Application; 23 | 24 | /** 25 | * Resource entry point 26 | */ 27 | @ApplicationPath("/") 28 | public class ApplicationConfig extends Application { 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /projects/greeting-javaee/src/main/java/com/example/demo/Greeting.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | * 17 | */ 18 | package com.example.demo; 19 | 20 | public class Greeting { 21 | 22 | private final String content; 23 | 24 | public Greeting() { 25 | this.content = null; 26 | } 27 | 28 | public Greeting(String content) { 29 | this.content = content; 30 | } 31 | 32 | public String getContent() { 33 | return content; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /projects/greeting-javaee/src/main/java/com/example/demo/GreetingEndpoint.java: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | * 17 | */ 18 | package com.example.demo; 19 | 20 | import javax.ws.rs.GET; 21 | import javax.ws.rs.Path; 22 | import javax.ws.rs.Produces; 23 | import javax.ws.rs.QueryParam; 24 | 25 | @Path("/") 26 | public class GreetingEndpoint { 27 | 28 | private static final String template = "Hello, %s!"; 29 | 30 | @GET 31 | @Path("/") 32 | @Produces("application/json") 33 | public Greeting greeting(@QueryParam("name") String name) { 34 | String suffix = name != null ? name : "World"; 35 | return new Greeting(String.format(template, suffix)); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /projects/greeting-javaee/src/main/webapp/WEB-INF/jboss-web.xml: -------------------------------------------------------------------------------- 1 | 2 | / 3 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ 2 | .idea 3 | *.iml 4 | target 5 | 6 | # Eclipse 7 | .metadata 8 | .settings 9 | .classpath 10 | .project 11 | bin 12 | tmp 13 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/README.md: -------------------------------------------------------------------------------- 1 | http://appdev-stage.openshift.io/docs/spring-boot-runtime.html#mission-http-api-spring-boot-tomcat 2 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | 4.0.0 21 | com.example.demo 22 | greeting-spring-boot 23 | 1.0.0 24 | Greeting App - Spring Boot 25 | A Spring Boot REST Example 26 | 27 | 2.0.3.RELEASE 28 | 29 | 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-starter-parent 34 | ${spring-boot.version} 35 | pom 36 | import 37 | 38 | 39 | 40 | 41 | 42 | org.springframework.boot 43 | spring-boot-starter-web 44 | 45 | 46 | org.springframework.boot 47 | spring-boot-starter-tomcat 48 | 49 | 50 | 51 | ${project.artifactId} 52 | 53 | 54 | org.springframework.boot 55 | spring-boot-maven-plugin 56 | ${spring-boot.version} 57 | 58 | 59 | 60 | repackage 61 | 62 | 63 | 64 | 65 | 66 | org.apache.maven.plugins 67 | maven-compiler-plugin 68 | 69 | 8 70 | 8 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/src/main/java/com/example/demo/BoosterApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | *

4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo; 17 | 18 | import org.springframework.boot.SpringApplication; 19 | import org.springframework.boot.autoconfigure.SpringBootApplication; 20 | 21 | @SpringBootApplication 22 | public class BoosterApplication { 23 | 24 | public static void main(String[] args) { 25 | SpringApplication.run(BoosterApplication.class, args); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/src/main/java/com/example/demo/service/Greeting.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo.service; 17 | 18 | public class Greeting { 19 | 20 | private final String content; 21 | 22 | public Greeting() { 23 | this.content = null; 24 | } 25 | 26 | public Greeting(String content) { 27 | this.content = content; 28 | } 29 | 30 | public String getContent() { 31 | return content; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/src/main/java/com/example/demo/service/GreetingController.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo.service; 17 | 18 | import org.springframework.beans.factory.annotation.Autowired; 19 | import org.springframework.web.bind.annotation.RequestMapping; 20 | import org.springframework.web.bind.annotation.RequestParam; 21 | import org.springframework.web.bind.annotation.RestController; 22 | 23 | @RestController 24 | public class GreetingController { 25 | 26 | private final GreetingProperties properties; 27 | 28 | @Autowired 29 | public GreetingController(GreetingProperties properties) { 30 | this.properties = properties; 31 | } 32 | 33 | @RequestMapping("/") 34 | public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 35 | String message = String.format(properties.getMessage(), name); 36 | return new Greeting(message); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /projects/greeting-spring-boot/src/main/java/com/example/demo/service/GreetingProperties.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.demo.service; 18 | 19 | import org.springframework.boot.context.properties.ConfigurationProperties; 20 | import org.springframework.stereotype.Component; 21 | 22 | @Component 23 | @ConfigurationProperties("greeting") 24 | public class GreetingProperties { 25 | 26 | private String message = "Hello, %s!"; 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /projects/greeting-spring/.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ 2 | .idea 3 | *.iml 4 | target 5 | 6 | # Eclipse 7 | .metadata 8 | .settings 9 | .classpath 10 | .project 11 | bin 12 | tmp 13 | -------------------------------------------------------------------------------- /projects/greeting-spring/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /projects/greeting-spring/README.md: -------------------------------------------------------------------------------- 1 | http://appdev-stage.openshift.io/docs/spring-boot-runtime.html#mission-http-api-spring-boot-tomcat 2 | -------------------------------------------------------------------------------- /projects/greeting-spring/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | 4.0.0 21 | com.example.demo 22 | greeting-spring 23 | 1.0.0 24 | war 25 | Greeting App - Spring 26 | A Spring REST Example 27 | 28 | 2.0.3.RELEASE 29 | 30 | 31 | 32 | 33 | org.springframework.boot 34 | spring-boot-starter-parent 35 | ${spring-boot.version} 36 | pom 37 | import 38 | 39 | 40 | 41 | 42 | 43 | org.springframework.boot 44 | spring-boot-starter-web 45 | 46 | 47 | org.springframework.boot 48 | spring-boot-starter-tomcat 49 | provided 50 | 51 | 52 | 53 | ${project.artifactId} 54 | 55 | 56 | org.springframework.boot 57 | spring-boot-maven-plugin 58 | ${spring-boot.version} 59 | 60 | 61 | maven-war-plugin 62 | 2.4 63 | 64 | false 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/java/com/example/demo/BoosterApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | *

4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo; 17 | 18 | import org.springframework.boot.SpringApplication; 19 | import org.springframework.boot.autoconfigure.SpringBootApplication; 20 | 21 | @SpringBootApplication 22 | public class BoosterApplication { 23 | 24 | public static void main(String[] args) { 25 | SpringApplication.run(BoosterApplication.class, args); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/java/com/example/demo/ServletInitializer.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 5 | 6 | public class ServletInitializer extends SpringBootServletInitializer { 7 | 8 | @Override 9 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 10 | return application.sources(BoosterApplication.class); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/java/com/example/demo/service/Greeting.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo.service; 17 | 18 | public class Greeting { 19 | 20 | private final String content; 21 | 22 | public Greeting() { 23 | this.content = null; 24 | } 25 | 26 | public Greeting(String content) { 27 | this.content = content; 28 | } 29 | 30 | public String getContent() { 31 | return content; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/java/com/example/demo/service/GreetingController.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.demo.service; 17 | 18 | import org.springframework.beans.factory.annotation.Autowired; 19 | import org.springframework.web.bind.annotation.RequestMapping; 20 | import org.springframework.web.bind.annotation.RequestParam; 21 | import org.springframework.web.bind.annotation.RestController; 22 | 23 | @RestController 24 | public class GreetingController { 25 | 26 | private final GreetingProperties properties; 27 | 28 | @Autowired 29 | public GreetingController(GreetingProperties properties) { 30 | this.properties = properties; 31 | } 32 | 33 | @RequestMapping("/") 34 | public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 35 | String message = String.format(properties.getMessage(), name); 36 | return new Greeting(message); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/java/com/example/demo/service/GreetingProperties.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2017 Red Hat, Inc, and individual contributors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.demo.service; 18 | 19 | import org.springframework.boot.context.properties.ConfigurationProperties; 20 | import org.springframework.stereotype.Component; 21 | 22 | @Component 23 | @ConfigurationProperties("greeting") 24 | public class GreetingProperties { 25 | 26 | private String message = "Hello, %s!"; 27 | 28 | public String getMessage() { 29 | return message; 30 | } 31 | 32 | public void setMessage(String message) { 33 | this.message = message; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /projects/greeting-spring/src/main/webapp/WEB-INF/jboss-web.xml: -------------------------------------------------------------------------------- 1 | 2 | / 3 | -------------------------------------------------------------------------------- /projects/greeting-thorntail/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | com.example 6 | greeting 7 | Thorntail Example 8 | 1.0.0-SNAPSHOT 9 | war 10 | 11 | 12 | 2.3.0.Final 13 | 1.8 14 | 1.8 15 | false 16 | UTF-8 17 | 18 | 19 | 20 | 21 | 22 | io.thorntail 23 | bom-all 24 | ${version.thorntail} 25 | import 26 | pom 27 | 28 | 29 | 30 | 31 | 32 | greeting 33 | 34 | 35 | io.thorntail 36 | thorntail-maven-plugin 37 | ${version.thorntail} 38 | 39 | 40 | 41 | 42 | package 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | io.thorntail 54 | jaxrs 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /projects/greeting-thorntail/src/main/java/com/example/demo/rest/HelloWorldEndpoint.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.rest; 2 | 3 | 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.core.Response; 6 | import javax.ws.rs.GET; 7 | import javax.ws.rs.Produces; 8 | 9 | 10 | @Path("/") 11 | public class HelloWorldEndpoint { 12 | 13 | @GET 14 | @Produces("text/plain") 15 | public Response doGet() { 16 | return Response.ok("Hello from Thorntail!").build(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /projects/greeting-thorntail/src/main/java/com/example/demo/rest/RestApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.rest; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/") 7 | public class RestApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /projects/greeting-vertx/.gitignore: -------------------------------------------------------------------------------- 1 | performance.txt 2 | warmup.txt 3 | installs/*.zip 4 | target/* 5 | *.log 6 | .vscode/* 7 | .vscode 8 | .classpath 9 | .project 10 | .settings 11 | .idea 12 | *.iml 13 | .DS_Store 14 | -------------------------------------------------------------------------------- /projects/greeting-vertx/pom.xml: -------------------------------------------------------------------------------- 1 | 5 | 4.0.0 6 | com.example.demo 7 | greeting-vertx 8 | Vert.x - FAT 9 | 1.0.0 10 | 11 | 12 | 3.6.3 13 | 1.0.18 14 | com.example.demo.App 15 | UTF-8 16 | 17 | 18 | 19 | 20 | io.vertx 21 | vertx-dependencies 22 | ${vertx.version} 23 | pom 24 | import 25 | 26 | 27 | 28 | 29 | 30 | io.vertx 31 | vertx-core 32 | ${vertx.version} 33 | 34 | 35 | io.vertx 36 | vertx-web 37 | ${vertx.version} 38 | 39 | 40 | 41 | 42 | 43 | 44 | maven-compiler-plugin 45 | 3.3 46 | 47 | 1.8 48 | 1.8 49 | 50 | 51 | 52 | io.reactiverse 53 | vertx-maven-plugin 54 | ${vertx-maven-plugin.version} 55 | 56 | 57 | vmp 58 | 59 | initialize 60 | package 61 | 62 | 63 | 64 | 65 | true 66 | 67 | 68 | 69 | org.apache.maven.plugins 70 | maven-shade-plugin 71 | 3.2.1 72 | 73 | 74 | package 75 | 76 | shade 77 | 78 | 79 | 80 | 82 | 83 | io.vertx.core.Launcher 84 | com.example.demo.App 85 | 86 | 87 | 88 | 89 | ${project.build.directory}/${project.artifactId}.jar 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /projects/greeting-vertx/src/main/java/com/example/demo/App.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import io.vertx.core.AbstractVerticle; 4 | import io.vertx.core.json.JsonObject; 5 | import io.vertx.ext.web.Router; 6 | import io.vertx.ext.web.RoutingContext; 7 | import io.vertx.ext.web.handler.StaticHandler; 8 | 9 | import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE; 10 | 11 | public class App extends AbstractVerticle { 12 | 13 | static final String TEMPLATE = "Hello from Vert.x Fat JAR, %s!"; 14 | 15 | @Override 16 | public void start() { 17 | 18 | Router router = Router.router(vertx); 19 | 20 | router.get("/").handler(this::greeting); 21 | 22 | vertx.createHttpServer().requestHandler(router::accept).listen(8080); 23 | 24 | System.out.println("THE HTTP APPLICATION HAS STARTED"); 25 | } 26 | 27 | private void greeting(RoutingContext rc) { 28 | String name = rc.request().getParam("name"); 29 | if (name == null) { 30 | name = "World"; 31 | } 32 | 33 | JsonObject response = new JsonObject() 34 | .put("content", String.format(TEMPLATE, name)); 35 | 36 | rc.response() 37 | .putHeader(CONTENT_TYPE, "application/json; charset=utf-8") 38 | .end(response.encode()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /projects/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | com.example.demo 5 | demo-parent 6 | 1.0.0 7 | pom 8 | 9 | Example projects using different frameworks 10 | 11 | 12 | 1.7 13 | 3.0.0 14 | UTF-8 15 | 16 | true 17 | true 18 | 19 | 20 | 21 | greeting-javaee 22 | greeting-spring 23 | greeting-spring-boot 24 | 25 | 26 | 27 | 28 | 29 | org.apache.maven.plugins 30 | maven-compiler-plugin 31 | 3.6.1 32 | 33 | ${java.min.version} 34 | ${java.min.version} 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | RED=$(tput setaf 1) 4 | GREEN=$(tput setaf 2) 5 | NORMAL=$(tput sgr0) 6 | col=$(tput cols) 7 | 8 | BASEDIR=$(dirname $0) 9 | NUM_OF_KILO_CALLS=200 10 | NUM_OF_USERS=50 11 | NUM_OF_CALLS=$((NUM_OF_KILO_CALLS*1000)) 12 | URL=http://127.0.0.1:8080/ 13 | JBOSS_EAP_ZIP_FILE=jboss-eap-7.2.0.zip 14 | JBOSS_WS_ZIP_FILE=jws-application-server-5.0.0.zip 15 | 16 | 17 | function action { 18 | IFS='%' 19 | local __actionstr=$1 20 | local __action=$2 21 | local __actionstrlenght=${#__actionstr} 22 | 23 | printf ${__actionstr} 24 | 25 | let __spaces=${col}-${__actionstrlenght} 26 | 27 | eval ${__action} 28 | 29 | if [ $? -eq 0 ]; then 30 | printf '%s%*s%s' "$GREEN" $__spaces "[OK]" "$NORMAL" 31 | else 32 | printf '%s%*s%s' "$RED" $__spaces "[FAIL]" "$NORMAL" 33 | fi 34 | printf "\n" 35 | 36 | } 37 | 38 | function mvn_build_project { 39 | local __app_name=${1} 40 | local __project_dir="$BASEDIR/projects/${__app_name}" 41 | mvn -q -f ${__project_dir}/pom.xml -DskipTests clean package 42 | 43 | } 44 | 45 | function start_spring_app { 46 | local __app_name=${1} 47 | local __app_path="$BASEDIR/projects/${__app_name}/target/${__app_name}.jar" 48 | java -jar $__app_path > $BASEDIR/spring.log & 49 | until $(curl -s $URL > /dev/null 2>&1) 50 | do 51 | sleep 1 52 | done 53 | } 54 | 55 | function start_thorntail_app { 56 | local __app_name=${1} 57 | local __app_path="$BASEDIR/projects/${__app_name}/target/${__app_name}.jar" 58 | java -jar $__app_path > $BASEDIR/thorntail.log & 59 | until $(curl -s $URL > /dev/null 2>&1) 60 | do 61 | sleep 1 62 | done 63 | } 64 | 65 | function start_vertx_app { 66 | local __app_name=${1} 67 | local __app_path="$BASEDIR/projects/${__app_name}/target/${__app_name}.jar" 68 | java -jar $__app_path > $BASEDIR/vertx.log & 69 | until $(curl -s $URL > /dev/null 2>&1) 70 | do 71 | sleep 1 72 | done 73 | } 74 | 75 | function open_jconsole { 76 | local __app_name=${1} 77 | jconsole $(jps -l | grep ${__app_name} | grep -v grep | awk '{ print $1 }') & 78 | } 79 | 80 | function install_eap { 81 | mkdir -p target 82 | test -d $BASEDIR/target/jboss-eap-7.2.0 && rm -rf $BASEDIR/target/jboss-eap-7.2.0 83 | unzip -q $BASEDIR/installs/$JBOSS_EAP_ZIP_FILE -d target 84 | pushd target/jboss-eap-7* > /dev/null 85 | sh bin/add-user.sh -s -u admin -p admin-123 86 | sh bin/jboss-cli.sh --commands="embed-server,/subsystem=undertow/configuration=handler/file=welcome-content:remove()" > /dev/null 87 | popd > /dev/null 88 | } 89 | 90 | function install_jws { 91 | mkdir -p target 92 | test -d $BASEDIR/target/jws-5.0 && rm -rf $BASEDIR/target/jws-5.0 93 | unzip -q $BASEDIR/installs/$JBOSS_WS_ZIP_FILE -d target 94 | rm -rf target/jws-5*/tomcat/webapps/ROOT* 95 | } 96 | 97 | function start_eap { 98 | pushd target/jboss-eap-7* > /dev/null 99 | sh bin/standalone.sh > /dev/null 2>&1 & 100 | until $(curl -s $URL > /dev/null 2>&1) 101 | do 102 | sleep 1 103 | done 104 | popd > /dev/null 105 | } 106 | 107 | function start_jws { 108 | pushd target/jws-5* > /dev/null 109 | sh tomcat/bin/catalina.sh run > /dev/null 2>&1 & 110 | until $(curl -s $URL > /dev/null 2>&1) 111 | do 112 | sleep 1 113 | done 114 | popd > /dev/null 115 | } 116 | 117 | function deploy_war { 118 | local __app_name=${1} 119 | local __warfile="$BASEDIR/projects/${__app_name}/target/${__app_name}.war" 120 | local __fullpath_warfile="$(cd $(dirname $__warfile) && pwd)/$(basename $__warfile)" 121 | pushd target/jboss-eap-7* > /dev/null 122 | bin/jboss-cli.sh -c --command="deploy $__fullpath_warfile" | grep -iq "success" 123 | popd > /dev/null 124 | } 125 | 126 | function deploy_war_jws { 127 | local __app_name=${1} 128 | local __warfile="$BASEDIR/projects/${__app_name}/target/${__app_name}.war" 129 | local __fullpath_warfile="$(cd $(dirname $__warfile) && pwd)/$(basename $__warfile)" 130 | pushd target/jws-5* > /dev/null 131 | cp "$__fullpath_warfile" tomcat/webapps/ROOT.war 132 | popd > /dev/null 133 | } 134 | 135 | function run_springboot { 136 | local __project="greeting-spring-boot" 137 | local __app_name=${__project} 138 | 139 | action "Build project ${__project}" "mvn_build_project ${__project}" 140 | 141 | action "Waiting for spring boot to start" "start_spring_app ${__project}" 142 | 143 | action "Open Java Console" "open_jconsole ${__app_name}" 144 | 145 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 146 | 147 | action "Waiting for the warmup to cool off" "sleep 10" 148 | 149 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 150 | 151 | action "Waiting for the performance test to cool off" "sleep 30" 152 | 153 | action "Stopping the server" "kill $(ps -ef | grep ${__app_name} | grep -v grep | awk '{ print $2 }') > /dev/null" 154 | } 155 | 156 | function run_thorntail { 157 | local __project="greeting-thorntail" 158 | local __app_name=${__project} 159 | 160 | action "Build project ${__project}" "mvn_build_project ${__project}" 161 | 162 | action "Waiting for Thorntail to start" "start_thorntail_app ${__project}" 163 | 164 | action "Open Java Console" "open_jconsole ${__app_name}" 165 | 166 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 167 | 168 | action "Waiting for the warmup to cool off" "sleep 10" 169 | 170 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 171 | 172 | action "Waiting for the performance test to cool off" "sleep 30" 173 | 174 | action "Stopping the server" "kill $(ps -ef | grep ${__app_name} | grep -v grep | awk '{ print $2 }') > /dev/null" 175 | } 176 | 177 | function run_vertx { 178 | local __project="greeting-vertx" 179 | local __app_name=${__project} 180 | 181 | action "Build project ${__project}" "mvn_build_project ${__project}" 182 | 183 | action "Waiting for vertx to start" "start_vertx_app ${__project}" 184 | 185 | action "Open Java Console" "open_jconsole ${__app_name}" 186 | 187 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 188 | 189 | action "Waiting for the warmup to cool off" "sleep 10" 190 | 191 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 192 | 193 | action "Waiting for the performance test to cool off" "sleep 30" 194 | 195 | action "Stopping the server" "kill $(ps -ef | grep ${__app_name} | grep -v grep | awk '{ print $2 }') > /dev/null" 196 | } 197 | 198 | function run_jboss_eap_spring { 199 | local __project="greeting-spring" 200 | local __app_name="jboss-eap" 201 | 202 | action "Building project ${__project}" "mvn_build_project ${__project}" 203 | 204 | action "Installing JBoss EAP" "install_eap" 205 | 206 | action "Start JBoss EAP" "start_eap" 207 | 208 | action "Deploying the ${__project}.war to JBoss EAP" "deploy_war ${__project}" 209 | 210 | action "Open Java Console" "open_jconsole ${__app_name}" 211 | 212 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 213 | 214 | action "Waiting for the warmup to cool off" "sleep 10" 215 | 216 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 217 | 218 | action "Waiting for the performance test to cool off" "sleep 30" 219 | 220 | action "Stopping the server" "kill $(jps -l | grep ${__app_name} | grep -v grep | awk '{ print $1 }') > /dev/null" 221 | } 222 | 223 | function run_jws_spring { 224 | local __project="greeting-spring" 225 | local __app_name="org.apache.catalina.startup.Bootstrap" 226 | 227 | action "Building project ${__project}" "mvn_build_project ${__project}" 228 | 229 | action "Installing JBoss Web Server" "install_jws" 230 | 231 | action "Start JBoss Web Server" "start_jws" 232 | 233 | action "Deploying the ${__project}.war to JBoss Web Server" "deploy_war_jws ${__project}" 234 | 235 | action "Open Java Console" "open_jconsole ${__app_name}" 236 | 237 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 238 | 239 | action "Waiting for the warmup to cool off" "sleep 10" 240 | 241 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 242 | 243 | action "Waiting for the performance test to cool off" "sleep 30" 244 | 245 | action "Stopping the server" "kill $(jps -l | grep ${__app_name} | grep -v grep | awk '{ print $1 }') > /dev/null" 246 | } 247 | 248 | function run_jboss_eap_javaee { 249 | local __project="greeting-javaee" 250 | local __app_name="jboss-eap" 251 | 252 | action "Building project ${__project}" "mvn_build_project ${__project}" 253 | 254 | action "Installing JBoss EAP" "install_eap" 255 | 256 | action "Start JBoss EAP" "start_eap" 257 | 258 | action "Deploying the ${__project}.war to JBoss EAP" "deploy_war ${__project}" 259 | 260 | action "Open Java Console" "open_jconsole ${__app_name}" 261 | 262 | action "Warmup the server" "ab -k -n $NUM_OF_KILO_CALLS -c 1 -s 120 $URL > warmup.txt 2>&1" 263 | 264 | action "Waiting for the warmup to cool off" "sleep 10" 265 | 266 | action "Running performance test" "ab -k -n $NUM_OF_CALLS -c $NUM_OF_USERS -s 120 $URL > performance.txt 2>&1" 267 | 268 | action "Waiting for the performance test to cool off" "sleep 30" 269 | 270 | action "Stopping the server" "kill $(jps -l | grep ${__app_name} | grep -v grep | awk '{ print $1 }') > /dev/null" 271 | 272 | } 273 | 274 | function help { 275 | local command_name=$1 276 | echo "Valid commands:" 277 | echo "$command_name spring-boot # [Runs as a Spring Boot Fat JAR]" 278 | echo "$command_name vertx # [Runs as a Eclipse Vert.x Fat JAR]" 279 | echo "$command_name jws # [Runs JBoss Web Server]" 280 | echo "$command_name thorntail # [Runs Thorntail]" 281 | echo "$command_name jboss-eap-spring # [Runs JBoss EAP with Spring app]" 282 | echo "$command_name jboss-eap-javaee # [Runs JBoss EAP with Java EE app]" 283 | echo "$command_name kill-all # [Stops all servers]" 284 | } 285 | 286 | function not_implemented_yet { 287 | echo "This feature has not been implemented yet" 288 | } 289 | 290 | if [[ $# -gt 0 ]] 291 | then 292 | key="$1" 293 | case $key in 294 | spring-boot) 295 | shift # past argument 296 | run_springboot "$@" 297 | ;; 298 | thorntail) 299 | shift # past argument 300 | run_thorntail "$@" 301 | ;; 302 | vertx) 303 | shift # past argument 304 | run_vertx "$@" 305 | ;; 306 | jws) 307 | shift # past argument 308 | run_jws_spring "$@" 309 | ;; 310 | jboss-eap-spring) 311 | shift # past argument 312 | run_jboss_eap_spring "$@" 313 | ;; 314 | jboss-eap-javaee) 315 | shift # past argument 316 | run_jboss_eap_javaee "$@" 317 | ;; 318 | kill-all) 319 | shift # past argument 320 | not_implemented_yet 321 | ;; 322 | *) 323 | # unknown option 324 | echo "Unknown option." 325 | help `basename $0` 326 | ;; 327 | esac 328 | else 329 | help `basename $0` 330 | fi 331 | -------------------------------------------------------------------------------- /ttfr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while [ true ] ; do 4 | curl http://127.0.0.1:8080/ >& /dev/null 5 | if [ $? = 0 ] ; then 6 | echo "got request at `python -c'import datetime; print(datetime.datetime.now().time())'`" 7 | exit 0 8 | fi 9 | sleep .05 10 | done --------------------------------------------------------------------------------