Explorar o código

[ci fw-only Java/act] rewrite Act test project (#2969)

* add act-ebean-pgsql-rythm to compare rythm vs mustache template engine

* WIP

* update to act-1.4.12

* WIP

* update to act-1.4.13-SNAPSHOT - take out implicity variable setting

* update act port configuration
Green Luo %!s(int64=8) %!d(string=hai) anos
pai
achega
71c42a5475
Modificáronse 49 ficheiros con 824 adicións e 1602 borrados
  1. 28 428
      frameworks/Java/act/README.md
  2. 20 62
      frameworks/Java/act/benchmark_config.json
  3. 274 146
      frameworks/Java/act/pom.xml
  4. 4 2
      frameworks/Java/act/setup-ebean-mysql.sh
  5. 3 3
      frameworks/Java/act/setup-ebean-pgsql.sh
  6. 23 0
      frameworks/Java/act/setup-json-plaintext.sh
  7. 24 0
      frameworks/Java/act/setup-morphia-mongo.sh
  8. 36 25
      frameworks/Java/act/source_code
  9. 5 8
      frameworks/Java/act/src/assembly/pkg.xml
  10. 23 30
      frameworks/Java/act/src/main/java/com/techempower/act/AppEntry.java
  11. 0 73
      frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/BeetlSqlController.java
  12. 0 20
      frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/Fortune.java
  13. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/World.java
  14. 54 0
      frameworks/Java/act/src/main/java/com/techempower/act/controller/FortuneController.java
  15. 0 31
      frameworks/Java/act/src/main/java/com/techempower/act/controller/FortuneControllerBase.java
  16. 53 0
      frameworks/Java/act/src/main/java/com/techempower/act/controller/HelloWorldController.java
  17. 118 0
      frameworks/Java/act/src/main/java/com/techempower/act/controller/WorldController.java
  18. 0 98
      frameworks/Java/act/src/main/java/com/techempower/act/controller/WorldControllerBase.java
  19. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/domain/IFortune.java
  20. 0 12
      frameworks/Java/act/src/main/java/com/techempower/act/domain/IWorld.java
  21. 0 114
      frameworks/Java/act/src/main/java/com/techempower/act/jdbc/JdbcController.java
  22. 51 0
      frameworks/Java/act/src/main/java/com/techempower/act/model/Fortune.java
  23. 50 0
      frameworks/Java/act/src/main/java/com/techempower/act/model/World.java
  24. 0 20
      frameworks/Java/act/src/main/java/com/techempower/act/mongo/controller/FortuneController.java
  25. 0 21
      frameworks/Java/act/src/main/java/com/techempower/act/mongo/controller/WorldController.java
  26. 0 35
      frameworks/Java/act/src/main/java/com/techempower/act/mongo/domain/Fortune.java
  27. 0 37
      frameworks/Java/act/src/main/java/com/techempower/act/mongo/domain/World.java
  28. 0 16
      frameworks/Java/act/src/main/java/com/techempower/act/mysql/controller/FortuneController.java
  29. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/mysql/controller/WorldController.java
  30. 0 18
      frameworks/Java/act/src/main/java/com/techempower/act/mysql/domain/Fortune.java
  31. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/mysql/domain/World.java
  32. 0 29
      frameworks/Java/act/src/main/java/com/techempower/act/pgsql/controller/FortuneController.java
  33. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/pgsql/controller/WorldController.java
  34. 0 20
      frameworks/Java/act/src/main/java/com/techempower/act/pgsql/domain/Fortune.java
  35. 0 17
      frameworks/Java/act/src/main/java/com/techempower/act/pgsql/domain/World.java
  36. 0 62
      frameworks/Java/act/src/main/java/com/techempower/act/sql/controller/SqlWorldControllerBase.java
  37. 0 39
      frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/Fortune.java
  38. 0 44
      frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/World.java
  39. 3 0
      frameworks/Java/act/src/main/resources/com/techempower/act/.version
  40. 2 3
      frameworks/Java/act/src/main/resources/conf/app.properties
  41. 0 59
      frameworks/Java/act/src/main/resources/conf/common/db.properties
  42. 0 0
      frameworks/Java/act/src/main/resources/conf/json_plaintext/routes.conf
  43. 0 2
      frameworks/Java/act/src/main/resources/conf/local/db.properties
  44. 4 0
      frameworks/Java/act/src/main/resources/conf/mongo/db.properties
  45. 24 0
      frameworks/Java/act/src/main/resources/conf/mysql/db.properties
  46. 23 0
      frameworks/Java/act/src/main/resources/conf/pgsql/db.properties
  47. 2 22
      frameworks/Java/act/src/main/resources/logback.xml
  48. 0 0
      frameworks/Java/act/src/main/resources/mustache/fortunes.html
  49. 0 21
      frameworks/Java/act/src/main/resources/rythm/fortunes.html

+ 28 - 428
frameworks/Java/act/README.md

@@ -2,441 +2,41 @@
 
 This is the ActFramework portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
 
-This is using [ActFramework R1.1.2](http://actframework.org) to build an application.
+This is using [ActFramework R1.4.12](http://actframework.org) to build an application.
 
-## How to run this app locally
+## Local benchmark result
 
-You can easily run this sample application with mongodb and mysql, postgresql setup correctly.
-For that, type:
+### Plain text and JSON
 
-```
-mvn clean package
-cd target/dist
-unzip *.zip
-./start
-```
+| Test | Throughput |
+| ---- | ---------: |
+| plaintext | 671911.83  |
+| json | 167184.71 |
 
-Or simply run `./run.sh`
-    
+### MySQL
 
-## Application Endpoints
+| Test | Throughput |
+| ---- | ----------: |
+| db | 15726.85 |
+| multiple queies (20) | 1634.25 |
+| updates (20) | 112.40 |
+| fortunes | 13340.19 |
 
-### JSON serialization
+### Postgresql
 
-* http://localhost:8080/json
+| Test | Throughput |
+| ---- | ---------: |
+| db | 19178.11 |
+| multiple queies (20) | 2108/46 |
+| updates (20) | 110.91 |
+| fortunes | 17008.39 |
 
-### Single database query
 
-* `mongo`: http://localhost:8080/mongo/db
-* `mysql`: http://localhost:8080/mysql/db
-* `pgsql`: http://localhost:8080/pgsql/db
-* `beetlsql-pgsql`: http://localhost:8080/beetsql/db
-* `jdbc-pgsql`: http://localhost:8080/beetsql/db
+### Mongodb
 
-### Multiple queries
-
-* `mongo`: http://localhost:8080/mongo/queries?quries=20
-* `mysql`: http://localhost:8080/mysql/queries?quries=20
-* `pgsql`: http://localhost:8080/pgsql/queries?quries=20
-* `beetlsql-pgsql`: http://localhost:8080/beetsql/queries?quries=20
-* `jdbc-pgsql`: http://localhost:8080/beetsql/queries?quries=20
-
-### Fortunes
-
-* `mongo`: http://localhost:8080/mongo/fortunes
-* `mysql`: http://localhost:8080/mysql/fortunes
-* `pgsql`: http://localhost:8080/pgsql/fortunes
-* `beetlsql-pgsql`: http://localhost:8080/beetsql/db
-* `jdbc-pgsql`: http://localhost:8080/beetsql/db
-
-### DB updates
-
-* `mongo`: http://localhost:8080/mongo/updates?quries=20
-* `mysql`: http://localhost:8080/mysql/updates?quries=20
-* `pgsql`: http://localhost:8080/pgsql/updates?quries=20
-* `beetlsql-pgsql`: http://localhost:8080/beetsql/updates?quries=20
-* `jdbc-pgsql`: http://localhost:8080/beetsql/updates?quries=20
-
-### Plain text
-
-* mongo: http://localhost:8080/plaintext
-
-## Source code
-
-### App entry and non-database request handlers
-
-* [App entry](src/main/java/com/techempower/act/AppEntry.java)
-* [json and plaintext handler](src/main/java/com/techempower/act/controller/HelloController.java)
-
-### Database relevant source files
-
-This application is organized to support access three database sources: `mongo`, `mysql`, `pgsql`. 
-However most of the logic is the same when handling request sent to different data sources. We have
-organized the project in a way to maximize the reuse of coding for the same logic. Each piece of source
-unit are put into four groups: 
-
-* `common`: encapsulate the common logic or data models
-* `mongo` : the mongodb adaptor
-* `mysql` : the mysql adaptor
-* `pgsql` : the postgresql adaptor
-
-#### Domain Models
-
-##### Common
-
-* [Fortune](src/main/java/com/techempower/act/domain/IFortune.java)
-* [World](src/main/java/com/techempower/act/domain/IWorld.java)
-
-##### Mongo
-
-* [Fortune](src/main/java/com/techempower/act/mongo/domain/Fortune.java)
-* [World](src/main/java/com/techempower/act/mongo/domain/World.java)
-
-##### SQL Common 
-
-The common base classes for mysql and pgsql classes
-
-* [Fortune](src/main/java/com/techempower/act/sql/domain/Fortune.java)
-* [World](src/main/java/com/techempower/act/sql/domain/World.java)
-
-##### MySQL
-
-* [Fortune](src/main/java/com/techempower/act/mysql/domain/Fortune.java)
-* [World](src/main/java/com/techempower/act/mysql/domain/World.java)
-
-##### Postgresql
-
-* [Fortune](src/main/java/com/techempower/act/pgsql/domain/Fortune.java)
-* [World](src/main/java/com/techempower/act/pgsql/domain/World.java)
-
-#### Controllers
-
-##### Common
-
-* [Fortune controller](src/main/java/com/techempower/act/controller/FortuneControllerBase.java) - for `fortunes` endpoint
-* [World controller](src/main/java/com/techempower/act/controller/WorldControllerBase.java) - for `db`, `queries` and `updates` endpoint
-
-##### Mongo
-
-* [Fortune controller](src/main/java/com/techempower/act/mongo/controller/FortuneController.java) - for `/mongo/fortunes` endpoint
-* [World controller](src/main/java/com/techempower/act/mongo/controller/WorldController.java) - for `/mongo/db`, `/mongo/queries` and `/mongo/updates` endpoint
-
-##### SQL Common
-
-The common base classes for mysql and pgsql classes
-
-* [Fortune controller](src/main/java/com/techempower/act/sql/controller/FortuneController.java) 
-* [World controller](src/main/java/com/techempower/act/sql/controller/WorldController.java) 
-
-
-##### MySQL
-
-* [Fortune controller](src/main/java/com/techempower/act/mysql/controller/FortuneController.java) - for `/mysql/fortunes` endpoint
-* [World controller](src/main/java/com/techempower/act/mysql/controller/WorldController.java) - for `/mysql/db`, `/mysql/queries` and `/mysql/updates` endpoint
-
-##### Postgresql
-
-* [Fortune controller](src/main/java/com/techempower/act/pgsql/controller/FortuneController.java) - for `/pgsql/fortunes` endpoint
-* [World controller](src/main/java/com/techempower/act/pgsql/controller/WorldController.java) - for `/pgsql/db`, `/pgsql/queries` and `/pgsql/updates` endpoint
-
-
-## Infrastructure Software Versions
-The tests were run with:
-
-* [ActFramework 1.1.2](http://actframework.org/)
-* [act-ebean2 plugin 1.04](https://github.com/actframework/act-ebean2)
-* [act-morphia plugin 1.1.0](https://github.com/actframework/act-morphia)
-* [act-beetlsql plugin 1.1.0](https://github.com/actframework/act-beetlsql)
-* [act-mustache plugin 1.0.0](https://github.com/actframework/act-mustache)
-* [Undertow 1.4.8.Final](http://undertow.io/)
-
-## Local Test Result
-
-**Note** the data below is outdated
-
-|            Test            | Throughput |  Latency  | Timeout/Error |
-| -------------------------- | ---------: | --------: | ------: |
-| json                       | 1026530.41 |    3.31ms |         |
-| single query - mongo       |   42185.82 |   17.04ms |         |
-| single query - mysql       |   24258.46 |   29.21ms |         |
-| single query - pgsql       |   32745.68 |   24.48ms |         |
-| 20 queries - mongo         |    2584.76 |   98.92ms |         |
-| 20 queries - mysql         |    1317.33 |  191.92ms |         |
-| 20 queries - pgsql         |    1966.24 |  128.47ms |         |
-| fortunes - mongo           |   23637.79 |   31.12ms |         |
-| fortunes - mysql           |   20958.60 |   37.76ms |         |
-| fortunes - pgsql           |   23081.28 |   34.31ms |         |
-| 20 updates - mongo         |    1239.06 |  202.40ms |         |
-| 20 updates - mysql         |    1319.04 |  189.94ms |      71 |
-| 20 updates - pgsql         |     803.26 |  312.14ms |         |
-| plaintext                  | 1376490.27 |    2.49ms |         |
-
-
-### Local Test Logs
-
-#### JSON Serialization
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /json 16
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency     3.11ms    2.90ms 207.19ms   89.55%
-    Req/Sec   258.94k    53.37k  465.94k    69.25%
-  Latency Distribution
-     50%    2.70ms
-     75%    4.18ms
-     90%    5.82ms
-     99%   10.55ms
-  10310688 requests in 10.04s, 1.65GB read
-Requests/sec: 1026530.41
-Transfer/sec:    168.38MB
-```
-
-#### Plain text
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /plaintext 16
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency     2.49ms    2.55ms  34.96ms   89.71%
-    Req/Sec   346.49k    84.82k  647.92k    68.50%
-  Latency Distribution
-     50%    1.80ms
-     75%    3.08ms
-     90%    5.12ms
-     99%   13.25ms
-  13840896 requests in 10.06s, 1.96GB read
-Requests/sec: 1376490.27
-Transfer/sec:    199.53MB
-```
-
-#### Single Query - MongoDB
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mongo/db 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    17.04ms    6.47ms  58.42ms   63.53%
-    Req/Sec    10.64k   546.37    15.19k    78.75%
-  Latency Distribution
-     50%   16.73ms
-     75%   22.25ms
-     90%   25.04ms
-     99%   33.17ms
-  425144 requests in 10.08s, 71.27MB read
-Requests/sec:  42185.82
-Transfer/sec:      7.07MB
-```
-
-#### Single query - MySQL
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mysql/db 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    29.21ms   10.81ms 121.06ms   59.54%
-    Req/Sec     6.12k   280.08     8.77k    80.25%
-  Latency Distribution
-     50%   29.02ms
-     75%   38.33ms
-     90%   43.44ms
-     99%   51.34ms
-  243744 requests in 10.05s, 40.86MB read
-Requests/sec:  24258.46
-Transfer/sec:      4.07MB
-```
-
-#### Single query - Postgres
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /pgsql/db 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    24.48ms   13.59ms 140.15ms   72.81%
-    Req/Sec     8.25k   742.58    10.67k    83.00%
-  Latency Distribution
-     50%   21.86ms
-     75%   29.66ms
-     90%   44.31ms
-     99%   69.61ms
-  329380 requests in 10.06s, 55.21MB read
-Requests/sec:  32745.68
-Transfer/sec:      5.49MB
-```
-
-#### 20 queries - Mongo
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mongo/queries?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    98.92ms   33.48ms 367.17ms   79.73%
-    Req/Sec   651.20     43.98     0.92k    75.50%
-  Latency Distribution
-     50%   93.50ms
-     75%  107.41ms
-     90%  137.61ms
-     99%  222.72ms
-  25978 requests in 10.05s, 19.39MB read
-Requests/sec:   2584.76
-Transfer/sec:      1.93MB
-```
-
-#### 20 queries - MySQL
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mysql/queries?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency   191.92ms   16.38ms 254.96ms   89.13%
-    Req/Sec   331.99    140.32   646.00     66.33%
-  Latency Distribution
-     50%  192.68ms
-     75%  199.43ms
-     90%  206.16ms
-     99%  219.29ms
-  13225 requests in 10.04s, 9.87MB read
-Requests/sec:   1317.33
-Transfer/sec:      0.98MB
-```
-
-#### 20 queries - Postgres
- 
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /pgsql/queries?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency   128.47ms   25.97ms 288.45ms   65.68%
-    Req/Sec   496.92     40.72   828.00     78.30%
-  Latency Distribution
-     50%  123.88ms
-     75%  143.43ms
-     90%  163.07ms
-     99%  201.05ms
-  19854 requests in 10.10s, 14.82MB read
-Requests/sec:   1966.24
-Transfer/sec:      1.47MB
-```
-
-#### 20 updates - Mongo
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mongo/updates?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency   202.40ms   41.73ms 497.85ms   78.06%
-    Req/Sec   314.17     57.45   646.00     82.66%
-  Latency Distribution
-     50%  198.61ms
-     75%  218.83ms
-     90%  252.33ms
-     99%  336.21ms
-  12469 requests in 10.06s, 9.31MB read
-Requests/sec:   1239.06
-Transfer/sec:      0.92MB
-```
-
-#### 20 updates - MySQL
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mysql/updates?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency   189.94ms   19.91ms 320.25ms   78.53%
-    Req/Sec   332.16     72.08   600.00     75.69%
-  Latency Distribution
-     50%  187.81ms
-     75%  199.80ms
-     90%  213.79ms
-     99%  243.72ms
-  13237 requests in 10.04s, 9.84MB read
-  Non-2xx or 3xx responses: 71
-Requests/sec:   1319.04
-Transfer/sec:      0.98MB
-```
-
-#### 20 updates - Postgresql
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /pgsql/updates?queries=20 1
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency   312.14ms   47.72ms 415.26ms   75.75%
-    Req/Sec   214.47    161.95   610.00     59.04%
-  Latency Distribution
-     50%  321.52ms
-     75%  347.91ms
-     90%  366.58ms
-     99%  396.16ms
-  8061 requests in 10.04s, 6.02MB read
-Requests/sec:    803.26
-Transfer/sec:    613.87KB
-```
-
-#### Fortunes - Mongo
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mongo/fortunes 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    31.12ms   14.03ms 183.18ms   72.31%
-    Req/Sec     5.97k   478.08     8.68k    71.75%
-  Latency Distribution
-     50%   29.62ms
-     75%   39.61ms
-     90%   46.90ms
-     99%   76.91ms
-  238284 requests in 10.08s, 331.78MB read
-Requests/sec:  23637.79
-Transfer/sec:     32.91MB
-```
-
-#### Fortunes - MySQL
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /mysql/fortunes 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    37.76ms   21.11ms 220.85ms   78.62%
-    Req/Sec     5.28k   365.21     6.75k    71.50%
-  Latency Distribution
-     50%   33.95ms
-     75%   45.70ms
-     90%   62.66ms
-     99%  116.81ms
-  210548 requests in 10.05s, 293.16MB read
-Requests/sec:  20958.60
-Transfer/sec:     29.18MB
-```
-
-#### Fortunes - Postgresql
-
-```
-luog@luog-Satellite-P50-A:~/p/greenlaw110/FrameworkBenchmarks/frameworks/Java/act$ wrk -t4 -c256 -d10s http://localhost:8080 -s pipeline.lua --latency -- /pgsql/fortunes 4
-Running 10s test @ http://localhost:8080
-  4 threads and 256 connections
-  Thread Stats   Avg      Stdev     Max   +/- Stdev
-    Latency    34.31ms   18.68ms 179.08ms   71.53%
-    Req/Sec     5.83k   385.75    10.12k    80.50%
-  Latency Distribution
-     50%   31.53ms
-     75%   41.27ms
-     90%   61.99ms
-     99%   96.27ms
-  232596 requests in 10.08s, 323.86MB read
-Requests/sec:  23081.28
-Transfer/sec:     32.14MB
-```
+| Test | Throughput |
+| ---- | ---------: |
+| db | 19156.71 |
+| multiple queies (20) | 1821.24 |
+| updates (20) | 849.83 |
+| fortunes | 17603.13 |

+ 20 - 62
frameworks/Java/act/benchmark_config.json

@@ -1,8 +1,8 @@
 {
   "framework": "actframework",
   "tests": [{
-      "default": {
-      "setup_file": "setup",
+      "json_plaintext": {
+      "setup_file": "setup-json-plaintext",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "port": 8080,
@@ -21,12 +21,12 @@
       "notes": "",
       "versus": "undertow"
     },
-    "ebean-pg": {
-      "setup_file": "setup",
-      "db_url": "/pgsql/db",
-      "query_url": "/pgsql/queries?queries=",
-      "fortune_url": "/pgsql/fortunes",
-      "update_url": "/pgsql/updates?queries=",
+    "ebean-pgsql": {
+      "setup_file": "setup-ebean-pgsql",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Fullstack",
@@ -43,31 +43,12 @@
       "notes": "",
       "versus": "undertow"
     },
-    "ebean-pg-rythm": {
-      "setup_file": "setup",
-      "fortune_url": "/pgsql/forythm",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "Postgres",
-      "framework": "actframework",
-      "language": "Java",
-      "flavor": "None",
-      "orm": "Full",
-      "platform": "Undertow",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "act-ebean-pgsql-rythm",
-      "notes": "",
-      "versus": "undertow"
-    },
-    "ebean-my": {
-      "setup_file": "setup",
-      "db_url": "/mysql/db",
-      "query_url": "/mysql/queries?queries=",
-      "fortune_url": "/mysql/fortunes",
-      "update_url": "/mysql/updates?queries=",
+    "ebean-mysql": {
+      "setup_file": "setup-ebean-mysql",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Fullstack",
@@ -84,12 +65,12 @@
       "notes": "",
       "versus": "undertow"
     },
-    "morphia-mo": {
-      "setup_file": "setup",
-      "db_url": "/mongo/db",
-      "query_url": "/mongo/queries?queries=",
-      "fortune_url": "/mongo/fortunes",
-      "update_url": "/mongo/updates?queries=",
+    "morphia-mongo": {
+      "setup_file": "setup-morphia-mongo",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "fortune_url": "/fortunes",
+      "update_url": "/updates?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Fullstack",
@@ -105,29 +86,6 @@
       "display_name": "act-morphia",
       "notes": "",
       "versus": "undertow"
-    },
-    "jdbc-pg": {
-      "setup_file": "setup",
-      "db_url": "/jdbc/db",
-      "query_url": "/jdbc/queries?queries=",
-      "fortune_url": "/jdbc/fortunes",
-      "update_url": "/jdbc/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "Postgres",
-      "framework": "actframework",
-      "language": "Java",
-      "flavor": "None",
-      "orm": "Raw",
-      "platform": "Undertow",
-      "webserver": "None",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "act-jdbc-pgsql",
-      "notes": "",
-      "versus": "undertow"
     }
-
   }]
 }

+ 274 - 146
frameworks/Java/act/pom.xml

@@ -1,168 +1,296 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xmlns="http://maven.apache.org/POM/4.0.0"
+<!--
+  ~ Copyright 2016 The TEB Project for ACT Framework
+  ~
+  ~ The ACT framework Project licenses this file to you under the Apache License,
+  ~ version 2.0 (the "License"); you may not use this file except in compliance
+  ~ with the License. You may obtain a copy of the License at:
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+  ~ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+  ~ License for the specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<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>
-
-    <groupId>com.techempower</groupId>
-    <artifactId>actframework</artifactId>
-    <version>1.4.2</version>
-    <name>ActFramework Test</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <act.version>1.4.2</act.version>
-        <act-morphia.version>1.2.0</act-morphia.version>
-        <act-sql-common.version>1.1.1</act-sql-common.version>
-        <act-ebean2.version>1.1.2</act-ebean2.version>
-        <mysql.version>6.0.6</mysql.version>
-        <postgres-jdbc.version>42.1.1</postgres-jdbc.version>
-        <HikariCP.version>2.6.1</HikariCP.version>
-        <act-mustache.version>1.0.0</act-mustache.version>
-        <act-beetlsql.version>1.2.1</act-beetlsql.version>
-        <beetlsql.version>2.8.22</beetlsql.version>
-        <app.entry>com.techempower.act.AppEntry</app.entry>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>${mysql.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act</artifactId>
-            <version>${act.version}</version>
-        </dependency>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.techempower</groupId>
+  <artifactId>actframework</artifactId>
+  <packaging>jar</packaging>
+  <version>1.4.3</version>
+
+  <name>TEB ActFramework Project</name>
+  <description>TEB benchmark project with ActFramework</description>
+  <inceptionYear>2016</inceptionYear>
+
+  <organization>
+    <name>ActFramework</name>
+    <url>http://actframework.org</url>
+  </organization>
+
+  <parent>
+    <groupId>org.sonatype.oss</groupId>
+    <artifactId>oss-parent</artifactId>
+    <version>7</version>
+  </parent>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <maven.compiler.source>1.8</maven.compiler.source>
+    <maven.compiler.target>1.8</maven.compiler.target>
+    <scm.url>[email protected]:actframework/actframework.git</scm.url>
+
+    <maven-assemply-plugin.version>3.1.0</maven-assemply-plugin.version>
+    <maven-javadoc-plugin.version>3.0.0-M1</maven-javadoc-plugin.version>
+    <maven-source-plugin.version>3.0.1</maven-source-plugin.version>
+
+    <buildnumber-maven-plugin.version>1.4</buildnumber-maven-plugin.version>
+    <license-maven-plugin.version>1.13</license-maven-plugin.version>
+    <markdown-doclet.version>1.4</markdown-doclet.version>
+
+    <act.version>1.4.13-SNAPSHOT</act.version>
+    <act-ebean2.version>1.1.4</act-ebean2.version>
+    <act-mustache.version>1.2.1</act-mustache.version>
+    <act-morphia.version>1.2.1</act-morphia.version>
+    <HikariCP.version>2.7.1</HikariCP.version>
+    <mysql.version>5.1.44</mysql.version>
+    <osgl-ut.version>1.0.0-BETA-6</osgl-ut.version>
+    <postgres-jdbc.version>42.1.4</postgres-jdbc.version>
+    <morphia.version>1.3.2</morphia.version>
+    <ebean.version>10.4.7</ebean.version>
+
+    <app.entry>com.techempower.act.AppEntry</app.entry>
+  </properties>
+
+  <scm>
+    <connection>scm:git:${scm.url}</connection>
+    <developerConnection>scm:git:${scm.url}</developerConnection>
+    <url>${scm.url}</url>
+  </scm>
+
+
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven-assemply-plugin.version}</version>
+        <executions>
+          <execution>
+            <id>create-archive</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <configuration>
+              <appendAssemblyId>false</appendAssemblyId>
+              <descriptors>
+                <descriptor>src/assembly/pkg.xml</descriptor>
+              </descriptors>
+              <outputDirectory>${project.build.directory}/dist/</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>license-maven-plugin</artifactId>
+        <version>${license-maven-plugin.version}</version>
+        <configuration>
+          <licenseName>apache_v2</licenseName>
+          <verbose>false</verbose>
+        </configuration>
+        <executions>
+          <execution>
+            <id>first</id>
+            <goals>
+              <goal>update-file-header</goal>
+            </goals>
+            <phase>process-sources</phase>
+            <configuration>
+              <roots>
+                <root>src/main/java</root>
+                <root>src/test/java</root>
+              </roots>
+              <excludes>
+                <exclude>**/README</exclude>
+                <exclude>src/test/resources/**</exclude>
+                <exclude>src/main/resources/**</exclude>
+              </excludes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>buildnumber-maven-plugin</artifactId>
+        <version>${buildnumber-maven-plugin.version}</version>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>create</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <shortRevisionLength>4</shortRevisionLength>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <version>${maven-source-plugin.version}</version>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <goals>
+              <goal>jar-no-fork</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.osgl</groupId>
+      <artifactId>osgl-ut</artifactId>
+      <version>${osgl-ut.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.actframework</groupId>
+      <artifactId>act</artifactId>
+      <version>${act.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <version>1.1.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.actframework</groupId>
+      <artifactId>act-mustache</artifactId>
+      <version>${act-mustache.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>io.ebean</groupId>
+      <artifactId>persistence-api</artifactId>
+      <version>2.2.1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>io.ebean</groupId>
+      <artifactId>ebean-annotation</artifactId>
+      <version>2.4</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mongodb.morphia</groupId>
+      <artifactId>morphia</artifactId>
+      <version>${morphia.version}</version>
+    </dependency>
+
+  </dependencies>
+
+  <profiles>
+    <profile>
+      <id>mongo</id>
+      <build>
+        <finalName>teb-act-mongo</finalName>
+      </build>
+      <dependencies>
         <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act-morphia</artifactId>
-            <version>${act-morphia.version}</version>
+          <groupId>org.actframework</groupId>
+          <artifactId>act-morphia</artifactId>
+          <version>${act-morphia.version}</version>
         </dependency>
+      </dependencies>
+    </profile>
+    <profile>
+      <id>mysql</id>
+      <build>
+        <finalName>teb-act-mysql</finalName>
+      </build>
+      <dependencies>
         <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act-ebean2</artifactId>
-            <version>${act-ebean2.version}</version>
+          <groupId>org.actframework</groupId>
+          <artifactId>act-ebean2</artifactId>
+          <version>${act-ebean2.version}</version>
         </dependency>
         <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.1.6</version>
+          <groupId>io.ebean</groupId>
+          <artifactId>ebean</artifactId>
+          <version>${ebean.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.postgresql</groupId>
-            <artifactId>postgresql</artifactId>
-            <version>${postgres-jdbc.version}</version>
+          <groupId>mysql</groupId>
+          <artifactId>mysql-connector-java</artifactId>
+          <version>${mysql.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.zaxxer</groupId>
-            <artifactId>HikariCP</artifactId>
-            <version>${HikariCP.version}</version>
+          <groupId>com.zaxxer</groupId>
+          <artifactId>HikariCP</artifactId>
+          <version>${HikariCP.version}</version>
         </dependency>
+      </dependencies>
+    </profile>
+    <profile>
+      <id>pgsql</id>
+      <build>
+        <finalName>teb-act-pgsql</finalName>
+      </build>
+      <dependencies>
         <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act-mustache</artifactId>
-            <version>${act-mustache.version}</version>
+          <groupId>org.actframework</groupId>
+          <artifactId>act-ebean2</artifactId>
+          <version>${act-ebean2.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.ibeetl</groupId>
-            <artifactId>beetlsql</artifactId>
-            <version>${beetlsql.version}</version>
+          <groupId>io.ebean</groupId>
+          <artifactId>ebean</artifactId>
+          <version>${ebean.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act-beetlsql</artifactId>
-            <version>${act-beetlsql.version}</version>
+          <groupId>org.postgresql</groupId>
+          <artifactId>postgresql</artifactId>
+          <version>${postgres-jdbc.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.actframework</groupId>
-            <artifactId>act-sql-common</artifactId>
-            <version>${act-sql-common.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.avaje.ebean</groupId>
-                    <artifactId>ebean</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.avaje.ebean</groupId>
-                    <artifactId>ebean-agent</artifactId>
-                </exclusion>
-            </exclusions>
+          <groupId>com.zaxxer</groupId>
+          <artifactId>HikariCP</artifactId>
+          <version>${HikariCP.version}</version>
         </dependency>
-    </dependencies>
-
-    <build>
-        <finalName>act</finalName>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <version>2.5.5</version>
-                <executions>
-                    <execution>
-                        <id>create-archive</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <appendAssemblyId>false</appendAssemblyId>
-                            <descriptors>
-                                <descriptor>src/assembly/pkg.xml</descriptor>
-                            </descriptors>
-                            <outputDirectory>${project.build.directory}/dist/</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.3</version>
-                    <configuration>
-                        <source>1.8</source>
-                        <target>1.8</target>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>2.1.2</version>
-                    <configuration>
-                        <includePom>true</includePom>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>exec-maven-plugin</artifactId>
-                    <version>1.2.1</version>
-                    <configuration>
-                        <executable>java</executable>
-                        <arguments>
-                            <argument>-Xms512m</argument>
-                            <argument>-Xmx512m</argument>
-                            <argument>-classpath</argument>
-                            <classpath/>
-                            <argument>${app.entry}</argument>
-                        </arguments>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
+      </dependencies>
+    </profile>
+  </profiles>
+
 </project>

+ 4 - 2
frameworks/Java/act/run.sh → frameworks/Java/act/setup-ebean-mysql.sh

@@ -1,6 +1,8 @@
 #!/bin/bash
 
-mvn -U clean package
+fw_depends mysql java maven
+
+mvn -Pmysql clean package
 cd target/dist
 unzip *.zip
 
@@ -19,4 +21,4 @@ echo
 
 JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Xms1G -Xmx1G -Xss320k -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts"
 
-java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=local -Dxio.worker_threads.max=256 -Dmongo.host=localhost -Dmysql.host=localhost -Dpgsql.host=localhost -cp "$CP" $APP_ENTRY
+java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=mysql -Dxio.worker_threads.max=256 -Dmysql.host=${DBHOST} -cp "$CP" $APP_ENTRY &

+ 3 - 3
frameworks/Java/act/setup.sh → frameworks/Java/act/setup-ebean-pgsql.sh

@@ -1,8 +1,8 @@
 #!/bin/bash
 
-fw_depends mysql postgresql mongodb java maven
+fw_depends postgresql java maven
 
-mvn -U clean package
+mvn -Ppgsql clean package
 cd target/dist
 unzip *.zip
 
@@ -21,4 +21,4 @@ echo
 
 JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Xms1G -Xmx1G -Xss320k -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts"
 
-java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=prod -Dxio.worker_threads.max=256 -Dmongo.host=${DBHOST} -Dmysql.host=${DBHOST} -Dpgsql.host=${DBHOST} -cp "$CP" $APP_ENTRY &
+java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=pgsql -Dxio.worker_threads.max=256 -Dpgsql.host=${DBHOST} -cp "$CP" $APP_ENTRY &

+ 23 - 0
frameworks/Java/act/setup-json-plaintext.sh

@@ -0,0 +1,23 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean package
+cd target/dist
+unzip *.zip
+
+APP_ENTRY=com.techempower.act.AppEntry
+
+DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+BASE=$DIR/target/dist
+if [[ $DIR == *"dist" ]]; then
+  BASE=$DIR
+fi
+CP=$BASE/classes:$BASE/lib/*
+echo
+echo CLASSPATH: $CP
+echo
+
+JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Xms1G -Xmx1G -Xss320k -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts"
+
+java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=json_plaintext -Dxio.worker_threads.max=256 -cp "$CP" $APP_ENTRY &

+ 24 - 0
frameworks/Java/act/setup-morphia-mongo.sh

@@ -0,0 +1,24 @@
+#!/bin/bash
+
+fw_depends mongodb java maven
+
+mvn -U -Pmongo clean package
+cd target/dist
+unzip *.zip
+
+
+APP_ENTRY=com.techempower.act.AppEntry
+
+DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+BASE=$DIR/target/dist
+if [[ $DIR == *"dist" ]]; then
+  BASE=$DIR
+fi
+CP=$BASE/classes:$BASE/lib/*
+echo
+echo CLASSPATH: $CP
+echo
+
+JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Xms1G -Xmx1G -Xss320k -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts"
+
+java -server $JAVA_OPTS -Dapp.mode=prod -Dapp.nodeGroup=$GROUP -Dprofile=mongo -Dxio.worker_threads.max=256 -Dmongo.host=${DBHOST} -cp "$CP" $APP_ENTRY &

+ 36 - 25
frameworks/Java/act/source_code

@@ -1,28 +1,39 @@
+./act/pom.xml
+./act/src
+./act/src/main
+./act/src/main/bin
 ./act/src/main/bin/start
-./act/src/main/java/com/techempower/act/domain/IFortune.java
-./act/src/main/java/com/techempower/act/domain/IWorld.java
-./act/src/main/java/com/techempower/act/pgsql/domain/World.java
-./act/src/main/java/com/techempower/act/pgsql/domain/Fortune.java
-./act/src/main/java/com/techempower/act/pgsql/controller/WorldController.java
-./act/src/main/java/com/techempower/act/pgsql/controller/FortuneController.java
-./act/src/main/java/com/techempower/act/controller/FortuneControllerBase.java
-./act/src/main/java/com/techempower/act/controller/WorldControllerBase.java
-./act/src/main/java/com/techempower/act/controller/HelloController.java
-./act/src/main/java/com/techempower/act/mysql/domain/World.java
-./act/src/main/java/com/techempower/act/mysql/domain/Fortune.java
-./act/src/main/java/com/techempower/act/mysql/controller/WorldController.java
-./act/src/main/java/com/techempower/act/mysql/controller/FortuneController.java
+./act/src/main/bin/run.bat
+./act/src/main/bin/run
+./act/src/main/bin/start.bat
+./act/src/main/java
+./act/src/main/java/com
+./act/src/main/java/com/techempower
+./act/src/main/java/com/techempower/act
+./act/src/main/java/com/techempower/act/controller
+./act/src/main/java/com/techempower/act/controller/WorldController.java
+./act/src/main/java/com/techempower/act/controller/HelloWorldController.java
+./act/src/main/java/com/techempower/act/controller/FortuneController.java
 ./act/src/main/java/com/techempower/act/AppEntry.java
-./act/src/main/java/com/techempower/act/mongo/domain/World.java
-./act/src/main/java/com/techempower/act/mongo/domain/Fortune.java
-./act/src/main/java/com/techempower/act/mongo/controller/WorldController.java
-./act/src/main/java/com/techempower/act/mongo/controller/FortuneController.java
-./act/src/main/java/com/techempower/act/sql/domain/World.java
-./act/src/main/java/com/techempower/act/sql/domain/Fortune.java
-./act/src/main/java/com/techempower/act/sql/controller/SqlWorldControllerBase.java
-./act/src/main/resources/conf/prod/app.properties
-./act/src/main/resources/conf/common/app.properties
-./act/src/main/resources/conf/common/db.properties
+./act/src/main/java/com/techempower/act/model
+./act/src/main/java/com/techempower/act/model/World.java
+./act/src/main/java/com/techempower/act/model/Fortune.java
+./act/src/main/resources
+./act/src/main/resources/mustache
+./act/src/main/resources/mustache/fortunes.html
+./act/src/main/resources/conf
+./act/src/main/resources/conf/app.properties
+./act/src/main/resources/conf/pgsql
+./act/src/main/resources/conf/pgsql/db.properties
+./act/src/main/resources/conf/mysql
+./act/src/main/resources/conf/mysql/db.properties
+./act/src/main/resources/conf/mongo
+./act/src/main/resources/conf/mongo/db.properties
+./act/src/main/resources/conf/helloworld
+./act/src/main/resources/conf/helloworld/routes.conf
+./act/src/main/resources/app.version
 ./act/src/main/resources/logback.xml
-./act/src/main/resources/rythm/fortunes.html
-./act/src/assembly/pkg.xml
+./act/src/main/resources/com
+./act/src/main/resources/com/techempower
+./act/src/main/resources/com/techempower/act
+./act/src/main/resources/com/techempower/act/.version

+ 5 - 8
frameworks/Java/act/src/assembly/pkg.xml

@@ -31,7 +31,7 @@ under the License.
   <fileSets>
     <fileSet>
       <directory>${project.basedir}</directory>
-      <outputDirectory></outputDirectory>
+      <outputDirectory>.</outputDirectory>
       <includes>
         <include>README.md</include>
       </includes>
@@ -40,17 +40,13 @@ under the License.
       <directory>${project.build.directory}</directory>
       <outputDirectory></outputDirectory>
       <includes>
-        <include>classes/**</include>
-        <include>asset/**</include>
+        <include>classes/**/*.properties</include>
+        <include>classes/**/route*.*</include>
       </includes>
     </fileSet>
-    <fileSet>
-      <directory>${project.basedir}/src/main/asset</directory>
-      <outputDirectory>asset</outputDirectory>
-    </fileSet>
     <fileSet>
       <directory>${project.basedir}/src/main/bin</directory>
-      <outputDirectory></outputDirectory>
+      <outputDirectory>.</outputDirectory>
       <includes>
         <include>*</include>
       </includes>
@@ -64,3 +60,4 @@ under the License.
     </dependencySet>
   </dependencySets>
 </assembly>
+

+ 23 - 30
frameworks/Java/act/src/main/java/com/techempower/act/AppEntry.java

@@ -1,42 +1,35 @@
 package com.techempower.act;
 
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
 
 import act.Act;
-import act.Version;
-import act.boot.app.RunApp;
-import act.job.OnAppStart;
-import com.alibaba.fastjson.JSON;
-import org.osgl.http.H;
 
 @SuppressWarnings("unused")
 public class AppEntry {
 
-	private static final String HELLO_WORLD = "Hello, World!";
-
-	public static final class Message {
-
-		private final String message;
-
-		private Message(String message) {
-			this.message = message;
-		}
-
-		public String getMessage() {
-			return message;
-		}
-
-	}
-
-
-	@OnAppStart
-	public void routing() {
-		Act.getNonblock("/json", context -> context.resp()
-				.contentType(H.Format.JSON.contentType())
-				.writeContent(JSON.toJSONString(new Message(HELLO_WORLD))));
-	}
+	public static final String PROFILE_JSON_PLAINTEXT = "json_plaintext";
 
 	public static void main(String[] args) throws Exception {
-		RunApp.start("ACT Benchmark", Version.appVersion(), AppEntry.class);
+		Act.start();
 	}
 
-}
+}

+ 0 - 73
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/BeetlSqlController.java

@@ -1,73 +0,0 @@
-package com.techempower.act.beetlsql;
-
-import act.controller.Controller;
-import org.osgl.mvc.annotation.GetAction;
-import org.osgl.mvc.result.Result;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static com.techempower.act.controller.WorldControllerBase.randomWorldNumber;
-import static com.techempower.act.controller.WorldControllerBase.regulateQueries;
-
-/**
- * Testing for Act on BeetlSQL
- */
-@Controller("beetlsql")
-@SuppressWarnings("unused")
-public class BeetlSqlController extends Controller.Util {
-
-    @GetAction("db")
-    public final void singleQuery(World.Mapper worldMapper) {
-        json(findOne(worldMapper));
-    }
-
-    @GetAction("queries")
-    public final Result multipleQueries(String queries, World.Mapper worldMapper) {
-        int q = regulateQueries(queries);
-
-        World[] worlds = new World[q];
-        for (int i = 0; i < q; ++i) {
-            worlds[i] = findOne(worldMapper);
-        }
-        return json(worlds);
-    }
-
-    @GetAction("updates")
-    public final void updateQueries(String queries, World.Mapper worldMapper) {
-        int q = regulateQueries(queries);
-        List<World> retVal = doUpdate(q, worldMapper);
-        json(retVal);
-    }
-
-    @GetAction("fortunes")
-    public void fortunes(Fortune.Mapper fortuneMapper) {
-        List<Fortune> fortunes = fortuneMapper.all();
-        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        template("fortunes.mustache", fortunes);
-    }
-
-    protected List<World> doUpdate(int q, World.Mapper worldMapper) {
-        List<World> retVal = new ArrayList<>(q);
-        for (int i = 0; i < q; ++i) {
-            retVal.add(findAndModifyOne(worldMapper));
-        }
-        return retVal;
-    }
-
-    private World findOne(World.Mapper worldMapper) {
-        return worldMapper.single(randomWorldNumber());
-    }
-
-    private World findAndModifyOne(World.Mapper worldMapper) {
-        World world = findOne(worldMapper);
-        notFoundIfNull(world);
-        world.setRandomNumber(randomWorldNumber());
-        worldMapper.updateById(world);
-        return world;
-    }
-
-
-}

+ 0 - 20
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/Fortune.java

@@ -1,20 +0,0 @@
-package com.techempower.act.beetlsql;
-
-
-import act.db.DB;
-import org.beetl.sql.core.mapper.BaseMapper;
-
-import javax.persistence.Entity;
-
-@DB("beetl")
-@Entity
-public class Fortune extends com.techempower.act.sql.domain.Fortune {
-
-    public Fortune(Integer id, String message) {
-        super(id, message);
-    }
-
-    public interface Mapper extends BaseMapper<Fortune> {
-    }
-
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/beetlsql/World.java

@@ -1,17 +0,0 @@
-package com.techempower.act.beetlsql;
-
-
-import act.db.DB;
-import org.beetl.sql.core.mapper.BaseMapper;
-
-import javax.persistence.Entity;
-
-@DB("beetl")
-@Entity
-public class World extends com.techempower.act.sql.domain.World {
-    public World(Integer id, Integer randomNumber) {
-        super(id, randomNumber);
-    }
-
-    public interface Mapper extends BaseMapper<World> {}
-}

+ 54 - 0
frameworks/Java/act/src/main/java/com/techempower/act/controller/FortuneController.java

@@ -0,0 +1,54 @@
+package com.techempower.act.controller;
+
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import static act.controller.Controller.Util.renderTemplate;
+
+import act.db.Dao;
+import act.sys.Env;
+import act.util.Global;
+import act.view.NoImplicitTemplateVariable;
+import com.techempower.act.AppEntry;
+import com.techempower.act.model.Fortune;
+import org.osgl.mvc.annotation.GetAction;
+
+import java.util.Collections;
+import java.util.List;
+import javax.inject.Inject;
+
+@SuppressWarnings("unused")
[email protected](value = AppEntry.PROFILE_JSON_PLAINTEXT, except = true)
+public class FortuneController {
+
+    @Global
+    @Inject
+    private Dao<Integer, Fortune, ?> dao;
+
+    @GetAction("fortunes")
+    @NoImplicitTemplateVariable
+    public void fortunes() {
+        List<Fortune> fortunes = dao.findAllAsList();
+        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
+        Collections.sort(fortunes);
+        renderTemplate("fortunes", fortunes);
+    }
+
+}

+ 0 - 31
frameworks/Java/act/src/main/java/com/techempower/act/controller/FortuneControllerBase.java

@@ -1,31 +0,0 @@
-package com.techempower.act.controller;
-
-import act.controller.Controller;
-import act.db.Dao;
-import com.techempower.act.domain.IFortune;
-import com.techempower.act.mongo.domain.Fortune;
-import org.osgl.$;
-import org.osgl.mvc.annotation.GetAction;
-
-import java.util.Collections;
-import java.util.List;
-
-public abstract class FortuneControllerBase<MODEL_TYPE extends IFortune,
-        QUERY_TYPE extends Dao.Query<MODEL_TYPE, QUERY_TYPE>,
-        DAO_TYPE extends Dao<Integer, MODEL_TYPE, QUERY_TYPE>> extends Controller.Util  {
-
-    protected DAO_TYPE fortuneDao;
-
-    public FortuneControllerBase(DAO_TYPE fortuneDao) {
-        this.fortuneDao = $.notNull(fortuneDao);
-    }
-
-    @GetAction("fortunes")
-    public void fortunes() {
-        List<IFortune> fortunes = (List)fortuneDao.findAllAsList();
-        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        template("fortunes.mustache", fortunes);
-    }
-
-}

+ 53 - 0
frameworks/Java/act/src/main/java/com/techempower/act/controller/HelloWorldController.java

@@ -0,0 +1,53 @@
+package com.techempower.act.controller;
+
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import act.Act;
+import act.job.OnAppStart;
+import act.sys.Env;
+import com.alibaba.fastjson.JSON;
+import com.techempower.act.AppEntry;
+import org.osgl.http.H;
+
+@SuppressWarnings("unused")
[email protected](value = AppEntry.PROFILE_JSON_PLAINTEXT)
+public class HelloWorldController {
+
+    private static final String HELLO_WORLD = "Hello, World!";
+
+    public static final class Message {
+        private final String message;
+        private Message(String message) {
+            this.message = message;
+        }
+        public String getMessage() {
+            return message;
+        }
+    }
+
+    @OnAppStart
+    public void routing() {
+        Act.getNonblock("/json", context -> context.resp()
+                .contentType(H.Format.JSON.contentType())
+                .writeContent(JSON.toJSONString(new Message(HELLO_WORLD))));
+    }
+
+}

+ 118 - 0
frameworks/Java/act/src/main/java/com/techempower/act/controller/WorldController.java

@@ -0,0 +1,118 @@
+package com.techempower.act.controller;
+
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import static act.controller.Controller.Util.notFoundIfNull;
+
+import act.app.conf.AutoConfig;
+import act.db.Dao;
+import act.sys.Env;
+import act.util.Global;
+import com.techempower.act.AppEntry;
+import com.techempower.act.model.World;
+import io.ebean.annotation.Transactional;
+import org.osgl.$;
+import org.osgl.http.H;
+import org.osgl.mvc.annotation.GetAction;
+import org.osgl.mvc.annotation.ResponseContentType;
+import org.osgl.util.Const;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+import javax.inject.Inject;
+
+@AutoConfig
+@SuppressWarnings("unused")
[email protected](value = AppEntry.PROFILE_JSON_PLAINTEXT, except = true)
+@ResponseContentType(H.MediaType.JSON)
+public class WorldController {
+
+    /**
+     * This constant will get populated with the value set in
+     * `app.world.max_row` configuration item
+     */
+    private static final Const<Integer> WORLD_MAX_ROW = $.constant();
+
+    @Global
+    @Inject
+    private Dao<Integer, World, ?> dao;
+
+
+    @GetAction("db")
+    public World findOne() {
+        return dao.findById(randomWorldNumber());
+    }
+
+    @GetAction("queries")
+    @Transactional(readOnly = true)
+    public final World[] multipleQueries(String queries) {
+        int q = regulateQueries(queries);
+
+        World[] worlds = new World[q];
+        for (int i = 0; i < q; ++i) {
+            worlds[i] = findOne();
+        }
+        return worlds;
+    }
+
+    @GetAction("updates")
+    public final List<World> updateQueries(String queries) {
+        int q = regulateQueries(queries);
+        return doUpdate(q);
+    }
+
+    @Transactional
+    private List<World> doUpdate(int q) {
+        List<World> retVal = new ArrayList<>(q);
+        for (int i = 0; i < q; ++i) {
+            retVal.add(findAndModifyOne());
+        }
+        dao.save(retVal);
+        return retVal;
+    }
+
+    private World findAndModifyOne() {
+        World world = findOne();
+        notFoundIfNull(world);
+        world.randomNumber = randomWorldNumber();
+        return world;
+    }
+
+    private static int randomWorldNumber() {
+        return ThreadLocalRandom.current().nextInt(WORLD_MAX_ROW.get()) + 1;
+    }
+
+    private static int regulateQueries(String param) {
+        if (null == param || "".equals(param)) {
+            return 1;
+        }
+        try {
+            int val = Integer.parseInt(param);
+            if (val < 1) {
+                return 1;
+            }
+            return val > 500 ? 500 : val;
+        } catch (NumberFormatException e) {
+            return 1;
+        }
+    }
+}

+ 0 - 98
frameworks/Java/act/src/main/java/com/techempower/act/controller/WorldControllerBase.java

@@ -1,98 +0,0 @@
-package com.techempower.act.controller;
-
-import act.app.conf.AutoConfig;
-import act.controller.Controller;
-import act.db.Dao;
-import com.techempower.act.domain.IWorld;
-import io.ebean.annotation.Transactional;
-import org.osgl.$;
-import org.osgl.mvc.annotation.GetAction;
-import org.osgl.mvc.result.Result;
-import org.osgl.util.Const;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ThreadLocalRandom;
-
-@AutoConfig
-public abstract class WorldControllerBase<MODEL_TYPE extends IWorld,
-		QUERY_TYPE extends Dao.Query<MODEL_TYPE, QUERY_TYPE>,
-		DAO_TYPE extends Dao<Integer, MODEL_TYPE, QUERY_TYPE>> extends Controller.Util {
-
-	/**
-     * This constant will get populated with the value set in
-	 * `app.world.max_row` configuration item
-	 */
-	public static final Const<Integer> WORLD_MAX_ROW = $.constant();
-
-	protected DAO_TYPE worldDao;
-
-	public WorldControllerBase(DAO_TYPE worldDao) {
-		this.worldDao = $.notNull(worldDao);
-	}
-
-	@GetAction("db")
-	public final void singleQuery() {
-		json(findOne());
-	}
-
-	@GetAction("queries")
-    @Transactional(readOnly = true)
-	public final Result multipleQueries(String queries) {
-		int q = regulateQueries(queries);
-
-		IWorld[] worlds = new IWorld[q];
-		for (int i = 0; i < q; ++i) {
-			worlds[i] = findOne();
-		}
-		return json(worlds);
-	}
-
-	@GetAction("updates")
-	public final void updateQueries(String queries) {
-		int q = regulateQueries(queries);
-		List<MODEL_TYPE> retVal = doUpdate(q);
-		json(retVal);
-	}
-
-	@Transactional
-	protected List<MODEL_TYPE> doUpdate(int q) {
-		List<MODEL_TYPE> retVal = new ArrayList<>(q);
-		for (int i = 0; i < q; ++i) {
-			retVal.add(findAndModifyOne());
-		}
-		worldDao.save(retVal);
-		return retVal;
-	}
-
-	protected final MODEL_TYPE findOne() {
-		return worldDao.findById(randomWorldNumber());
-	}
-
-	protected final MODEL_TYPE findAndModifyOne() {
-		MODEL_TYPE world = findOne();
-		notFoundIfNull(world);
-		world.setRandomNumber(randomWorldNumber());
-		return world;
-	}
-
-	public static int regulateQueries(String param) {
-		if (null == param) {
-			return 1;
-		}
-		try {
-			int val = Integer.parseInt(param);
-			if (val < 1) {
-				return 1;
-			}
-			return val > 500 ? 500 : val;
-		} catch (NumberFormatException e) {
-			return 1;
-		}
-	}
-
-	public static int randomWorldNumber() {
-		return ThreadLocalRandom.current().nextInt(WORLD_MAX_ROW.get()) + 1;
-	}
-
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/domain/IFortune.java

@@ -1,17 +0,0 @@
-package com.techempower.act.domain;
-
-import act.util.SimpleBean;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * We need this interface because we want to support both MongoDB and MySQL in the same application
- */
-public interface IFortune extends SimpleBean, Comparable<IFortune> {
-    Integer getId();
-    String getMessage();
-
-    @Override
-    default int compareTo(@NotNull IFortune o) {
-        return getMessage().compareTo(o.getMessage());
-    }
-}

+ 0 - 12
frameworks/Java/act/src/main/java/com/techempower/act/domain/IWorld.java

@@ -1,12 +0,0 @@
-package com.techempower.act.domain;
-
-import act.util.SimpleBean;
-
-/**
- * We need this interface because we want to support both MongoDB and MySQL in the same application
- */
-public interface IWorld extends SimpleBean {
-    Integer getId();
-    Integer getRandomNumber();
-    void setRandomNumber(Integer randomNumber);
-}

+ 0 - 114
frameworks/Java/act/src/main/java/com/techempower/act/jdbc/JdbcController.java

@@ -1,114 +0,0 @@
-package com.techempower.act.jdbc;
-
-import act.app.DbServiceManager;
-import act.controller.Controller;
-import act.db.sql.SqlDbService;
-import com.techempower.act.beetlsql.Fortune;
-import com.techempower.act.beetlsql.World;
-import org.osgl.mvc.annotation.GetAction;
-import org.osgl.mvc.result.Result;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static com.techempower.act.controller.WorldControllerBase.randomWorldNumber;
-import static com.techempower.act.controller.WorldControllerBase.regulateQueries;
-
-/**
- * Testing for Act on raw JDBC
- */
-@Controller("jdbc")
-@SuppressWarnings("unused")
-public class JdbcController extends Controller.Util {
-
-    private Connection conn(DbServiceManager dsm) throws SQLException {
-        SqlDbService pgsql = dsm.dbService("pgsql");
-        return pgsql.dataSource().getConnection();
-    }
-
-    @GetAction("db")
-    public final void singleQuery(DbServiceManager dsm) throws SQLException {
-        try (Connection conn = conn(dsm)) {
-            throw json(findOne(query(conn)));
-        }
-    }
-
-    @GetAction("queries")
-    public final Result multipleQueries(String queries, DbServiceManager dsm) throws SQLException {
-        int q = regulateQueries(queries);
-
-        World[] worlds = new World[q];
-        try (Connection conn = conn(dsm)) {
-            PreparedStatement query = query(conn);
-            for (int i = 0; i < q; ++i) {
-                worlds[i] = findOne(query);
-            }
-        }
-        return json(worlds);
-    }
-
-    @GetAction("updates")
-    public final Result updateQueries(String queries, DbServiceManager dsm) throws SQLException {
-        int count = regulateQueries(queries);
-        World[] worlds = new World[count];
-        try (Connection conn = conn(dsm)) {
-            try (PreparedStatement query = query(conn);
-                 PreparedStatement update = update(conn)) {
-                for (int i = 0; i < count; i++) {
-                    final int id = randomWorldNumber();
-                    query.setInt(1, id);
-
-                    try (ResultSet results = query.executeQuery()) {
-                        if (results.next()) {
-                            worlds[i] = new World(id, results.getInt("randomNumber"));
-                            worlds[i].setRandomNumber(randomWorldNumber());
-                            update.setInt(1, worlds[i].getRandomNumber());
-                            update.setInt(2, id);
-                            update.execute();
-                        }
-                    }
-                }
-            }
-        }
-        return json(worlds);
-    }
-
-    @GetAction("fortunes")
-    public void fortunes(DbServiceManager dsm) throws SQLException {
-        List<Fortune> fortunes = new ArrayList<>();
-        try (Connection conn = conn(dsm)) {
-            ResultSet set = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
-                    .executeQuery("SELECT id, message FROM Fortune");
-            while (set.next()) {
-                fortunes.add(new Fortune(set.getInt(1), set.getString(2)));
-            }
-        }
-        fortunes.add(new Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        template("fortunes.mustache", fortunes);
-    }
-
-    private World findOne(PreparedStatement statement) throws SQLException {
-        World world;
-        statement.setInt(1, randomWorldNumber());
-        try (ResultSet resultSet = statement.executeQuery()) {
-            resultSet.next();
-            return new World(resultSet.getInt("id"), resultSet.getInt("randomNumber"));
-        }
-    }
-
-    private PreparedStatement query(Connection conn) throws SQLException {
-        return conn.prepareStatement("SELECT * FROM world WHERE id = ?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
-    }
-
-    private PreparedStatement update(Connection conn) throws SQLException {
-        return conn.prepareStatement("UPDATE World SET randomNumber = ? WHERE id= ?");
-    }
-
-
-}

+ 51 - 0
frameworks/Java/act/src/main/java/com/techempower/act/model/Fortune.java

@@ -0,0 +1,51 @@
+package com.techempower.act.model;
+
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import act.sys.Env;
+import act.util.SimpleBean;
+import com.techempower.act.AppEntry;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity(name = "fortune")
[email protected](value = "fortune", noClassnameStored = true)
[email protected](value = AppEntry.PROFILE_JSON_PLAINTEXT, except = true)
+public final class Fortune implements SimpleBean, Comparable<Fortune> {
+
+    @Id
+    @org.mongodb.morphia.annotations.Id
+    public Integer id;
+
+    public String message;
+
+    public Fortune(Integer id, String message) {
+        this.id = id;
+        this.message = message;
+    }
+
+    @Override
+    public int compareTo(Fortune o) {
+        return message.compareTo(o.message);
+    }
+
+}

+ 50 - 0
frameworks/Java/act/src/main/java/com/techempower/act/model/World.java

@@ -0,0 +1,50 @@
+package com.techempower.act.model;
+
+/*-
+ * #%L
+ * TEB ActFramework Project
+ * %%
+ * Copyright (C) 2016 - 2017 ActFramework
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import act.sys.Env;
+import act.util.SimpleBean;
+import com.techempower.act.AppEntry;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity(name = "world")
[email protected](value = "world", noClassnameStored = true)
[email protected](value = AppEntry.PROFILE_JSON_PLAINTEXT, except = true)
+public class World implements SimpleBean {
+
+    @Id
+    @GeneratedValue
+    @org.mongodb.morphia.annotations.Id
+    public Integer id;
+
+    @Column(name = "randomNumber")
+    public Integer randomNumber;
+
+    public World(Integer id, Integer randomNumber) {
+        this.id = id;
+        this.randomNumber = randomNumber;
+    }
+
+}

+ 0 - 20
frameworks/Java/act/src/main/java/com/techempower/act/mongo/controller/FortuneController.java

@@ -1,20 +0,0 @@
-package com.techempower.act.mongo.controller;
-
-import act.controller.Controller;
-import act.db.morphia.MorphiaQuery;
-import com.techempower.act.controller.FortuneControllerBase;
-import com.techempower.act.mongo.domain.Fortune;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-@Controller("mongo")
-public class FortuneController extends FortuneControllerBase<Fortune, MorphiaQuery<Fortune>, Fortune.Dao> {
-
-    @Inject
-    public FortuneController(Fortune.Dao fortuneDao) {
-        super(fortuneDao);
-    }
-
-}

+ 0 - 21
frameworks/Java/act/src/main/java/com/techempower/act/mongo/controller/WorldController.java

@@ -1,21 +0,0 @@
-package com.techempower.act.mongo.controller;
-
-import act.controller.Controller;
-import act.db.morphia.MorphiaQuery;
-import com.techempower.act.controller.WorldControllerBase;
-import com.techempower.act.mongo.domain.World;
-import org.osgl.mvc.result.NotFound;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-@Controller("mongo")
-public final class WorldController extends WorldControllerBase<World, MorphiaQuery<World>, World.Dao> {
-
-	@Inject
-	public WorldController(World.Dao worldDao) {
-		super(worldDao);
-	}
-
-}

+ 0 - 35
frameworks/Java/act/src/main/java/com/techempower/act/mongo/domain/Fortune.java

@@ -1,35 +0,0 @@
-package com.techempower.act.mongo.domain;
-
-import act.db.DB;
-import act.db.morphia.MorphiaDaoBase;
-import act.util.SimpleBean;
-import com.techempower.act.domain.IFortune;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.Id;
-
-@DB("mongo")
-@Entity(value = "fortune", noClassnameStored = true)
-public final class Fortune implements IFortune, SimpleBean {
-
-    @Id
-    private Integer id;
-
-    private String message;
-
-    public Fortune(Integer id, String message) {
-        this.id = id;
-        this.message = message;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public String getMessage() {
-        return this.message;
-    }
-
-    public static class Dao extends MorphiaDaoBase<Integer, Fortune> {}
-
-
-}

+ 0 - 37
frameworks/Java/act/src/main/java/com/techempower/act/mongo/domain/World.java

@@ -1,37 +0,0 @@
-package com.techempower.act.mongo.domain;
-
-
-import act.db.DB;
-import act.db.morphia.MorphiaDaoBase;
-import com.techempower.act.domain.IWorld;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.Id;
-
-@DB("mongo")
-@Entity(value = "world", noClassnameStored = true)
-public final class World implements IWorld {
-
-    @Id
-    private Integer id;
-
-    private Integer randomNumber;
-
-    public World(Integer id, Integer randomNumber) {
-        this.id = id;
-        this.randomNumber = randomNumber;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public Integer getRandomNumber() {
-        return randomNumber;
-    }
-
-    public void setRandomNumber(Integer randomNumber) {
-        this.randomNumber = randomNumber;
-    }
-
-    public static class Dao extends MorphiaDaoBase<Integer, World> {}
-}

+ 0 - 16
frameworks/Java/act/src/main/java/com/techempower/act/mysql/controller/FortuneController.java

@@ -1,16 +0,0 @@
-package com.techempower.act.mysql.controller;
-
-import act.controller.Controller;
-import com.techempower.act.mysql.domain.Fortune;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Controller("mysql")
-@Singleton
-public class FortuneController extends com.techempower.act.controller.FortuneControllerBase<Fortune,act.db.ebean2.EbeanQuery<Fortune>,Fortune.Dao> {
-    @Inject
-    public FortuneController(Fortune.Dao worldDao) {
-        super(worldDao);
-    }
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/mysql/controller/WorldController.java

@@ -1,17 +0,0 @@
-package com.techempower.act.mysql.controller;
-
-import act.controller.Controller;
-import com.techempower.act.mysql.domain.World;
-import com.techempower.act.sql.controller.SqlWorldControllerBase;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Controller("mysql")
-@Singleton
-public class WorldController extends SqlWorldControllerBase<World, World.Dao> {
-    @Inject
-    public WorldController(World.Dao worldDao) {
-        super(worldDao, true);
-    }
-}

+ 0 - 18
frameworks/Java/act/src/main/java/com/techempower/act/mysql/domain/Fortune.java

@@ -1,18 +0,0 @@
-package com.techempower.act.mysql.domain;
-
-
-import act.db.DB;
-import act.db.ebean2.EbeanDao;
-
-import javax.persistence.Entity;
-
-@DB("mysql")
-@Entity
-public class Fortune extends com.techempower.act.sql.domain.Fortune {
-
-    public Fortune(Integer id, String message) {
-        super(id, message);
-    }
-
-    public static class Dao extends EbeanDao<Integer, Fortune> {}
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/mysql/domain/World.java

@@ -1,17 +0,0 @@
-package com.techempower.act.mysql.domain;
-
-
-import act.db.DB;
-import act.db.ebean2.EbeanDao;
-
-import javax.persistence.Entity;
-
-@DB("mysql")
-@Entity
-public class World extends com.techempower.act.sql.domain.World {
-    public World(Integer id, Integer randomNumber) {
-        super(id, randomNumber);
-    }
-
-    public static class Dao extends EbeanDao<Integer, World> {}
-}

+ 0 - 29
frameworks/Java/act/src/main/java/com/techempower/act/pgsql/controller/FortuneController.java

@@ -1,29 +0,0 @@
-package com.techempower.act.pgsql.controller;
-
-import act.controller.Controller;
-import com.techempower.act.domain.IFortune;
-import com.techempower.act.pgsql.domain.Fortune;
-import org.osgl.mvc.annotation.GetAction;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import java.util.Collections;
-import java.util.List;
-
-@Controller("pgsql")
-@Singleton
-public class FortuneController extends com.techempower.act.controller.FortuneControllerBase<Fortune,act.db.ebean2.EbeanQuery<Fortune>,Fortune.Dao> {
-    @Inject
-    public FortuneController(Fortune.Dao worldDao) {
-        super(worldDao);
-    }
-
-    @GetAction("forythm/")
-    public void fortunesWithRythm() {
-        List<IFortune> fortunes = (List)fortuneDao.findAllAsList();
-        fortunes.add(new com.techempower.act.mongo.domain.Fortune(0, "Additional fortune added at request time."));
-        Collections.sort(fortunes);
-        renderTemplate("fortunes.html", fortunes);
-    }
-
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/pgsql/controller/WorldController.java

@@ -1,17 +0,0 @@
-package com.techempower.act.pgsql.controller;
-
-import act.controller.Controller;
-import com.techempower.act.pgsql.domain.World;
-import com.techempower.act.sql.controller.SqlWorldControllerBase;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Controller("pgsql")
-@Singleton
-public class WorldController extends SqlWorldControllerBase<World, World.Dao> {
-    @Inject
-    public WorldController(World.Dao worldDao) {
-        super(worldDao, false);
-    }
-}

+ 0 - 20
frameworks/Java/act/src/main/java/com/techempower/act/pgsql/domain/Fortune.java

@@ -1,20 +0,0 @@
-package com.techempower.act.pgsql.domain;
-
-
-import act.db.DB;
-import act.db.ebean2.EbeanDao;
-import org.beetl.sql.core.mapper.BaseMapper;
-
-import javax.persistence.Entity;
-
-@DB("pgsql")
-@Entity
-public class Fortune extends com.techempower.act.sql.domain.Fortune {
-
-    public Fortune(Integer id, String message) {
-        super(id, message);
-    }
-
-    public static class Dao extends EbeanDao<Integer, Fortune> {}
-
-}

+ 0 - 17
frameworks/Java/act/src/main/java/com/techempower/act/pgsql/domain/World.java

@@ -1,17 +0,0 @@
-package com.techempower.act.pgsql.domain;
-
-
-import act.db.DB;
-import act.db.ebean2.EbeanDao;
-
-import javax.persistence.Entity;
-
-@DB("pgsql")
-@Entity
-public class World extends com.techempower.act.sql.domain.World {
-    public World(Integer id, Integer randomNumber) {
-        super(id, randomNumber);
-    }
-
-    public static class Dao extends EbeanDao<Integer, World> {}
-}

+ 0 - 62
frameworks/Java/act/src/main/java/com/techempower/act/sql/controller/SqlWorldControllerBase.java

@@ -1,62 +0,0 @@
-package com.techempower.act.sql.controller;
-
-import act.db.ebean2.EbeanDao;
-import act.db.ebean2.EbeanQuery;
-import com.techempower.act.controller.WorldControllerBase;
-import com.techempower.act.sql.domain.World;
-import io.ebean.Transaction;
-
-import javax.persistence.PersistenceException;
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class SqlWorldControllerBase<
-        MODEL_TYPE extends World,
-        DAO_TYPE extends EbeanDao<Integer, MODEL_TYPE>>
-        extends WorldControllerBase<MODEL_TYPE, EbeanQuery<MODEL_TYPE>, DAO_TYPE> {
-
-    private boolean batchUpdate;
-
-    public SqlWorldControllerBase(DAO_TYPE worldDao, boolean batch) {
-        super(worldDao);
-        this.batchUpdate = batch;
-    }
-
-    protected List<MODEL_TYPE> doUpdate(int q) {
-        if (batchUpdate) {
-            return doBatchUpdate(q);
-        }
-        List<MODEL_TYPE> retVal = new ArrayList<>();
-        for (int i = 0; i < q; ++i) {
-            Transaction tx = worldDao.ebean().beginTransaction();
-            try {
-                MODEL_TYPE world = findAndModifyOne();
-                worldDao.save(world);
-                tx.commit();
-                retVal.add(world);
-            } catch (PersistenceException e) {
-                tx.rollback();
-                throw e;
-            }
-        }
-        return retVal;
-    }
-
-    private List<MODEL_TYPE> doBatchUpdate(int q) {
-        List<MODEL_TYPE> retVal = new ArrayList<>();
-        Transaction tx = worldDao.ebean().beginTransaction();
-        try {
-            for (int i = 0; i < q; ++i) {
-                MODEL_TYPE world = findAndModifyOne();
-                retVal.add(world);
-            }
-            worldDao.save(tx, retVal);
-            tx.commit();
-        } catch (PersistenceException e) {
-            tx.rollback();
-            throw e;
-        }
-        return retVal;
-    }
-
-}

+ 0 - 39
frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/Fortune.java

@@ -1,39 +0,0 @@
-package com.techempower.act.sql.domain;
-
-import act.data.annotation.Data;
-import act.util.SimpleBean;
-import com.techempower.act.domain.IFortune;
-
-import javax.persistence.Id;
-import javax.persistence.MappedSuperclass;
-
-@Data
-@MappedSuperclass
-public class Fortune implements IFortune, SimpleBean {
-
-    @Id
-    private Integer id;
-
-    private String message;
-
-    public Fortune(Integer id, String message) {
-        this.id = id;
-        this.message = message;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public String getMessage() {
-        return this.message;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-}

+ 0 - 44
frameworks/Java/act/src/main/java/com/techempower/act/sql/domain/World.java

@@ -1,44 +0,0 @@
-package com.techempower.act.sql.domain;
-
-
-import act.data.annotation.Data;
-import com.techempower.act.domain.IWorld;
-
-import javax.persistence.Column;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.MappedSuperclass;
-
-@Data
-@MappedSuperclass
-public class World implements IWorld {
-
-    @Id
-    @GeneratedValue
-    private Integer id;
-
-    @Column(name = "randomNumber")
-    private Integer randomNumber;
-
-    public World(Integer id, Integer randomNumber) {
-        this.id = id;
-        this.randomNumber = randomNumber;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public Integer getRandomNumber() {
-        return randomNumber;
-    }
-
-    public void setRandomNumber(Integer randomNumber) {
-        this.randomNumber = randomNumber;
-    }
-
-}

+ 3 - 0
frameworks/Java/act/src/main/resources/com/techempower/act/.version

@@ -0,0 +1,3 @@
+artifact=${project.artifactId}
+version=${project.version}
+build=${buildNumber}

+ 2 - 3
frameworks/Java/act/src/main/resources/conf/common/app.properties → frameworks/Java/act/src/main/resources/conf/app.properties

@@ -1,9 +1,8 @@
-# follow Java world convention
-http.port=8080
-
 # disable charset output for JSON response
 render.json.output_charset=false
 
+http.port=8080
+
 # disable CLI service
 cli=false
 

+ 0 - 59
frameworks/Java/act/src/main/resources/conf/common/db.properties

@@ -1,59 +0,0 @@
-db.instances=mongo,mysql,pgsql,beetl
-
-mongo.host=localhost
-
-db.mongo.impl=act.db.morphia.MorphiaPlugin
-db.mongo.uri=mongodb://${mongo.host}/hello_world?maxPoolSize=256
-
-mysql.host=localhost
-
-db.mysql.impl=act.db.ebean2.EbeanPlugin
-db.mysql.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC
-db.mysql.username=benchmarkdbuser
-db.mysql.password=benchmarkdbpass
-db.mysql.maxConnections=256
-db.mysql.minConnections=128
-db.mysql.poolServerPrepStmts=true
-db.mysql.autoCommit=true
-db.mysql.prepStmtCacheSqlLimit=2048
-db.mysql.prepStmtCacheSize=4096
-db.mysql.alwaysSendSetIsolation=false
-db.mysql.cacheCallableStmts=true
-db.mysql.cachePrepStmts=true
-db.mysql.useLocalSessionState=true
-db.mysql.jdbcCompliantTruncation=false
-db.mysql.elideSetAutoCommits=true
-db.mysql.zeroDateTimeBehavior=convertToNull
-db.mysql.traceProtocol=false
-db.mysql.useUnbufferedInput=false
-db.mysql.useReadAheadInput=false
-db.mysql.maintainTimeStats=false
-db.mysql.cacheRSMetadata=true
-
-pgsql.host=localhost
-
-db.pgsql.impl=act.db.ebean2.EbeanPlugin
-db.pgsql.url=jdbc:postgresql://${pgsql.host}:5432/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true
-db.pgsql.username=benchmarkdbuser
-db.pgsql.password=benchmarkdbpass
-db.pgsql.maxConnections=256
-db.pgsql.minConnections=128
-db.pgsql.autoCommit=true
-db.pgsql.prepStmtCacheSqlLimit=2048
-db.pgsql.prepStmtCacheSize=4096
-db.pgsql.alwaysSendSetIsolation=false
-db.pgsql.cacheCallableStmts=true
-db.pgsql.cachePrepStmts=true
-db.pgsql.useLocalSessionState=true
-db.pgsql.jdbcCompliantTruncation=false
-db.pgsql.elideSetAutoCommits=true
-db.pgsql.zeroDateTimeBehavior=convertToNull
-db.pgsql.traceProtocol=false
-db.pgsql.useUnbufferedInput=false
-db.pgsql.useReadAheadInput=false
-db.pgsql.maintainTimeStats=false
-db.pgsql.cacheRSMetadata=true
-
-db.beetl.impl=act.db.beetlsql.BeetlSqlPlugin
-db.beetl.datasource.provider=shared:pgsql
-db.beetl.beetlsql.nc=org.beetl.sql.core.DefaultNameConversion

+ 0 - 0
frameworks/Java/act/src/main/resources/routes.conf → frameworks/Java/act/src/main/resources/conf/json_plaintext/routes.conf


+ 0 - 2
frameworks/Java/act/src/main/resources/conf/local/db.properties

@@ -1,2 +0,0 @@
-db.mysql.maxConnections=10
-db.pgsql.maxConnections=10

+ 4 - 0
frameworks/Java/act/src/main/resources/conf/mongo/db.properties

@@ -0,0 +1,4 @@
+mongo.host=localhost
+
+db.impl=act.db.morphia.MorphiaPlugin
+db.uri=mongodb://${mongo.host}/hello_world?maxPoolSize=256

+ 24 - 0
frameworks/Java/act/src/main/resources/conf/mysql/db.properties

@@ -0,0 +1,24 @@
+mysql.host=localhost
+
+db.impl=act.db.ebean2.EbeanPlugin
+db.url=jdbc:mysql://${mysql.host}:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts=true&cacheRSMetadata=true&serverTimezone=UTC
+db.username=benchmarkdbuser
+db.password=benchmarkdbpass
+db.maxConnections=256
+db.minConnections=128
+db.poolServerPrepStmts=true
+db.autoCommit=true
+db.prepStmtCacheSqlLimit=2048
+db.prepStmtCacheSize=4096
+db.alwaysSendSetIsolation=false
+db.cacheCallableStmts=true
+db.cachePrepStmts=true
+db.useLocalSessionState=true
+db.jdbcCompliantTruncation=false
+db.elideSetAutoCommits=true
+db.zeroDateTimeBehavior=convertToNull
+db.traceProtocol=false
+db.useUnbufferedInput=false
+db.useReadAheadInput=false
+db.maintainTimeStats=false
+db.cacheRSMetadata=true

+ 23 - 0
frameworks/Java/act/src/main/resources/conf/pgsql/db.properties

@@ -0,0 +1,23 @@
+pgsql.host=localhost
+
+db.impl=act.db.ebean2.EbeanPlugin
+db.url=jdbc:postgresql://${pgsql.host}:5432/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true
+db.username=benchmarkdbuser
+db.password=benchmarkdbpass
+db.maxConnections=256
+db.minConnections=128
+db.autoCommit=true
+db.prepStmtCacheSqlLimit=2048
+db.prepStmtCacheSize=4096
+db.alwaysSendSetIsolation=false
+db.cacheCallableStmts=true
+db.cachePrepStmts=true
+db.useLocalSessionState=true
+db.jdbcCompliantTruncation=false
+db.elideSetAutoCommits=true
+db.zeroDateTimeBehavior=convertToNull
+db.traceProtocol=false
+db.useUnbufferedInput=false
+db.useReadAheadInput=false
+db.maintainTimeStats=false
+db.cacheRSMetadata=true

+ 2 - 22
frameworks/Java/act/src/main/resources/logback.xml

@@ -11,36 +11,16 @@
         </encoder>
     </appender>
 
-    <logger name="act" level="OFF" additivity="false">
+    <logger name="act" level="ERROR" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
 
-    <logger name="act.Act" level="OFF" additivity="false">
-        <appender-ref ref="STDOUT" />
-    </logger>
-
-    <!--<logger name="act.route" level="OFF" additivity="false">-->
-        <!--<appender-ref ref="STDOUT" />-->
-    <!--</logger>-->
-
-    <!--<logger name="act.event" level="OFF" additivity="false">-->
-        <!--<appender-ref ref="STDOUT" />-->
-    <!--</logger>-->
-
-    <!--<logger name="act.job" level="OFF" additivity="false">-->
-        <!--<appender-ref ref="STDOUT" />-->
-    <!--</logger>-->
-
-    <!--<logger name="act.db" level="OFF" additivity="false">-->
-        <!--<appender-ref ref="STDOUT" />-->
-    <!--</logger>-->
-
     <logger name="metric" level="OFF">
         <appender-ref ref="STDOUT" />
     </logger>
 
     <!-- By default, the level of the root level is set to DEBUG -->
-    <root level="OFF">
+    <root level="ERROR">
         <appender-ref ref="STDOUT" />
     </root>
 </configuration>

+ 0 - 0
frameworks/Java/act/src/main/resources/mustache/fortunes.mustache → frameworks/Java/act/src/main/resources/mustache/fortunes.html


+ 0 - 21
frameworks/Java/act/src/main/resources/rythm/fortunes.html

@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-@args List<com.techempower.act.domain.IFortune> fortunes;
-<html>
-<head>
-    <title>Fortunes</title>
-</head>
-<body>
-<table>
-    <tr>
-        <th>id</th>
-        <th>message</th>
-    </tr>
-    @for (fortunes) {
-    <tr>
-        <td>@_.getId()</td>
-        <td>@_.getMessage()</td>
-    </tr>
-    }
-</table>
-</body>
-</html>