Browse Source

OfficeFloor adding Vertx implementation (#6595)

* Removing Rapidoid as seems dead project (no commit last year)

* Downloading from SourceForge

* Bump maven-compiler-plugin in /frameworks/Java/officefloor/src

Bumps [maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.8.0...maven-compiler-plugin-3.8.1)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump maven-shade-plugin in /frameworks/Java/officefloor/src

Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.1...maven-shade-plugin-3.2.2)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Fixing Raw OfficeFloor

* Specifying Spring plugin version

* Bump to OfficeFloor 3.21.0

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.2.4.RELEASE to 2.2.5.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.2.4.RELEASE...v2.2.5.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.2.5.RELEASE to 2.2.6.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.2.5.RELEASE...v2.2.6.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.21.0 to 3.22.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump maven-shade-plugin in /frameworks/Java/officefloor/src

Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.2...maven-shade-plugin-3.2.3)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.22.0 to 3.23.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.23.0 to 3.24.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.2.6.RELEASE to 2.2.7.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.2.6.RELEASE...v2.2.7.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.2.7.RELEASE to 2.3.0.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.2.7.RELEASE...v2.3.0.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.24.0 to 3.25.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump maven-shade-plugin in /frameworks/Java/officefloor/src

Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.3...maven-shade-plugin-3.2.4)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.0.RELEASE to 2.3.1.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.0.RELEASE...v2.3.1.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.1.RELEASE to 2.3.2.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.1.RELEASE...v2.3.2.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.25.0 to 3.26.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/compare/release-3.25.0...release-3.26.0)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.2.RELEASE to 2.3.3.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.2.RELEASE...v2.3.3.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.26.0 to 3.27.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.3.RELEASE to 2.3.4.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.3.RELEASE...v2.3.4.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.27.0 to 3.28.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Fixing to run with v3.28.0

* Including Undertow

* Using slim docker images

* Fixing to add all supported tests

* Increasing connection pool size

* Write up the 503 errors and why

* Fix grammer

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.4.RELEASE to 2.3.5.RELEASE.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.4.RELEASE...v2.3.5.RELEASE)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Improving chances of full processing

Increasing max thread counts to have thread per client.  Also, shading
jars correctly.

Plus adding in DB test for raw

* Fixing raw test to have database

* Ensure random numbers to avoid cached entities

* Ensuring spring random numbers to avoid entity caching

* Adding queries for raw

* officefloor-raw queries passing

* office-raw supporting all requests

* Fixed update test to ensure updates occur before responding

* Adding officefloor-async

This will demonstrate OfficeFloor running as a single thread
asynchronous server

* Upgrading to OfficeFloor 2.38.1

* Tidy up read me

* Appropriate back pressure queue

* Handle rate limiting

* Providing appropriate throttling

* Lowering threading to handle through put

* officefloor-raw passing tests

* Passing tests

* OfficeFloor 3.28.2

* Fixing rate limiting

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.28.2 to 3.29.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Fixing for bump to 3.30.0

* Increasing max direct memory

* Increasing threshold to enable verifications to pass for officefloor-raw

* Start script to take available memory into consideration

* Max direct memory aware of available memory

Also, cleaning writer threads of buffers to avoid leaks.

* Avoiding OOM by managing disable/enable reading

* DB and Fortune passing

* Ensuring free command is available

* Removing TODOs

* Increasing reactor buffer for multiple queries

* Fixing for 3.30.1

* Passing benchmark tests

* Avoiding OOM on reactor buffer sizes

* Passing validate tests

* Using defaults from 3.30.1

* Bump to 512 threads and connections

* Reverting dockerfiles to provide appropriate parameters

* openjdk:slim for apt-get available

* Providing thread affinity to raw

* Fixing rate limit throttling

* Multiplexing queries over connections per socket

* Fixing for large queries in validate

* Fixing versions of maven and java

* Providing thread affinity of DB connection thread

* Fixing for Netty event loop thread

* Tidying up compiler warnings

* Single db pool to avoid additional threads

* Use default LoopResources

* Tidying up code for warnings

* Further tidy up of code

* Revert to latest pull request

* Using parallel GC for better throughput

* Fix up for thread local buffering improvements

* OfficeFloor fortune raw

Focus of officefloor-raw is raw performance of the OfficeFloor HTTP
server.  Using raw fortune to remove mustache overheads.

* Tidy up loop

* Server name (as per discussions)

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.3.5.RELEASE to 2.4.2.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.3.5.RELEASE...v2.4.2)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.30.2 to 3.31.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.31.0 to 3.32.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.4.2 to 2.4.3.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.4.2...v2.4.3)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump spring-boot-maven-plugin in /frameworks/Java/officefloor/src

Bumps [spring-boot-maven-plugin](https://github.com/spring-projects/spring-boot) from 2.4.3 to 2.4.5.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v2.4.3...v2.4.5)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Upgrade to GitHub-native Dependabot

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.32.0 to 3.35.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits/release-3.35.0)

Signed-off-by: dependabot-preview[bot] <[email protected]>

* Bump to OfficeFloor 3.35.0

* Allow bump of all versions

* Vertx server

Also, renaming officefloor-raw to officefloor-r2dbc to make way for
officefloor-sqlclient

* Rename to R2dbc (from raw)

* Bump net.officefloor:bom in /frameworks/Java/officefloor/src

Bumps [net.officefloor:bom](https://github.com/officefloor/OfficeFloor) from 3.35.0 to 3.36.0.
- [Release notes](https://github.com/officefloor/OfficeFloor/releases)
- [Commits](https://github.com/officefloor/OfficeFloor/commits)

Signed-off-by: dependabot[bot] <[email protected]>

* Fixing meta-data

* Can not propagate Dependabot to TechEmpower

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Daniel 4 years ago
parent
commit
67bd3c541d

+ 9 - 23
frameworks/Java/officefloor/README.md

@@ -37,13 +37,16 @@ More information can be found at [http://officefloor.net](http://officefloor.net
 
 OfficeFloor can use different HTTP server components:
 
-* **officefloor-netty** : incorporating Netty to service requests passing to OfficeFloor inversion of control.
-* **officefloor-undertow** : incorporating Undertow to service requests passing to OfficeFloor inversion of control.
-* **officefloor-raw** : default HTTP server component provided by OfficeFloor.  This allows comparing OfficeFloor's raw HTTP implementation with other solutions focused on HTTP optimisation.
+* **officefloor-netty** : incorporating Netty to service requests passing to OfficeFloor inversion of coupling control.
+* **officefloor-undertow** : incorporating Undertow to service requests passing to OfficeFloor inversion of coupling control.
+* **officefloor-vertx** : incorporating Vertx to service requests passing to OfficeFloor inversion of coupling control.
 
-Having these comparisons allows developers to see the trade-offs in using different HTTP components to handle HTTP request servicing.
+OfficeFloor can also use various database clients.  These use the default HTTP server component provided by OfficeFloor:
 
-Note: OfficeFloor's web plugins are called WoOF (Web on OfficeFloor).
+* **officefloor-r2bc** : uses R2DBC.
+* **officefloor-sqlclient** : uses Vertx SQL Client.
+
+Having these comparisons allows developers to see the trade-offs in using different HTTP components and database drivers to handle HTTP request servicing.
 
 As mentioned, OfficeFloor uses different threading models.  It does not inherit the threading model imposed by the HTTP component.  Hence, there are various threading models tested to see trade-offs:
 
@@ -51,29 +54,12 @@ As mentioned, OfficeFloor uses different threading models.  It does not inherit
 * **officefloor-micro** : synchronous multi-threaded model
 * **officefloor-thread_affinity** : thread affinity of servicing each request only on one CPU
 
-While much focus is on HTTP handling, performance also is impacted by database interaction.  The above tests use raw SQL queries to provide optimised through put.  However, in "real world" applications ORMs are typically used:
+In "real world" applications ORMs are typically used:
 
 * **officefloor** : uses JPA
 * **officefloor-spring_data** : uses Spring Data repositories
 
 
-# 503 Responses
-
- Within the performance tests (particularly the query and update tests), there are 503 responses from OfficeFloor.  These are deliberate and make OfficeFloor significantly more responsive than typical web servers.  To understand why, we need to explain the servicing change introduced by OfficeFloor.
- 
- **Typical web servers** manage load by only processing one request at a time per socket.  This means on pipelined requests over a single connection, the first request needs to be fully processed before the next request is started.  As requests then queue on the network buffer, it allows the network's natural TCP throttling to manage load.
- 
- **Web browser request profiles have changed** to an increased number of asynchronous requests pipelined over a few number of connections.  Days of old (possibly very old), web pages loaded and then did a post to reload the page again.  There would be one page submission with a few resource requests (e.g. images).  These days, single page applications are a lot more prevalent.  The nature of single page applications is to avoid page reloads and run many asynchronous requests.  This means more logic submission requests in parallel.  As browsers re-use connections to multiplex these requests to the server, the result is pipelining requests over a few number of connections.
- 
- **OfficeFloor processes pipelined requests in parallel**.  To cater to this situation and allow more responsive single page web applications, OfficeFloor processes the pipeline requests in parallel.  This means the second request in the pipeline no longer has to wait for the first one to complete.  Both the first, second, third, etc will be processed immediately by OfficeFloor.  This means better responsiveness to the single page applications, as there is no queuing of requests in the pipelines.
- 
- **Load throttling managed by 503 responses.**  As requests are no longer queued on the network buffer, there is no TCP throttling.  Requests will be accepted in parallel into OfficeFloor.  To avoid denial of service attacks, OfficeFloor has built in load throttling.  It is beyond this overview discussion to explain how this works, but basically when thread pools are overloaded they reject new jobs.  OfficeFloor captures these rejections and translates them into 503 HTTP responses (indicating temporarily unavailable).
- 
- **This improves responsiveness of single page applications**.  The problem with TCP throttling is that requests start to slow down before you get rejections.  This means your single page application ends up waiting for responses.  The wait time is noticeable by the user, as can be upwards of 10's of seconds to minutes.  This then results in the user's perception of the single page application being slow.  OfficeFloor by parallel processing everything and responding immediately with 503 responses when overloaded, reduces these long wait times.  Rather than than hanging, the single page application can deal with the 503 by calling another server or providing user friendly messages back to the user that system is under load and try back in a few moments.  This provides an overall more responsive and what we find is a better experience for the user.
- 
- However, this does mean in some of the heavier load tests, you will see errors for OfficeFloor.  But we here at OfficeFloor are proud of these errors, as they avoid hanging applications and provide better user experience under extreme loads.
-
-
 # OfficeFloor real benefit
 
 OfficeFloor is targeted at cloud and SOA/micro-service environments.   In these environments, applications do not operate in isolation with a single database.  Applications need to interact with multiple other services that result in:

+ 35 - 11
frameworks/Java/officefloor/benchmark_config.json

@@ -25,7 +25,7 @@
 				"notes": "",
 				"versus": "officefloor-micro"
 			},
-			"raw": {
+			"r2dbc": {
 				"json_url": "/json",
 				"plaintext_url": "/plaintext",
 				"db_url": "/db",
@@ -44,7 +44,7 @@
 				"webserver": "WoOF",
 				"os": "Linux",
 				"database_os": "Linux",
-				"display_name": "OfficeFloor-raw",
+				"display_name": "OfficeFloor-r2dbc",
 				"notes": ""
 			},
 			"async": {
@@ -56,7 +56,7 @@
 				"update_url": "/update?queries=",
 				"port": 8080,
 				"approach": "Realistic",
-				"classification": "Platform",
+				"classification": "Fullstack",
 				"database": "Postgres",
 				"framework": "OfficeFloor",
 				"language": "Java",
@@ -68,7 +68,7 @@
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-async",
 				"notes": "",
-				"versus": "OfficeFloor-raw"
+				"versus": "OfficeFloor-r2dbc"
 			},
 			"micro": {
 				"json_url": "/json",
@@ -91,7 +91,7 @@
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-micro",
 				"notes": "",
-				"versus": "OfficeFloor-raw"
+				"versus": "OfficeFloor-r2dbc"
 			},
 			"thread_affinity": {
 				"json_url": "/json",
@@ -114,7 +114,7 @@
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-thread_affinity",
 				"notes": "",
-				"versus": "OfficeFloor-raw"
+				"versus": "OfficeFloor-r2dbc"
 			},
 			"netty": {
 				"json_url": "/json",
@@ -132,12 +132,12 @@
 				"flavor": "None",
 				"orm": "Full",
 				"platform": "OfficeFloor",
-				"webserver": "WoOF",
+				"webserver": "Netty",
 				"os": "Linux",
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-netty",
 				"notes": "",
-				"versus": "netty"
+				"versus": "Netty"
 			},
 			"undertow": {
 				"json_url": "/json",
@@ -155,11 +155,35 @@
 				"flavor": "None",
 				"orm": "Full",
 				"platform": "OfficeFloor",
-				"webserver": "WoOF",
+				"webserver": "Undertow",
 				"os": "Linux",
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-undertow",
-				"notes": ""
+				"notes": "",
+				"versus": "undertow-postgresql"
+			},
+			"vertx": {
+				"json_url": "/json",
+				"plaintext_url": "/plaintext",
+				"db_url": "/db",
+				"query_url": "/queries?queries=",
+				"fortune_url": "/fortunes",
+				"update_url": "/update?queries=",
+				"port": 8080,
+				"approach": "Realistic",
+				"classification": "Fullstack",
+				"database": "Postgres",
+				"framework": "OfficeFloor",
+				"language": "Java",
+				"flavor": "None",
+				"orm": "Full",
+				"platform": "OfficeFloor",
+				"webserver": "vertx",
+				"os": "Linux",
+				"database_os": "Linux",
+				"display_name": "OfficeFloor-undertow",
+				"notes": "",
+				"versus": "vertx-postgres"
 			},
 			"spring_data": {
 				"json_url": "/json",
@@ -182,7 +206,7 @@
 				"database_os": "Linux",
 				"display_name": "OfficeFloor-spring_data",
 				"notes": "",
-				"versus": "officefloor"
+				"versus": "spring"
 			}
 		}
 	]

+ 25 - 8
frameworks/Java/officefloor/config.toml

@@ -15,8 +15,8 @@ database_os = "Linux"
 os = "Linux"
 orm = "Full"
 platform = "OfficeFloor"
-webserver = "WoOF"
-versus = "netty"
+webserver = "Netty"
+versus = "Netty"
 
 [thread_affinity]
 urls.plaintext = "/plaintext"
@@ -69,7 +69,7 @@ platform = "OfficeFloor"
 webserver = "WoOF"
 versus = "officefloor-micro"
 
-[raw]
+[r2dbc]
 urls.plaintext = "/plaintext"
 urls.json = "/json"
 urls.db = "/db"
@@ -100,8 +100,25 @@ database_os = "Linux"
 os = "Linux"
 orm = "Full"
 platform = "OfficeFloor"
-webserver = "WoOF"
-versus = "None"
+webserver = "Undertow"
+versus = "undertow-postgresql"
+
+[vertx]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+urls.db = "/db"
+urls.query = "/queries?queries="
+urls.update = "/update?queries="
+urls.fortune = "/fortunes"
+approach = "Realistic"
+classification = "Fullstack"
+database = "Postgres"
+database_os = "Linux"
+os = "Linux"
+orm = "Full"
+platform = "OfficeFloor"
+webserver = "vertx"
+versus = "vertx-postgres"
 
 [spring_data]
 urls.plaintext = "/plaintext"
@@ -118,7 +135,7 @@ os = "Linux"
 orm = "Full"
 platform = "OfficeFloor"
 webserver = "WoOF"
-versus = "officefloor"
+versus = "spring"
 
 [async]
 urls.plaintext = "/plaintext"
@@ -128,11 +145,11 @@ urls.query = "/queries?queries="
 urls.update = "/update?queries="
 urls.fortune = "/fortunes"
 approach = "Realistic"
-classification = "Platform"
+classification = "Fullstack"
 database = "Postgres"
 database_os = "Linux"
 os = "Linux"
 orm = "raw"
 platform = "OfficeFloor"
 webserver = "WoOF"
-versus = "OfficeFloor-raw"
+versus = "OfficeFloor-r2dbc"

+ 2 - 2
frameworks/Java/officefloor/officefloor-raw.dockerfile → frameworks/Java/officefloor/officefloor-r2dbc.dockerfile

@@ -1,12 +1,12 @@
 FROM maven:3.6.3 as maven
 WORKDIR /officefloor
 COPY src src
-WORKDIR /officefloor/src/woof_benchmark_raw
+WORKDIR /officefloor/src/woof_benchmark_r2dbc
 RUN mvn -B clean package
 
 FROM openjdk:15-slim
 RUN apt-get update && apt-get install -y libjna-java
 WORKDIR /officefloor
-COPY --from=maven /officefloor/src/woof_benchmark_raw/target/woof_benchmark_raw-1.0.0.jar server.jar
+COPY --from=maven /officefloor/src/woof_benchmark_r2dbc/target/woof_benchmark_r2dbc-1.0.0.jar server.jar
 EXPOSE 8080
 CMD ["java", "-Xms2g", "-Xmx2g", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "server.jar"]

+ 15 - 0
frameworks/Java/officefloor/officefloor-vertx.dockerfile

@@ -0,0 +1,15 @@
+FROM maven:3.6.3 as maven
+WORKDIR /officefloor
+COPY src src
+WORKDIR /officefloor/src
+RUN mvn -B -N clean install
+WORKDIR /officefloor/src/woof_benchmark
+RUN mvn -B clean install
+WORKDIR /officefloor/src/woof_benchmark_vertx
+RUN mvn -B clean package
+
+FROM openjdk:15
+WORKDIR /officefloor
+COPY --from=maven /officefloor/src/woof_benchmark_vertx/target/woof_benchmark_vertx-1.0.0.jar server.jar
+EXPOSE 8080
+CMD ["java", "-server", "-Xms2g", "-Xmx2g", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dhttp.port=8080", "-Dhttp.server.name=O", "-Dhttp.date.header=true", "-jar", "server.jar"]

+ 2 - 1
frameworks/Java/officefloor/src/pom.xml

@@ -17,9 +17,10 @@
 		<module>woof_benchmark_micro</module>
 		<module>woof_benchmark_thread_affinity</module>
 		<module>woof_benchmark_async</module>
-		<module>woof_benchmark_raw</module>
+		<module>woof_benchmark_r2dbc</module>
 		<module>woof_benchmark_netty</module>
 		<module>woof_benchmark_undertow</module>
+		<module>woof_benchmark_vertx</module>
 		<module>woof_benchmark_spring</module>
 	</modules>
 	<repositories>

+ 1 - 0
frameworks/Java/officefloor/src/woof_benchmark_r2dbc/.gitignore

@@ -0,0 +1 @@
+/dependency-reduced-pom.xml

+ 2 - 2
frameworks/Java/officefloor/src/woof_benchmark_raw/pom.xml → frameworks/Java/officefloor/src/woof_benchmark_r2dbc/pom.xml

@@ -7,7 +7,7 @@
 		<artifactId>benchmarks</artifactId>
 		<version>1.0.0</version>
 	</parent>
-	<artifactId>woof_benchmark_raw</artifactId>
+	<artifactId>woof_benchmark_r2dbc</artifactId>
 	<dependencies>
 		<dependency>
 			<groupId>net.officefloor.web</groupId>
@@ -59,7 +59,7 @@
 						<configuration>
 							<transformers>
 								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-									<mainClass>net.officefloor.benchmark.RawOfficeFloorMain</mainClass>
+									<mainClass>net.officefloor.benchmark.R2dbcOfficeFloorMain</mainClass>
 								</transformer>
 								<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
 							</transformers>

+ 6 - 6
frameworks/Java/officefloor/src/woof_benchmark_raw/src/main/java/net/officefloor/benchmark/RawOfficeFloorMain.java → frameworks/Java/officefloor/src/woof_benchmark_r2dbc/src/main/java/net/officefloor/benchmark/R2dbcOfficeFloorMain.java

@@ -51,9 +51,9 @@ import io.r2dbc.spi.ConnectionFactoryOptions;
 import io.r2dbc.spi.R2dbcTransientResourceException;
 import lombok.AllArgsConstructor;
 import lombok.Data;
-import net.officefloor.benchmark.RawOfficeFloorMain.Fortune;
-import net.officefloor.benchmark.RawOfficeFloorMain.Message;
-import net.officefloor.benchmark.RawOfficeFloorMain.World;
+import net.officefloor.benchmark.R2dbcOfficeFloorMain.Fortune;
+import net.officefloor.benchmark.R2dbcOfficeFloorMain.Message;
+import net.officefloor.benchmark.R2dbcOfficeFloorMain.World;
 import net.officefloor.frame.api.manage.OfficeFloor;
 import net.officefloor.frame.api.manage.ProcessManager;
 import net.officefloor.frame.api.managedobject.ManagedObjectContext;
@@ -95,7 +95,7 @@ import net.openhft.affinity.Affinity;
  * <p>
  * Allows determining the overhead of the {@link OfficeFloor} framework.
  */
-public class RawOfficeFloorMain {
+public class R2dbcOfficeFloorMain {
 
 	/**
 	 * Database query load capacity to handle validation load.
@@ -115,7 +115,7 @@ public class RawOfficeFloorMain {
 	/**
 	 * {@link Logger}.
 	 */
-	private static Logger logger = Logger.getLogger(RawOfficeFloorMain.class.getName());
+	private static Logger logger = Logger.getLogger(R2dbcOfficeFloorMain.class.getName());
 
 	/**
 	 * Run application.
@@ -272,7 +272,7 @@ public class RawOfficeFloorMain {
 
 			@Override
 			public String getBoundName() {
-				return RawOfficeFloorMain.class.getSimpleName();
+				return R2dbcOfficeFloorMain.class.getSimpleName();
 			}
 
 			@Override

+ 0 - 0
frameworks/Java/officefloor/src/woof_benchmark_raw/src/main/resources/fortunes.mustache → frameworks/Java/officefloor/src/woof_benchmark_r2dbc/src/main/resources/fortunes.mustache


+ 1 - 0
frameworks/Java/officefloor/src/woof_benchmark_vertx/.gitignore

@@ -0,0 +1 @@
+/dependency-reduced-pom.xml

+ 45 - 0
frameworks/Java/officefloor/src/woof_benchmark_vertx/pom.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>net.officefloor.benchmarks</groupId>
+		<artifactId>benchmarks</artifactId>
+		<version>1.0.0</version>
+	</parent>
+	<artifactId>woof_benchmark_vertx</artifactId>
+	<dependencies>
+		<dependency>
+			<groupId>net.officefloor.benchmarks</groupId>
+			<artifactId>woof_benchmark</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>net.officefloor.server</groupId>
+			<artifactId>officeserver_vertx</artifactId>
+		</dependency>
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<transformers>
+								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass>net.officefloor.OfficeFloorMain</mainClass>
+								</transformer>
+								<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+							</transformers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>