From 9c9972282716e335b879a9e4b593fca21875d4d7 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Apr 2018 13:47:56 -0400 Subject: [PATCH 001/309] bot checkin --- light-java/a/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-java/a/pom.xml b/light-java/a/pom.xml index 82ad2f3..2b37e57 100644 --- a/light-java/a/pom.xml +++ b/light-java/a/pom.xml @@ -142,7 +142,7 @@ io.swagger swagger-annotations - ${version.swagger} + ${version.swagger-parser} From 879eda564c0dcfb5126e792764f047925e15a4e1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Apr 2018 21:47:32 -0400 Subject: [PATCH 002/309] bot checkin --- light-java/a/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-java/a/pom.xml b/light-java/a/pom.xml index 2b37e57..72bd938 100644 --- a/light-java/a/pom.xml +++ b/light-java/a/pom.xml @@ -24,7 +24,7 @@ 4.5.3 2.6 2.5 - 1.10 + 1.11 1.2 3.1.2 1.1.7 From 7b1354465c8e1a2556eb2cee75d2cf78645b66c6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 6 Apr 2018 22:08:44 -0400 Subject: [PATCH 003/309] bot checkin --- light-java/a/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-java/a/pom.xml b/light-java/a/pom.xml index 72bd938..41b5a24 100644 --- a/light-java/a/pom.xml +++ b/light-java/a/pom.xml @@ -20,7 +20,7 @@ 0.1.7 2.8.2 1.7.21 - 0.5.2 + 0.6.3 4.5.3 2.6 2.5 From 6b8a9576f71c0e1b21371869f4136580969b9934 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 6 Apr 2018 22:32:17 -0400 Subject: [PATCH 004/309] bot checkin --- light-java/a/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-java/a/pom.xml b/light-java/a/pom.xml index 41b5a24..dbd908f 100644 --- a/light-java/a/pom.xml +++ b/light-java/a/pom.xml @@ -30,7 +30,7 @@ 1.1.7 4.12 2.1.0-beta.124 - 1.4.10.Final + 1.4.23.Final 2.2.0 4.5.2 4.1.2 From fcb583431664a28aa9423698c05e6e106d2ba3ca Mon Sep 17 00:00:00 2001 From: Michael Siepmann Date: Sat, 12 May 2018 23:41:22 +0200 Subject: [PATCH 005/309] Updated to Spring boot 1.5.13 --- spring-boot-tomcat/pom.xml | 6 +++--- spring-boot-undertow/pom.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-boot-tomcat/pom.xml b/spring-boot-tomcat/pom.xml index 3330e33..57cd6c9 100644 --- a/spring-boot-tomcat/pom.xml +++ b/spring-boot-tomcat/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.example - myproject - 0.0.1-SNAPSHOT + spring-boot-tomcat + 0.1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent - 1.4.1.RELEASE + 1.5.13.RELEASE diff --git a/spring-boot-undertow/pom.xml b/spring-boot-undertow/pom.xml index 942f3ac..ff49e34 100644 --- a/spring-boot-undertow/pom.xml +++ b/spring-boot-undertow/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.example - myproject - 0.0.1-SNAPSHOT + spring-boot-undertow + 0.1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent - 1.4.1.RELEASE + 1.5.13.RELEASE From b920e1f340449d097c2db366bb1f469a633a599a Mon Sep 17 00:00:00 2001 From: Michael Siepmann Date: Sat, 12 May 2018 23:42:41 +0200 Subject: [PATCH 006/309] Added benchmarks for Spring 2.0.2 with reactive rest service. --- spring-boot2-tomcat/README.md | 4 ++ spring-boot2-tomcat/pom.xml | 27 ++++++++++++++ .../src/main/java/Example.java | 29 +++++++++++++++ spring-boot2-undertow/README.md | 4 ++ spring-boot2-undertow/pom.xml | 37 +++++++++++++++++++ .../src/main/java/Example.java | 30 +++++++++++++++ 6 files changed, 131 insertions(+) create mode 100644 spring-boot2-tomcat/README.md create mode 100644 spring-boot2-tomcat/pom.xml create mode 100644 spring-boot2-tomcat/src/main/java/Example.java create mode 100644 spring-boot2-undertow/README.md create mode 100644 spring-boot2-undertow/pom.xml create mode 100644 spring-boot2-undertow/src/main/java/Example.java diff --git a/spring-boot2-tomcat/README.md b/spring-boot2-tomcat/README.md new file mode 100644 index 0000000..05dce7b --- /dev/null +++ b/spring-boot2-tomcat/README.md @@ -0,0 +1,4 @@ +``` +mvn clean install +mvn spring-boot:run +``` diff --git a/spring-boot2-tomcat/pom.xml b/spring-boot2-tomcat/pom.xml new file mode 100644 index 0000000..84e62c4 --- /dev/null +++ b/spring-boot2-tomcat/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.example + spring-boot2-tomcat + 0.1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.0.2.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + 1.8 + + diff --git a/spring-boot2-tomcat/src/main/java/Example.java b/spring-boot2-tomcat/src/main/java/Example.java new file mode 100644 index 0000000..20a4c60 --- /dev/null +++ b/spring-boot2-tomcat/src/main/java/Example.java @@ -0,0 +1,29 @@ +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.ServerResponse; + +@RestController +@EnableAutoConfiguration +public class Example { + + @Bean + public RouterFunction route() { + return RouterFunctions + .route(RequestPredicates.GET("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), + serverRequest -> ServerResponse.ok() + .contentType(MediaType.TEXT_PLAIN) + .body(BodyInserters.fromObject("Hello World!"))); + } + + public static void main(String[] args) { + SpringApplication.run(Example.class, args); + } + +} \ No newline at end of file diff --git a/spring-boot2-undertow/README.md b/spring-boot2-undertow/README.md new file mode 100644 index 0000000..05dce7b --- /dev/null +++ b/spring-boot2-undertow/README.md @@ -0,0 +1,4 @@ +``` +mvn clean install +mvn spring-boot:run +``` diff --git a/spring-boot2-undertow/pom.xml b/spring-boot2-undertow/pom.xml new file mode 100644 index 0000000..38567d0 --- /dev/null +++ b/spring-boot2-undertow/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.example + spring-boot2-undertow + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.0.2.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-undertow + + + + + 1.9 + + diff --git a/spring-boot2-undertow/src/main/java/Example.java b/spring-boot2-undertow/src/main/java/Example.java new file mode 100644 index 0000000..50da451 --- /dev/null +++ b/spring-boot2-undertow/src/main/java/Example.java @@ -0,0 +1,30 @@ +import org.springframework.boot.*; +import org.springframework.boot.autoconfigure.*; +import org.springframework.context.annotation.Bean; +import org.springframework.http.MediaType; +import org.springframework.stereotype.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.ServerResponse; + +@RestController +@EnableAutoConfiguration +public class Example { + + @Bean + public RouterFunction route() { + return RouterFunctions + .route(RequestPredicates.GET("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), + serverRequest -> ServerResponse.ok() + .contentType(MediaType.TEXT_PLAIN) + .body(BodyInserters.fromObject("Hello World!"))); + } + + public static void main(String[] args) { + SpringApplication.run(Example.class, args); + } + +} \ No newline at end of file From 40f503769c6a802aa41449964557fc71707e9a6f Mon Sep 17 00:00:00 2001 From: Gelin Luo Date: Sun, 20 May 2018 12:04:37 +1000 Subject: [PATCH 007/309] update actframework to 1.8.8-RC6 --- actframework/pom.xml | 16 ++-------------- actframework/run.sh | 4 ++-- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/actframework/pom.xml b/actframework/pom.xml index cae9189..0297a90 100644 --- a/actframework/pom.xml +++ b/actframework/pom.xml @@ -6,12 +6,12 @@ microservice.benchmark act-benchmark - 1.6.0 + 1.8.8.0 org.actframework act-starter-parent - 1.6.4.0 + 1.8.8.2 @@ -26,16 +26,4 @@ - - ${project.artifactId}-${project.version} - - - - - org.actframework - act - 1.7.0-SNAPSHOT - - - diff --git a/actframework/run.sh b/actframework/run.sh index 87a9553..0ac1d0b 100755 --- a/actframework/run.sh +++ b/actframework/run.sh @@ -1,5 +1,5 @@ #!/bin/sh mvn -U clean package cd target/dist -unzip * -./start +tar xzf *.gz +./run From 24f91eb1f692b8b42887e0b186e83da005e9a426 Mon Sep 17 00:00:00 2001 From: Gelin Luo Date: Sat, 9 Jun 2018 10:43:58 +1000 Subject: [PATCH 008/309] update act to 1.8.8-RC8 --- actframework/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actframework/pom.xml b/actframework/pom.xml index 0297a90..5484ba6 100644 --- a/actframework/pom.xml +++ b/actframework/pom.xml @@ -6,12 +6,12 @@ microservice.benchmark act-benchmark - 1.8.8.0 + 1.8.8.1 org.actframework act-starter-parent - 1.8.8.2 + 1.8.8.4 From bbccdb8c3c12d4b2d5e89b5960feb60a73568da8 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 5 Jul 2018 14:53:36 -0400 Subject: [PATCH 009/309] bot checkin --- light-java/a/src/main/java/Example.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-java/a/src/main/java/Example.java b/light-java/a/src/main/java/Example.java index 2a63956..3dfb83a 100644 --- a/light-java/a/src/main/java/Example.java +++ b/light-java/a/src/main/java/Example.java @@ -1,4 +1,4 @@ -import com.networknt.server.HandlerProvider; +import com.networknt.handler.HandlerProvider; import io.undertow.Handlers; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; From 09477e997d6c9921486de183ab4e6de10bc9afd1 Mon Sep 17 00:00:00 2001 From: Nicholas Azar Date: Wed, 25 Jul 2018 17:44:05 -0400 Subject: [PATCH 010/309] Adding spring-boot2-webflux-netty example --- spring-boot2-webflux-netty/.gitignore | 21 +++++++++++++ spring-boot2-webflux-netty/pom.xml | 31 +++++++++++++++++++ .../java/com/networknt/example/Example.java | 17 ++++++++++ .../networknt/example/ExampleApplication.java | 14 +++++++++ 4 files changed, 83 insertions(+) create mode 100755 spring-boot2-webflux-netty/.gitignore create mode 100644 spring-boot2-webflux-netty/pom.xml create mode 100644 spring-boot2-webflux-netty/src/main/java/com/networknt/example/Example.java create mode 100644 spring-boot2-webflux-netty/src/main/java/com/networknt/example/ExampleApplication.java diff --git a/spring-boot2-webflux-netty/.gitignore b/spring-boot2-webflux-netty/.gitignore new file mode 100755 index 0000000..7079a3e --- /dev/null +++ b/spring-boot2-webflux-netty/.gitignore @@ -0,0 +1,21 @@ +target/ +bower_components/ +node_modules/ +dist/ +.idea/¬¬¬∑ +.tmp/ +.settings +.metadata/ +*.iml +*.log +*.tmp +*.zip +*.bak +dependency-reduced-pom.xml + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +.DS_Store + +.idea diff --git a/spring-boot2-webflux-netty/pom.xml b/spring-boot2-webflux-netty/pom.xml new file mode 100644 index 0000000..81f566e --- /dev/null +++ b/spring-boot2-webflux-netty/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + com.networknt + spring-boot2-webflux-netty + 1.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.RELEASE + + + 1.8 + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.0.3.RELEASE + + + + + \ No newline at end of file diff --git a/spring-boot2-webflux-netty/src/main/java/com/networknt/example/Example.java b/spring-boot2-webflux-netty/src/main/java/com/networknt/example/Example.java new file mode 100644 index 0000000..b276a46 --- /dev/null +++ b/spring-boot2-webflux-netty/src/main/java/com/networknt/example/Example.java @@ -0,0 +1,17 @@ +package com.networknt.example; + +import org.reactivestreams.Publisher; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import reactor.core.publisher.Mono; + +@Controller +public class Example { + + @GetMapping("/") + @ResponseBody + public Publisher handler() { + return Mono.just("Hello world!"); + } +} \ No newline at end of file diff --git a/spring-boot2-webflux-netty/src/main/java/com/networknt/example/ExampleApplication.java b/spring-boot2-webflux-netty/src/main/java/com/networknt/example/ExampleApplication.java new file mode 100644 index 0000000..016a2d9 --- /dev/null +++ b/spring-boot2-webflux-netty/src/main/java/com/networknt/example/ExampleApplication.java @@ -0,0 +1,14 @@ +package com.networknt.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.reactive.config.EnableWebFlux; + +@SpringBootApplication +@EnableWebFlux +public class ExampleApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(ExampleApplication.class); + } +} From de091e902b7c3e9c8cc394ff4081dbd9690b6b4b Mon Sep 17 00:00:00 2001 From: Nicholas Azar Date: Wed, 25 Jul 2018 17:44:30 -0400 Subject: [PATCH 011/309] Adding spring-boot2-webflux-undertow example --- spring-boot2-webflux-undertow/.gitignore | 21 ++++++++++ spring-boot2-webflux-undertow/pom.xml | 41 +++++++++++++++++++ .../java/com/networknt/example/Example.java | 17 ++++++++ .../networknt/example/ExampleApplication.java | 14 +++++++ 4 files changed, 93 insertions(+) create mode 100755 spring-boot2-webflux-undertow/.gitignore create mode 100644 spring-boot2-webflux-undertow/pom.xml create mode 100644 spring-boot2-webflux-undertow/src/main/java/com/networknt/example/Example.java create mode 100644 spring-boot2-webflux-undertow/src/main/java/com/networknt/example/ExampleApplication.java diff --git a/spring-boot2-webflux-undertow/.gitignore b/spring-boot2-webflux-undertow/.gitignore new file mode 100755 index 0000000..7079a3e --- /dev/null +++ b/spring-boot2-webflux-undertow/.gitignore @@ -0,0 +1,21 @@ +target/ +bower_components/ +node_modules/ +dist/ +.idea/¬¬¬∑ +.tmp/ +.settings +.metadata/ +*.iml +*.log +*.tmp +*.zip +*.bak +dependency-reduced-pom.xml + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +.DS_Store + +.idea diff --git a/spring-boot2-webflux-undertow/pom.xml b/spring-boot2-webflux-undertow/pom.xml new file mode 100644 index 0000000..3c6be3d --- /dev/null +++ b/spring-boot2-webflux-undertow/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + com.networknt + spring-boot2-webflux-undertow + 1.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.RELEASE + + + 1.8 + + + + org.springframework.boot + spring-boot-starter-webflux + + + spring-boot-starter-reactor-netty + org.springframework.boot + + + + + org.springframework.boot + spring-boot-starter-undertow + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.0.3.RELEASE + + + + + \ No newline at end of file diff --git a/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/Example.java b/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/Example.java new file mode 100644 index 0000000..b276a46 --- /dev/null +++ b/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/Example.java @@ -0,0 +1,17 @@ +package com.networknt.example; + +import org.reactivestreams.Publisher; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import reactor.core.publisher.Mono; + +@Controller +public class Example { + + @GetMapping("/") + @ResponseBody + public Publisher handler() { + return Mono.just("Hello world!"); + } +} \ No newline at end of file diff --git a/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/ExampleApplication.java b/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/ExampleApplication.java new file mode 100644 index 0000000..016a2d9 --- /dev/null +++ b/spring-boot2-webflux-undertow/src/main/java/com/networknt/example/ExampleApplication.java @@ -0,0 +1,14 @@ +package com.networknt.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.reactive.config.EnableWebFlux; + +@SpringBootApplication +@EnableWebFlux +public class ExampleApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(ExampleApplication.class); + } +} From cb43c4abd4fa01f98542615c339c362b45bed7b1 Mon Sep 17 00:00:00 2001 From: wangkai <8738115@qq.com> Date: Wed, 8 Aug 2018 09:40:15 +0800 Subject: [PATCH 012/309] * update baseio --- baseio/lib/baseio-all-3.2.6-SNAPSHOT.jar | Bin 0 -> 513419 bytes baseio/pom.xml | 109 ++++++++++++----------- baseio/src/main/java/example/Server.java | 96 +++++++++++--------- 3 files changed, 111 insertions(+), 94 deletions(-) create mode 100644 baseio/lib/baseio-all-3.2.6-SNAPSHOT.jar diff --git a/baseio/lib/baseio-all-3.2.6-SNAPSHOT.jar b/baseio/lib/baseio-all-3.2.6-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..b4c45a070d8dc715650e13c3551e1b70dde3e056 GIT binary patch literal 513419 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

F- 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

G| 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

BaOautApdLSgaf0cifr<) zf)*49n)L4BR$9HX03lJ}G`SoSJ;#d|vc| zs7-4AerCBwK)Op|%y~&-BZ_*7wlbydWbF>>^^iviFZ5oZ(v;=|)y|4Nw>D)G2=9*e zzK+y*1LDAVQWr{d%1#9vp>7YfTY2wogJ&Bl4fdEoOEinK=`*u*06k#N~h!UM>zFX8>s`f z+gf2beXL>Yk!>Q+D6P{dFqkphun}GHHxFdwb2evQhZz&!gHxbZjKY=agqG^k2T}Kq zXRYzY6DF_b0F&i_{nG&$$$?QB!-_#$#sCqX0%?nbyWgV11pEmAqFB?}jsdPlGtAF?Wn46-nPd>k2O-(^_ zzaljHM8@v$Jhx=u^PFFU>As&M$^M$t+Af)^;aL>vi96EeW=_~%IQfnCJ9p03dIb&+ z&SMntbvFE`$Nb?M_io>jeK%7i?_fdXlZj<8N2UXTm4`lql{S(QoSCUnEmG zo2xh9vdtFkSH5}dlp~)mC;!jAqMmttOwy=@PUawM%#Fj-o7w~xwvN?HgP36*_;c=I zL08B26q^IbT2NEBP!7dXYPJue7!-@lkOmIX^xOFqs^7fkq`u(ONR&HKbHI6|5e0qb#`|#b;@psq&%dF5yNRNA%^$!*b`iZ$yYJMl|>QjF43)2 zZ6^luqE%pM*VHx;FR3@M`@{7_N1l?S&0H%)Wz;=YYY*@0 z&q5!Dpc0xZjp`?|r6TwOs^&L3Hr6=Dz%E24NjY6jhFA6Px;uqGK7z8txaJ4WU7g)CjSo22+Ce z88PJ8(E^Ef2L(tq=O#t0I*~8vvlOwS1JByIGN!ccrK}rCR_D+ogATVY8p+lNmd30O1}NNVjX#}*JEhlL>RX4@J3t(PNQ zj1L9=Ad9e&84zZgg&P`Awvr7@c4|?MmQfVQfXVzACm@pO^D2V44kt6n(=&xtGKg>y zeCth%2#7U$fpU_!f2s#scl$0M{E!X|w!uPFtEF5u)<`Jv(3C8dTq_xNmfE3t^QoFM zCz5L6oJWmnD!eoGBwj7UwvwzRQ(OKOX+>)(HrO9GhA$^jc> z7>q&F5Ouf}W+#e)PlFAmnEh0!%t4gp=D89}q*|=e^+zdM=2Bg)?A8LrIqICH8w4)= zB6M(6iCy45T{hgrq+AwtWl9o zWBg0fF;Tp-aPmfvgt%nRm>uLm`1JLV%;CroREIG|(QB83k?I*1f^sCZ&o*202?Ek& zEv0#-(k2U-b$))3{|;MY+`7lW8b9gxZ9M-&9fT^H1SRb1mO3zpf>G8SxT6`ofqnte zLW%6O%D+|1V~SSv12v5ar+E_xng-UuFp$((cRp%~Dp)$Bti06Z2*Y80Ijc8%3?L_< zGz!5_Yh^W@KSiM?(RW}f7g&c3xE$Uk#dR6|$zk260-@?8l1aW&FANH6O1+4I@}(>H zP$pL=DzFhdnB~ik46c729^~;uMN*U;0^FI#?3DhTR#vbPD@@;AZLiiQoI}!0h!M}( zCjPEUcv7r{>Xg&GI^~G6^{hlFBTP;e&d?ML>tY&~(^6DB8f$Kr?F2XLX?|*cGl0AB{`gga zm^AC#Kz#bZYCDha7A+lj=wx#wEe1`d88l5(U#=Vy)np#|>=G7|1V;P`2cp}fwEJl$ zNthV=H=?*{`XNNFFHmFuQ*qpug?le?X-ZR$%B)lPc%n`4SSFZW9t@)EK{~5OPwx)6 ztJEeN}JV^Nlj*PVqh3s|y1}?S1p=Mu$_BPQQvb=QJ8rUEBon%SOdicd361mjx4 zNVk}#RUsSj#J<&aKY5p0nDemvTNSkEJ3lg*$bqezVIG4JYGHCAYjF)Ds@X82r5Ly)2l zXy{~iu+WWkrTrHG)fAsi7n_kPP-LIiG1!BLrAeYMl)VwNnPGpj9L86b*8_UL1c>qto8=eB#-$Hu}5;8zxmNqULMp-w)u1Zjq zxWrzVkz0~<#Q144O7c&h_8sh)e4~7ow)$!akAk`PY;!N^M(8k>qaou&@o59#Q;=rFi%_~K5xcM$;^knj zndy0aU$WJC#PAX5@AB5EMo*{cB+6hPQgOY|GRL4YmFf6fARSSEtcK za$y89>nL%Sq&E$C*`Y2{Z0IJ9p)7Xw=hFMDGG&M?No(eW(9J}WCf-u&Hl0#3TFA4o zJ6#@o-Cic?Gq%S~3*MG7CL&b{`A)PyNB&$0>lL>yxWo2o1g5>qvgY7R@0PP3H^k-m z;L7uGa_tNe)kRrC79r=8IH+;bQ_i4wjErw%E_b*Q;sqoYG1!LLZ6R{~3>90|Y_6Ud zU98+KAa7&1>>|;{jnrhHt*tqmzYhQ@EoC_myqHL%=LHYF?3^VrjJKm_1@=Iq-lUh< zxfej=7`eBy@dYssKm7(0|0Z@lR`cHZJ-~ceofJU+PGp<3{eg|7E#yL3bgLwyXa+i! zisD9d^UL>$y3R6e~NlB8Qz}sL>_p5%KDbS zN0Vby!d1JFm3x_(e3;*XJml1}cZr+OQgxDW?*(RS2s}hm6wVR@kmgRSbD>8qmP$3E zowN@DmbKPnI8wZ*%@53C7KY?%CU9ZQ62B-MGhWgQxgNaY6tQufX-L5?5-;t@;ysqX zW4bK36p%LY2rgDKZXr>S znW$p)mUzml{%{qXe0H`lI1n>;ujJ=YeX~+}fs#Q1wk%)L6Wq3)oV`bsL%36;Dt|P( zbnv)j-UIX>C&^tsD*bWGT`j<}bwYUM((+k5BVjX(y3GHs3 z#lsBY12+nH`Q)1AEnGx5NhYehcy8qujT1ZYl1oIY_btwYQ98Y5@XC;Wen0z|oaLdA zIsajiFtLm*Wybh)jHa=SEN15No}9$ci4{C5Lh8$Wkhju*018cd?b0I|Hcq!z+TN8OvNlpv0JAE@` z3u3h#qBHH|MY{Dl?(EHkUbIcyqqa=hmgH#?%iuz0^veb)8q45dhp!*Zi{{BogAg9c zd;f+2<>bSyi6WWvVSfQALu#oAEO4?@_(z)_Vu9U3S0V9(p+;pU#})A{)!0-4RCQKa zpqHEzy({Wq-P6oB1n5yoy2BEFbCTv{qoAG93qwQ*r$x4ykU?MJ`!TWmc)K$sTp;20l zRC@knJf-AxNJ*TwQ}?4{MAnHRoNN-G-V&T*_YdYT1nt_gP2;P*e%dZ2^USkxmm(ga zG@{^lKWtGxW%R!)<%+c|F3DG*0|Xqw?6MCudUp_G$LU&}zH)!j8=VlE1_;m}_D6L? z;==x#Vc-CIF?{EE!Y=NRftMB_{>mkTfYt4g!g zQ(j3TEpI@>DvZM)+e9^PSAh#Md+lpU)cHDk$OQm;!WRAQ=x<{2Z~~d$I|2l=!1n`c zfU7&?v|hYxr|TJT_ckJr^1vp@*dHX5^lMW@px2iW+nb7pf5jU;>_e}Y?lBlEoMQT> zv2E{A1Ke zv@(CJ+s5~^B=n85@Jv06w0L~ z29D=1mP*yjr3L1H(-L8nh95xlJ|L%G5T|^>4|sq#zB%qUM}=SPJMk{vl(O!nq+&Uo z0)yR&gwb5;gZmUh52Md|Ob}B2!7>k*yh0Jrit?WU2h%flzoSTT3rM6#%qS?wjn$V# z&D=kKwVyy#os^`PFqzX2B<*-Ow{_ufe4>m)9H3luo|9K4{&CR9r`xdU)^BXujJq6N zZ8O9}0pZu`_^D$Ry{FvKzB$MBLKTUwO{NabgyM*qHN#qN#8st7#)7}dRu|!aQA~By z8Q#?xF+xs&CJ;+XnGC-{>2;;DED+9VVN$&H5J<@v#0fSIc3fF_j+ZC^B$xItMGkDjVE%t?FVjb(k00Gl?A1D%cvB&t=yHUX*Drx1l(R! zaYbGwgQ|c58biVsQy?{6%srilktylu22ArOzi_W^oH3ko0<;_(uPX*Y>OWueo+E`mN6v zJ=CEBxjjbI?izE(@vK6&`=(-?1XNF28(r;iZ-^mm9%iSE$Y5kP2#$8Y-tJ zwbPSYokI)?)ib_7U&YO4fk92cpk21$yA$O_cCph8p;>n<_-^UCT+y@hf%EjAHGvkTGoEMGCwNjoWKkcU-nQ#ML@e28RAH4hbC*BGG}EL*IsEXdW0|ODZpu zGBCaOatP_=2O?zv(L-Ah=-;t5NgXY-jAbIY%nJ-lima76HJifQPTaq&dEZ&&if#o% z^J+;;t`tYb8k5q>X|oWSxRF`-czCMGjJ{shwM_s}g?#h=_(k^gsua@E!)JPFesKdi z_gsz3j9_~OKvG76{~7bW8WB=alzHOxRbrp}hj?Gw0EIu(9K5_7dPIR+xEV+PRC%X1 zcPO^(I1_AGfqw& z0FFNPrzdstBhk<;mq-+4lz6a4s~xw+m_CRXMAi#|~yuc|p{FBY63H30n1WCu4glpE*J&knO+ z*TqR*L{j#0GdyoR14Z$r)lxhCf6*$^pk1 z8YPOB;GrQOpcNP2@C{{LXxT#4pa|YH{v>o$#>exgLvDjU8l~A&r@UPwaQPe%`-vzg zZ1t*u-=(mQi(sG_)a7~;)u=C-PTRz`BdpVnm1j$5eA|^c@x0q_&!>Fzvk}G#htKTy z`VA3TcxSnUWO*ozdxP)T`8d3zJR5eyJW%0-z&JI@;UWRW4t#!zn>z%&h6bJS zQP%QRPr6dcfd=ctLk8|??kyo<(on1k z-0z71B$-I;?gQdcHkX|@IPtIcBD$;s5ub3%?ZV>pj9g?-$$@qO)Lkoy?Ph<GS`k zwz+lf0cH_6IAzC>1iXw=%e}s=LM&T9m~aSfMe)S&S<8tjsnVkwnSQw^IeFjOWUP`V z3=-GS6HH6Ts2ydi>Mh%!0GGy7i|CoPS;;%U-ZjyTSa1zw=H6CkSBM+r0j#C=3`dVIx<-a+H9%8L{=bBNwJSFd1Ihis>g z?}`@tEkFKjjBfIk(0YgLy;mnyO_T|Evs4pGwm_b$Squl^10y(`Dl9~j^|Qk=Wk;X) za*f~oY#qm>^(hIzlexw};!u|GQc`FCMC|`S=FT#VshFv}*1&UG$so|ZpicoOPuxo| z?X^yq)=<#<9iv5_clYx1?%p;*;K?ZAi}^L=#}PqNv84H)csCBXO!!NW1y!+v|;brG^2xAEUAiO=IZFttZ2rXmo{ z36cG5_z>H*yksif6OsfG*jh8-GJ?)-x#eOr^$^lD<1k*$2bTx_kDl!x>LcDLo`7o0 zjNpR4Y7zqk%=`jr1{Bstz^>5D87A>iW-f`)vDbZi2GnLg%A3{>G1@~#BUnQ~p31C1 zRez)W3VugmaxEiex4Nmk6{b=dYJHHLa&x;}6Zhrvt=^@YfJ(Y}jZ{6u>_u)SO^8E1 z37q)Yt#B@~0SR;Lw4{Y82?Kr>D2)^A5vQW04~~A(8>fDcge5T-qQzKpsN$SUl<}Z= zdfDD0x|xgIB&s0Cnnd1aEEkt~h9sGnUWhlF0{~N=0?s%@KzQv8Fl1k0lHF*vamTE- zGTNesS`CNf?;IwGcCLYhQ?90KdvmxZbPKd9gi)lnqX8vc={VrOGz`{GS-p>yyiemW z_;3<>dPbR_9Ul&b*IW~U?0;K3SbF>@(yY|hUM8B1;;cPeMtf3+0kD@lZj|AOs>(JK zNnJhbT%@3@YobgiOi;}7o;OTDvFW&q0TySdLoq00wKRajEhj^o5>;^ zvtqfyl|qz33Yt(wBDwzaMe*q7k_LspN^6(Pn8U5jk+CokQACqQNddRhvfH}Eu?OsZc*KWF)cSFBqrl{B4HjcVyBh4#O-{k<}9RHX*ZGT`SY(fS-Q$awLN^0J$bLS z`zyEo=d>K9O0}>vNNn3chlyU5*M$rX+S60us&l@b@1K(~Pb@i2OyS+P-QCH&I=R7` zLVd>Co|1H&+AgN&C=F&|wu?AWmnaR)t2_Oew?GqU!8I{QNhG_jUeZ)5A!Nn?TY;aj zDt~(5-Vc3jNV+w0ktqBcf#c&lLKR2NS+h;{D{?bh!CyItyK2+jq7Iq{&tq#s9tW|A zZHc!7y?$DeZWF$W>}AB-23HNXh;=8qVcl8RX1RqNWDR!2GR2Z?)40RmUXHr<>g;76 zaD`n9Y=i#|yH57>AN4f8G2=uE%k;0#gE z57kgzA#X?>Qg6^#Ww)po=L5FX4|lhO7n%e2=C6N_3ac;Gwa=RRkDjTgFSw1b4y&*0 zx{scjr!Sz5nGmZlyt)sc$&2H)Pd@#33a;y%zT-h%d>=^NUp^tq+-ASw`9^#A`dePu zqEK}QYHp+nAOFqZ@sDt{PwL+d_TL1$#Piw$Za z8_v&&#>ILAh6o4r@*3-myO|_6UI_&&|0oZYTm~fT%|d6Btz*$%I|+pl=r(4+7Lb}n zbzJ#fvUVsJ^mFx_W4bg@S`}RVtpY9B-g^?=uWID#-k;8No@5{|n)Hg+egO#|gxBibA+5;Cw*z+#;I^hvU(?4W@Bm^- z$l?__xWPN593wh)L)SAw7$T}K5deWD%z1Yu@33caiahyc0LY~P(4&KRutNkB@{vP5 zp1@pF^1x_x?BWJj64eegxbFidn1fGj*~6%_V^igF-Wi1FOYDeJBd$QQ4VSvAYyPNxi(eP^DlNz8}3nfAGU)i8w*9!J>co{O|!5^)u|X{}Z_3<`j@% zlQ7wp`mhQgI_?Jr;{)Oi>^;oEivI>WC!&XR!&Qs1>QAIZxE^kXCl`d$L)Zd4U?H^O zhtn&gm$Ff4kmBSm%}p)X2sCGti#=fxyAj$xW%iwRknzLa4YU@#K@;I}XwZZob3G=k z3f*R?@}UL3&AQh`N{kp*ykkDcNh6?S%$v(MtCv>lLX@&(ey1Fz~sg#Y>SfRz0rZ!%&x8HHm|d zB>jBg*bGM~5-uQj5sdcunSF$O%F5Un&20@1e7ai%2ZwEmMtRspy*2$m5Y0Og?E|5d zb@w(x4waNJMNLq8@U>{M9iEtTy!>b7ewccE%PRX?J|gYn<Otc(-SehOj-|QVs+A$|8$EV;>K7iH}W#&!3>)|tU z%ApUxTpLy8+t4Q5+5Xkv5GrPt#REhk=DG zNPGK2b_NLI-W%t;4|JxPEvLI8O*z~<5Ki5WDD4?B2>GR5w~!Z)+ID8e zQ1tn%eUm*+O1d)oeJ4ZJl!b|56}@c+%dpr3oalSrUeITkEPR{K@ZxFh_@c(`3@c>4 zQ)ihq>9|UmhS74`^Xl!<2NM?Y;}Pa(!s5Jr+cN3Pmdu%aO%H2Z*C(ga#(7Kur%q4E zUgxLVo!bX%^j;cn`9x$1h>3Rjh*YkS36F#Uslsm)L=vX+1Y^>Kfkq*z5KQ_oOhzm@ zA`?N2Nh=}g)F_IewZL>n#Zrt03Kmn=0@TSPC%6XCCZlY@vdQGd@HB~IMosk#_v-y4 zq}6-uXNKihnLB$GOEQ!KXzJ{hVTMw(b2s{>X?wv-oM%WC@R8iwg8jbI1Vj3jwfsI> zRM=v5=GCN~n9Jeo5trj8&M{iiBi%V`A274Rb$apyMutL3a<#(1reJwO+WsS5 z(mFSzjK&GNDZr-aX_ou!$Ce0A-bNXc6S#BmRUz%Hb|To8w053nDV7tRbI4Tz?(ByX z!NZToz@r7>S>Q8J9x*gQ_&JiF;dc4UvtHvlvRj)u@j9+}yX##Ar? zSp~4hKrn!$IsF4NtY3C<-YgR{j7M^?;LM!y?7b65Vv zV*cfk0zAt(9=u(E|G<05k0%H57E21in=?8w91r5nqko`~_Tw!mn>|MM>(1pi;}OoI zqriI$hsv!n$9#ZA5!g}q^?-vSxT6U9@KZX(yAWemmKo_S%>>XhYjvWU{_{g*1%P$p zVMes|!#ZE##I^m`x)d8g(~Pz;$tJjYj%L=S9c3MGpPS``)fizDGJXPQ#vO$1 zY({sa`Q~;12Rs728iuC0+SFnb#U#i^yt*u7SU>UDVhX#uSx|IrAZ#FPP*h-)u`*Ja zVxV-;RNzz)P2e$vCX`}Ol@<2ARz@$ktXsFVQS)%zO9W(twH0?mRn>?U8Ovo54)Kos zT^8{b^`my6d4IK->(BO|-+|+KwIw%%`gFTP{gQ!QRUvDl&6k!5zh8I-x^o&+Xki~x zNWsOta~Dk^z#+k*Lm)z+LLft+>5z12Cy}EOOdz}ZsRC7@Y7nE5-vSE)3xZUkYvOD^ z5Ot|;(NFCvt$VS_ZrwC@LaqrOxaFr&`1PBK{UIEQVF)sbca8L`=_4PI-TRgFh34J+ zOX=}QKoMmU;swGYVrju7jJUOrOdw35Od(C7kHsuk#!NlC8odGqONelK2#iLp$X=XEKG{^zeon-_Fqh^n@K8bHF7eQzN;y3N zrE!=47Id^}N$M;gP-(oDpRr_V=6PsKs+^s`(zq)o*q)jtSv0vkHBVQ`cNJ(G{}*fT6kQ3MZVOjz+ZEeR#kOtRS+Od% zZQHh0Nh-E&+o_XpclSQsJ^qV-_dYjSBgq)+;(e?+Dev3po&}q9ABt??y^CHo6Sj`? zdKR3wP8PS$!hELV37q@n%5zv>BBFg34th@f;mV^l>m?pKbcZI|^&>1REHkprJ1*;m z#C|xZ=y>Ea;a#XEomo%=Y-22I*!0R)OEOf-%A3Nlbz1bqAns2foB`s_>Iq`XzNMea zcq({v1-MHyPzw?ZlnWLr(vSNDS+w5N6Hd=22V7?O0#{WOOQ~j^2ZlNzMR-?ZPsJ|tfMe0zVC`)KO zMx)6zff!h8>KwV#h{gd5g2`llh~x3r2yvt$%>Aj2DkHPY`1wQP#0`Z(v9=OVfQdy= zLCy3)HpE$dLC8FdIkt@!y_ufrn#(Wbkb9CfR0@I|v&oL94bRI*Q&ECHM;lK->p{M& z*YR-lTD7&c+r3bk+CggeW5H^8&x}6(y%yt)@vQmpc7C)UjaW51&ObJ5cOpUf2Bz@L z`!m=woAxq6;M~UjnmDe0!r1+o4%b`0j>f}S-d&qOWUw0%aq(UXmU8JFv89JmM+p@r z%KJ$pN-QA}9rA7@!AQZ62v!Nd?+7sJ3tfV-U*ei2iJ>sr!-i;BsWQnGMFWM{c$|4LOGcY`Fp;B| ze*!DiapcgDxppFXG9=C@d7A`$L>>b{lFH8j2P}jz;sPcR!$M$>*4W=Xhe6PY_v4@Y z&@6bsi%A$oNy?h;%_dppwIckk+VL0}`MRB&KgpA0MKyp%gee;{5eylSWnM=Y@pn7Iz#@p?e9!wM;5rWFJhP*48ffo!Vlo5pn&6$tj zfZ3FdX(sk*VnavDY)$7y^)$>8sVohJ6GePEEaK@rPpaz_O*N9&6^S*B>FOJ?ZzshK zBfVaT1$?>H(-<_5=3m^}lS?E}Q}s0*FEwRH?E#sQ@FFNkY=;5r<#C}y=&Tf;)QDz0 z?Sb37KqIo~#kJf@$TZ^sII{$&1teIwHxz?5)wcREw4~Fn7+e}jsw$mqQq^%b>{5{% zcauk_76a9y4+m@A;VVo=les-BJBaODIWGOiT zmZjR`J*=hESXH!|@{LcYZ)zAtYIf>`sG})Ef?*_8lNyQ3DFLQ!tp1iRs(iR}j&njq zlt5Zt-aE>?XBnzr-!^ItU&8dFxXNCJszQ5}K_eqm2DUYAphIfofqpMt;Sp*mQL=Df zT0LcpfG1hj(4I`59iQSE{EIp0U0~RCr0KkbLWFV)mU%xTt%$^%wbwNGR^cHNO*v*Ko!;}KclCToZS=A<4EQx9;U2%N^b+rsj)CzEnq$1%OmmZZa zpTUKzG;3iQ=V&#RQZHtPzq( zkEVE9JFMANpz4HU1q6h!-bp{k-xO79d)la3yW>q>z1<2&z~O*4VmB;68pQTK8-{R0 zP3{vFllctiV>NJ<`Hb09f=+F=sZ`kLsocPZUmhB=zK<~5MR;Q?`J@n`;x0=5R6)5B z%*Syf_C6ZMw?_}m=ICI|blMnygHbG{!CK-(jD_grbdGwRdT?jGnYh_GVWhg0K#S%) zRVexAA)q|{Zhc3=(PFB&airovF-=h+L+P!VvBcMT*Y3Fkg>R5=ImgWEc*ejOAPVCt zx6b>$tX;PCc+k|XOvbdiB=gv)C16R?%7rb5__o`Saqn(w(zG$L-!K&I)`K@`O8EF& z0k2i+%B3(LGut&E1o0p|mlIbgM3y#i=h6>Z;Pkm7CYZ&L@l2liCSxXf-mLZ$Or1|J zOCr*}pSkWxE8mjoPr7vMId? zs^+b(Uv03!o=!JG)j-bfeFl_o`alk0=6-F^*Wl)n8aJCHvwFZ% zCr4&swB+p72wYRf=h5lGE7CrAZVGwQfkV!%IrVZd5vBpnfAE&^dAqLZcdUb?FqTW!m-L60C`Gn%uk!5-XtQ@( z+ipa>%K9h#RdG1qn7R$QI@ThWXME#6EcYyVJ%%Y9lGYnoPduUJ8pN+v95tJ-3k}eh zo1DGZR!5e49nQa&G~rK7pbtPFh9$Tl_40stOlpsrJj^h_ zJY(W!bWm^ShI_pefa&j6q^wg_uh3mHKE!{ZMZ4QaeICo`@p(+O;~PL4KD%05I{Y?7(qU7+K~l)^j8*Q*rWu=&(H}5?+MKFw z6apu6lpFli+(I-4RR*7hFakiYe-%n?3aoX?D68U$+t$H`17WId3^Q?VUaELeDV=Tl zG$Ocy;N#y|l0ff61;oEP-y~n%Lhk=0gA;Ldv~&D>_NJnx_Ju6+DNARJ3=9gZiB`8M zp`Hq+ss%=CfhjJ?6u^vP-N=e(7-%le0P5LeWp(9!Y(&uhx~sJGMLw<8G3NMC*Hd8k z0pVS{@x~xv?JY?6mhqA0&1W|GezTpT@=ffzi2#2dL|t?MVlE`<+pt5@P(|l0cEl3e zAV{EH?QO9?=$;ldS*QA&1LI9IaFa-Dnwwakal|#lO|^d+`i{vi57;RB%<$kFv?6W) z$RGstEUloyt`OK9ZU59DD_9yjlKyVHzjcJU*)B1dW&|YDO&xHT2!O#MpyMrYsD#&x zEZ5vafE9KF(Tz^2l6Lq|YC&Vi`; ze~1N^CAXHiF+eHndx8XUwhD~tX=OY9nmoBvqq;gXnz__qQ(!vMvFz~*mJsViVs%sH z4~mjvvdZMmDoY7A`u&GY1@S>%vQh7aty_BKm3RmpMS0+2Xz$YY6Lk{wJ3 zmJ(VTnbZrkp4Ebpa>GmX(8l0QDd!a~m4<3ZMy3V2)sr!zY&mu0O4O@K8XdZa!m?~~ z3%WEntACgjN{kLH+Z-hI*NmVgiijKbH`OWTDBexoyDiyOPjMait6L$6EV30|p{O3m z6t45ErZpFJ<3;8s_^*c4>vomJ(kOCT24x!`OkU*_ZWK#a*CQU|`8|XnES*gptQ%Ca z^4oz;ZHjbhWRl(ebr3KRoT9(eba(y!&O3quJi?Yj9?IPfyUX1TZ3tcxz`(KVj_Mz} z7xW#OhD^PbhD<}cPP|^cPP`%2G|nK-B(H8-W1nF>F5}i$pQzM@ft*X-`$m50SW)8-w=q;gioZ{H@6@pg<@Ha$IG+Oo07Z zUts_x#2mcrk5mVSv)sen$xwWJ+8y|8I>gmJtr3E6&+fd4973zQg6>7^gqOX}1eXL7 zC~gXx&{!jKYtD;xzTkAD;2zvFp4XcpAs0F^%Q<@pz3FJW{o{^VY$+sS;{9-+RGnc}ysfty-3Jrz+*JzoK~Y zy_YoR!4?;3w%aB*C@x7yc|L}?DbwKgSf3=IWZ@Gjc3}Fvk4~x%y z7WoYA$8)UU{XI7aJZ1%@O?P`c?N;*+E!RDA^|&Rn&9+*Eeh*r>NZ2H6hpD4@mFyv> zg{f7zN&QgO&Co32-7)V}z2^2?xwSQ4W6(BO9i zSV=>1v3^ez<)O$GT6D+J4?GZQD?^EVf*L;xX#O3?mK` zdEDUP)oj(l`R0p}%#brJlfvFdG%V9j?pZj*Wm7LxC)di^I-}z6qG{*P?V+P*_nRnh z6ZL$c#^^FUiY8?TazpCa^B^W8*uJ9pDiNhP*;=W`yB++~J^5cXwwbLp@5>kXT*4Pz zhwgvmq1}v3>;V>bwj@HVB^4za1`>mc`{A(7Lzwl>~gP5wOa2<}u9yxx3W=C&P_<*lXUMG7N!-U27xuUAjc zs#TYG%sN3haJQepi}rh7^0GXbqL!8V6bb!eRToILd&ygu4A#MF5@Fw-G?a3;7OSPy zEt$~fzGgLOLZYDcTyr29s_i2*9nYZW;ba2KTZdhdCPvhhO1}E7e+_Xys~1y_ayz>o zWbe61iHJYN-M7eGN50M<=$(T1YOpmqk0n_pvIT#`4wUzX5c5_xhcA2@U_8~k<1jGZ!I_!NVRkF$3wV3Yh|X@57(FYXRSXl?xcvW zi9M)B^$R@iQENkA7wnOsjW?`^5$gy?vh@=WGp~Mj#h7pq7!6P}m!F9#rYflkYg*R9 z`TSx{bQ~w_+pi2>jpbEgwjfT*-^%0;;S1nj$mcfQlF?3abxXs)@DF_sbs&&EO_|>n3EgAMWl#+)b5q~K>TZCCx!Rr{`6}ouKI=Kr}4j3Iy)PCJ0}Z( z$=~$u-}OyJN)AQg3p$1XmKKDF9_S`YGn~PnLY&%Pq_8kA;x;th+_r=rV9z!8TUzDu z6RgE{qkIOD#o=gpYg!dy9v%GpU;m^;xE2Hw0^|k0Z4&3 zdrnwBQ9<)TbCi|g^(hsoC6Y*~RDJWNpdtrv5%p$M?D0_z@aEp>Oa{2Mo#2N4hj>WS zyPWK)C|~zcM07b71;DSR;_Z1Z-``2`1t*e{4Oy5%6a`gS>y#RT{a*)ASR=@t_HTBG z0huhY2BZMnHUIDU=K-N5$_=@dP`5kn-Fc^`lqJS(v@A*r6PfZ!oqMQaNnUXkF^TT3 zJ#d>nSGCKir1OYNuoG#9pm-7z%x5V7o5p|3(hpMis5b>v?U871QdA$^iQN2k!=DTsJhLZ)6 zU}KrATA0-IZH)z2qmB6M%jHnlh30c_WK1sN4l=?l9So|MtpUg`OG0^=fe>95fnslF z9zWj3+=&a(_%-gf2z&uinN^uB{MmJ}pDg@lfNQvAGOrng>#d75;cYzsnyy&g*Jd|a zy^~bC<6c)>@)H0jqBjSWTZdAi(dH%Wq#{WH&~Xhei&TA#D(5SDUmq>Yb8UM7!J{=F z#X}Chi`t4Sj@Gcd_IHv)S(Fv+K}NY^bqog>Eo=dQbK-w(pUlZ)`oNzpRspn|!yIp-+u@2FmG&SF{Q4N+q$u>! z4W-piRnIl+n@W905ky6aL<@Er_{N^I>tkt=`BI%n-!3_?4%|2AoLk_?1 zBZav%-A6Rl(w_$MO}I{THEO?yn|13fL|`GM>@anU7C=74)vPzlsM42eGcD=ngrJ}n zSOK1DcIugJGV~lC8~b%Vr55z)v?I64n4)wF&2cM5mNlj`xuZB~innY3Yhp%u0+6~VPqnGCvvNU_pd{4wohjrg~p$0r+o=qb6$|AK| zX^jw}uq131#Tj4$F~1SXutQLbXVaoDC{*C31A5Yr{?LaRJ~6tk2%IJ-YGvnH z@$zp$8n`EpL;NCN;~n~##@yn{_QR~+#l{qc+8~@FC=1L_hL`}pBlr0u&`}UJi^#)Y{Tm74w-2D$0iaMZA4KS;V?as}`fHP8Yf!5T zu!|R?9g+D9ltU&W?+^$wiel#sLyx^Z1(_o-7j5t{emcw z|KA0Z|IZjwrL1Fz{IzT~zz)!YZlYSOu~g}8#^J+{#GDIM%_F=A3a2NVsFl{gsF!lV zsPHZH71U$FMj?0y>aGY&e?FXI*u;u$97BnpxXeuJddg-tvpw9ac_R4ASv+vZTNC*~ zQ}!T@MDnQ>w4-*h2Rg~M6SUxVJc^C3lG(AA*#@j<>UeV2d;+w*k)nCn5UBY&a9|my zT*0oAwNTYeL)V#Y=6a^&Cz7dy=N8ub(dk+$kAe^GwLB6$`vHIf3n-zhXP>L$%@YSB zJ$i}GgZ5~xQtlnOHd}{|swJSzIf&e7r* zd&YfN>6m;g$&E#3p?j}YgaFlM3Hh1bY;uZRCcj^NL#m%ty84hXZ6Luv5-zg{SJARZ z)+~+wVD{-t&n*#CKSZD5ieDwJ7z8}=#Mg4L`4gs2%ovbc%5Jd^f+%ry+plLjr(uey z3gIuY{x(nv2-XN&#B44(;u_c(jbP+{Cm_x0-g1OLkGFW6*BB{bUdZawv}oyWyDJ@I z7|n}1AiP6pP&)r~rn(Eq*8GQbY3Jit=ih@LnIY@Sg#Y8fZ z5DKKeh;W5B3}!Bss9supCTMupdkD5$Va!#;)iahQUn=TYk+^+6lrE@&Lkzgg*}+G= za*kqe;DsHs8#hj5eiuO`9}YN}1V~$cD?+`HQAT{#!(Tkv;O5b$F&8RYcGL*GPIj>;5c&fxfg`{Cvh_|b9DD9!FGag&{g!&x=yo&I39Ua=Q_{R zVfNMAWSiO4#{1)w+!uZxhzoV|o(&e$W?UT_hUVzl9m9kbb0^#QqDV7c5Ci!hQ}y+j z3VwCab#){~b+CQb(N$3HuTZ0Gaw;vbW|n5#z*@xq{J<)W0%b;;jm6vMGRmSkSLG_h zGf@pe5;Zz2)8-r~8NG^kYjFfYKhYs%I6dS0EWYbeg z2UTX;RmKFIr0-b?)5)x3$yJFL8bz&zU_I{7OINO+&&*_mrD??mk{n#s*hRnnMLiM? zZ>lv}lA+Vwhh_o91=wIR6Ev$X2l}RU`K2vPM%Fo|Qv!)5;5v8Zs?~Qg3XY{`WXD*$AFfQcEmW5v)-B;A4r;bsp zNGaX1hnd+E?@HAC5e?%q;Ag}rjRP$9rChgS0V!v_ONEvTRkcU0J3(qKG}I(S0sf@8 z(C~KgFBwEv4|K}lkR^tjzW}DB+-6Zv=%4sk0ag%K=No%V(8%yLrC`6!0bI6S0?21UZ30 z&_ua<2MnN6*rp3UAJ!_7ir$m*CzrXvxI+n{j@V|u?h_>)Td$bU8MI76IWr^lao4kj zRgg_>%O$;ih{H6V0-mfBszIqf>f&GumhOz0=L(cC$jkP~UdC24EB`FSmp61@(r)T@ zBy|hfVVX)1t{OT2Jndd`?v5hMSi#jOU6t;2o)bu$$b)!~fxIrj`C&npmtx9$p6|IQuJI191$Hv z3fQ&>hF#3_T{>Pfm@mmEoWJ}JrGG`P1E~3VUR}yJml@xt4PdX5y+gkdZTn{R7P)C$ zdyC=GoTu?JKu_$3BDE)d9(hHq34+FBtO;&mPbT~=Ax0a&lj?Hzsh;SsF#TLvPzz8C zG87Oi)9l2(qnk!g?h85uE!+q_27DJRdSqnJV9I15q~FD>`tXot6(j~RB904RP!i{H)!QillI4G$XHS zwMX~hk5Go-6=-8z1D@PVAqz7bsD=YYUmJ+Cj8!jmEkZ8HLERYHrpZf8t8K_rNh*1+ zIH`z}!e%@6@ zK8tQ13+U_&vv|r-8v2s5Q*=sKaa|=)=Fz2-4BQFLua5Z7#+e+DlOhRG(a!B9=#zIB0iei-FCd>R6V5-@?pa%P8IVC`?s^WS*6flr629i{j{@qhmsTM@)fb zw2Ct8TwZLg>BUOBQU&6$_?_ju%rCH2!f0FaSuF`csVy#zu4+`OJrBUGaU6(LW6*+D zbDQpuWmakp?-p_9{0t^1v0mAGnWhACNkNGe*sj(pHJZr_B*ix1 zMuTP#la)8(kJ;!jx~T53KA;W^)Nb8>WfYVlC&3laIfg%w8Y7d~S$%W(V$J2x%Xk zih$}1vhnWDTg}Lq1$T&vfAp4s16|E5hm>Ul*-PT% z<@WQ53r7c-(3ks4&@QJCIybsejk2DIH4vG+o>NP8mSW06BX~1OQ#@m zF*t_ITb{2$^!16F5vkz!ujLhhNY<|8)ifI9R3nH{&)ZUBlS?ZVWe*59<@zc?d%cD`dHd;xOPFXA` z8RhJF37(L9g#QvUAS5A`g(DamX(>=U_cl~*hocsL@fv$CH zfmOx?TqQpv+znmno=<3~Gg5`?7t_MA)h)h!R5$S(59O!W9}vJSQWWAC@&us&33@B^ z8m2!7)61J}T)h1e`vD6hQrF2V{4V0d_n#8fzdTjwnM-%fSGzd+iyQlYitPMPL>vF0 zxL1_1TH{B}Jfa_}-r!K(W&7a8Jk@TG)dq&jlh?GipYzXqda$h9{}r!M1^r^hvk!4E zmc-4eC2y3Y9hmA}Fw@OG@b+=Eg!hxV^UnT!CnzKZUl*x;i#ZG8M0}h-!>VmQ@R38J z@db69W)91MzJ66a16$D7jY;EIj^aLB_|WnVM&Kb!I{ECOsHdAysjqBh8>w{5DZSLX zS{rudP;{gT6NZvizOhf;sP>JJIZYGX+)sO+^~6kR<#tr333y}Nt#XbD5XOYGXvMr) zerhDm4lcAE$#NV+hTTKyp!U#QN+(+bqH!`yYKwv043mJ&ksUpygXX|;ShvC_ zEzwn`eFT51nJrV8Dr=3_NlWyzKNIDwGEN2eDHNt^5GEZ2;e3!s9m7Kvcgx@MT26j4 zY&H#T-`IM%NnN*)2p+!=ut5ew_o!^XxI}Fm#8i-}B{^^ODgAWVGFaO28^|7j_bR!| znsnvbI>En26!UUja6aB!!Okh@Ti#QO>R95#F9=$4n>FA3H&J(P69L72iJJOL)MEdO zp!5$IP{zLnqasBaIUGhrZ&^Wf!RN1wKgtk%4t|8xWMUOQ)Nn=0X(1~3F3w2`tJCG$ zv#3Ge-TpFU2p@i5<%Jt$dsou^U=Hl%smrg;)Hgu)Xz+)1zg)RNvy# z9t~l1VM7*=hNEOD3Vl+yRZyHtVZ5?mW`HaH9KN%0kmG^AHZ*&y=R>K9p|+Mxfi4o5 z@J+g5JSyy54S62*sO}6z>`)kxtVI0kd;xP%Dn43Sl)8n4vCen`GiLzaBc+iW%2`$` zDE9cssn?>?+cGN|3stSvJfv1PLJhG@n&HZ>tJ&dP6XB&jq$)D)HfBGA@%^XH;a>(G z8JpSn|5EBq|1EVpl)t1tYn@))SjZ1@FbxvY2oX7JghT+Hs|tNztAenOYnJGIwrsM5 zQ}!nehMWZc{hJS}VJBRy6%2Bk;8*xix*=6g4ZUStArqF(qbxw&0RaDTs_8hZ5 zWF>={^^cNTdb0cKXvUrM>$>AKf#ZI^>5{r*#gGW%(&cr%0E{_3n7GiDX+)%IsrrXr za{|7A>O)D*gJQ?jGVUTfQcjtWryEZ_cis|Hn#&C};#wxP=KXk=({b%Na+I8f4x{3f zIxzZRp);7h;v7n2pLqR}05le`P5KXWzljV^x#6S20RDFCwLelUJEtIEmnTksRXZ|&X`3g)x%;TrCY^y+BYWNO5YTsB&(9R* zo_(a!RL3^X&IPe%z}ddox)HF3^4e7zgT&5p+g;dsq5@VCzD5wx$+l&W`^z1N^%NL<>lQ2q2314sj$%Bio+Zww)Zg(ZMi>;bgc~Zc#q>);q{f)%trD z{||?$WMca@*s^f30JsaA08ESk|Gfz#$0!TJh?oht6RnL56&4I3A4`@jE+K%#FCduT z8a?Tt$_Zfvv4%mZSMUqumLf1Ja5gZU)o^>s^V3WbX z@uM>yhcdEJiqWR9=B2=-;`x!@>t3?da>-*TW|bsjTqE)<18W@Y?OH!c$|-Y*6g*I~ z&9%;WTo=1RWw;53F~zS5C9O<2VIf~b>VYhpL+2xS!NGGXP6d!{?|_QOy#g?^G={{5 zJPJY3J**fcT>oH}5%>;>jc5-<0n9D-oygJ47ikbWN#2KVvj6L=^5LasY<#_F-dBC} zKR%!Z0PLCm^;Q3-j7?uX-8lwS9$lfiphURg+=C3pTu;JPw*r*XGk?`G05+D0r(pD% z3x1l?fl)pm%mq-G#9!WMm+SjrArutX?Y2|Rh3DnOO;eB0+dEjV5{vb^ORv2dI@{%H z>rwCP&U#Co@t$9lNpKMVsj|tbxJiOcnnc_XRKVJdCfP-3Ntv__w{dB+5sz{K_fA?k z>wxyu)mzOLm=FE&`4_C)Kt^>aLRVZNKmONl@X$*yj60Red6?Vxpq3nyJytv4-$R~u zgZJn!!qv3Ez^OktnO`k6?>}Df=zwc)9$mXX{f4f|*th z41}3w5s$)R>608R&FuL&x5YB^SZ%^8=Xuc5WSF_&f}5LVa*lG13vrZ@!Y27ukt z^jEMngj(&Z*yFLLmnC#b)*Whb1FgLUrWqy5>c=_nU>?LY_Sy%CmMk|*w8|__5FOBJ zlV}q;-VJgbXtV~Z2v+1)%3J$w{Zl~m|8i}nE;gxlUn$JiS8Xl$zi@35HunEGBS?I+ zn^Q#{>9I}VkjR=HIaYn$X2h2nyB@BX4*W)KLVISUh=|f7-R@jD{M&(OL}0fEI4q=D z;tk}vV7hzcQ8Hb-3`J=n({rk8Yl@TiXqkZT4Al~5JPuu*K(bfB_vpNC{)a`Ffe;e&SlRz zuE8qEd+Wk<9VhuotBKHZMquVZ9a`#ci#UVqQ6HFbZyvLhaWw6LUF!CDZwJdQ_+3c` zMi;!BQQaHoa4{>46Bl&v0ahRLa9ZAmNIn(9&YOyzq&*tL&zuvVvA@1w~m%izzJ@k`i6M9K02)lk8~Gq)a$YiZ66r}_nVrG`iQ^Q|M! z#Dq)?B)C_cv1nn&Pc8txmVeCHV5Pl%o<9OGs!_07?}~&`-n@uejryPfLu}f+B{5Mb zI@Yo$sR0wGkEC&Zrlcz>Vmt>5ON`$edfk15O#4>&qjRubg3fAQzUEi#?`Cql4}z8$ zN*#%-2g}K&1_dvk*&STNZNSA;1p3OK{mXX<++y#418d;2R`$yKBp!tQi?1yA{{J!WSc& z-Bw&FJU88@ag6@Zf2L7QmFFazA}vp(sknMxj$iiA)`?s}@pxpdx2f;p^Xn=#(_-u> zG}|J2V_UHzuT8l>A5Ha^oT`rVjyZpYIyd3*q%xH|Tfs5rBl5fhedMl4sl5O&)DNZ) zfZQ1Cf3Fu)YRW~!2pM|QyvbL!hKtCt9Fo$!*{^+WQ|+uolY@)!oeQ^#)*#w6$t#*i znGIQ}m<`^+n9Z{pPIVexD1evV4rv9ckJpX7x$>y&_LHn+f9|%<%cOq)x2gm-ns0US z%Z!!3Lc;&Tod1blC@Drp7Wl87q@7>e&nS#H@U?X)8(1yag5uiz>r3~_xpisTzgfU} zuwmeP^FlY$5s9d+6jbz7Hl;RQS~kDA^{Ry5p<)DPfYpHa2hF2QRz*&vAjWUj{t^9^ zt@gE_uDw#&N|Jg1DkSJygPAt`2fDsaYf)1-63+g|b$2@-Ls!Nf1WIR6+GwHPlin;SM{FPgtYj>{z}Hd~z}E6P*)ZwQ*0tmT8DLa(l@ zSo|P7&?5{G}R|Yx9plt z(qOUoveQ(T)1_k={IVmie6{{crAqI%9-Ka_Y80AU2A;92ELyU z;HYd~wlpwPr@c2Mf7}7x@vJCaGeB)Fzz$o8oOd!nsy*5z!G_E%j}R==6xEnAC)8Y;t7EZ0EC{IR|wV*n&5v?b5Jd<*vu{mZUBdB4!jevgxkMWrW z*1)vMc`q3j@$?DJQAGc_cpTiH0#m5K6hFdRUnn_W_>#^2&|*abmMt!U_-z*Iu@Y7P zI?p%^N&OLj#N`|$)4YtM!V-8zWx9gyrXrEt1Z>wE`Vfm>w6HG#x0%qW4=Hg=>V(w> z(8Aq@R9dMZcK~`r6k`ebnp?e9UI=rEj3mkOq`6`%AG)jVcu`AzY(rBde~_VuqyTHf zeO6c?%3Y1P=R03ABn<66r52RmkMA?Ck-A*>W%t(|Ls(1gP9A?a_P||rucC3X>LPvM zmW3${ZrjZ_gp9s3K_NlO^xh?-tcgFexsCFI5M+yhO%e$>z$elU-3FCrP}7KpAs5|Dea3$yuv-bMs^@@ zx*ZoWX7Bkf(mZWDM&+f9<%DDOUZ3mBq8yM>BI|TYoFb2ZkH7%rNIK$d{#;yYA0EvC zR9509M$LSPH*}O#7G|M_FXl8;QI6yWH;YC)cD9thDPbfRfUlDI13-086|kV)mTn8{b&PKGp@|n_azXeEqrM!_YV=(mc1ONvM3%`8EhmN-rZBq#iYE&fC1o)w03X*O( zW9D0mu#YvH#+yx2S-~pyv9NlM$>WL@fFwjTl&d7AusTu&*A-){R?(!Oip|k#6v3)g zw_cw9)Yed$C%=`pu_!A~ox?_0!Gh=PpHAN~Z?4cPX0G}nIXXQ?vd3tFy&$uJX9Q{L zi7q~nSd!V)F}0X~4*w-YVMG>YyDs zU8?2qyPRH&FrOb{d?!+) z?w(zzX)U`C5cctl6Oixuw*kPijNwrG#W&Yrva=cFgHBgS@9>28*m>KcIs$_*beH8! zmkkd448SsbG)O}hnKw7a1oYBiA#A4`Yr|M;K`5fZd-As$V3+9O=nx}3&Bg)~;f2Q92%P>~ z2f-gG_0PukaY?woi=Opp9NH+n)%R^ui z&1eC_NXyRRQq_ep+QgShHPzO?8W2ii8ZGvUFQiL)Ot=#CtV$?bvx`5fm_OvW=6b#- zEPgyn{v?nd1`RfNTHk0m@_M`AG*kQYx~0blVGrB`laI3%H=(l9iQVrbP3=Yt%GXUT z)=gfNrrHTF!zQwlxUa6^hcAdzEHs~=GoRct( zrnf<90J0=Gvsqv>F{wpEN7<5m)iRnCD%Gw`8cWuV+W1*rO3o{eg}u?2a#c-n-9$&z zvO+by0j4R)^RYuZgc#E~=DmRv0Gq3yF4^sigx^lpO4ZaPou#Q0j2MYLHi9bqBU3Y; zXN;228m$@JoPBU8dvcVXX^P|M3ae$RM|HRQ{Dnl7`i{8UJe5V#c)HE6tHa!>GNQ7s1Ju=7-w# z+snb6Vi3BPP$b!#uw7~Zr^z%7$SMM6c5Ir(C`tF(MW{1DYpx$W$XkAQXu&`AqNfAQ z(zVpECpV^$>aDesiKkWV&5fih+V`3LLT4GQ+AqWz)`sIIqJMoeFQcVLuY&GkTgCv* zO+0O`%D6|d2YAjfuui^N-3?a~dx|9>cD8Gf>1av}FUIYCd;pg%%T70#-X^keHmW4V zn4P9K0a?)6H!E8V_pp<>5>Tl-cNFHZ8w0Lc%S(5|+1(6&Ypl;08g6ypYHi-*|KRO0&F(XMtzfFao9$+XIjoiu~$ z4v)_|p*qb|*&D+ZqSZ~76!k0uXQdGT~zzV4BBa6JLo9yJQ=cw9~IX{@3X4mLBZq&fIjO08V z?`luZNKekX@UB_AK!Scv8O3gcH{(k*)6!o>EBjb`5h+m^-?gRv9u)Qw+&-vLm@H&< zw@aqswU%VEO^5%i6)9$`2)XG%=#pVW-2xCcSV?8X+koh-4VB#;jRZR}-$H5VuX4Zh zFsF~|q;{(F^W_x1y=Xqx9aRaGY3UN$PQe6vt1o&y0(~~z2M8-*??EHHMGr!Ig}q(t z@znY!Pvx%fkdANL4#?u>+PhIlr;piaGf#Z?E~f6toCN9QEGkods9H<+ zW;EarZqoNoy3j6d(9d{C{=M!9j^0niF}hgLiJ)49twJTJ6NX^>$shpcRzJfAcqyNt zI({KXdHoj+Z8VT z7XE2i=Yk)^73_0Sf41zO8(*Sz)QmN%$_dz4Uia%XTy8`Sfur0W9z;rn#(O|BO&dBY zL6IMS2@~QutP53^-xA;OCYIN7JSSyrf;8~)F}8Y@UczYv|BL+N;fxKOH? zcdl9POI%-iZyfe(Y}@#1QcK!_VH_`o&akHy-_RDF+j8@Rc49hrpHtTkMfvz`MR2wD zZScfIx^{BvqPbtlK`ALu)bn>UbClZo`z1XjqGd~hHB-#xa!fAPxFp31+~J9y#8!Tce5xfMJ=xra0A=JxXSl{bRaz(edgEgZz$8P;zG6VkIM zSYR?N!pT{}T#=PzWX9p>x7T&f;jZpJ;oj6{&@SN#)J3NF5MNO7Id9I%P_PBIp&%t4yMz?O4@_axpz}>G}MozQZYsYa}e*?X89L#aw_wc6H(7 zJ8ydyIn|o2_F4%=FIa_8G|tyX>4i>AXdTH{o{6`#x*D;*CVc_eo~@X)Ql4QcDWZ~H z#hw4t(g0@gzBBlLNPEX1S;Hk;c(-layKURHZQHhO+qP|+yY24Xw%xbSJu~s0Ir06N znHv>RZ&dxMh6QbX#%fz}Xm zfI}I=&B~C926g`{j^cAFscQC9qM!a?DXRZF9OXa%n}1%7q>OD$oy`6nO-a)JhrVaX zj(KaRlXkIJ7-2z~vSg*zYZ#iu95THDX0o2xQspVb+^})#g-!U-2~PMtl=KJIW*i@# z&I{0o{8{>134Z`D~7 zV<2bkMQC+$vh&sK>z%w?DBEJq^#~)htE4$!p(OM=RWS6H^9ow5<~a-k&jC!VjK{hE zU^fYFhrxE8bvXG$Y6zu4H&wKI~Tc?t6T0t$6i~@u_YI0+wM5;J1A1^L(-k-Kpp9S zbgbNVC&nK>)9G49Slfebkg2kU$T46v*#IW{+JYgZ7^ps;*XWQBn_EUdmEXk;rP-Lm z>U(t;@yoz3*Hx%s=}Q(@2khQ=CdU=7#4v`#DWp$zI(SzmF)JQ)#scfc=2ADoAVJvS zJOmFoJ+SxCJ8Mp*Z1FSPhvt!46pxKBnJ9NK+>DV3)1i zBC3*InmHB(e1ts*q-lX@%_}!WHD7$ocl?}w&nA-gVIQhP6ag?=EM__2F*Z$(m;hM4 zMU5uLzyaZ)N!$yspd_OxtgV=^Tw*Wd5j3pWWfCT8$eVk_`mcw(%}__p@Mlso3--TQ zr1-Ca|Ifqy@26T>-F8t8otstsfC*iU+}Ii;1+biR>6Bp+P#fQvS|3B60$|V#dz1up zWrmGKE~P)bJ0`BYT+536harX6UpY^-z z4XO_x)-*nNTS9Tn0OPF@y)O?swCFkU!6(JU4MU_(vmY146D10gxSI}sPNIahRJTcM zk`>!@+o`LrAT_$f*wceOE4$gNn+;EG*v_Ta&mg47wms{2$xHi33}jJYh4wWKc$5#w zpboJN0P| z>^Q!jRY#e;zY%*uheQz{6H!|YICY+{r+$8;(Heoa3l5Y`uQ?bXhLCFYn$pTu80w$$ z-AF5t3lC6HtYE+6xG#fy%yAlu7k*@oPdbgX=#`xGq9a^>HuzydkSLz?dn1y^%E=5A zgt1i0)nZT}VawRU1OXLyY>$B*5<-4Rs=}W}uL;I?JP+QB)NjCrpF|^0f1YbbI62p) zZh@aZzE7#T^d%g&ekcondyZ;$U-w13`mg;*O@Dt^!zFjA>*EK$m`vyWdS$xfAsS{) z1Pf##n3Y_*Yx>om#U&r5ICbM^|DYiv7=>unsBuk*xb8@tE8@63U&0PbSC^v_{XxZ& z7g^o+`(uvJEi}dK&%_9emm2zF4#6#8`Aon4l6!g=_Qe2p$lh(k zk{z^fUX;g>cH}E_o1`scOPn`muRf(^BK`nV%e-Vk<|hX6wxJq$^p{Hw^0}9Ec7p;M zak(gZgwS7N>EZ_B1d_P$%=(d#h>%~>R17xBIN}ywQ85dq<=efvBF4D=O9^uTDY$K* zAooS~INWXhUm#I?EIR?5Y*C%q-F}Kuvvgl5&pc~&P%!iLRfl7=kS;B^N>1>kDb9Wc z2@Z|T+sE*_+aJ@nVa0$Y>I;A5eKEUV=s5&B3(~z$j3^~3d}pvu|NafqI{LS4Rit)F z3G|bxn14`zzW=9e^&gF|inbz>D!PwML#Fh81)qB5GMqwnNDv}$G^7$S05Ei(NO^!V z>m*=3f&M_r^1KgSAmjE^jcT^JZC4puwW87b%mdhi?n6s&pMA-~@r4OsL32x5I`?sx z>CUrz?(;#`^!2RID-0i)iGZ0bTBz=sQzwMh!i@eNYOx9NIl&^j-AX| z7Tf_~gF{;zNGcu8Gmp~VClgF6v(`KvK^`1Rqzk(?9UAHdh(FG!a3zzmtntNu6r*R2 zR>MVbu!6c?=d;09425yV%kNO&rU1*`2=al|?_Y`2YQ^nCQPR04KejFuNfe6VS?zkq zk`U(lBqlhfJ>2x1wiAiVaf(ZR#_UKZ^fsjqbloJdu*b_#~Dl zWsXv5l5KIAax?-Gj)q?5y9NC*pt+_)A)Ixql4!R=JJo@{Cx^6}=7{nd%Bnr8wi$8B zp=|d<@D|4&+G&?}jtt^1x%6;YAlvm zYXG}rcx%mBF-x{TUyXKky6D$|N#v-J*dx05b4!!)*N$)Z1B+J|@g*b1dzF^%<47hs z=C_bj6G6>hM+}yp6T2E_iPLJ@@;r=-(($+J7^ud1a{Z?ChC!{fEukL~;OJLkJ2ox* zE1;(5%|c(F*!9WdgPN|dN}heU7xyBs$I(81EANI9ob}NJ=e`b@GZq{gZKlBE$?cJ0 zBxsd-v2Mn)y*+S=8WiKA%?_%S{n z3o9_JgEOK}jURQr=nZc`1K^`*1W(r}{S*c;1kygdYDa0rU|0tS7nyPzryK+@)2Ir3 z*eB$rgj5xNTNHe79i^3e2yP^;;E+bjo~C017C=nsm>1d^`6bZ@07n?27KinnU!}}n zi4oGx&`k%jrhD4SzJ;$6{$F# zv};sBa$ki8 z`&X&x_DBvW1na(jL{bSO*@aR{oSh{7#Mpl+h8~Tv9TmrfmJnOjBsUGH?RDc;?C+H9 z(MZh*Uj0AIc?9JU_Az9@33Bv~70ceu*TvU$UOBWK>q7S_%Y4-;b^4s?t`N8O%$LA{ zwOT(S#w2SZ?wPeGc+ITyb$k`*liD<^xTPED>;=nJst$72I*aHoeVLdG`k^=5zw1)A zacVw+|{>vP?IK|ToSrui}w~;Zk+lqyt9blqRZre(X z1xw5?E-2}je^C&hxSs%j)|8A37z^jd+8S3`%gexdajup>X1n29g`Q>L062P(Hrj&Qgolb8^I7f`VY0ByF>x5 z@Z5;pQXw~9r1F>cw3pzqDO#WxE=g`|mrA`3Gk1zR2?O&4YQqf$f} zc3TeS#7qeEz1Om|>X*gO5q1 zbr^=*!@gB3O=08PVpb>pWg(Xv{M$JmmRZLDxvWz{6y9WmUD9+?W9$}!6(VSX#lpj# zmD}YIp&@zNonz?U2$>@8bg1&-?ZF^v0*R;tiM-UC@qi+aJfhEGM+@t*jVxXm|ImQc z$GE?~sy<4`s!8Zga$rz{xE*|hi4DEG2JaKSLsr(QAS-YpECHY#l^F+_le7>6GHwFTEgZ zzI>5jI9Ba+;+4LUw7m0Z71Ex$!6QpdK88(5YQ0C#tx7Kjo*_LmsP>V~rIrnw zQ!q=NJ6>mt*=$jPAR&=E1tZd^Dv3Zrl*+htDxTTEea4>wv9X*hxG2Y7bb5~EK?62% zTMa*7#~Xjakn^(xiOAJ$y&epdh_Dkm+SqM7HM-xP{Q1}gmdzygG;D>M7%~Ez(n+c! z4WWA!r3>GX!&?A+p*TFM$V4RsGMFEOh|@_V25US`#N{O;)gx{yhO=BRWlHEINFj-= zS{4mO{j$-CBlqj;3xX!}2JuUZgdnJQx0c`o#uskSSPOCw&y6I=cRv_j>VZtnF_<~2 z1-sI9qZ7{EbYe8e5i7X5lSNpItDZJt)c)3{BvOW9Er`q>2{SXGc<)15L0Epl6%K8~ ze9uAs56urW>)b_NNy?bm(Kp8O-W5aS0l+R9O^R*PS=G_2+4V01rouen}fW@q0hKXn+Y7W_3Qh1qc}jjPVn^7Y`TUBY^B*_)k=~L=#}R*-f}K^!!WbB(DX zyvarQB<+D8?U_&wP;ZCahejWXBJN1&sexm0|gK>*`eet^S$X{@OZ$>Z=;?5-Gq>oEY z*g+PHilm(-T6#zF`bt5*C;8gIr7(43VjX@;RolfUQ|93*p`jK~ovO8h{fLz2(v zt|VZ3YXOlxttxhc-J>8-d&G>$k-8#r!qp=oP`g)2;>4p%ln>>W9Yk|zN#cZ1n>sh# z#V?S0BLbm4u_AuLuuYt=?^7L=a{q|fk;N)$2C{>npX^l_B=YhbqI#bi5%X^*NmGVx z{2WS`vViIx3qjeBGQi~T<7C_1g`jIRf5*9jo^O%yvDGlcRpooyIm5am1ARx z=L*f3(wfSf(DesViw#~C-r9vnJy5Cma@8Zh8f9p}97!Y_jZ~|7k;|VFDpm*%Yk*Lm z;1Nn@sz^3e%ij!6o-kh`i!D@f$E-|BtzSnQ!rbv%dQ~y3uElxmv0-`vojc)-aqjV) zKje(H^p@4@zDCR_ueOq7XQ|M)QplVuaM5q{0M}e9G*iA7!g6jnUlOfX_J+JXlUyw^ zKbbQz>{N-ySvS$Dy&RR9<}Y=@>S*$;lk|k|Y>r$l=Zb2{o4Me^K2^-9kAlr{g(3mFZ8>AuxZQ4 z003Tp0MMPEwvz3?UGe;XV%)_4xdoK8VY$SIJko2vV&WR@qDfo*tXWmvYSz6|Vb8h& z+KI+eUi>1rXk}G+T4K}~0T+-*+XL|i1`gR%fr5a5FogC^cAKR%Rs&8kF!MZZdo=Yk ztFh|w{=R|eqmMGJN9tra8N7mie4?X3d}4sEzc9ow!O&lub@2O(KS_`>NJTM;03k|( zjYLLqghT6qD)E%C4;(qswP7c?@qEqUGgm?B=(6|-m{Hyt(*Q3lSvV1`vIMDZ9FUK` z9$Dk;I*xMEVFF$>%h|JXQ$X*3wHIFrSk6_Ae3JcuY17`!b{vwzeY`04ZM3`krOf$| z<_lXxPqfi4EE=AUD}!$dT0LhUi97o|lIb9Ed?WqdB2DBG2)q7(c~8Qs0e*%UBgsZ^ zKrAz^7W&8_a}X8P$VOV1o?6zkm8LrBzvh4%k#oNCNCz!|am;=JIEg+foFYkuIcc22 zCFw70O1>Y}NA^eRvMRkpfswf;9dkuWdZrp1B`zA2dhFe$@stI`VZ5EfkyV=%k?pS5 z9AxHmDIJH)&pw1{_#v#Jh0l=#u*9g*GsaweLA?*$1 z+9fVayo>yXlr?nVB4SJ40~YzWI@$d)+XjmjsjNQODOoesiP$EtdX3^wM6`y6R{}o+zh~1`W2-i$O(9l;#bo#8^4r;>)R;kWJW4q$EZP!e ztIohdoZ-kSve;4M&dzGZSI`ReX3I1!q+7WU#~K&m=D{wDE3F=l z?V8HM#L!!W3w^DkD2X~MAIc;fAoU+NF?}C2=t<;NC21j~zuLfMlB-iq+!{0Ea3H<# z;7>dWOO7nZP>?!>CLOQ7j@!|=M%{yHbc| zQ8(|8T{7G|tSgNy{4P@7YN9C2Ok|0z%+%jsb>rMxr4Em7*ud}XR69rMs?p=M1q87r zb4v`?>4#smQ)msPU>OZ>r&!ZI@qeg1}R#mZ8!$Luv0QvQH71#a2i6t5c3jg-lZ z*eNX9t%`WIml+0oksB6$QTt(1pxMa}lYH>^<0*RuFjADz7w$8dD0@Xva_PZtClI9b zCOej&1qHR5H_Jy^RoN&S)J)Vm!Gfd?fgM*i^&MrhO?0take>lgPuA!>RNp(mw{doS z0PZOJSgGBOH`bp?16t3Y;bJ{f@keH7m*4hiN?a(Y*2|YEh3acBEAw3A#+fMHKJ7Z% z4QF9M5q4RNx6+obKMNy@!f>V^2@(htjTsb)VUX|R3uFJ|>QG2gBd^mGk(^5>MSZX; z#v_!Cbl+M;x=wXHPI4E?s6H8WIe+oMvw<&VI8TM1Si%!8rs>|P{T8TDP`Gv5_8>mE z>9ncE*1nOhM6MOXt_u(&($!Kh`PkkC9_fOyh;*6a2Y>-kT2n8ya`nmp?A`mfCVOgxjB94OPD2&Y=SD91fy?p!xI=jEKa@NZ9hhJiDfFGK48xjJz zS85j24$=1~h*y%=Jz!6;*EygM4i>F0nE04v_NR!0=H71*rlu*rCN2N-KIqNdKF9gB zKQlT$0f6FedN-5Ea+Bxv5U!k-ZmueI`-g|A8fDIy+nT0(j<+Fcfw$}%46s9&e~nSV z#Xo;NbKDa+DVU?3PPfH=BR&~dTGu*8ci@yq&&-5|$Cd7bR0+?|=M_h>)$&8NC^4DkOSZ^2q{eK-(Cj-oF2UW}Rw>T~ z;v8~mtxYb6W*g&dIcwDd?teM!=K17Vqrw1YJMh@`f(S-*ATg3;TY3Ufae0%NlW?mGnn!#}t*Z^vkEuOV z%1BZVBH!A9f1TPnb#?_F@CV&7Zwdy=sgKDsTENNwZOeuZt3AS+*(LpDM~4dQK1yTw z=m;R+@$`%sc4c$tv%Qy?5B-h_Xeh(RnOtWJQp0UuFgVNqUC)4nza^I+xUkMVq&m>A z&eYCFNGJMo93~fRr}}kTrwMFQuj0}=5&!#|s)r<8ee<^+cV21wX&-&ZyZq7~{n6gR zYAh*zMCmPlPH@OEy+4{AI4xmhYTTfG$fq)PKZMjC^OYOW?5^~WWm$ad>kU`9q8pg0 zxb{%z3)1LU)bkBm&+yj>>1rxlpzjUD1B%28rfG2B`#`Lt0SFI#>#m?ZDG%cLP5o-n zeE}TW5Wc)o0R7=o|8(C-`dg_TmJ4HjU{Yg-e+=EcuIc_mBBWd{&qe<)WQ%5yKy-r+ z`sAa8M5VuOac>AA#tsqs#A#GEOW|9qp$H{Lfve+7YqGOm;_q_D;NC9q{2EMQp<=;VL7Opem3N*7QvM}+o5Q)fE;W`)JZ1RhdIJ7D zy?!_3Ac;yhKOQc!ZCa7A;u+3`T6pU(w23=gFPB*70}lZU`#H4Kp;=#aJqJky{RU)| zvETp3$pC*?HQV_a&5HbhjsL^4Tk&U0<41`1pOr$fvb7?X^3Mp?7Ha^|AJF0!L`ecM z&k~`|n(R)&GS7bmG+q3&NxjBsvLREP<&V$(&Wo_AoybX)a|ID2$71eb)N*4ch(Lxt z1;gOB=?|93b)0kDo_Xy1{Q%t;`oiT;K;@bbM=Af}D-I0M0}+5m8=wcVJ)#WKiX@j= zCX2ioey|AapmvXY4k1J1Ij;@k?!Omtu3{R|pu>ve*<7&E(sVU33JCNX`bMPP_@kgm z*}=THJq`I##o@B`$J$l16;mOvQzKFLEToI}5eMLw4__y>W^&rue-7;&uwpj%prgwE z%4FN_sae~6GQ&na7G~1?!pyjvMp~3H3&-5-%col5Pc%36N`UdxYJhp>RRJGc@-}K% z6(aszDywz-+A8hjdWud<5$P7alci>D`nD$>hCStPkg1*mKdne=sjY6xt^Lz+!t!RO z+22xMwf6Pf9q7{4)t+|)o;lI;qSB>99bl54DG%|Kt~1HON^jpU3x>;3)y{d`RYJ7N z*_km#xNaRXi(sWlbqe1Z-o0n53ogyli{u<5IZlBr<2@B8EVL+v;b>{SYB~x_vQ5v( z+8hn}s-FyvYioZXS%49ROXV34aTY0kd@F-0bqp)rzzQk0`;1YD+!C4F%m9|3DpMj_ zZ(91Me4hhZ=~iw*DOQ#2;XqJw_j)1-TYwWxRqu3O^O>~#B~2AIlQZs>8`n%}_bF*9 zH4WGP8q>0BHE4jd8&_-F5(sqr1$lyMB5-1NpSs%={+R+HbopyvC)oXnkGX5J-P4uWcdPNE;Lss;_ZHaIXu``iFn9Y5hlYp_G(bCh`yQj-Q8y z@PDJZuye3=vNh0mG^Ul)clZ&HGWy|f{PT!bA_y+*R;Kd4Eg--|R`3aI76@-!4~ z)=wWz~*?M)&${(-E5+)?{v#=l%+43a=A@)o>dEg0)A zP_zdIqNHmohO#(Q8o#a5GxcQ<$(Yz^JxzgCs^}Tz)~Dh8%CPM{G|->CPPT?Et7!y{G}9%P;xFoEr3aphkuaSB4JYH4f>9F7XQsd$n?@L7 zgJPCJTgB8M@Qh}BxMs@=p>6AwnpJY^wa8r1;OfT~Z`0iT-J+QA4xvlljSmshc5~id z%6Z|u3l4de_^=mk-<6o5UJC89U`*4C&JCz7rr@68p(qy%xZX&fV&EC(^&@CUJ{C$S z@E3o-Xj7WHkS2_gO|m)YAt;VLKy1ye#a=5t0FtMGeie?*aa|ruR~WTqhn7fy<9rB6;oy@TI#8n)SozQ(mv_jiCgq zt6#QNU1FPGqy$36WldnJPz)f zU?>x+@`y*$09!KBNguJkZTzC*#ETKmG9Awn9ZwJ?@-+A~oSaZCQe~hRD;XIk2*{G* z&U`6Rr6D>IQ(nAA%$IzcKDGnJ=Ap=hna>WTcwy$j()6v6gZsE)jVdCh+^cQV^C|0?{pYpq`}KK1`zvx) zTn~{1gqIke-y9H0&15nV_)^8Kb)u6Q?- z`!oBl@$F3IbPKUvIQ4=-n=ol8*;9MqB zZ;^SC<*a)!Wbf(}W^&gmtHcK9q-NZ72mL-LbExx)e>-J`7?nWEXfzser%_Z7Q%u>6YT%6VwsV0E{9%Rh zyeeMvae7Kiu`4m37E9;kCB~PSF>LE`nd3si#$Zixthh`1FH)E3mTJd(z~{Sfs31iX z^HxEk4zYzCZ!yKroNX`hDIfW8?H?_{=!o&q&69YI-6$om7}~JMLNeBl7;lM6!pK>+ zFH021w7spAh|V_By1Vj&n!K8Q`W9tmIi>u)kO>Ef-IroySo|-Q>$V>%p5R(%fgzQvd+|^HXK3Q%lQL8a}Pe!(@(Bg=;~BE z05twt0PZP-n@)-7!cX9}viByPfN3V-3lQGbEAx>R}XRT&)wn3TT&Y~Z;6CV{f0%Mr&W!stKuBckcu zf-$dtYYU*wj+K8B7Dw?Bq)H^i6^!1u9!@1|LPjJ&Ax?u7%G)>+T=qs#3Za^b74q^U zRuLen1Sp^&!7K8_foc%y7;->w4@JPpOJ@lolW5i|P;l(^_P(HM zH2%_Ur1|!5`JGfh=62&}uc`QFuj#*|#r7}x{r@kqt4iBpt0H`De@$DsKD5S2S&<4M z0H{!IV2!qjQB8^$t#w6>Kf=dCiqy_PTry--!$e{=r zh{_4~C-0ABW4Y37DzNDGVpJQg$%|JQD4(6KEN<26y83q8e)}BA`U2Ep;fdt?AzuxS zBX`(W1aCSDO4ErvwMjoAOoo54KI35HU`8?^@t4dbaeTV=rhSVO4oe19+&npzAGH!qE=3O22~~+J zC!ft)1nel%_MM8LI%|D1p_1$Rh0c|%`BAj!6DsB_W{VW>F$5vo4wPI@V@ITodeJdh zB=(226T#R4A}pD*aMqjOjC%W=X{@)}1iGRrW}+o-{K;Ln24 z4DP>a_8R>0(qHIn(q153GTp$gGhWEI8E+XsHizC{g2Um0-brW}#HYcbKPHBhKQ#9C zqGzar!B*zHBbA}08!W4%26Cc*$>zIG$LS?I%ic=sH?8?)g*db1=JaqjoM$qNm-5U! z*$1vU1o+vX`In|R6l&P7T5LMMSLoOVc8OC_0jZeSV@y@?rMa95GS@1#NH||*mq@@T z>WN+qUW_r+_!rc<;>c5lj@LM2(bE#JS&N(NYnRF@VfpYQTErpLdnv+>vl?06Cm}g1 zYno;qlvJnZ*jU&g8t?mt}W}qLlP1f%>75Sa$^K@z& z(Sfa2#M%A^`Y;Vo-5xbjb{_V@-#KnM41P+N;06enzz8IKF(Bv_k+_wgIC>)Fl-O?V z`e2U^nzO{i0_Kqqx97m&cH2Vw;F855&$HpUf-r6Uj$FUVolDqr$P|cv$|{~~z$V>`6Un?SM=oCM2tCIk(6uQ?gUEV@O39hEEh7W5I7LF{S9tYVR%%Url&%WI; zqtlo&O~=nR5R_5m84Ph!yJw_YQ^ytx&OY2%|4Q{=fUX7_jf_8=^$->f{o6wHWoxZE`2rEte)c#9_-*3gBtOhu7D0#G672sBsq3jhZv ztL>Lo4WlTBrY0i>mtZD35&H2rup<)FQ%qfbVY;Vkz(t_3H4Y410`UW?>2?<=y4^0L z*K2uJ{>D)(U1k=OtI$eD^_D%+p_KNVVaG4B)(hT$U2}MH?i*bGnYj%i{QAZFKdZL?Gj0BBnVqew>H1?T z{S{+FG)^>*hO99)Z0?9Kf-e<-b1+2WU{6RFG~@>*t~j!=ic2+1R){bxp4ZgQeCT72 z#A=fl6w>6pF{hllP?g;Cm~ZQCrmDNX@&$p}@jP{6;C}HJgzAaiboTXW`$up2n&|84 zPi`-;9o`qbFr*^FW+Y&wIVuNKpfJ6}K1NPDl>`+Pgt1Dl$*nhpDe;t0e4i5f?A;4? z_Q+Hj@3R-Yx8CwIipGk12|;FcxQ zb#d(sB`&rX;f=^Ut=4txbkpb-qOenahN6RfVI2@Oo5X^P=U30gxtpKegl%(T{XU zShSji%~_s;Q|!v&l|4fzP4gehRt9U#s$y0ZO(NnbT#}|HRLNv3 zvwLDRyucndvp6{UMn}LLD_5yuJZsW5l9!Y3UB2>a9Iz3lKJqR z1K1HTD$6q@9zVj8Qy7TiCg}X8m$bE48L~8sE79pEOk{8t(m>BK**XK&@e9%5#!mWK zFtVv!>ck97qiC#B?ZIQmmm028>oa+s3{(4nTIGLh#j<1I8K{iR(oxQtIL6_xjaGOe zsO^kRNvTsFwr3MJ3GipjLE?aPMm>$afICw8&=?|uyQPP-66s*b+}ozEJy+9z1s) zJEE@KghhR_;m^5lbPM8lGc1ezjS^VTR|2W`h5;`zH2(f4=h2 z(nJ^I%WRhe}+DOv&X0MTz_+Bs72YG&icg0BSr&L+c(V3vbQj>JXzb*S%s9Jd^9jmY`8=jNr)b^RzygP?V^ z5nlBI6C`F}_6kAG+Qw5H^x8z{ysUx?%Pv0`@YiA_0Gd~p%e%Q0U0b6!K+jAx)XmCN z6CvN7P6D|Q*&EyN%x_L?wLeCHI|Zvj+#8aNxi|-dHJJn&?`Bado4^*h`z^&ZcXioZ z7j@M;dlxktvFjN7jwW<%7n{C9dOdraTe!!lFDy^)eu2@uTRFP~T>Aj9-rK*f?tytV zU_5)FWSnROGK7Pyz1Xjh(LbDD-M|sG6`~x}8CAz!mbWPlii)-`5R}^J%e-^=VLXo* z7Sdv>NMCl>`@p#SA1*p}qo88!alatR?NIzXjMzkQYZ(zMB?aJnO1h)2Yt}2_ey^iX z$;aw>eZ(Xf-GC4hAl0^Rxk5-g@!y>&J2kWV{;e`-TK@pqAMNGae{p7NZJ{b?_C~Od zRCC1{@71ad>GsEVum`aZ0Q5|*&dbWn{#vy0?INi?`_=?Qwws$%AQ+`zx~JS9<=9bu&mn} z=+g<>i6aqYLY`qR;QrWTtBDpr1Dc6db%mQ>BgAqNp89!#Vfoaph~c;ND5CVx4$-UU z!1yke3r7boIr+TtOO2kS_Z69KwRm|-mr+>=IO$-}4J$qi3*ne39svtPl*@cux{ko< zA&gc2qKl2D5ZLJz@(WT=y&v6l@A$jTE)C}DS`DaK8({I{mRHi8f>hqfglstipu2@6 zMZI}IjVt1LzCMwRJ|pB3MQL~fNAoqI_A{fB&uPg8;Ez=6aCY$ZR*khka>!zt&;= zZG`vR8aDrDA>8Xo^0(Nka5$?9?!Pz10?ZjW!}K-3GNSi6hbmd}S0C;RbsrGST@gn| zgtN*zBgfQ6s0nXq2p_P&gqK_74LibocRQJ&HiD)J33h~jZXuK=e9}!*(6u-lc^SO9 zeI&Vd?Zdpl&~rp)7(|M7!C&7KlmgFLZ%MIQy{YO`fagc>+ew7#ZftqYcLWf2RaNDD z3+3Rr!oGIA!%EtDL`{DYO|ncc(0>?jd(gjrasIbU24@r6eQW%2f{26<3moR2v>p=;^!F0JFNtrRxag37u}N-C1>2tx zLmhAv&HE$b3yNbgLp(kIb2%rC~&OV#r^hr83&wYc~D^OM96?j|uR zu#I4^Bno!(q#r;k_y&RJ=*%30F%3o^zO~IpW`GpYMlvn+N05aT^`&F%JH;r-PIRPH zEd^qqk)}Eb|G*JK*KS%HTi3g&L|c?~fzg6| zaE`GSP5O_$HNzz9b&O|hhz086eN1)c@RZZGhAbL&rJ31jf;GF!jJEWwy`865)8$c= z3QeW3wT5fc6!2%*RGZD&46qw?s@3QS=FD^+XUOu4ai>w^2hBx~J$uy90#XKQnTjtjcX$TnG5)UHLv zdB7SaDXXIuBeok3SBzX`{t;@2Bt&foQHP5o!bVZlDF`5 z`u#o2a){T*WBWz6>(U1hg>t;W87}DSTVj`rgVSUYgSwmG7*2`$@8zDDJsYdgW--iO zbny%)_epF15_VDT%9@p&bXPl}b`LA0Z4*|y&5bXa9TGZ<&`{3mk?;A^3+KJ6lSP?7 zEq@>dMPabO-`seZ$!`@HC%JqbS-+KHthLy$tw8T6 z=d8uBNPqKnt(q4g8_(+%9>$+Xs5N?G$}WR>wzHOz)?mq9gAO&=fG+)&t1v!EAm*GEszl$E^N5*P0Q% zupS9nB#Hw@e>wKIS!A~3bkq~9lheN3IMW2*y*a3$6kWdjs7Kfb<$2kj_eyZy(Hh=_ z*%L82Hk>?^!@O8BIJp`HWFzhmr)l?fxZc>SGIlT7!9iZp44XRNxCA>~v>-SN0A6Y| z@fp3%-e|BU2e^3PTg)iK?$4@1(74dVsh!1Gx z`dABF-oar#3thT8+Lwliy$;1|9)_e*Nu^;VrM1-H`yU6}=~uc2A9h$MOdNp@VvgTZ zz%_e<0v5zh+AnDz{{n6P!v`(S3CBv|hi1I`GZp#o^k@#oM&^#R{05Fr4*G^p3jg@@ zUwSmf9}7Quc<$6KV{#knWrN73X1t{V)Q(#s;^q-Dp@iRRi3?2hX(z_*`)30Q#^tAh za3f!cx?am*OguL=y%B4gs@0TGrt?q*)MqOuXn_GK5 zL4_fK=slX&DERxTsewzdM3Ae++Lyx(znKxeS7)dMl}e@ zEe7ny`ADsHq|$)MOnl0CKB1j|S^Jf}B6K)~M@dyf&l0Q1 z%)Cwy)Rj>PQw`tTMaN)M6G&awLz{Gye$mu`Wp9N@zM?uH>_$vh#3jd<6(3M@ z>j)BGu!@)|48ztF6pg6AUJ8=;BsYB{{jZRMq(`7x<4=8n2m9+6>wlv@_~&u`zsFS2 z%G~%rja7?PE&mT?Zy8nRwk?Y$xH|-w;O=h0J-AKW-EHDNad&rjcL+{!ch?Zyom^I1 z=bpXJZLhtv_y758%=&t-F?#hXEp&AhALKS`4Yi`sd5wyE6%nxFaJYc4XrF~57Zorp ztWs+Gq?d~_5GC!J?|pi>pBwL-{wTjV9~#4c_QxF$aXQpK%yRpX#Wy^? zY;FC4m=3xCkL?N9Q#~Ct!F;hV$}A+YtuDtNa-!p(nuUj}zSPFL_d%u?!Qc+pn7{dm zZ!e2{CX?eeDWODI68Rb`SG>V4XJzJM#byN4SPjo+S-2O?Y-zfe(t6gVP&nqL?KE5K zv>*Em9VVNJe$M6#7vTza$FtC9-+)Ls>tjxO(zFbG=FHFDL1AilYZm;hrMwg|T~a-~ zwx*Ej(hgtan1Axr*=-O{2pnq0u~*In@pDVnp_qpuxFI3CEvEF5N}*rNei0f4@%|*; zz#)zC>gR*eooeGArkd%sEfbyY#o2I1l*o0^aiPs}!oR<*U!RnUcf7kDaQBu5Y4%nI zq(IJBXIL1GvfD(=zFvujT%(0HUb#gAWzNG+Rk!MWfiQ(pW1&k6_o)Ivrjcv)#>(AEw|uf`}^6U%l_tA)BkzI3ME*P_$X<_f;1)H0iIY zhl+-0%pj0b2#qdshg>8USF<86u}=2Q_BLtKU}rWbHB+{dbmE#g7jHU_Wn2*V*`aQd z7MA+a-y^zy63)*`tO`6!-WEhwU`m;2_ZiCvOWdn0m8uh$BC#oX#)_8|K`9VMsfy73 zcxYJ1Em2E?e?j^BqeQCwr`-Sve)3kq!K`1by&PdCJke(`&jR>MiHC6#l&A?3?5GKm zG?CDk>lcM1g*sz1=z#fi$}aFAoLEfHg@Fov}ak<=iK+K#1$F|-a9P);j@;uOO9 zjP1Mrc`LMy`R9!Is5;PA?Mlcm9hGq-nTnhs{XIUKemcm*t7YV6XJl0oRjn@yZ|ci} zF*Xm1P9aQQ@mmaVI551T1=5BX6ckMZMRA?B6dmJNlAEUfM$pkS>9I=i(daEGcU9)3 z<4kpe{t5ebyuJ$}uYsnJB^aw7fb86Fl(tTCciKEM()eKPxE&G0cv!V>-${T%7W+WO z+<7qAB+1(mmj%+gAV!#`rT#y03Xd=VLyXvIzP_8~IBSh~YU7^mupdOr-1}Cth)@0R z^I+N5h(XlAj&q|2veN6O9Ae@*yj`|m7PLV{8z+bzd@!IAw9 zcvA7Ng*wsjt&(~4hi?cB?wvZqCY~;0om1!w{611m{+bkc>W=Gl1+>MjY%opfZz)1peDtQudZ#F~>F&7wTI z)EjNOqI*CqAu`0Pl;(G?C(XoL2Z^csJ#wSvnc!(Ajs|WtBqev&l82nqZHn(qZEk0~ z>RUeE^49Hp9RYGh9_DhVhn4?igt8pv=5oHQy zY4^{#^Z3Z4Xwcc=Ivl0>!@r&$;lcFsagG{%Jo57sU@KsoXrmy%vVEXvuI7Ul*(h%Sfzrn zhLgN%w&ticX~chK-hYWT=Hd3qK{pEo@%)9L>7rF-gTb8@BU z{prr_(_SgX6^|p0E!hmkQ5hM={yx)&e@5zuF(jsY8!K%{%>JYerc>6hK7x;3bSko$ zsF;LDh#N;Iq3ZA~jR7UFobuL^e6neuen&cA0C6%d09C)2-;Ud~PH}^&>*X0V zk(KSfG<}A-(Xj8-TK1@=rlW7YXD@{n@E@za5YwtV|sJ+xF@hYJr^`7+8M^C3S4)Tb040*O&{oa*-)_2H21c6lMBY zzGHlYM1lr=OCqKt@f^|n3mYLh?nK#GT;ZDBkuU8ql~1Pv=2_A=DSbZa0DzCnDKObC zx$?qX2xIvW0_7LYQ+r)k?oxpGVOejL+?*a<7}hA*k+R4Q@}1pnWfgD6O8i9~p-Eiw zI>;>5Df#rzd4F{GR}=QzJU#udEHlDQLp~kPESRM`0?DeC<{JIrh$kcPja5hNADSID zuP_rty&eA_=Eh36-5>^ghET9UxQHq!Os*3)YfmPabA48`*(XFy5QwEztG5_LuR%j- zxeT=t0o@EKo}ZmOT;3RdLhPOw4lol4WF<=oU*wvLBXyzP2UPt=l9AxO*3b_GHZ<$j zWLz6-(O_J_jDN^VkMt$k4v%@+h{*DSlO?N;mX>a=S>T0H@V}4F<`2wk>{W!k{h*B@ zn91;{n=HD&L(gztDQl~?N$xl8GFj^+^-ekJmd@=c)CJ=O*2dlvCPvWDF zI5%)$whaxq1SjzV>q^8g=CC6#6j2D7o&E0nEKfB!&cLJ28k0xx)inBRG!t8aq+#S0 z0WwNR1{NUnjXvb%SQoTfpn&`NcO}_p=l&*7R@WNH59Q6NCXWi^EnyvF&5OO=t8%F}r** zyMRfy8l*Qu%{H!l^J#o;TbKC&m&ukTQ(pFehSEk4r3i_GGsSeVjqOey?>aE1N8!4*z> z+I{_czv=l>wv6ey)opvRan{x0*?shW8}@Q4I5lSWaL04;^l_J78}9=Ca&VaE

-06+6hTnaC*U48|&?+n()?C=0VJLI)BJ08nZ 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μ-O^n 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%0APkbBO~e!a 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 C=q1Pi literal 0 HcmV?d00001 diff --git a/baseio/pom.xml b/baseio/pom.xml index c0c9004..81e73e8 100644 --- a/baseio/pom.xml +++ b/baseio/pom.xml @@ -1,62 +1,63 @@ - - 4.0.0 - com.generallycloud - baseio-example-microservices - Baseio Example Microservices - 1.0.0-SNAPSHOT + 4.0.0 + com.generallycloud + baseio-example-microservices + Baseio Example Microservices + 1.0.0-SNAPSHOT - - - example.Server - + + + example.Server + - - - com.generallycloud - baseio-all - 3.1.8-Alpha3 - - + + + com.generallycloud + baseio-all + baseio-all-3.2.6-SNAPSHOT + system + ${basedir}/lib/baseio-all-3.2.6-SNAPSHOT.jar + + - - - - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - + + - org.apache.maven.plugins - maven-shade-plugin - 2.3 - - - package - - shade - - + maven-compiler-plugin + 3.6.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + + package + + shade + + - - - ${exec.mainClass} - - - - ${project.build.directory}/${project.artifactId}-fat.jar - - - - - - - + + + ${exec.mainClass} + + + + ${project.build.directory}/${project.artifactId}-fat.jar + + + + + + + \ No newline at end of file diff --git a/baseio/src/main/java/example/Server.java b/baseio/src/main/java/example/Server.java index d1cb04d..c696bd4 100644 --- a/baseio/src/main/java/example/Server.java +++ b/baseio/src/main/java/example/Server.java @@ -1,43 +1,59 @@ package example; -import com.generallycloud.nio.acceptor.SocketChannelAcceptor; -import com.generallycloud.nio.codec.http11.ServerHTTPProtocolFactory; -import com.generallycloud.nio.component.IoEventHandleAdaptor; -import com.generallycloud.nio.component.NioSocketChannelContext; -import com.generallycloud.nio.component.SocketChannelContext; -import com.generallycloud.nio.component.SocketSession; -import com.generallycloud.nio.configuration.ServerConfiguration; -import com.generallycloud.nio.protocol.ReadFuture; - -public class Server { - - public static void main(String[] args) throws Exception { - - IoEventHandleAdaptor eventHandleAdaptor = new IoEventHandleAdaptor() { - @Override - public void accept(SocketSession session, ReadFuture future) throws Exception { - future.write("Hello World!"); - session.flush(future); - } - }; - - ServerConfiguration c = new ServerConfiguration(8080); - - c.setSERVER_MEMORY_POOL_UNIT(256); - c.setSERVER_ENABLE_MEMORY_POOL_DIRECT(true); - //c.setSERVER_CORE_SIZE(2); - c.setSERVER_ENABLE_MEMORY_POOL(true); - c.setSERVER_MEMORY_POOL_CAPACITY_RATE(4); - - SocketChannelContext context = new NioSocketChannelContext(c); - - SocketChannelAcceptor acceptor = new SocketChannelAcceptor(context); - - context.setIoEventHandleAdaptor(eventHandleAdaptor); - context.setProtocolFactory(new ServerHTTPProtocolFactory()); - - acceptor.bind(); - - } - +import java.net.StandardSocketOptions; +import java.util.ArrayList; +import java.util.List; + +import com.generallycloud.baseio.buffer.ByteBuf; +import com.generallycloud.baseio.codec.http11.ServerHttpCodec; +import com.generallycloud.baseio.component.ChannelAcceptor; +import com.generallycloud.baseio.component.ChannelContext; +import com.generallycloud.baseio.component.ChannelEventListenerAdapter; +import com.generallycloud.baseio.component.IoEventHandle; +import com.generallycloud.baseio.component.LoggerChannelOpenListener; +import com.generallycloud.baseio.component.NioEventLoopGroup; +import com.generallycloud.baseio.component.NioSocketChannel; +import com.generallycloud.baseio.protocol.Future; + +public class Server { + + public static void main(String[] args) throws Exception { + + NioEventLoopGroup group = new NioEventLoopGroup(); + group.setMemoryPoolCapacity(1024 * 64); + group.setMemoryPoolUnit(512); + ChannelContext context = new ChannelContext(8087); + ChannelAcceptor acceptor = new ChannelAcceptor(context, group); + context.setProtocolCodec(new ServerHttpCodec(1024 * 4)); + context.setMaxWriteBacklog(Integer.MAX_VALUE); + context.addChannelEventListener(new LoggerChannelOpenListener()); + context.addChannelEventListener(new ChannelEventListenerAdapter() { + + @Override + public void channelOpened(NioSocketChannel channel) throws Exception { + channel.setOption(StandardSocketOptions.TCP_NODELAY, true); + channel.setIoEventHandle(new IoEventHandle() { + boolean addTask = true; + List fs = new ArrayList<>(256); + + @Override + public void accept(NioSocketChannel channel, Future future) throws Exception { + future.write("Hello World", channel); + fs.add(channel.encode(future)); + if (addTask) { + addTask = false; + channel.getEventLoop().dispatchAfterLoop(() -> { + channel.flush(fs); + addTask = true; + fs.clear(); + }); + } + } + }); + } + }); + + acceptor.bind(); + } + } From f63326fc2f9974065c85c620bc41d7a325ce4328 Mon Sep 17 00:00:00 2001 From: Kai Wang <8738115@qq.com> Date: Wed, 8 Aug 2018 11:56:14 +0800 Subject: [PATCH 013/309] update listening port --- baseio/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/baseio/README.md b/baseio/README.md index 6ac4b38..9bd40f2 100644 --- a/baseio/README.md +++ b/baseio/README.md @@ -11,10 +11,10 @@ Run: java -jar target/baseio-example-microservices-fat.jar ``` -Server will start on port 8080. +Server will start on port 8087. Test: ``` -wrk -t{CPU_SIZE} -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 2048 -``` \ No newline at end of file +wrk -t{CPU_SIZE} -c128 -d30s http://localhost:8087 -s pipeline.lua --latency -- / 2048 +``` From dd38064416a8eedb7399fd80dfe973c2c3eb6371 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 3 Sep 2018 19:56:40 -0400 Subject: [PATCH 014/309] fixes #44 re-implement light-4j with release 1.5.19 --- README.md | 2 +- {light-java/a => light-4j}/pom.xml | 117 +++--------------- .../a => light-4j}/src/main/java/Example.java | 0 light-4j/src/main/resources/config/server.yml | 58 +++++++++ .../src/main/resources/config/service.yml | 5 + .../src/main/resources/logback.xml | 0 .../com.networknt.server.HandlerProvider | 1 - .../a/src/main/resources/config/server.json | 5 - 8 files changed, 79 insertions(+), 109 deletions(-) rename {light-java/a => light-4j}/pom.xml (54%) rename {light-java/a => light-4j}/src/main/java/Example.java (100%) create mode 100644 light-4j/src/main/resources/config/server.yml create mode 100644 light-4j/src/main/resources/config/service.yml rename {light-java/a => light-4j}/src/main/resources/logback.xml (100%) delete mode 100644 light-java/a/src/main/resources/META-INF/services/com.networknt.server.HandlerProvider delete mode 100644 light-java/a/src/main/resources/config/server.json diff --git a/README.md b/README.md index 53cc259..5388e8f 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ | Framework | Language | Max Throughput | Avg Latency | Transfer | | ------------ | ---------: | -------------: | ----------: | -------: | | Go FastHttp | Go | 1,396,685.83 | 99.98ms | 167.83MB | -| Light Java | Java | 1,344,512.65 | 2.36ms | 169.25MB | +| Light-4j | Java | 1,344,512.65 | 2.36ms | 169.25MB | | ActFramework | Java | 945,429.13 | 2.22ms | 136.15MB | | Go Iris | Go | 828,035.66 | 5.77ms | 112.92MB | | Vertx | Java | 803,311.31 | 2.37ms | 98.06MB | diff --git a/light-java/a/pom.xml b/light-4j/pom.xml similarity index 54% rename from light-java/a/pom.xml rename to light-4j/pom.xml index dbd908f..4de623f 100644 --- a/light-java/a/pom.xml +++ b/light-4j/pom.xml @@ -1,117 +1,47 @@ - - org.sonatype.oss - oss-parent - 5 - 4.0.0 - io.swagger - swagger-light-java + com.networknt + plaintext jar - swagger-light-java + plaintext 1.0.0 - - 2.2.0 - 1.8 UTF-8 - 0.1.7 - 2.8.2 - 1.7.21 - 0.6.3 - 4.5.3 - 2.6 - 2.5 - 1.11 - 1.2 - 3.1.2 - 1.1.7 + 1.5.19 + 2.9.5 + 1.7.25 + 1.2.3 4.12 - 2.1.0-beta.124 - 1.4.23.Final - 2.2.0 - 4.5.2 - 4.1.2 - 1.5.10 + 2.0.11.Final com.networknt config - ${version.framework} + ${version.light-4j} com.networknt utility - ${version.framework} + ${version.light-4j} com.networknt - security - ${version.framework} - - - com.networknt - client - ${version.framework} - - - com.networknt - audit - ${version.framework} - - - com.networknt - info - ${version.framework} - - - com.networknt - validator - ${version.framework} - - - com.networknt - status - ${version.framework} - - - com.networknt - exception - ${version.framework} - - - com.networknt - body - ${version.framework} - - - com.networknt - mask - ${version.framework} - - - com.networknt - swagger - ${version.framework} - - - com.networknt - metrics - ${version.framework} + handler + ${version.light-4j} com.networknt - handler - ${version.framework} + service + ${version.light-4j} com.networknt server - ${version.framework} + ${version.light-4j} @@ -124,11 +54,6 @@ jackson-core ${version.jackson} - - com.jayway.jsonpath - json-path - ${version.jsonpath} - ch.qos.logback logback-classic @@ -139,11 +64,6 @@ undertow-core ${version.undertow} - - io.swagger - swagger-annotations - ${version.swagger-parser} - @@ -152,13 +72,6 @@ ${version.junit} test - - org.apache.httpcomponents - httpclient - ${version.httpclient} - test - - diff --git a/light-java/a/src/main/java/Example.java b/light-4j/src/main/java/Example.java similarity index 100% rename from light-java/a/src/main/java/Example.java rename to light-4j/src/main/java/Example.java diff --git a/light-4j/src/main/resources/config/server.yml b/light-4j/src/main/resources/config/server.yml new file mode 100644 index 0000000..70f0197 --- /dev/null +++ b/light-4j/src/main/resources/config/server.yml @@ -0,0 +1,58 @@ +# Server configuration +--- +# This is the default binding address if the service is dockerized. +ip: 0.0.0.0 + +# Http port if enableHttp is true. It will be ignored if dynamicPort is true. +httpPort: 8080 + +# Enable HTTP should be false by default. It should be only used for testing with clients or tools +# that don't support https or very hard to import the certificate. Otherwise, https should be used. +# When enableHttp, you must set enableHttps to false, otherwise, this flag will be ignored. There is +# only one protocol will be used for the server at anytime. If both http and https are true, only +# https listener will be created and the server will bind to https port only. +enableHttp: true + +# Https port if enableHttps is true. It will be ignored if dynamicPort is true. +httpsPort: 8443 + +# Enable HTTPS should be true on official environment and most dev environments. +enableHttps: false + +# Http/2 is enabled by default for better performance and it works with the client module +enableHttp2: false + +# Keystore file name in config folder. KeystorePass is in secret.yml to access it. +keystoreName: server.keystore + +# Flag that indicate if two way TLS is enabled. Not recommended in docker container. +enableTwoWayTls: false + +# Truststore file name in config folder. TruststorePass is in secret.yml to access it. +truststoreName: server.truststore + +# Unique service identifier. Used in service registration and discovery etc. +serviceId: com.networknt.plaintext-1.0.0 + +# Flag to enable self service registration. This should be turned on on official test and production. And +# dyanmicPort should be enabled if any orchestration tool is used like Kubernetes. +enableRegistry: false + +# Dynamic port is used in situation that multiple services will be deployed on the same host and normally +# you will have enableRegistry set to true so that other services can find the dynamic port service. When +# deployed to Kubernetes cluster, the Pod must be annotated as hostNetwork: true +dynamicPort: false + +# Minimum port range. This define a range for the dynamic allocated ports so that it is easier to setup +# firewall rule to enable this range. Default 2400 to 2500 block has 100 port numbers and should be +# enough for most cases unless you are using a big bare metal box as Kubernetes node that can run 1000s pods +minPort: 2400 + +# Maximum port rang. The range can be customized to adopt your network security policy and can be increased or +# reduced to ease firewall rules. +maxPort: 2500 + +# environment tag that will be registered on consul to support multiple instances per env for testing. +# https://github.com/networknt/light-doc/blob/master/docs/content/design/env-segregation.md +# This tag should only be set for testing env, not production. The production certification process will enforce it. +# environment: test1 diff --git a/light-4j/src/main/resources/config/service.yml b/light-4j/src/main/resources/config/service.yml new file mode 100644 index 0000000..9d9add7 --- /dev/null +++ b/light-4j/src/main/resources/config/service.yml @@ -0,0 +1,5 @@ +# Singleton service factory configuration/IoC injection +singletons: +# HandlerProvider implementation +- com.networknt.handler.HandlerProvider: + - Example diff --git a/light-java/a/src/main/resources/logback.xml b/light-4j/src/main/resources/logback.xml similarity index 100% rename from light-java/a/src/main/resources/logback.xml rename to light-4j/src/main/resources/logback.xml diff --git a/light-java/a/src/main/resources/META-INF/services/com.networknt.server.HandlerProvider b/light-java/a/src/main/resources/META-INF/services/com.networknt.server.HandlerProvider deleted file mode 100644 index 0c3c67e..0000000 --- a/light-java/a/src/main/resources/META-INF/services/com.networknt.server.HandlerProvider +++ /dev/null @@ -1 +0,0 @@ -Example \ No newline at end of file diff --git a/light-java/a/src/main/resources/config/server.json b/light-java/a/src/main/resources/config/server.json deleted file mode 100644 index 276acff..0000000 --- a/light-java/a/src/main/resources/config/server.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "description": "server config", - "ip": "0.0.0.0", - "port": 8080 -} From 28a5f7890152a27825f0069933d2ae71f3171e90 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Sep 2018 11:51:40 -0400 Subject: [PATCH 015/309] upgrade to version 1.5.20 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 4de623f..2897c7f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.19 + 1.5.20 2.9.5 1.7.25 1.2.3 From 0a1ca0396071c0b8ff477cb1689b0b5070afb153 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 5 Oct 2018 18:12:51 -0400 Subject: [PATCH 016/309] upgrade to version 1.5.21 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2897c7f..5f16299 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.20 + 1.5.21 2.9.5 1.7.25 1.2.3 From 23bd46c25a26d0f5ef00fde414cabc7dff6f2e2f Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Tue, 23 Oct 2018 18:22:46 +0300 Subject: [PATCH 017/309] Update iris code to the latest (v11) --- iris/server.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/iris/server.go b/iris/server.go index cfaafd8..12448ca 100644 --- a/iris/server.go +++ b/iris/server.go @@ -1,12 +1,11 @@ package main -import ("github.com/kataras/iris") +import "github.com/kataras/iris" func main() { - iris.Config.Charset = "UTF-8" // this is the default, you don't have to set it manually - - iris.Get("/", func(ctx *iris.Context) { - ctx.Text(iris.StatusOK, "Hello World!") + app := iris.New() + app.Get("/", func(ctx iris.Context) { + ctx.WriteString("Hello World!") }) - iris.Listen(":8080") + app.Run(iris.Addr(":8080")) } From c15382be74c4fb0b65b07a61ae7977e5652b222d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 26 Oct 2018 18:47:12 -0400 Subject: [PATCH 018/309] upgrade to version 1.5.22-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5f16299..c17f4a0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.21 + 1.5.22-SNAPSHOT 2.9.5 1.7.25 1.2.3 From 80fe4b7334fd235bbacada74c76fe1cc8572ca30 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 1 Nov 2018 11:00:08 -0400 Subject: [PATCH 019/309] Update README.md Consistent commas. --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5388e8f..5d72714 100644 --- a/README.md +++ b/README.md @@ -12,21 +12,21 @@ | Vertx | Java | 803,311.31 | 2.37ms | 98.06MB | | Node-uws | Node/C++ | 589,924.44 | 7.22ms | 28.69MB | | Dotnet | .Net | 486,216.93 | 2.93ms | 57.03MB | -| Jooby/Undertow | Java | 362018.07 | 3.95ms | 47.99MB | -| SeedStack-Filter | Java | 343416.33 | 4.41ms | 51.42MB | +| Jooby/Undertow | Java | 362,018.07 | 3.95ms | 47.99MB | +| SeedStack-Filter | Java | 343,416.33 | 4.41ms | 51.42MB | | Spring Boot Reactor | Java | 243,240.17 | 7.44ms | 17.86MB | | Pippo-Undertow | Java | 216,254.56 | 9.80ms | 31.35MB | | Spark | Java | 194,553.83 | 13.85ms | 32.47MB | | Pippo-Jetty | Java | 178,055.45 | 15.66ms | 26.83MB | | Play-Java | Java | 177,202.75 | 12.15ms | 21.80MB | -| Go HttpRouter | Go | 171852.31 | 14.12ms | 21.14MB | +| Go HttpRouter | Go | 171,852.31 | 14.12ms | 21.14MB | | Go Http | Go | 170,313.02 | 15.01ms | 20.95MB | | JFinal | Java | 139,467.87 | 11.89ms | 29.79MB | | Akka-Http | Java | 132,157.96 | 12.21ms | 19.54MB | | RatPack | Java | 124,700.70 | 13.45ms | 10.82MB | | Pippo-Tomcat | Java | 103,948.18 | 23.50ms | 15.29MB | | Bootique + Jetty/Jersey | Java | 65,072.20 | 39.08ms | 11.17MB | -| SeedStack-Jersey2 | Java | 52310.11 | 26.88ms | 11.87MB | +| SeedStack-Jersey2 | Java | 52,310.11 | 26.88ms | 11.87MB | | Baseio | Java | 50,361.98 | 22.20ms | 6.39MB | | NinjaFramework | Java | 47,956.43 | 55.76ms | 13.67MB | | Play 1 | Java | 44,491.87 | 10.73ms | 18.75MB | @@ -34,7 +34,7 @@ | Nodejs Express | Node | 42,443.34 | 22.30ms | 9.31MB | | Dropwizard | Java | 33,819.90 | 98.78ms | 3.23MB | | Spring Boot Tomcat | Java | 33,086.22 | 82.93ms | 3.98MB | -| Node-Loopback | Node | 32091.95 | 34.42ms | 11.51MB | +| Node-Loopback | Node | 32,091.95 | 34.42ms | 11.51MB | | Payra Micro | Java | 24,768.69 | 118.86ms | 3.50MB | | WildFly Swarm | Java | 21,541.07 | 59.77ms | 2.83MB | @@ -798,4 +798,4 @@ Running 30s test @ http://localhost:8080 Requests/sec: 171852.31 Transfer/sec: 21.14MB -``` \ No newline at end of file +``` From 976ff3e2f1f823a46a407fb0568c080f0641839a Mon Sep 17 00:00:00 2001 From: Gelin Luo Date: Tue, 6 Nov 2018 05:53:35 +1100 Subject: [PATCH 020/309] update act to 1.8.11 --- actframework/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actframework/pom.xml b/actframework/pom.xml index 5484ba6..2ac9dda 100644 --- a/actframework/pom.xml +++ b/actframework/pom.xml @@ -6,12 +6,12 @@ microservice.benchmark act-benchmark - 1.8.8.1 + 1.8.11.0 org.actframework act-starter-parent - 1.8.8.4 + 1.8.11.0 From 1fe93512afc1500d4e7f8fe252dfc2dd22d20267 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 10 Nov 2018 09:52:31 -0500 Subject: [PATCH 021/309] upgrade to version 1.5.22 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c17f4a0..a55f48d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.22-SNAPSHOT + 1.5.22 2.9.5 1.7.25 1.2.3 From 14bd77d72eb8bac90ffa16bf386ddafe8a72cb8d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 10 Nov 2018 13:53:10 -0500 Subject: [PATCH 022/309] upgrade to version 1.5.23 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a55f48d..6b48fb8 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.22 + 1.5.23 2.9.5 1.7.25 1.2.3 From 084e12eaccae6bdb4b9ce95c69e0d3731c058494 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 1 Dec 2018 16:00:55 -0500 Subject: [PATCH 023/309] upgrade to version 1.5.24 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6b48fb8..612af97 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.23 + 1.5.24 2.9.5 1.7.25 1.2.3 From 84576fad5dc22da5152db0491412a22fdfc88bad Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 15 Dec 2018 01:03:52 -0500 Subject: [PATCH 024/309] upgrade to version 1.5.25 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 612af97..e29521f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.24 + 1.5.25 2.9.5 1.7.25 1.2.3 From d9af26ca0492058a03ba1f840b86222dc602d3f0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 24 Dec 2018 13:38:09 -0500 Subject: [PATCH 025/309] upgrade to version 1.5.26 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e29521f..edc0d28 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.25 + 1.5.26 2.9.5 1.7.25 1.2.3 From 8f877a10ad7a972246b0257d79afdf1c31d516ad Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 29 Dec 2018 23:04:00 -0500 Subject: [PATCH 026/309] upgrade to jdk11 --- light-4j/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index edc0d28..3b6e07a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -7,9 +7,9 @@ 1.0.0 - 1.8 + 11 UTF-8 - 1.5.26 + 2.0.0-BETA2 2.9.5 1.7.25 1.2.3 From e00838b76c47a60d01f9a6d6254af8a521a30274 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 7 Jan 2019 08:24:25 -0500 Subject: [PATCH 027/309] upgrade jackson to 2.9.8 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index edc0d28..61bdabf 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 1.8 UTF-8 1.5.26 - 2.9.5 + 2.9.8 1.7.25 1.2.3 4.12 From 89e04a5bc256cab2d1b2e840d5cc10eaad6d11f6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 12 Jan 2019 12:39:15 -0500 Subject: [PATCH 028/309] upgrade to version 1.5.27 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 61bdabf..ba7bb6f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.26 + 1.5.27 2.9.8 1.7.25 1.2.3 From 745a1431fc22315441678148b20afbf0d439e091 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 12 Jan 2019 16:22:51 -0500 Subject: [PATCH 029/309] upgrade to version 1.5.28 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ba7bb6f..ed79d81 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.27 + 1.5.28 2.9.8 1.7.25 1.2.3 From ab5000e90edecb24e699a2a59e55b52cbfac1f1f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 13 Jan 2019 17:54:19 -0500 Subject: [PATCH 030/309] upgrade to version 1.5.29 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ed79d81..db60c8e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.28 + 1.5.29 2.9.8 1.7.25 1.2.3 From 2b73c3ddcc1404f930f0f8a272447095e5ceca2e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 14 Jan 2019 16:22:15 -0500 Subject: [PATCH 031/309] upgrade undertow to 2.0.16.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index db60c8e..f52bd90 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.11.Final + 2.0.16.Final From ae6c68a325369e13f103e19b9d2e9dfc4466aea4 Mon Sep 17 00:00:00 2001 From: Lior Knaany Date: Sun, 10 Feb 2019 16:07:51 +0200 Subject: [PATCH 032/309] Faster Vert.x entry: 1. using more verticals. since the test is done with more than 4 connections 2. all strings to constants 3. using Vert.x buffer over a string is much more efficient --- vertx/src/main/java/hello/Server.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/vertx/src/main/java/hello/Server.java b/vertx/src/main/java/hello/Server.java index 5429ee3..4bf41d3 100644 --- a/vertx/src/main/java/hello/Server.java +++ b/vertx/src/main/java/hello/Server.java @@ -3,14 +3,16 @@ import io.vertx.core.AbstractVerticle; import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; +import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpHeaders; -import java.util.Date; - public class Server extends AbstractVerticle { - private static final int INSTANCES = 4; - private static final String TEXT = "Hello World!"; + private static final int INSTANCES = Runtime.getRuntime().availableProcessors() * 2; + private static final Buffer TEXT = Buffer.buffer("Hello World!"); + + private static final String TEXT_PLAIN = "text/plain"; + private static final String VERTX = "Vertx"; // Convenience method so you can run it in your IDE public static void main(String[] args) { @@ -22,8 +24,8 @@ public static void main(String[] args) { public void start() throws Exception { vertx.createHttpServer().requestHandler(req -> { req.response() - .putHeader(HttpHeaders.SERVER, "Vertx") - .putHeader(HttpHeaders.CONTENT_TYPE, "text/plain") + .putHeader(HttpHeaders.SERVER, VERTX) + .putHeader(HttpHeaders.CONTENT_TYPE, TEXT_PLAIN) .end(TEXT); }).listen(8080); } From 6cc7ae9df4788d6fe8e50f9fe3d68b2dce801e32 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 10 Feb 2019 20:35:58 -0500 Subject: [PATCH 033/309] update vertx and light-4j --- README.md | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 5d72714..d636ae4 100644 --- a/README.md +++ b/README.md @@ -46,21 +46,20 @@ at microservices-framework-benchmark/pipeline.lua. Here is the light-java server performance with the same command line with other frameworks. ``` -steve@joy:~/tool/wrk$ wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 +wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 Running 30s test @ http://localhost:8080 4 threads and 128 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 2.36ms 3.55ms 53.35ms 89.03% - Req/Sec 338.18k 49.76k 717.09k 76.64% + Latency 774.30us 1.77ms 40.31ms 91.51% + Req/Sec 0.93M 81.46k 1.06M 87.83% Latency Distribution - 50% 1.05ms - 75% 2.48ms - 90% 6.35ms - 99% 17.28ms - 40436304 requests in 30.08s, 4.97GB read -Requests/sec: 1344512.65 -Transfer/sec: 169.25MB - + 50% 286.00us + 75% 529.00us + 90% 1.92ms + 99% 0.00us + 110603088 requests in 30.01s, 12.88GB read +Requests/sec: 3685234.33 +Transfer/sec: 439.31MB ``` Here is another test with for light-java to push more requests but some other frameworks get server errors. @@ -624,27 +623,26 @@ Transfer/sec: 28.69MB @seanjburns submitted a pull request to add vertx and here is the result. ``` -steve@joy:~/tool/wrk$ wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 +wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 Running 30s test @ http://localhost:8080 4 threads and 128 connections Thread Stats Avg Stdev Max +/- Stdev - Latency 2.37ms 3.24ms 79.48ms 90.49% - Req/Sec 201.91k 19.79k 269.09k 78.08% + Latency 1.34ms 5.61ms 170.00ms 94.85% + Req/Sec 0.95M 133.67k 1.23M 92.76% Latency Distribution - 50% 1.41ms - 75% 2.42ms - 90% 5.41ms - 99% 16.08ms - 24114240 requests in 30.02s, 2.87GB read -Requests/sec: 803311.31 -Transfer/sec: 98.06MB - + 50% 278.00us + 75% 517.00us + 90% 3.23ms + 99% 126.69ms + 113247792 requests in 30.10s, 9.70GB read +Requests/sec: 3762376.24 +Transfer/sec: 330.10MB ``` @kevin-better submitted a pull request to add baseio and here is the result. ``` -steve@joy:~/tool/wrk$ wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 +wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16 Running 30s test @ http://localhost:8080 4 threads and 128 connections Thread Stats Avg Stdev Max +/- Stdev From d290824745e33c91152108dd35f677030068677c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 16 Feb 2019 12:56:03 -0500 Subject: [PATCH 034/309] upgrade to version 1.5.30 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f52bd90..8dc185f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.29 + 1.5.30 2.9.8 1.7.25 1.2.3 From 07bb556c0b33b1bc80f3deb2c8966c4445dfca84 Mon Sep 17 00:00:00 2001 From: Edgar Espina Date: Wed, 20 Feb 2019 18:10:48 -0300 Subject: [PATCH 035/309] Jooby 2.x - adding the tests for 2.0.0.M1 --- jooby-2.x/README.md | 33 ++++++++++++ jooby-2.x/conf/logback.xml | 11 ++++ jooby-2.x/pom.xml | 66 ++++++++++++++++++++++++ jooby-2.x/src/main/java/example/App.java | 16 ++++++ 4 files changed, 126 insertions(+) create mode 100644 jooby-2.x/README.md create mode 100644 jooby-2.x/conf/logback.xml create mode 100644 jooby-2.x/pom.xml create mode 100644 jooby-2.x/src/main/java/example/App.java diff --git a/jooby-2.x/README.md b/jooby-2.x/README.md new file mode 100644 index 0000000..e2cc268 --- /dev/null +++ b/jooby-2.x/README.md @@ -0,0 +1,33 @@ +[Jooby 2.x](https://jooby.io) + +## hello world! + +Java: + +```java +import io.jooby.Jooby; + +public class App extends Jooby { + + { + get("/", ctx -> ctx.sendString("Hello World!")); + } + + public static void main(final String[] args) { + run(App::new, args); + } +} + +``` + +## build + +``` +mvn package +``` + +# run + +``` +java -jar target/jooby-2.x.jar +``` diff --git a/jooby-2.x/conf/logback.xml b/jooby-2.x/conf/logback.xml new file mode 100644 index 0000000..2d1c514 --- /dev/null +++ b/jooby-2.x/conf/logback.xml @@ -0,0 +1,11 @@ + + + + + [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n + + + + + + diff --git a/jooby-2.x/pom.xml b/jooby-2.x/pom.xml new file mode 100644 index 0000000..36dc30e --- /dev/null +++ b/jooby-2.x/pom.xml @@ -0,0 +1,66 @@ + + + + 4.0.0 + + io.jooby + jooby + 2.0.0 + + jooby + + + 2.0.0.M1 + + example.App + + + + + + io.jooby + jooby-utow + ${jooby.version} + + + + + jooby-2.x + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + package + + shade + + + + + + ${application.class} + + + + + + + + + + + diff --git a/jooby-2.x/src/main/java/example/App.java b/jooby-2.x/src/main/java/example/App.java new file mode 100644 index 0000000..babc9b0 --- /dev/null +++ b/jooby-2.x/src/main/java/example/App.java @@ -0,0 +1,16 @@ +package example; + +import io.jooby.Jooby; +import static io.jooby.ExecutionMode.EVENT_LOOP; + +public class App extends Jooby { + + { + get("/", ctx -> ctx.sendString("Hello World!")); + } + + public static void main(final String[] args) { + run(App::new, EVENT_LOOP, args); + } + +} From 54445fb97d189e7db47d43dd263cda14f66b20f0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 20 Feb 2019 21:47:34 -0500 Subject: [PATCH 036/309] upgrade to version 1.5.31 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8dc185f..b929ca5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.30 + 1.5.31 2.9.8 1.7.25 1.2.3 From 4c0a7190c555e541f2f7294d6564959a7f156f17 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 2 Mar 2019 10:23:21 -0500 Subject: [PATCH 037/309] upgrade to version 1.5.32 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b929ca5..9a7a4e8 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.31 + 1.5.32 2.9.8 1.7.25 1.2.3 From 159c46ad7d763ab9530cf1ea0818dc7b21d1aab2 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 7 Mar 2019 22:53:45 -0500 Subject: [PATCH 038/309] update README.md to add support links --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d636ae4..44c9bd8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -[Developer Chat](https://gitter.im/networknt/microservices-framework-benchmark) | +[Stack Overflow](https://stackoverflow.com/questions/tagged/light-4j) | +[Google Group](https://groups.google.com/forum/#!forum/light-4j) | +[Gitter Chat](https://gitter.im/networknt/microservices-framework-benchmark) | +[Subreddit](https://www.reddit.com/r/lightapi/) | +[Youtube Channel](https://www.youtube.com/channel/UCHCRMWJVXw8iB7zKxF55Byw) | [Documentation](https://networknt.github.io/microservices-framework-benchmark) | -[Contribution Guide](CONTRIBUTING.md) | +[Contribution Guide](https://doc.networknt.com/contribute/) | | Framework | Language | Max Throughput | Avg Latency | Transfer | From bda956494e497b1052b4c038b07fd4b963cdfb1f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 19 Mar 2019 21:51:45 -0400 Subject: [PATCH 039/309] upgrade to version 1.5.33 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9a7a4e8..7dde5aa 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.32 + 1.5.33 2.9.8 1.7.25 1.2.3 From 01c236145479265cb0251700a54853c9f3ddb644 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 5 Apr 2019 21:00:44 -0400 Subject: [PATCH 040/309] upgrade to version 1.6.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7dde5aa..ccb5a0d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.5.33 + 1.6.0 2.9.8 1.7.25 1.2.3 From 5c2f95e54c91132b10af84c48bede5c83a3c8f70 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 11 Apr 2019 19:26:17 -0400 Subject: [PATCH 041/309] upgrade to version 1.6.1-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ccb5a0d..20bea1d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.0 + 1.6.1-SNAPSHOT 2.9.8 1.7.25 1.2.3 From 85b776e4c4538a80845a2dce948d69e8381d96f9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 3 May 2019 16:26:16 -0400 Subject: [PATCH 042/309] upgrade to version 1.6.1 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 20bea1d..5defdce 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.1-SNAPSHOT + 1.6.1 2.9.8 1.7.25 1.2.3 From bcc6a5ae08a5ffec4ad7a92aaa257ef1bb523d3d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 3 May 2019 20:29:19 -0400 Subject: [PATCH 043/309] upgrade to version 1.6.2-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5defdce..b2b57b0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.1 + 1.6.2-SNAPSHOT 2.9.8 1.7.25 1.2.3 From 9684a50dc1f971eaecbea2890d1ebbdd0571b478 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 17 May 2019 17:17:46 -0400 Subject: [PATCH 044/309] upgrade to version 1.6.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b2b57b0..ab2d70a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.2-SNAPSHOT + 1.6.2 2.9.8 1.7.25 1.2.3 From 06a1aec1603453239439a91fecd00c6be79d6804 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 17 May 2019 20:29:46 -0400 Subject: [PATCH 045/309] upgrade to version 1.6.3-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ab2d70a..b248780 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.2 + 1.6.3-SNAPSHOT 2.9.8 1.7.25 1.2.3 From 18e58a72164cc2ba4933c10e592af472e415460e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 23 May 2019 12:39:35 -0400 Subject: [PATCH 046/309] upgrade jackson to 2.9.9 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b248780..805a02d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 1.8 UTF-8 1.6.3-SNAPSHOT - 2.9.8 + 2.9.9 1.7.25 1.2.3 4.12 From 75181f4af713f69ae92cad8d5e78218bc6781f5a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 10 Jun 2019 10:33:28 -0400 Subject: [PATCH 047/309] upgrade to version 1.6.3 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 805a02d..08f0a66 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.3-SNAPSHOT + 1.6.3 2.9.9 1.7.25 1.2.3 From ea5e8f1c11f65bd248a0c3cea8846d57858b2f9d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 10 Jun 2019 11:14:25 -0400 Subject: [PATCH 048/309] upgrade to version 1.6.4 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 08f0a66..d1ffde5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.3 + 1.6.4 2.9.9 1.7.25 1.2.3 From 0fdd928129c4721bb830fcce8f98bf8e59553883 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 10 Jun 2019 13:28:20 -0400 Subject: [PATCH 049/309] upgrade to version 1.6.5-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d1ffde5..dafdc0a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 1.8 UTF-8 - 1.6.4 + 1.6.5-SNAPSHOT 2.9.9 1.7.25 1.2.3 From 429872a926f02666e16e70b8ad8ea315f86c5f54 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 13 Jun 2019 19:12:37 -0400 Subject: [PATCH 050/309] upgrade undertow to 2.0.21.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9ec3af1..5594102 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.16.Final + 2.0.21.Final From 3b18e25c4bcdf05896c29501a6eba5fe16f7ba9d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 9 Jul 2019 12:10:13 -0400 Subject: [PATCH 051/309] upgrade to version 2.0.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5594102..fc12739 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.2-SNAPSHOT + 2.0.2 2.9.9 1.7.25 1.2.3 From d6b01c611035109732a8e80c9c1473a33c2c54e7 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 10 Jul 2019 20:49:50 -0400 Subject: [PATCH 052/309] upgrade to version 2.0.3-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index fc12739..67b49db 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.2 + 2.0.3-SNAPSHOT 2.9.9 1.7.25 1.2.3 From 9dbd0d97e20ca02ff35293f570ae649579bbf9c6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 31 Jul 2019 09:42:51 -0400 Subject: [PATCH 053/309] upgrade to version 2.0.3 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 67b49db..8095b57 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.3-SNAPSHOT + 2.0.3 2.9.9 1.7.25 1.2.3 From 7a1e6c4cf58bb8303150891e04b63c0649311f61 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 31 Jul 2019 22:45:30 -0400 Subject: [PATCH 054/309] upgrade to version 2.0.4-SNAPSHOT --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8095b57..2b603de 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.3 + 2.0.4-SNAPSHOT 2.9.9 1.7.25 1.2.3 From 31160bc816b1e2484a8e3fe505ae515a291f803b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 5 Aug 2019 22:27:29 -0400 Subject: [PATCH 055/309] upgrade undertow to 2.0.23.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2b603de..ffc5739 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.21.Final + 2.0.23.Final From 65fb6d45d801b99d1cdc7b2a5c7f78fb2a2d3a62 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 16 Aug 2019 09:22:13 -0400 Subject: [PATCH 056/309] upgrade to version 2.0.4 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ffc5739..91a0e91 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.4-SNAPSHOT + 2.0.4 2.9.9 1.7.25 1.2.3 From 1d8541ccc466ffe76031fc8ea43e054c7ec2b29a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 16 Aug 2019 18:00:59 -0400 Subject: [PATCH 057/309] upgrade to version 2.0.5-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 91a0e91..de403a1 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.4 + 2.0.5-SNAPSHOT 2.9.9 1.7.25 1.2.3 From eb7a373b6e38547689f8694b06b69d118a7308d8 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 30 Aug 2019 06:59:29 -0400 Subject: [PATCH 058/309] upgrade to version 2.0.5 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index de403a1..a9331c9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.5-SNAPSHOT + 2.0.5 2.9.9 1.7.25 1.2.3 From 0a0e75c5462235ff5719d1c49e8c1bff01e35e40 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 30 Aug 2019 17:32:16 -0400 Subject: [PATCH 059/309] upgrade to version 2.0.6-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a9331c9..cda14a7 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.5 + 2.0.6-SNAPSHOT 2.9.9 1.7.25 1.2.3 From 3a4ed6832d6e2e46baa2441e81af8903656d95bb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 13 Sep 2019 08:33:17 -0400 Subject: [PATCH 060/309] upgrade to version 2.0.6 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index cda14a7..3691e41 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.6-SNAPSHOT + 2.0.6 2.9.9 1.7.25 1.2.3 From 2cb6470adbcbee39b90c561d97a7e76f3697cf79 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 13 Sep 2019 20:07:38 -0400 Subject: [PATCH 061/309] upgrade to version 2.0.7-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3691e41..6d91e91 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.6 + 2.0.7-SNAPSHOT 2.9.9 1.7.25 1.2.3 From 012f71ddef93634e9023e4df06fec2b9ea80372a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 1 Oct 2019 20:51:44 -0400 Subject: [PATCH 062/309] upgrade jackson to 2.9.10 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6d91e91..78b070b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.0.7-SNAPSHOT - 2.9.9 + 2.9.10 1.7.25 1.2.3 4.12 From adba0dbb772a7d04d5f80ee8be8355d3ef553bac Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 26 Oct 2019 12:40:23 -0400 Subject: [PATCH 063/309] upgrade to version 2.0.7 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 78b070b..d883954 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.7-SNAPSHOT + 2.0.7 2.9.10 1.7.25 1.2.3 From 09cff462befce1445bdb70217bc0841eb53e6e39 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 28 Oct 2019 10:18:14 -0400 Subject: [PATCH 064/309] upgrade to version 2.0.8-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d883954..9b96ada 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.7 + 2.0.8-SNAPSHOT 2.9.10 1.7.25 1.2.3 From c799a45c879859251643086deda8dbf3f2960ac1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2019 14:19:31 +0000 Subject: [PATCH 065/309] Bump method-override from 2.3.6 to 3.0.0 in /node-express Bumps [method-override](https://github.com/expressjs/method-override) from 2.3.6 to 3.0.0. - [Release notes](https://github.com/expressjs/method-override/releases) - [Changelog](https://github.com/expressjs/method-override/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/method-override/compare/2.3.6...3.0.0) Signed-off-by: dependabot[bot] --- node-express/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-express/package.json b/node-express/package.json index 8f257a7..a669149 100644 --- a/node-express/package.json +++ b/node-express/package.json @@ -5,7 +5,7 @@ "dependencies": { "express": "4.14.0", "body-parser": "1.15.2", - "method-override": "2.3.6", + "method-override": "3.0.0", "errorhandler": "1.4.3", "async": "1.5.2" } From ac9b9600cce750ec25ee2fa4ef131bc9c1be0264 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2019 14:19:53 +0000 Subject: [PATCH 066/309] Bump eslint from 3.19.0 to 6.6.0 in /node-loopback Bumps [eslint](https://github.com/eslint/eslint) from 3.19.0 to 6.6.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v3.19.0...v6.6.0) Signed-off-by: dependabot[bot] --- node-loopback/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-loopback/package.json b/node-loopback/package.json index 5e282e9..3f48ae2 100644 --- a/node-loopback/package.json +++ b/node-loopback/package.json @@ -20,7 +20,7 @@ "strong-error-handler": "^2.0.0" }, "devDependencies": { - "eslint": "^3.17.1", + "eslint": "^6.6.0", "eslint-config-loopback": "^8.0.0", "nsp": "^2.1.0" }, From cb547ce2f3ddb9aaae27d53ddc93d2fb4125772a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 4 Nov 2019 16:33:49 -0500 Subject: [PATCH 067/309] upgrade json-schema-validator to 1.0.24 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9b96ada..80e1b25 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.0.8-SNAPSHOT - 2.9.10 + 2.10.0 1.7.25 1.2.3 4.12 From dbc00b547bf6c587b96ccf94e2f55918e4b35083 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 19 Nov 2019 21:29:44 -0500 Subject: [PATCH 068/309] upgrade undertow to 2.0.28-Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 80e1b25..ca81999 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.23.Final + 2.0.28.Final From 74b91071b4c74ec08d596ddf0e456aadd2d462ef Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 27 Nov 2019 09:28:48 -0500 Subject: [PATCH 069/309] upgrade to version 2.0.8 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ca81999..5bf0169 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.8-SNAPSHOT + 2.0.8 2.10.0 1.7.25 1.2.3 From 8194d52f886c17308a950e5e74e0131544aeb1eb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 27 Nov 2019 13:30:57 -0500 Subject: [PATCH 070/309] upgrade to version 2.0.9-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5bf0169..f30da3f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.8 + 2.0.9-SNAPSHOT 2.10.0 1.7.25 1.2.3 From 2b3ff5c1d0392067514e7c6862c6b187744536b4 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 30 Dec 2019 10:53:14 -0500 Subject: [PATCH 071/309] upgrade to version 2.0.9 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f30da3f..9da6a93 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.9-SNAPSHOT + 2.0.9 2.10.0 1.7.25 1.2.3 From fea0ec167035011e97d4dd2ee38435162339d100 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 31 Dec 2019 13:32:51 -0500 Subject: [PATCH 072/309] upgrade to version 2.0.10-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9da6a93..08b38cf 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.9 + 2.0.10-SNAPSHOT 2.10.0 1.7.25 1.2.3 From f0746e7df814b1015713e443e096fdeb6f86ab69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 19:29:28 +0000 Subject: [PATCH 073/309] Bump ratpack-core from 1.4.4 to 1.7.6 in /ratpack Bumps [ratpack-core](https://github.com/ratpack/ratpack) from 1.4.4 to 1.7.6. - [Release notes](https://github.com/ratpack/ratpack/releases) - [Changelog](https://github.com/ratpack/ratpack/blob/master/release-notes.md) - [Commits](https://github.com/ratpack/ratpack/compare/v1.4.4...v1.7.6) Signed-off-by: dependabot[bot] --- ratpack/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratpack/pom.xml b/ratpack/pom.xml index 602821b..705d801 100644 --- a/ratpack/pom.xml +++ b/ratpack/pom.xml @@ -15,7 +15,7 @@ io.ratpack ratpack-core - 1.4.4 + 1.7.6 From e0c881820e5fb055fef377e9490e7415bff5aa93 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 31 Jan 2020 18:41:07 -0500 Subject: [PATCH 074/309] upgrade to version 2.0.10 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 08b38cf..da3e19d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.10-SNAPSHOT + 2.0.10 2.10.0 1.7.25 1.2.3 From e23828feb658d5e291c1274fc635ce4636263369 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 1 Feb 2020 12:09:24 -0500 Subject: [PATCH 075/309] upgrade to version 2.0.11-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index da3e19d..7227654 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.10 + 2.0.11-SNAPSHOT 2.10.0 1.7.25 1.2.3 From f923aa29ba1c8d4408a056b467bdab2ee2b53f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavol=20Li=C5=A1ka?= Date: Sun, 2 Feb 2020 21:25:57 +0100 Subject: [PATCH 076/309] micronaut with reactor server --- micronaut-reactor/micronaut-cli.yml | 5 + micronaut-reactor/pom.xml | 205 ++++++++++++++++++ .../src/main/java/hello/HelloController.java | 15 ++ .../src/main/java/hello/ServerApp.java | 10 + .../src/main/resources/application.yml | 3 + .../src/main/resources/logback.xml | 15 ++ 6 files changed, 253 insertions(+) create mode 100644 micronaut-reactor/micronaut-cli.yml create mode 100644 micronaut-reactor/pom.xml create mode 100644 micronaut-reactor/src/main/java/hello/HelloController.java create mode 100644 micronaut-reactor/src/main/java/hello/ServerApp.java create mode 100644 micronaut-reactor/src/main/resources/application.yml create mode 100644 micronaut-reactor/src/main/resources/logback.xml diff --git a/micronaut-reactor/micronaut-cli.yml b/micronaut-reactor/micronaut-cli.yml new file mode 100644 index 0000000..c7646b7 --- /dev/null +++ b/micronaut-reactor/micronaut-cli.yml @@ -0,0 +1,5 @@ +profile: service +defaultPackage: hello +--- +testFramework: junit +sourceLanguage: java \ No newline at end of file diff --git a/micronaut-reactor/pom.xml b/micronaut-reactor/pom.xml new file mode 100644 index 0000000..c024d4b --- /dev/null +++ b/micronaut-reactor/pom.xml @@ -0,0 +1,205 @@ + + + 4.0.0 + hello + micronaut-reactor + 0.1.0-SNAPSHOT + + + 1.2.10 + 8 + ${jdk.version} + ${jdk.version} + UTF-8 + UTF-8 + hello.ServerApp + 2.22.2 + 2.22.2 + 3.3.2.RELEASE + + + + + jcenter.bintray.com + https://jcenter.bintray.com + + + + + + + io.micronaut + micronaut-bom + ${micronaut.version} + pom + import + + + + + + + io.micronaut + micronaut-inject + compile + + + io.micronaut + micronaut-validation + compile + + + io.micronaut + micronaut-runtime + compile + + + javax.annotation + javax.annotation-api + compile + + + io.micronaut + micronaut-http-server-netty + compile + + + io.micronaut + micronaut-http-client + compile + + + io.projectreactor + reactor-core + ${reactor.version} + + + ch.qos.logback + logback-classic + 1.2.3 + runtime + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + ${exec.mainClass} + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + + -classpath + + -noverify + -XX:TieredStopAtLevel=1 + -Dcom.sun.management.jmxremote + + + ${exec.mainClass} + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + true + + %regex[.*] + + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${maven-failsafe-plugin.version} + + + + integration-test + verify + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + + -parameters + + + + io.micronaut + micronaut-inject-java + 1.2.10 + + + io.micronaut + micronaut-validation + 1.2.10 + + + + + + test-compile + + testCompile + + + + -parameters + + + + io.micronaut + micronaut-inject-java + 1.2.10 + + + io.micronaut + micronaut-validation + 1.2.10 + + + + + + + + + + diff --git a/micronaut-reactor/src/main/java/hello/HelloController.java b/micronaut-reactor/src/main/java/hello/HelloController.java new file mode 100644 index 0000000..955cee1 --- /dev/null +++ b/micronaut-reactor/src/main/java/hello/HelloController.java @@ -0,0 +1,15 @@ +package hello; + +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import reactor.core.publisher.Mono; + +@Controller("/") +public class HelloController { + + @Get("/") + public Mono greet() { + return Mono.just("Hello World!"); + } + +} diff --git a/micronaut-reactor/src/main/java/hello/ServerApp.java b/micronaut-reactor/src/main/java/hello/ServerApp.java new file mode 100644 index 0000000..54d2fe3 --- /dev/null +++ b/micronaut-reactor/src/main/java/hello/ServerApp.java @@ -0,0 +1,10 @@ +package hello; + +import io.micronaut.runtime.Micronaut; + +public class ServerApp { + + public static void main(String[] args) { + Micronaut.run(ServerApp.class); + } +} \ No newline at end of file diff --git a/micronaut-reactor/src/main/resources/application.yml b/micronaut-reactor/src/main/resources/application.yml new file mode 100644 index 0000000..e7f180b --- /dev/null +++ b/micronaut-reactor/src/main/resources/application.yml @@ -0,0 +1,3 @@ +micronaut: + application: + name: micronaut-reactor diff --git a/micronaut-reactor/src/main/resources/logback.xml b/micronaut-reactor/src/main/resources/logback.xml new file mode 100644 index 0000000..8221870 --- /dev/null +++ b/micronaut-reactor/src/main/resources/logback.xml @@ -0,0 +1,15 @@ + + + + false + + + %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n + + + + + + + From 14e79f658d3fe4f84ca0104a458f6e5209be04ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavol=20Li=C5=A1ka?= Date: Sun, 2 Feb 2020 21:30:22 +0100 Subject: [PATCH 077/309] micronaut rxjava server --- micronaut-rxjava/micronaut-cli.yml | 5 + micronaut-rxjava/pom.xml | 199 ++++++++++++++++++ .../src/main/java/hello/HelloController.java | 15 ++ .../src/main/java/hello/ServerApp.java | 10 + .../src/main/resources/application.yml | 3 + .../src/main/resources/logback.xml | 15 ++ 6 files changed, 247 insertions(+) create mode 100644 micronaut-rxjava/micronaut-cli.yml create mode 100644 micronaut-rxjava/pom.xml create mode 100644 micronaut-rxjava/src/main/java/hello/HelloController.java create mode 100644 micronaut-rxjava/src/main/java/hello/ServerApp.java create mode 100644 micronaut-rxjava/src/main/resources/application.yml create mode 100644 micronaut-rxjava/src/main/resources/logback.xml diff --git a/micronaut-rxjava/micronaut-cli.yml b/micronaut-rxjava/micronaut-cli.yml new file mode 100644 index 0000000..c7646b7 --- /dev/null +++ b/micronaut-rxjava/micronaut-cli.yml @@ -0,0 +1,5 @@ +profile: service +defaultPackage: hello +--- +testFramework: junit +sourceLanguage: java \ No newline at end of file diff --git a/micronaut-rxjava/pom.xml b/micronaut-rxjava/pom.xml new file mode 100644 index 0000000..5e32968 --- /dev/null +++ b/micronaut-rxjava/pom.xml @@ -0,0 +1,199 @@ + + + 4.0.0 + hello + micronaut-rxjava + 0.1.0-SNAPSHOT + + + 1.2.10 + 8 + ${jdk.version} + ${jdk.version} + UTF-8 + UTF-8 + hello.ServerApp + 2.22.2 + 2.22.2 + + + + + jcenter.bintray.com + https://jcenter.bintray.com + + + + + + + io.micronaut + micronaut-bom + ${micronaut.version} + pom + import + + + + + + + io.micronaut + micronaut-inject + compile + + + io.micronaut + micronaut-validation + compile + + + io.micronaut + micronaut-runtime + compile + + + javax.annotation + javax.annotation-api + compile + + + io.micronaut + micronaut-http-server-netty + compile + + + io.micronaut + micronaut-http-client + compile + + + ch.qos.logback + logback-classic + 1.2.3 + runtime + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + ${exec.mainClass} + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + + -classpath + + -noverify + -XX:TieredStopAtLevel=1 + -Dcom.sun.management.jmxremote + + + ${exec.mainClass} + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + true + + %regex[.*] + + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${maven-failsafe-plugin.version} + + + + integration-test + verify + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + + -parameters + + + + io.micronaut + micronaut-inject-java + 1.2.10 + + + io.micronaut + micronaut-validation + 1.2.10 + + + + + + test-compile + + testCompile + + + + -parameters + + + + io.micronaut + micronaut-inject-java + 1.2.10 + + + io.micronaut + micronaut-validation + 1.2.10 + + + + + + + + + + diff --git a/micronaut-rxjava/src/main/java/hello/HelloController.java b/micronaut-rxjava/src/main/java/hello/HelloController.java new file mode 100644 index 0000000..d6ee853 --- /dev/null +++ b/micronaut-rxjava/src/main/java/hello/HelloController.java @@ -0,0 +1,15 @@ +package hello; + +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.reactivex.Single; + +@Controller("/") +public class HelloController { + + @Get("/") + public Single greet() { + return Single.just("Hello World!"); + } + +} diff --git a/micronaut-rxjava/src/main/java/hello/ServerApp.java b/micronaut-rxjava/src/main/java/hello/ServerApp.java new file mode 100644 index 0000000..54d2fe3 --- /dev/null +++ b/micronaut-rxjava/src/main/java/hello/ServerApp.java @@ -0,0 +1,10 @@ +package hello; + +import io.micronaut.runtime.Micronaut; + +public class ServerApp { + + public static void main(String[] args) { + Micronaut.run(ServerApp.class); + } +} \ No newline at end of file diff --git a/micronaut-rxjava/src/main/resources/application.yml b/micronaut-rxjava/src/main/resources/application.yml new file mode 100644 index 0000000..a1e4832 --- /dev/null +++ b/micronaut-rxjava/src/main/resources/application.yml @@ -0,0 +1,3 @@ +micronaut: + application: + name: micronaut-rxjava diff --git a/micronaut-rxjava/src/main/resources/logback.xml b/micronaut-rxjava/src/main/resources/logback.xml new file mode 100644 index 0000000..8221870 --- /dev/null +++ b/micronaut-rxjava/src/main/resources/logback.xml @@ -0,0 +1,15 @@ + + + + false + + + %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n + + + + + + + From 83a325415c66cbaa68525046c9886a8c01dc3bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavol=20Li=C5=A1ka?= Date: Fri, 28 Feb 2020 09:16:19 +0100 Subject: [PATCH 078/309] ssl turned on --- micronaut-rxjava/pom.xml | 4 ++++ micronaut-rxjava/src/main/resources/application.yml | 3 +++ 2 files changed, 7 insertions(+) diff --git a/micronaut-rxjava/pom.xml b/micronaut-rxjava/pom.xml index 5e32968..65557a1 100644 --- a/micronaut-rxjava/pom.xml +++ b/micronaut-rxjava/pom.xml @@ -53,6 +53,10 @@ micronaut-runtime compile + + io.micronaut + micronaut-security + javax.annotation javax.annotation-api diff --git a/micronaut-rxjava/src/main/resources/application.yml b/micronaut-rxjava/src/main/resources/application.yml index a1e4832..1522c40 100644 --- a/micronaut-rxjava/src/main/resources/application.yml +++ b/micronaut-rxjava/src/main/resources/application.yml @@ -1,3 +1,6 @@ micronaut: application: name: micronaut-rxjava + ssl: + enabled: true + buildSelfSigned: true From 77c75384401b1eb99325f13d6a6576886f4ee5b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavol=20Li=C5=A1ka?= Date: Fri, 28 Feb 2020 09:33:21 +0100 Subject: [PATCH 079/309] ssl turned on --- micronaut-reactor/pom.xml | 4 ++++ micronaut-reactor/src/main/resources/application.yml | 3 +++ 2 files changed, 7 insertions(+) diff --git a/micronaut-reactor/pom.xml b/micronaut-reactor/pom.xml index c024d4b..87c7040 100644 --- a/micronaut-reactor/pom.xml +++ b/micronaut-reactor/pom.xml @@ -69,6 +69,10 @@ micronaut-http-client compile + + io.micronaut + micronaut-security + io.projectreactor reactor-core diff --git a/micronaut-reactor/src/main/resources/application.yml b/micronaut-reactor/src/main/resources/application.yml index e7f180b..69f71b4 100644 --- a/micronaut-reactor/src/main/resources/application.yml +++ b/micronaut-reactor/src/main/resources/application.yml @@ -1,3 +1,6 @@ micronaut: application: name: micronaut-reactor + ssl: + enabled: true + buildSelfSigned: true \ No newline at end of file From a7a245e3134640783efb32f035df0378b7d80b94 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 28 Feb 2020 10:45:03 -0500 Subject: [PATCH 080/309] enable https for light-4j --- .../src/main/resources/config/server.keystore | Bin 0 -> 2176 bytes .../src/main/resources/config/server.truststore | Bin 0 -> 935 bytes light-4j/src/main/resources/config/server.yml | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 light-4j/src/main/resources/config/server.keystore create mode 100644 light-4j/src/main/resources/config/server.truststore diff --git a/light-4j/src/main/resources/config/server.keystore b/light-4j/src/main/resources/config/server.keystore new file mode 100644 index 0000000000000000000000000000000000000000..feab9b6d2441e9f380b85fbbb1b8cd53d9177129 GIT binary patch literal 2176 zcmcJQ`8U*y8^`A}D>GvqOqPo*S?$@X|h)u+m{K0Q3>f=_k6$S+<)Nv!~2KVdCqg5^SsadJkS2>{wfFr0{;~7x8O7{ zYN!|WCmK?S9u^=F41$k?{=f^uk-x(MD4-4&0RR{X8VCK9z#|ovEiPw-FRBbz`aLWT zUl|mhVt$pPs-CVJ4a)Cs^xHRzKx&1$iFLqh#!p*gZogOTQJsJ+FT8ao<-W}D7T3A1 z+`8B%FD{!Et^Y$8fui)6e`a3>6=!&0jSAa22`*Wui&{lpZ55wY(F@1noEByNA?>IXcR%or zXYp0q`$ZK|8mZ|yw3oo_5$9bw{%_Yz1Y**McRgkL)KFP%wP9(lf^+0zhV}8_jb_w% zqxopkJuoZTSFl#*t({{WJ9!iqO?OR>A!oKwr4zUthiaFj<9+_f+jM56YpHxUTgOuT zy;{aaj<4F^B7Mkv(7LkL{6^_*iPJ)+hUwJIvG=?!KRdMuKb&M>nk5hgnbZj{r?r<{ zWl;O>Es=Vi`LwSoD~XyK)N1!L&sZ~YH1gAbaeH16R%+PHGIuL9a%23s(=-y!*`W(aJ zNxWo#eMHVY+W3}AlMvpFVeU6-js5)UM<4ZbWa?A{a)clC$0pjxR?l-R8{cbjRT2jMWRV{;S;aOK7Dp99?VD zZt8xV!OkLmfYTze@JQ;Ya5i&>17I8?9mz57n^y|4iTUmkT^~cgAT5aWmm&@F?>?+pnofT6j2%_?#>mc_TQ9YF} z>>k#^#ZGbVd1$e1zhJ%!_hRYev?YZCwch*c#^{VwdUKF3>@jVw~p6o;PmmCmW!HPqddoC!)$BEe?K&$(4V zgf>qiMy_`}%`CA@WDU%}>YR{cc8}803gnlP5&t1>N=308PJO(p*F|HKC1T2-4z$XiY-^0M+qs(Vku8l~HFUjRdqZQR0o$gx zItAb;fwF66AGYczAzA1x`kLgs+`N%s@}YV|l#LLPB=05AB%+oE zIp9l0yxg*B&d33|oC}6+i67s*w(1=*>9MB-eA3T(46bSzJK|n27lJ7F+EKoJN{D~Z zlA*D4^I8HhsSaYe`ntstWtt0vn9<+U*_|^7ow6?KNw;&v;$70W?<2{q66gioYV+JJ zhm-};V@Fb}AKfV3%z;N%AQF(h^$O&Hs000F8;hhO6JU<-b0EJ_~q~ioZJo*># zVPKRHw-7Ia03P*=5g6!+%OPO|G#>d2kr;>#)%$;)C=A%ffgp+({#Alt`2B-C-28ol zXd!r6tN=k9PaxtCy-SZ z!EN?3?Wm9F2BSCktXa|g2H&w+QAgRdvx>o_ZL(t=aI%WWee@r99=A#W literal 0 HcmV?d00001 diff --git a/light-4j/src/main/resources/config/server.truststore b/light-4j/src/main/resources/config/server.truststore new file mode 100644 index 0000000000000000000000000000000000000000..fb0c19ccb2e390365688d071d5326480ce81a73d GIT binary patch literal 935 zcmezO_TO6u1_mY|W(3nF$$7RVsl_D<$vK&+c_lgu`K7k`r9jFyzbIWtA;&g3v!qf- zp}54hxFoS8RYxJ&Ha!Wb*_PRk*O-AdLeJE|l7WHQ%Akqa%%F)$ZUHkBBNG!#z^}Cj z40zc%wc0$|zVk9NaZl`k)bi>=*h3f9cfLC-|z9h^m?lz zukiix)Hio#n%x($N&4e?)P08QvyAV}ck1+(Pu5-5Dra{f%jSoggTdSXlh(wu9*FpJ zNm_TdizfdX2CKy`OCbOtacw9gB+#{`^PGe&vO!#wH^ANAI_GTYa`|RdJcpqd55x>zdM?5}cpj zaz8P#VivvkC%ukwXZW zB!D5r$PhD8V4YrQu+yi%Up}-v++p=aVw*+*XMjQD>wgmK_AlIjI8ye_WiioZ2|B-O zZi!hflG!i8b9UW>%s0>8-AneLckByZ)^qs_MAj|o zK9<+;W?g@qK}Of)5RuKBI+LC1wj_xhNKmOhoqA^dg|>j0J&$Jo(0H{ia9Qfb&(pJ> zyGmpPcOU0nvdZ&L@KL74emsvheXURV5mPq3>~>n|-y`X>GV(U?YC4OD?@wxp_fDwa zwD#PVTT{I^NDJy_Uv*t!G~>U)E5QXuHItcG(^y)W-UKHJtm!y>|LxK!d4)^oeyqs8 p Date: Sat, 29 Feb 2020 11:28:37 -0500 Subject: [PATCH 081/309] upgrade to version 2.0.11 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7227654..6744d28 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.11-SNAPSHOT + 2.0.11 2.10.0 1.7.25 1.2.3 From aa80f01678824cc7a3df146783bab9a3560966e7 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 29 Feb 2020 17:43:19 -0500 Subject: [PATCH 082/309] upgrade to version 2.0.12-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6744d28..8d9c2db 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.11 + 2.0.12-SNAPSHOT 2.10.0 1.7.25 1.2.3 From 69cccec0a63367e1e39dad92d99e3ef21c288fe6 Mon Sep 17 00:00:00 2001 From: Jindrich Pilar Date: Mon, 16 Mar 2020 14:13:06 +0100 Subject: [PATCH 083/309] Javalin 'Hello world!' application --- javalin/pom.xml | 63 +++++++++++++++++++ .../networknt/example/ExampleApplication.java | 12 ++++ 2 files changed, 75 insertions(+) create mode 100644 javalin/pom.xml create mode 100644 javalin/src/main/java/com/networknt/example/ExampleApplication.java diff --git a/javalin/pom.xml b/javalin/pom.xml new file mode 100644 index 0000000..ccfaed2 --- /dev/null +++ b/javalin/pom.xml @@ -0,0 +1,63 @@ + + 4.0.0 + com.networknt + javalin-3 + 1.0-SNAPSHOT + + + 1.8 + 1.8 + 1.8 + com.networknt.example.ExampleApplication + + + + + io.javalin + javalin + 3.7.0 + + + org.slf4j + slf4j-simple + 1.7.28 + + + + + javalin-3 + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + package + + shade + + + + + + ${application.class} + + + + + + + + + + diff --git a/javalin/src/main/java/com/networknt/example/ExampleApplication.java b/javalin/src/main/java/com/networknt/example/ExampleApplication.java new file mode 100644 index 0000000..26320f0 --- /dev/null +++ b/javalin/src/main/java/com/networknt/example/ExampleApplication.java @@ -0,0 +1,12 @@ +package com.networknt.example; + +import io.javalin.Javalin; + +public class ExampleApplication { + + public static void main(String[] args) { + Javalin app = Javalin.create().start(8080); + app.get("/", ctx -> ctx.result("Hello world!")); + } + +} From 6ae0fcca86bba115c1b427c2d0f54645f5d46785 Mon Sep 17 00:00:00 2001 From: Jindrich Pilar Date: Mon, 16 Mar 2020 16:28:39 +0100 Subject: [PATCH 084/309] Javalin enable TLS and HTTP/2 --- javalin/pom.xml | 92 ++++++++++++------ .../networknt/example/ExampleApplication.java | 55 ++++++++++- javalin/src/main/resources/server.keystore | Bin 0 -> 2176 bytes 3 files changed, 117 insertions(+), 30 deletions(-) create mode 100644 javalin/src/main/resources/server.keystore diff --git a/javalin/pom.xml b/javalin/pom.xml index ccfaed2..0e413bf 100644 --- a/javalin/pom.xml +++ b/javalin/pom.xml @@ -8,6 +8,9 @@ 1.8 1.8 1.8 + + 9.4.27.v20200227 + com.networknt.example.ExampleApplication @@ -22,42 +25,73 @@ slf4j-simple 1.7.28 + + + org.eclipse.jetty.http2 + http2-server + ${jettyVersion} + + + org.eclipse.jetty + jetty-alpn-conscrypt-server + ${jettyVersion} + + javalin-3 - - maven-compiler-plugin - 3.8.0 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - package - - shade - + + maven-compiler-plugin + 3.8.0 - - - - ${application.class} - - - + 1.8 + 1.8 - - - + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + package + + shade + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + ${application.class} + + + + + + + + + + diff --git a/javalin/src/main/java/com/networknt/example/ExampleApplication.java b/javalin/src/main/java/com/networknt/example/ExampleApplication.java index 26320f0..389f382 100644 --- a/javalin/src/main/java/com/networknt/example/ExampleApplication.java +++ b/javalin/src/main/java/com/networknt/example/ExampleApplication.java @@ -1,12 +1,65 @@ package com.networknt.example; import io.javalin.Javalin; +import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; +import org.eclipse.jetty.http2.HTTP2Cipher; +import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.util.ssl.SslContextFactory; public class ExampleApplication { public static void main(String[] args) { - Javalin app = Javalin.create().start(8080); + Javalin app = Javalin.create(config -> { + config.server(ExampleApplication::createServer); + }).start(); app.get("/", ctx -> ctx.result("Hello world!")); } + private static Server createServer() { + Server server = new Server(); + + // HTTP + ServerConnector connector = new ServerConnector(server); + connector.setPort(8080); + server.addConnector(connector); + + // TLS + HTTP2 + HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.setSendServerVersion(false); + httpConfig.setSecureScheme("https"); + httpConfig.setSecurePort(8443); + + SslContextFactory sslContextFactory = new SslContextFactory.Server(); + sslContextFactory.setKeyStorePath(ExampleApplication.class.getResource("/server.keystore").toExternalForm()); + sslContextFactory.setKeyStorePassword("password"); + sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR); + sslContextFactory.setProvider("Conscrypt"); + + HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig); + httpsConfig.addCustomizer(new SecureRequestCustomizer()); + + HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpsConfig); + ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory(); + alpn.setDefaultProtocol("h2"); + + SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol()); + + ServerConnector http2Connector = new ServerConnector( + server, + ssl, + alpn, + h2, + new HttpConnectionFactory(httpsConfig) + ); + http2Connector.setPort(8443); + server.addConnector(http2Connector); + + return server; + } } diff --git a/javalin/src/main/resources/server.keystore b/javalin/src/main/resources/server.keystore new file mode 100644 index 0000000000000000000000000000000000000000..feab9b6d2441e9f380b85fbbb1b8cd53d9177129 GIT binary patch literal 2176 zcmcJQ`8U*y8^`A}D>GvqOqPo*S?$@X|h)u+m{K0Q3>f=_k6$S+<)Nv!~2KVdCqg5^SsadJkS2>{wfFr0{;~7x8O7{ zYN!|WCmK?S9u^=F41$k?{=f^uk-x(MD4-4&0RR{X8VCK9z#|ovEiPw-FRBbz`aLWT zUl|mhVt$pPs-CVJ4a)Cs^xHRzKx&1$iFLqh#!p*gZogOTQJsJ+FT8ao<-W}D7T3A1 z+`8B%FD{!Et^Y$8fui)6e`a3>6=!&0jSAa22`*Wui&{lpZ55wY(F@1noEByNA?>IXcR%or zXYp0q`$ZK|8mZ|yw3oo_5$9bw{%_Yz1Y**McRgkL)KFP%wP9(lf^+0zhV}8_jb_w% zqxopkJuoZTSFl#*t({{WJ9!iqO?OR>A!oKwr4zUthiaFj<9+_f+jM56YpHxUTgOuT zy;{aaj<4F^B7Mkv(7LkL{6^_*iPJ)+hUwJIvG=?!KRdMuKb&M>nk5hgnbZj{r?r<{ zWl;O>Es=Vi`LwSoD~XyK)N1!L&sZ~YH1gAbaeH16R%+PHGIuL9a%23s(=-y!*`W(aJ zNxWo#eMHVY+W3}AlMvpFVeU6-js5)UM<4ZbWa?A{a)clC$0pjxR?l-R8{cbjRT2jMWRV{;S;aOK7Dp99?VD zZt8xV!OkLmfYTze@JQ;Ya5i&>17I8?9mz57n^y|4iTUmkT^~cgAT5aWmm&@F?>?+pnofT6j2%_?#>mc_TQ9YF} z>>k#^#ZGbVd1$e1zhJ%!_hRYev?YZCwch*c#^{VwdUKF3>@jVw~p6o;PmmCmW!HPqddoC!)$BEe?K&$(4V zgf>qiMy_`}%`CA@WDU%}>YR{cc8}803gnlP5&t1>N=308PJO(p*F|HKC1T2-4z$XiY-^0M+qs(Vku8l~HFUjRdqZQR0o$gx zItAb;fwF66AGYczAzA1x`kLgs+`N%s@}YV|l#LLPB=05AB%+oE zIp9l0yxg*B&d33|oC}6+i67s*w(1=*>9MB-eA3T(46bSzJK|n27lJ7F+EKoJN{D~Z zlA*D4^I8HhsSaYe`ntstWtt0vn9<+U*_|^7ow6?KNw;&v;$70W?<2{q66gioYV+JJ zhm-};V@Fb}AKfV3%z;N%AQF(h^$O&Hs000F8;hhO6JU<-b0EJ_~q~ioZJo*># zVPKRHw-7Ia03P*=5g6!+%OPO|G#>d2kr;>#)%$;)C=A%ffgp+({#Alt`2B-C-28ol zXd!r6tN=k9PaxtCy-SZ z!EN?3?Wm9F2BSCktXa|g2H&w+QAgRdvx>o_ZL(t=aI%WWee@r99=A#W literal 0 HcmV?d00001 From b7f3421fb6fc40ddd6cd2a1d35110f3255c1ca7f Mon Sep 17 00:00:00 2001 From: Jindrich Pilar Date: Wed, 18 Mar 2020 14:20:57 +0100 Subject: [PATCH 085/309] Javalin HTTP2 reconfigured - fallback to HTTP1.1 + TLS --- javalin/pom.xml | 26 +++++++--- .../networknt/example/ExampleApplication.java | 51 ++++++++++++++----- javalin/src/main/resources/logback.xml | 12 +++++ 3 files changed, 68 insertions(+), 21 deletions(-) create mode 100644 javalin/src/main/resources/logback.xml diff --git a/javalin/pom.xml b/javalin/pom.xml index 0e413bf..17a61bf 100644 --- a/javalin/pom.xml +++ b/javalin/pom.xml @@ -20,10 +20,11 @@ javalin 3.7.0 + - org.slf4j - slf4j-simple - 1.7.28 + ch.qos.logback + logback-classic + 1.2.3 @@ -31,20 +32,29 @@ http2-server ${jettyVersion} + org.eclipse.jetty jetty-alpn-conscrypt-server ${jettyVersion} + + org.conscrypt + conscrypt-openjdk-uber + 2.4.0 + + + javalin-3 + org.apache.maven.plugins maven-compiler-plugin - 3.8.0 + 3.8.1 1.8 1.8 @@ -53,7 +63,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.1 + 3.2.2 package @@ -77,7 +87,8 @@ - + ${application.class} @@ -86,7 +97,8 @@ - + diff --git a/javalin/src/main/java/com/networknt/example/ExampleApplication.java b/javalin/src/main/java/com/networknt/example/ExampleApplication.java index 389f382..6f7d55c 100644 --- a/javalin/src/main/java/com/networknt/example/ExampleApplication.java +++ b/javalin/src/main/java/com/networknt/example/ExampleApplication.java @@ -1,6 +1,7 @@ package com.networknt.example; import io.javalin.Javalin; +import io.javalin.http.Context; import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; import org.eclipse.jetty.http2.HTTP2Cipher; import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory; @@ -16,9 +17,14 @@ public class ExampleApplication { public static void main(String[] args) { Javalin app = Javalin.create(config -> { + // Manual Jetty configuration required for SSL/TLS/HTTP2 config.server(ExampleApplication::createServer); }).start(); - app.get("/", ctx -> ctx.result("Hello world!")); + app.get("/", ExampleApplication::helloWorld); + } + + public static void helloWorld(Context ctx) { + ctx.result("Hello world!"); } private static Server createServer() { @@ -29,24 +35,24 @@ private static Server createServer() { connector.setPort(8080); server.addConnector(connector); - // TLS + HTTP2 - HttpConfiguration httpConfig = new HttpConfiguration(); - httpConfig.setSendServerVersion(false); - httpConfig.setSecureScheme("https"); - httpConfig.setSecurePort(8443); + // HTTPS + ServerConnector sslConnector = new ServerConnector(server, getSslContextFactory()); + sslConnector.setPort(8443); + server.addConnector(sslConnector); - SslContextFactory sslContextFactory = new SslContextFactory.Server(); - sslContextFactory.setKeyStorePath(ExampleApplication.class.getResource("/server.keystore").toExternalForm()); - sslContextFactory.setKeyStorePassword("password"); + + // HTTP/2 + HttpConfiguration httpsConfig = createHttpsConfig(); + + SslContextFactory sslContextFactory = getSslContextFactory(); sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR); sslContextFactory.setProvider("Conscrypt"); - HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig); - httpsConfig.addCustomizer(new SecureRequestCustomizer()); + HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(httpsConfig); HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpsConfig); ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory(); - alpn.setDefaultProtocol("h2"); + alpn.setDefaultProtocol(httpConnectionFactory.getProtocol()); SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol()); @@ -55,11 +61,28 @@ private static Server createServer() { ssl, alpn, h2, - new HttpConnectionFactory(httpsConfig) + httpConnectionFactory ); - http2Connector.setPort(8443); + http2Connector.setPort(9443); server.addConnector(http2Connector); return server; } + + private static HttpConfiguration createHttpsConfig() { + HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.setSendXPoweredBy(false); + httpConfig.setSendServerVersion(false); + httpConfig.setSecureScheme("https"); + httpConfig.addCustomizer(new SecureRequestCustomizer()); + return httpConfig; + } + + private static SslContextFactory getSslContextFactory() { + SslContextFactory sslContextFactory = new SslContextFactory.Server(); + sslContextFactory.setKeyStorePath(ExampleApplication.class.getResource("/server.keystore").toExternalForm()); + sslContextFactory.setKeyStorePassword("password"); + sslContextFactory.setUseCipherSuitesOrder(true); + return sslContextFactory; + } } diff --git a/javalin/src/main/resources/logback.xml b/javalin/src/main/resources/logback.xml new file mode 100644 index 0000000..8aa2270 --- /dev/null +++ b/javalin/src/main/resources/logback.xml @@ -0,0 +1,12 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + From 59b34da8424f0ed0cd6ab998ff7f51e9bf086968 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 26 Mar 2020 11:37:11 -0400 Subject: [PATCH 086/309] upgrade undertow to 2.0.30 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8d9c2db..ff9e0d1 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.28.Final + 2.0.30.Final From 375a48a73bc1d1213e22225446c1bcf591839354 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 31 Mar 2020 13:41:08 -0400 Subject: [PATCH 087/309] downgrade undertow to 2.0.29.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ff9e0d1..3972f5d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.30.Final + 2.0.29.Final From 20b5ec0b208f79ff1c605288afe37cb85db4f119 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 31 Mar 2020 15:48:39 -0400 Subject: [PATCH 088/309] upgrade to version 2.0.12 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3972f5d..d60cb33 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.12-SNAPSHOT + 2.0.12 2.10.0 1.7.25 1.2.3 From 74ed24f0c42008f809ed65ffa208ee4512d423e5 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 31 Mar 2020 19:28:57 -0400 Subject: [PATCH 089/309] upgrade to version 2.0.13-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d60cb33..dbca891 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.12 + 2.0.13-SNAPSHOT 2.10.0 1.7.25 1.2.3 From 3ee0833c54afe6d61f4eec81294783db995a91bb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 1 May 2020 13:36:25 -0400 Subject: [PATCH 090/309] upgrade to version 2.0.13 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dbca891..c10e1f4 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.13-SNAPSHOT + 2.0.13 2.10.0 1.7.25 1.2.3 From 74469101f9e5c961fc8d501539ad8e016bafcb23 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 1 May 2020 23:56:06 -0400 Subject: [PATCH 091/309] upgrade to version 2.0.14-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c10e1f4..5548e39 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.13 + 2.0.14-SNAPSHOT 2.10.0 1.7.25 1.2.3 From d10d7f9f2c97e2f43ec4cd4a1a1ae6cc65e5a079 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 28 May 2020 09:50:46 -0400 Subject: [PATCH 092/309] upgrade to undertow 2.1.1.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5548e39..0f4aa62 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.0.29.Final + 2.1.1.Final From 8880125b606729fa7709e98b706ff16f4f8c42cf Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 29 May 2020 11:14:12 -0400 Subject: [PATCH 093/309] upgrade to version 2.0.14 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0f4aa62..9f91500 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.14-SNAPSHOT + 2.0.14 2.10.0 1.7.25 1.2.3 From 988163572e549b470fef81803de68c5efde69b3f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 30 May 2020 08:47:48 -0400 Subject: [PATCH 094/309] upgrade to version 2.0.15-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9f91500..e403550 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.14 + 2.0.15-SNAPSHOT 2.10.0 1.7.25 1.2.3 From bc189b31a858f5e0bff083df09e421a981a71cb2 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 24 Jun 2020 20:52:42 -0400 Subject: [PATCH 095/309] upgrade to undertow 2.1.1.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e403550..69c4c97 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.12 - 2.1.1.Final + 2.1.3.Final From e7eba9ad449a0e993e462d7370ce4186e4babe77 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 24 Jun 2020 20:59:34 -0400 Subject: [PATCH 096/309] upgrade to jackson 2.10.4 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 69c4c97..24a0c92 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.0.15-SNAPSHOT - 2.10.0 + 2.10.4 1.7.25 1.2.3 4.12 From 579b4d33adaa02a62b483cc6d4b5cafd4856fe82 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 1 Jul 2020 15:48:44 -0400 Subject: [PATCH 097/309] upgrade to version 2.0.15 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 24a0c92..deb7641 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.15-SNAPSHOT + 2.0.15 2.10.4 1.7.25 1.2.3 From 3f55b52f67924c4125c9ba4054e8ee55e4d4ae51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2020 21:32:21 +0000 Subject: [PATCH 098/309] Bump mysql-connector-java from 5.1.20 to 8.0.16 in /jfinal Bumps [mysql-connector-java](https://github.com/mysql/mysql-connector-j) from 5.1.20 to 8.0.16. - [Release notes](https://github.com/mysql/mysql-connector-j/releases) - [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.0/CHANGES) - [Commits](https://github.com/mysql/mysql-connector-j/compare/5.1.20...8.0.16) Signed-off-by: dependabot[bot] --- jfinal/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfinal/pom.xml b/jfinal/pom.xml index af5d3a9..b4119aa 100644 --- a/jfinal/pom.xml +++ b/jfinal/pom.xml @@ -37,7 +37,7 @@ mysql mysql-connector-java - 5.1.20 + 8.0.16 com.alibaba From b5dd5505aedb840b02be3942b302ffc2f797c29b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 1 Jul 2020 21:28:39 -0400 Subject: [PATCH 099/309] upgrade to version 2.0.16-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index deb7641..44bef66 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.15 + 2.0.16-SNAPSHOT 2.10.4 1.7.25 1.2.3 From 4ed83c87d1bcd3123eb051c67f0d062f99d5de79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2020 01:30:03 +0000 Subject: [PATCH 100/309] Bump version.jackson from 2.10.4 to 2.11.1 in /light-4j Bumps `version.jackson` from 2.10.4 to 2.11.1. Updates `jackson-databind` from 2.10.4 to 2.11.1 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Updates `jackson-core` from 2.10.4 to 2.11.1 - [Release notes](https://github.com/FasterXML/jackson-core/releases) - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.10.4...jackson-core-2.11.1) Signed-off-by: dependabot[bot] --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 44bef66..6b5123a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.0.16-SNAPSHOT - 2.10.4 + 2.11.1 1.7.25 1.2.3 4.12 From d55d5f3f868d738131380c892543ba12a595c577 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 31 Jul 2020 21:16:30 -0400 Subject: [PATCH 101/309] upgrade to version 2.0.16 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6b5123a..88efb6f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.16-SNAPSHOT + 2.0.16 2.11.1 1.7.25 1.2.3 From 26a4a8e58eb086485608d1696c21f9c431ee99ad Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 1 Aug 2020 13:21:14 -0400 Subject: [PATCH 102/309] upgrade to version 2.0.17-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 88efb6f..9d03700 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.16 + 2.0.17-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 8a0e0348548fe21dc5bfc81285a7f7315bb0e411 Mon Sep 17 00:00:00 2001 From: thinhda Date: Wed, 5 Aug 2020 13:04:56 +0700 Subject: [PATCH 103/309] Add Spring Vertx Integration example --- spring-vertx/README.md | 15 ++++ spring-vertx/pom.xml | 79 +++++++++++++++++++ .../thinhda/VertxSpringApplication.java | 38 +++++++++ .../github/thinhda/config/ServiceConfig.java | 31 ++++++++ .../github/thinhda/service/PingService.java | 16 ++++ .../thinhda/verticles/ServerVerticle.java | 44 +++++++++++ spring-vertx/src/main/resources/logback.xml | 13 +++ 7 files changed, 236 insertions(+) create mode 100644 spring-vertx/README.md create mode 100644 spring-vertx/pom.xml create mode 100644 spring-vertx/src/main/java/com/github/thinhda/VertxSpringApplication.java create mode 100644 spring-vertx/src/main/java/com/github/thinhda/config/ServiceConfig.java create mode 100644 spring-vertx/src/main/java/com/github/thinhda/service/PingService.java create mode 100644 spring-vertx/src/main/java/com/github/thinhda/verticles/ServerVerticle.java create mode 100644 spring-vertx/src/main/resources/logback.xml diff --git a/spring-vertx/README.md b/spring-vertx/README.md new file mode 100644 index 0000000..13a5e78 --- /dev/null +++ b/spring-vertx/README.md @@ -0,0 +1,15 @@ +# Spring Vertx Integration + +[Hello World!](https://www.baeldung.com/spring-vertx) + +## Build + +```shell script +mvn clean install +``` + +## Run + +```shell script +mvn spring-boot:run +``` \ No newline at end of file diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml new file mode 100644 index 0000000..f68bc5e --- /dev/null +++ b/spring-vertx/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + org.example + spring-vertx + 1.0-SNAPSHOT + + 3.4.1 + 2.2.6.RELEASE + 2.9.4 + + + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + + io.vertx + vertx-web + ${vertx.version} + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + \ No newline at end of file diff --git a/spring-vertx/src/main/java/com/github/thinhda/VertxSpringApplication.java b/spring-vertx/src/main/java/com/github/thinhda/VertxSpringApplication.java new file mode 100644 index 0000000..37a9726 --- /dev/null +++ b/spring-vertx/src/main/java/com/github/thinhda/VertxSpringApplication.java @@ -0,0 +1,38 @@ +package com.github.thinhda; + +import com.github.thinhda.verticles.ServerVerticle; +import io.vertx.core.Vertx; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; + +/** Created by thinhda. Date: 8/3/20 */ +@SpringBootApplication( + exclude = { + DataSourceAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class, + HibernateJpaAutoConfiguration.class + }) +@Configuration +@ComponentScan(basePackages = {"com.github.thinhda"}) +public class VertxSpringApplication { + + @Autowired private ServerVerticle serverVerticle; + + public static void main(String[] args) { + SpringApplication.run(VertxSpringApplication.class, args); + } + + @PostConstruct + public void deployVerticle() { + final Vertx vertx = Vertx.vertx(); + vertx.deployVerticle(serverVerticle); + } +} diff --git a/spring-vertx/src/main/java/com/github/thinhda/config/ServiceConfig.java b/spring-vertx/src/main/java/com/github/thinhda/config/ServiceConfig.java new file mode 100644 index 0000000..4956091 --- /dev/null +++ b/spring-vertx/src/main/java/com/github/thinhda/config/ServiceConfig.java @@ -0,0 +1,31 @@ +package com.github.thinhda.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +import java.io.IOException; +import java.net.ServerSocket; + +/** Created by thinhda. Date: 8/4/20 */ +@Configuration +public class ServiceConfig { + private static final int DEFAULT_PORT = 8080; + + @Profile("default") + @Bean + public Integer defaultPort() { + return DEFAULT_PORT; + } + + @Profile("test") + @Bean + public Integer randomPort() { + try (ServerSocket socket = new ServerSocket(0)) { + return socket.getLocalPort(); + + } catch (IOException e) { + return DEFAULT_PORT; + } + } +} diff --git a/spring-vertx/src/main/java/com/github/thinhda/service/PingService.java b/spring-vertx/src/main/java/com/github/thinhda/service/PingService.java new file mode 100644 index 0000000..b58cb8d --- /dev/null +++ b/spring-vertx/src/main/java/com/github/thinhda/service/PingService.java @@ -0,0 +1,16 @@ +package com.github.thinhda.service; + +import io.vertx.core.Future; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** Created by thinhda. Date: 8/4/20 */ +@Service +public class PingService { + private static final String TEXT = "Hello World!"; + + @Autowired + public Future ping() { + return Future.succeededFuture(TEXT); + } +} diff --git a/spring-vertx/src/main/java/com/github/thinhda/verticles/ServerVerticle.java b/spring-vertx/src/main/java/com/github/thinhda/verticles/ServerVerticle.java new file mode 100644 index 0000000..c98ba72 --- /dev/null +++ b/spring-vertx/src/main/java/com/github/thinhda/verticles/ServerVerticle.java @@ -0,0 +1,44 @@ +package com.github.thinhda.verticles; + +import com.github.thinhda.service.PingService; +import io.vertx.core.AbstractVerticle; +import io.vertx.core.http.HttpHeaders; +import io.vertx.ext.web.Router; +import io.vertx.ext.web.RoutingContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** Created by thinhda. Date: 8/4/20 */ +@Component +public class ServerVerticle extends AbstractVerticle { + + @Autowired private Integer defaultPort; + @Autowired private PingService pingService; + private static final String TEXT = "Hello World!"; + + private void ping(RoutingContext routingContext) { + pingService + .ping() + .setHandler( + res -> { + routingContext + .response() + .putHeader("content-type", "application/json") + .setStatusCode(200) + .end(res.result()); + }); + } + + @Override + public void start() throws Exception { + super.start(); + + Router router = Router.router(vertx); + router.get("/").handler(this::ping); + + vertx + .createHttpServer() + .requestHandler(req -> req.response().end(TEXT)) + .listen(config().getInteger("http.port", defaultPort)); + } +} diff --git a/spring-vertx/src/main/resources/logback.xml b/spring-vertx/src/main/resources/logback.xml new file mode 100644 index 0000000..7d900d8 --- /dev/null +++ b/spring-vertx/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file From 1073300f62bc33e7efb0d821569ed4a2525d17e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2020 12:55:16 +0000 Subject: [PATCH 104/309] Bump jackson.version from 2.9.4 to 2.11.2 in /spring-vertx Bumps `jackson.version` from 2.9.4 to 2.11.2. Updates `jackson-core` from 2.9.4 to 2.11.2 - [Release notes](https://github.com/FasterXML/jackson-core/releases) - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.9.4...jackson-core-2.11.2) Updates `jackson-databind` from 2.9.4 to 2.11.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Updates `jackson-annotations` from 2.9.4 to 2.11.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- spring-vertx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml index f68bc5e..810d482 100644 --- a/spring-vertx/pom.xml +++ b/spring-vertx/pom.xml @@ -10,7 +10,7 @@ 3.4.1 2.2.6.RELEASE - 2.9.4 + 2.11.2 From 072b271785dc49faf90901b66d37606c1c322b1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2020 13:17:42 +0000 Subject: [PATCH 105/309] Bump vertx-web from 3.4.1 to 3.5.4 in /spring-vertx Bumps vertx-web from 3.4.1 to 3.5.4. Signed-off-by: dependabot[bot] --- spring-vertx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml index 810d482..7b0af4e 100644 --- a/spring-vertx/pom.xml +++ b/spring-vertx/pom.xml @@ -8,7 +8,7 @@ spring-vertx 1.0-SNAPSHOT - 3.4.1 + 3.5.4 2.2.6.RELEASE 2.11.2 From 75744d3488b34327fc79e747128b9432aefcae3f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 28 Aug 2020 14:44:15 -0400 Subject: [PATCH 106/309] upgrade to version 2.0.17 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9d03700..e04dd73 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.17-SNAPSHOT + 2.0.17 2.11.1 1.7.25 1.2.3 From fee37727e15e65a44ab701b21a504ff9f789b3e1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 28 Aug 2020 19:43:17 -0400 Subject: [PATCH 107/309] upgrade to version 2.0.18-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e04dd73..e76d1a0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.17 + 2.0.18-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 6ea7b3c1b99b8f760f8b1694eb23c699cefa6131 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 1 Oct 2020 10:42:51 -0400 Subject: [PATCH 108/309] upgrade to version 2.0.18 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e76d1a0..870e09a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.18-SNAPSHOT + 2.0.18 2.11.1 1.7.25 1.2.3 From e524817e2cd0b962bc067a2c6302422eaa181325 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 1 Oct 2020 16:47:16 -0400 Subject: [PATCH 109/309] upgrade to version 2.0.19-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 870e09a..4c91f07 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.18 + 2.0.19-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 2cbc9b128247e6014ec4da3df26e15bbecdff1ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 19:11:05 -0400 Subject: [PATCH 110/309] Bump junit from 4.12 to 4.13.1 in /light-4j (#77) Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 4c91f07..f873524 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -13,7 +13,7 @@ 2.11.1 1.7.25 1.2.3 - 4.12 + 4.13.1 2.1.3.Final From 0b32e0e0d11f68eb656e2942b76171af48e00d70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 19:11:20 -0400 Subject: [PATCH 111/309] Bump junit from 3.8.1 to 4.13.1 in /jfinal (#78) Bumps [junit](https://github.com/junit-team/junit4) from 3.8.1 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.13.1.md) - [Commits](https://github.com/junit-team/junit4/commits/r4.13.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- jfinal/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfinal/pom.xml b/jfinal/pom.xml index b4119aa..fef6a70 100644 --- a/jfinal/pom.xml +++ b/jfinal/pom.xml @@ -16,7 +16,7 @@ junit junit - 3.8.1 + 4.13.1 test From bcfbf56742041911e4fa7728aa9b2c334a0080cb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 1 Nov 2020 08:15:20 -0500 Subject: [PATCH 112/309] upgrade to version 2.0.19 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f873524..22e57ac 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.19-SNAPSHOT + 2.0.19 2.11.1 1.7.25 1.2.3 From a18e77e4af0199d69b2e056ebc4f4747d51689eb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 1 Nov 2020 19:01:04 -0500 Subject: [PATCH 113/309] upgrade to version 2.0.20-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 22e57ac..c4cfc9c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.19 + 2.0.20-SNAPSHOT 2.11.1 1.7.25 1.2.3 From fe17ca06d986ba22aa38222b848184cec0da0818 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 5 Nov 2020 16:24:16 -0500 Subject: [PATCH 114/309] upgrade to version 2.0.20 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c4cfc9c..be9a15f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.20-SNAPSHOT + 2.0.20 2.11.1 1.7.25 1.2.3 From e070069a247e0739d84330e36b8007e359f7dcaa Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 5 Nov 2020 18:15:30 -0500 Subject: [PATCH 115/309] upgrade to version 2.0.21-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index be9a15f..08b1da5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.20 + 2.0.21-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 92064e35bc19e1bea09775377ad4ac30948e9c60 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 8 Nov 2020 22:52:27 -0500 Subject: [PATCH 116/309] fixes #79 update server.yml to add keystore and truststore passwords --- light-4j/src/main/resources/config/server.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/light-4j/src/main/resources/config/server.yml b/light-4j/src/main/resources/config/server.yml index 053e0fc..0caff51 100644 --- a/light-4j/src/main/resources/config/server.yml +++ b/light-4j/src/main/resources/config/server.yml @@ -25,12 +25,21 @@ enableHttp2: true # Keystore file name in config folder. KeystorePass is in secret.yml to access it. keystoreName: server.keystore +# Keystore password +keystorePass: password + +# Private key password +keyPass: password + # Flag that indicate if two way TLS is enabled. Not recommended in docker container. enableTwoWayTls: false # Truststore file name in config folder. TruststorePass is in secret.yml to access it. truststoreName: server.truststore +# Truststore password +truststorePass: password + # Unique service identifier. Used in service registration and discovery etc. serviceId: com.networknt.plaintext-1.0.0 From 048223f928c4db895fe3c048e46d14cd4b146c27 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 25 Nov 2020 09:21:15 -0500 Subject: [PATCH 117/309] upgrade to version 2.0.21 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 08b1da5..cce16ab 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.21-SNAPSHOT + 2.0.21 2.11.1 1.7.25 1.2.3 From 802414edd32d0e2debc1fe3ef4f0d8ca35a9d914 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 25 Nov 2020 13:09:22 -0500 Subject: [PATCH 118/309] upgrade to version 2.0.22-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index cce16ab..89ae1d9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.21 + 2.0.22-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 84357a938b0f538330458278ad225de6696312d6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 22 Dec 2020 13:16:18 -0500 Subject: [PATCH 119/309] upgrade to version 2.0.22 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 89ae1d9..3ec1ce9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.22-SNAPSHOT + 2.0.22 2.11.1 1.7.25 1.2.3 From ec160bb64f02b0938571f760f73e2c9bc612e657 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 23 Dec 2020 09:44:14 -0500 Subject: [PATCH 120/309] upgrade to version 2.0.23-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3ec1ce9..d5a7bb4 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.22 + 2.0.23-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 1cedecc3f2366481bf7ee09bf5512541319a5858 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 29 Jan 2021 14:58:07 -0500 Subject: [PATCH 121/309] upgrade to version 2.0.23 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d5a7bb4..dcf1a87 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.23-SNAPSHOT + 2.0.23 2.11.1 1.7.25 1.2.3 From 72b0d0d02eb4d152b78e061c328c92403ac5be7b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 29 Jan 2021 20:24:51 -0500 Subject: [PATCH 122/309] upgrade to version 2.0.24-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dcf1a87..743a059 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.23 + 2.0.24-SNAPSHOT 2.11.1 1.7.25 1.2.3 From 6e62102046b923568f7b64487ccb2822aa346fe0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 20 Feb 2021 14:55:41 -0500 Subject: [PATCH 123/309] upgrade to snakeyaml to 1.26 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 743a059..6da4880 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.0.24-SNAPSHOT - 2.11.1 + 2.12.1 1.7.25 1.2.3 4.13.1 From 6599879f6b0c7b02914c70ebd645247195ef0a87 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 23 Feb 2021 23:38:51 -0500 Subject: [PATCH 124/309] upgrade undertow to 2.2.4.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6da4880..44cf36f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.13.1 - 2.1.3.Final + 2.2.4.Final From 98b14854e6aadb907bf2e08462b8914d5c3897f4 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 24 Feb 2021 11:14:44 -0500 Subject: [PATCH 125/309] upgrade to version 2.0.24 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 44cf36f..dee19df 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.24-SNAPSHOT + 2.0.24 2.12.1 1.7.25 1.2.3 From b95ba24b3235141c3ed7136d224a3f5c6b509014 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 24 Feb 2021 19:59:00 -0500 Subject: [PATCH 126/309] upgrade to version 2.0.25-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dee19df..d87f8c8 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.24 + 2.0.25-SNAPSHOT 2.12.1 1.7.25 1.2.3 From 58eadec09794442e1281d658cfe7a8e9dd822370 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 28 Mar 2021 11:06:30 -0400 Subject: [PATCH 127/309] upgrade to version 2.0.25 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d87f8c8..8531bae 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.25-SNAPSHOT + 2.0.25 2.12.1 1.7.25 1.2.3 From 12c65e4ff5feafe1402da58bb1a76040f665d41c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 28 Mar 2021 15:50:22 -0400 Subject: [PATCH 128/309] upgrade to version 2.0.26-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8531bae..a7e281f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.25 + 2.0.26-SNAPSHOT 2.12.1 1.7.25 1.2.3 From e5768114b5c908e8566d9a23ecd7427448ccdd4c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Apr 2021 16:28:17 -0400 Subject: [PATCH 129/309] upgrade to version 2.0.26 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a7e281f..759fd0a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.26-SNAPSHOT + 2.0.26 2.12.1 1.7.25 1.2.3 From 5b440b5c6fb674405c3b29861048bbd5b5365270 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 28 Apr 2021 08:27:53 -0400 Subject: [PATCH 130/309] upgrade to version 2.0.27-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 759fd0a..8be1830 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.26 + 2.0.27-SNAPSHOT 2.12.1 1.7.25 1.2.3 From f907dc2cd1d2f6a4ec56594ee5376ea33be014b3 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 25 May 2021 18:40:31 -0400 Subject: [PATCH 131/309] upgrade to version 2.0.27 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8be1830..1a6b574 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.27-SNAPSHOT + 2.0.27 2.12.1 1.7.25 1.2.3 From 2aaead8c8178fd2e6d7975c7bf6db9cc7a114d64 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 25 May 2021 23:27:55 -0400 Subject: [PATCH 132/309] upgrade to version 2.0.28-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 1a6b574..6e4063c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.27 + 2.0.28-SNAPSHOT 2.12.1 1.7.25 1.2.3 From cd889afd2a834abde56b8f9cb2e05bb73df4e7e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:05:15 -0400 Subject: [PATCH 133/309] Bump logback-classic from 1.1.6 to 1.2.0 in /seedstack-jersey2 (#87) Bumps logback-classic from 1.1.6 to 1.2.0. --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- seedstack-jersey2/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seedstack-jersey2/pom.xml b/seedstack-jersey2/pom.xml index 70eaf08..a41ab43 100644 --- a/seedstack-jersey2/pom.xml +++ b/seedstack-jersey2/pom.xml @@ -14,7 +14,7 @@ UTF-8 UTF-8 - 1.1.6 + 1.2.0 From cf566f0d8b07415cc80e6fe26ecb27abdd853f49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:05:38 -0400 Subject: [PATCH 134/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario2/apiC (#80) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario2/apiC/apiC.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario2/apiC/apiC.csproj b/dotnet-core/scenario2/apiC/apiC.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario2/apiC/apiC.csproj +++ b/dotnet-core/scenario2/apiC/apiC.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From c9694bac0f8f838a2e8498ca3c1d943c747a827f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:05:55 -0400 Subject: [PATCH 135/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario3/apiC (#81) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario3/apiC/apiC.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario3/apiC/apiC.csproj b/dotnet-core/scenario3/apiC/apiC.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario3/apiC/apiC.csproj +++ b/dotnet-core/scenario3/apiC/apiC.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From ae9693051583321f0f4a0ca3fa5fa6419f03dd5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:06:10 -0400 Subject: [PATCH 136/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario3/apiA (#82) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario3/apiA/apiA.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario3/apiA/apiA.csproj b/dotnet-core/scenario3/apiA/apiA.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario3/apiA/apiA.csproj +++ b/dotnet-core/scenario3/apiA/apiA.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From 8fbfbcff2612057d21831c0d3d83dc81ba739732 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:06:39 -0400 Subject: [PATCH 137/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario2/apiB (#83) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario2/apiB/apiB.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario2/apiB/apiB.csproj b/dotnet-core/scenario2/apiB/apiB.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario2/apiB/apiB.csproj +++ b/dotnet-core/scenario2/apiB/apiB.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From 19c97ab1a0f7172b414e222bbfb23b5f4601419a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:06:55 -0400 Subject: [PATCH 138/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario1/apiA (#84) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario1/apiA/apiA.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario1/apiA/apiA.csproj b/dotnet-core/scenario1/apiA/apiA.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario1/apiA/apiA.csproj +++ b/dotnet-core/scenario1/apiA/apiA.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From b49e3bd95605ef2d0ac67edbfcbdcb4a84743e0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:07:07 -0400 Subject: [PATCH 139/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario3/apiB (#85) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario3/apiB/apiB.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario3/apiB/apiB.csproj b/dotnet-core/scenario3/apiB/apiB.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario3/apiB/apiB.csproj +++ b/dotnet-core/scenario3/apiB/apiB.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From b62190d9b3aa6d629a825ecb2c6ff1fed4f09616 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:07:20 -0400 Subject: [PATCH 140/309] Bump Microsoft.AspNetCore.Mvc in /dotnet-core/scenario2/apiA (#86) Bumps Microsoft.AspNetCore.Mvc from 1.1.2 to 1.1.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dotnet-core/scenario2/apiA/apiA.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet-core/scenario2/apiA/apiA.csproj b/dotnet-core/scenario2/apiA/apiA.csproj index b5c6c45..178fcc6 100644 --- a/dotnet-core/scenario2/apiA/apiA.csproj +++ b/dotnet-core/scenario2/apiA/apiA.csproj @@ -4,7 +4,7 @@ - + \ No newline at end of file From c81fabd8d7dba8678e053544e72729a065ea23c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:07:35 -0400 Subject: [PATCH 141/309] Bump logback-classic from 1.1.6 to 1.2.0 in /seedstack-filter (#88) Bumps logback-classic from 1.1.6 to 1.2.0. --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- seedstack-filter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seedstack-filter/pom.xml b/seedstack-filter/pom.xml index dfd5298..555ee2c 100644 --- a/seedstack-filter/pom.xml +++ b/seedstack-filter/pom.xml @@ -14,7 +14,7 @@ UTF-8 UTF-8 - 1.1.6 + 1.2.0 From 611fa3d412ffe52290b565b6bdb479f7559c8a8d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 26 Jun 2021 22:40:20 -0400 Subject: [PATCH 142/309] upgrade to version 2.0.28 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6e4063c..3d36fa9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.28-SNAPSHOT + 2.0.28 2.12.1 1.7.25 1.2.3 From 31443bf52d15211663ddcea72249f04a34243653 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 27 Jun 2021 11:56:58 -0400 Subject: [PATCH 143/309] upgrade to version 2.0.29-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3d36fa9..eaff717 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.28 + 2.0.29-SNAPSHOT 2.12.1 1.7.25 1.2.3 From 696273df37c8bd98e2f85bf93b2e10e151897b8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Jul 2021 12:41:10 -0400 Subject: [PATCH 144/309] Bump ratpack-core from 1.7.6 to 1.9.0 in /ratpack (#89) Bumps [ratpack-core](https://github.com/ratpack/ratpack) from 1.7.6 to 1.9.0. - [Release notes](https://github.com/ratpack/ratpack/releases) - [Changelog](https://github.com/ratpack/ratpack/blob/master/release-notes.md) - [Commits](https://github.com/ratpack/ratpack/compare/v1.7.6...v1.9.0) --- updated-dependencies: - dependency-name: io.ratpack:ratpack-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ratpack/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratpack/pom.xml b/ratpack/pom.xml index 705d801..b189433 100644 --- a/ratpack/pom.xml +++ b/ratpack/pom.xml @@ -15,7 +15,7 @@ io.ratpack ratpack-core - 1.7.6 + 1.9.0 From b5bfc86846a25b5673ed0eed832d6bbf86d9256e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 25 Jul 2021 18:56:35 -0400 Subject: [PATCH 145/309] upgrade to version 2.0.29-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index eaff717..70f5400 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.29-SNAPSHOT + 2.0.29 2.12.1 1.7.25 1.2.3 From f6a12060eb0ec88e7a3d7a69908d127f3ddf92ac Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 25 Jul 2021 20:56:03 -0400 Subject: [PATCH 146/309] upgrade to version 2.0.30-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 70f5400..0cfeeea 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.29 + 2.0.30-SNAPSHOT 2.12.1 1.7.25 1.2.3 From cbaf0f80bdad14805c8d59dd2a8827e85ae3ebb9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 23 Aug 2021 22:53:34 -0400 Subject: [PATCH 147/309] upgrade to version 2.0.30 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0cfeeea..b4c5351 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.30-SNAPSHOT + 2.0.30 2.12.1 1.7.25 1.2.3 From 61a818d54446900dc013b54418790a3695d4626c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 24 Aug 2021 21:27:26 -0400 Subject: [PATCH 148/309] upgrade to version 2.0.31-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b4c5351..909f021 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.30 + 2.0.31-SNAPSHOT 2.12.1 1.7.25 1.2.3 From fa7da83681832b80f8877535a57240261f6359bd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 22 Sep 2021 13:44:36 -0400 Subject: [PATCH 149/309] upgrade to version 2.0.31 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 909f021..c97b273 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.31-SNAPSHOT + 2.0.31 2.12.1 1.7.25 1.2.3 From 0582e232b95bbed570ae70f1280663aa23b9898a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 23 Sep 2021 09:48:28 -0400 Subject: [PATCH 150/309] upgrade to version 2.0.32-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c97b273..5105c41 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.31 + 2.0.32-SNAPSHOT 2.12.1 1.7.25 1.2.3 From fbbde29c328bd5f2480ba3920b263b6a831b8531 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 19 Oct 2021 12:14:28 -0400 Subject: [PATCH 151/309] upgrade to version 2.0.32 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5105c41..0450f19 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.32-SNAPSHOT + 2.0.32 2.12.1 1.7.25 1.2.3 From 7872915811471a7c384f80551cbff2cd391cf743 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 19 Oct 2021 18:14:50 -0400 Subject: [PATCH 152/309] upgrade to version 2.0.33-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0450f19..edcafb2 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.32 + 2.0.33-SNAPSHOT 2.12.1 1.7.25 1.2.3 From 812c3f0e353a00da4d85c36b45f84d61a150071d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 4 Dec 2021 11:26:13 -0500 Subject: [PATCH 153/309] upgrade to undertow 2.2.14 to resolve some x-ray warnnings --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index edcafb2..b05a301 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.25 1.2.3 4.13.1 - 2.2.4.Final + 2.2.14.Final From d6ebfde5dbd181989ed77c14b10d4f12b5415cce Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 4 Dec 2021 15:08:28 -0500 Subject: [PATCH 154/309] upgrade to logback 1.2.7 to resolve some x-ray warnnings --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b05a301..7f626f0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.0.33-SNAPSHOT 2.12.1 1.7.25 - 1.2.3 + 1.2.7 4.13.1 2.2.14.Final From 2e7123796f4126ed1b86d2ef41ea95b7e05b9067 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 13 Dec 2021 10:21:59 -0500 Subject: [PATCH 155/309] upgrade to slf4j to 1.7.32 to be in sync with logback 1.2.7 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7f626f0..01881b7 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.0.33-SNAPSHOT 2.12.1 - 1.7.25 + 1.7.32 1.2.7 4.13.1 2.2.14.Final From 4f81a8e449de5688cdf613424dbe6a5299921d70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 11:16:08 -0500 Subject: [PATCH 156/309] Bump h2 from 1.4.186 to 2.0.206 in /ninjaframework (#93) Bumps [h2](https://github.com/h2database/h2database) from 1.4.186 to 2.0.206. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-1.4.186...version-2.0.206) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ninjaframework/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ninjaframework/pom.xml b/ninjaframework/pom.xml index 1431a86..4953051 100644 --- a/ninjaframework/pom.xml +++ b/ninjaframework/pom.xml @@ -168,7 +168,7 @@ com.h2database h2 - 1.4.186 + 2.0.206 From 6f36b1c02843dcbedcc6349a190769aa47daae20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 11:16:26 -0500 Subject: [PATCH 157/309] Bump pippo-core from 1.1.0 to 1.12.0 in /pippo-jetty (#90) Bumps [pippo-core](https://github.com/pippo-java/pippo) from 1.1.0 to 1.12.0. - [Release notes](https://github.com/pippo-java/pippo/releases) - [Changelog](https://github.com/pippo-java/pippo/blob/master/CHANGELOG.md) - [Commits](https://github.com/pippo-java/pippo/compare/release-1.1.0...release-1.12.0) --- updated-dependencies: - dependency-name: ro.pippo:pippo-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pippo-jetty/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pippo-jetty/pom.xml b/pippo-jetty/pom.xml index 4aa3452..6624e1c 100644 --- a/pippo-jetty/pom.xml +++ b/pippo-jetty/pom.xml @@ -9,7 +9,7 @@ 1.8 - 1.1.0 + 1.12.0 From 98c84f40c8b9e86fe0f3c693b59cd10d53786e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 11:16:44 -0500 Subject: [PATCH 158/309] Bump pippo-core from 1.1.0 to 1.12.0 in /pippo-undertow (#91) Bumps [pippo-core](https://github.com/pippo-java/pippo) from 1.1.0 to 1.12.0. - [Release notes](https://github.com/pippo-java/pippo/releases) - [Changelog](https://github.com/pippo-java/pippo/blob/master/CHANGELOG.md) - [Commits](https://github.com/pippo-java/pippo/compare/release-1.1.0...release-1.12.0) --- updated-dependencies: - dependency-name: ro.pippo:pippo-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pippo-undertow/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pippo-undertow/pom.xml b/pippo-undertow/pom.xml index 981c1c2..52f96f5 100644 --- a/pippo-undertow/pom.xml +++ b/pippo-undertow/pom.xml @@ -9,7 +9,7 @@ 1.8 - 1.1.0 + 1.12.0 From bf8b9082545780a6afc80803d878206540283491 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jan 2022 11:16:59 -0500 Subject: [PATCH 159/309] Bump pippo-core from 1.1.0 to 1.12.0 in /pippo-tomcat (#92) Bumps [pippo-core](https://github.com/pippo-java/pippo) from 1.1.0 to 1.12.0. - [Release notes](https://github.com/pippo-java/pippo/releases) - [Changelog](https://github.com/pippo-java/pippo/blob/master/CHANGELOG.md) - [Commits](https://github.com/pippo-java/pippo/compare/release-1.1.0...release-1.12.0) --- updated-dependencies: - dependency-name: ro.pippo:pippo-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pippo-tomcat/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pippo-tomcat/pom.xml b/pippo-tomcat/pom.xml index 56a8d95..4355996 100644 --- a/pippo-tomcat/pom.xml +++ b/pippo-tomcat/pom.xml @@ -9,7 +9,7 @@ 1.8 - 1.1.0 + 1.12.0 From 17d0e9f147b1e29e774021082f06d89ef38b42a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 18:36:24 -0500 Subject: [PATCH 160/309] Bump h2 from 2.0.206 to 2.1.210 in /ninjaframework (#94) Bumps [h2](https://github.com/h2database/h2database) from 2.0.206 to 2.1.210. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.0.206...version-2.1.210) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ninjaframework/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ninjaframework/pom.xml b/ninjaframework/pom.xml index 4953051..13fff40 100644 --- a/ninjaframework/pom.xml +++ b/ninjaframework/pom.xml @@ -168,7 +168,7 @@ com.h2database h2 - 2.0.206 + 2.1.210 From dea5ddfefd2b0150c02aa770fc093ab9a7f3c614 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 19:35:58 -0500 Subject: [PATCH 161/309] Bump vertx-core from 3.5.0 to 3.5.4 in /vertx (#96) Bumps [vertx-core](https://github.com/eclipse/vert.x) from 3.5.0 to 3.5.4. - [Release notes](https://github.com/eclipse/vert.x/releases) - [Commits](https://github.com/eclipse/vert.x/compare/3.5.0...3.5.4) --- updated-dependencies: - dependency-name: io.vertx:vertx-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- vertx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx/pom.xml b/vertx/pom.xml index cc929e3..4c51cef 100644 --- a/vertx/pom.xml +++ b/vertx/pom.xml @@ -17,7 +17,7 @@ io.vertx vertx-core - 3.5.0 + 3.5.4 From b41932218fc61b1e1b54ac2fd2f8a77482c400d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 19:36:12 -0500 Subject: [PATCH 162/309] Bump spark-core from 2.7.0 to 2.7.2 in /spark (#95) Bumps [spark-core](https://github.com/perwendel/spark) from 2.7.0 to 2.7.2. - [Release notes](https://github.com/perwendel/spark/releases) - [Commits](https://github.com/perwendel/spark/compare/2.7.0...2.7.2) --- updated-dependencies: - dependency-name: com.sparkjava:spark-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spark/pom.xml b/spark/pom.xml index 6c90ee4..cf1e7f3 100644 --- a/spark/pom.xml +++ b/spark/pom.xml @@ -15,7 +15,7 @@ com.sparkjava spark-core - 2.7.0 + 2.7.2 From f26fe2c42d84eb658b480ca349bb93466fca2b5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 20:02:17 -0500 Subject: [PATCH 163/309] Bump vertx-web from 3.5.4 to 3.9.4 in /spring-vertx (#97) Bumps vertx-web from 3.5.4 to 3.9.4. --- updated-dependencies: - dependency-name: io.vertx:vertx-web dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-vertx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml index 7b0af4e..6709c34 100644 --- a/spring-vertx/pom.xml +++ b/spring-vertx/pom.xml @@ -8,7 +8,7 @@ spring-vertx 1.0-SNAPSHOT - 3.5.4 + 3.9.4 2.2.6.RELEASE 2.11.2 From 21e9c3d89dee7974d15e897c67b48d0e2c6413cd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 27 Feb 2022 15:25:04 -0500 Subject: [PATCH 164/309] upgrade to version 2.1.0 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 01881b7..b0dfdac 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.0.33-SNAPSHOT + 2.1.0 2.12.1 1.7.32 1.2.7 From fc79a2280e5135fec82aac41973a05a36832ed28 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 27 Feb 2022 21:11:10 -0500 Subject: [PATCH 165/309] upgrade to version 2.1.1-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b0dfdac..8fe96a3 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.0 + 2.1.1-SNAPSHOT 2.12.1 1.7.32 1.2.7 From f03f9beb44f44edf49c6179046e6ed1638092e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 20:54:50 -0400 Subject: [PATCH 166/309] Bump spring-boot-starter-web in /spring-vertx (#98) Bumps [spring-boot-starter-web](https://github.com/spring-projects/spring-boot) from 2.2.6.RELEASE to 2.5.12. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v2.2.6.RELEASE...v2.5.12) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-web dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- spring-vertx/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-vertx/pom.xml b/spring-vertx/pom.xml index 6709c34..0af9509 100644 --- a/spring-vertx/pom.xml +++ b/spring-vertx/pom.xml @@ -9,7 +9,7 @@ 1.0-SNAPSHOT 3.9.4 - 2.2.6.RELEASE + 2.5.12 2.11.2 From 34fb13aeba94558fbde7013157b0ccd19b263d07 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 26 Apr 2022 19:50:54 -0400 Subject: [PATCH 167/309] upgrade to version 2.1.1 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8fe96a3..5ff7745 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.1-SNAPSHOT + 2.1.1 2.12.1 1.7.32 1.2.7 From 1d752e95a1d33b9b598c90429f291da25437cb4b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 26 Apr 2022 23:00:21 -0400 Subject: [PATCH 168/309] upgrade to version 2.1.2-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5ff7745..ef257d4 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.1 + 2.1.2-SNAPSHOT 2.12.1 1.7.32 1.2.7 From 6b8d92898258193565b38c709d6f879634ee91c0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 26 May 2022 11:15:44 -0400 Subject: [PATCH 169/309] upgrade jackson to 2.13.3 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ef257d4..c18d2fc 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.2-SNAPSHOT - 2.12.1 + 2.13.3 1.7.32 1.2.7 4.13.1 From 5e9cea696d8ab325c44a810b19bb6385b31440af Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 30 May 2022 17:51:49 -0400 Subject: [PATCH 170/309] upgrade logback to 1.2.11 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c18d2fc..ec17923 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.1.2-SNAPSHOT 2.13.3 1.7.32 - 1.2.7 + 1.2.11 4.13.1 2.2.14.Final From e523d221ebe1a190b952f9f71ebbeb307173ba63 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 30 May 2022 18:20:30 -0400 Subject: [PATCH 171/309] upgrade slf4j to 1.7.36 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ec17923..599d8ba 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.1.2-SNAPSHOT 2.13.3 - 1.7.32 + 1.7.36 1.2.11 4.13.1 2.2.14.Final From a5560f8e5bbe256dc61a3f7a8ad4f51b603012ba Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 16 Jul 2022 11:46:55 -0400 Subject: [PATCH 172/309] upgrade undertow to 2.2.14.Final to 2.2.18.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 599d8ba..48180e8 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.36 1.2.11 4.13.1 - 2.2.14.Final + 2.2.18.Final From 6558deccc890d6931d39fac657ea2f991375cf13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 16 Jul 2022 13:21:32 -0400 Subject: [PATCH 173/309] Bump http2-server from 9.4.27.v20200227 to 9.4.48.v20220622 in /javalin (#102) Bumps http2-server from 9.4.27.v20200227 to 9.4.48.v20220622. --- updated-dependencies: - dependency-name: org.eclipse.jetty.http2:http2-server dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- javalin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javalin/pom.xml b/javalin/pom.xml index 17a61bf..2408c9d 100644 --- a/javalin/pom.xml +++ b/javalin/pom.xml @@ -9,7 +9,7 @@ 1.8 1.8 - 9.4.27.v20200227 + 9.4.48.v20220622 com.networknt.example.ExampleApplication From 4150fbd8c7219d560e45e5d77326e78141b299c7 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 22 Aug 2022 14:25:23 -0400 Subject: [PATCH 174/309] upgrade undertow to 2.2.18.Final to 2.2.19.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 48180e8..3af603c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.36 1.2.11 4.13.1 - 2.2.18.Final + 2.2.19.Final From 331cbf67e8f904a75f047dc6e1ae52b6a476d6bd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Oct 2022 17:35:42 -0400 Subject: [PATCH 175/309] upgrade to version 2.1.2 after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3af603c..301b02c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.2-SNAPSHOT + 2.1.2 2.13.3 1.7.36 1.2.11 From 98f01a52f1323cd0fc3fb52d5956024462d47bab Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 23 Oct 2022 01:01:00 -0400 Subject: [PATCH 176/309] upgrade to version 2.1.3-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 301b02c..604e692 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.2 + 2.1.3-SNAPSHOT 2.13.3 1.7.36 1.2.11 From a7f79f318d333036317a55ff91ba86489caffbac Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 10 Nov 2022 20:59:29 -0500 Subject: [PATCH 177/309] upgrade to version 2.1.3 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 604e692..5721de6 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.3-SNAPSHOT + 2.1.3 2.13.3 1.7.36 1.2.11 From d6a243f6905722d52dadd7300ca15b7f5274e058 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 10 Nov 2022 23:15:16 -0500 Subject: [PATCH 178/309] upgrade to version 2.1.4-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5721de6..0a02609 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.3 + 2.1.4-SNAPSHOT 2.13.3 1.7.36 1.2.11 From 8afbed67949df754b9266d70cfb1c3b419b590fb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 15 Nov 2022 21:09:44 -0500 Subject: [PATCH 179/309] upgrade jackson to 2.14.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0a02609..bdbebcd 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.4-SNAPSHOT - 2.13.3 + 2.14.0 1.7.36 1.2.11 4.13.1 From 400c55242fb1a9f091f36cbe3100d84f81e7c68d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 16 Nov 2022 09:07:54 -0500 Subject: [PATCH 180/309] upgrade undertow to 2.3.0.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index bdbebcd..8c5580c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.36 1.2.11 4.13.1 - 2.2.19.Final + 2.3.0.Final From 77759d4150c6e9d4bea283b661dcbdeb1e5fbd47 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Nov 2022 10:03:24 -0500 Subject: [PATCH 181/309] upgrade to version 2.1.4 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8c5580c..be2216b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.4-SNAPSHOT + 2.1.4 2.14.0 1.7.36 1.2.11 From 14dcc5d7b3c2bba95d03e1066506381fb956bcd1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Nov 2022 13:29:31 -0500 Subject: [PATCH 182/309] upgrade to version 2.1.5-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index be2216b..426fff3 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.4 + 2.1.5-SNAPSHOT 2.14.0 1.7.36 1.2.11 From cf1d3069b574539643e953bf6f3857e036ae0245 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Jan 2023 09:51:36 -0500 Subject: [PATCH 183/309] upgrade to version 2.1.5 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 426fff3..2a721fd 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.5-SNAPSHOT + 2.1.5 2.14.0 1.7.36 1.2.11 From e99f2030f06149c3a363351d78cbaa4828824511 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Jan 2023 13:18:01 -0500 Subject: [PATCH 184/309] upgrade to version 2.1.6-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2a721fd..135dab9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.5 + 2.1.6-SNAPSHOT 2.14.0 1.7.36 1.2.11 From b3c2611d98b896cf49bf7e75a9a44e1e30d7e397 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 6 Feb 2023 09:45:51 -0500 Subject: [PATCH 185/309] upgrade to version 2.1.6 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 135dab9..a1d9eff 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.6-SNAPSHOT + 2.1.6 2.14.0 1.7.36 1.2.11 From 5082d6449f34bae97d024a4c9d53398a04273ceb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 6 Feb 2023 16:48:25 -0500 Subject: [PATCH 186/309] upgrade to version 2.1.7-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a1d9eff..8dd64ea 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.6 + 2.1.7-SNAPSHOT 2.14.0 1.7.36 1.2.11 From cdf10dd610ed157b446d73176541a2fad9eee944 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 8 Feb 2023 10:34:42 -0500 Subject: [PATCH 187/309] upgrade jackson to 2.14.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8dd64ea..a3ae06f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.7-SNAPSHOT - 2.14.0 + 2.14.2 1.7.36 1.2.11 4.13.1 From 1c55af140c9e4eed339143e5bb63584664a518fa Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 8 Feb 2023 10:43:15 -0500 Subject: [PATCH 188/309] upgrade undertow to 2.3.3-Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a3ae06f..e28438c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.36 1.2.11 4.13.1 - 2.3.0.Final + 2.3.3.Final From c254f60b6dc72027657b17de149daf87194f0943 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 14 Feb 2023 14:43:33 -0500 Subject: [PATCH 189/309] upgrade to version 2.1.7 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e28438c..9ff851e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.7-SNAPSHOT + 2.1.7 2.14.2 1.7.36 1.2.11 From 4b2f6574f6dd7c06af3024e1b09a979cc6fda259 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 15 Feb 2023 08:13:27 -0500 Subject: [PATCH 190/309] upgrade to version 2.1.8-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9ff851e..f7d763d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.7 + 2.1.8-SNAPSHOT 2.14.2 1.7.36 1.2.11 From ef1cad4764601296ec51e68eb5a5296abaf5ffb0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 6 Mar 2023 17:09:31 -0500 Subject: [PATCH 191/309] upgrade to version 2.1.8 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f7d763d..0068437 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.8-SNAPSHOT + 2.1.8 2.14.2 1.7.36 1.2.11 From 099dd66a5b0cdb159d8b8cacde921398c3794a8b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 6 Mar 2023 20:47:21 -0500 Subject: [PATCH 192/309] upgrade to version 2.1.9-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0068437..c2fc6d2 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.8 + 2.1.9-SNAPSHOT 2.14.2 1.7.36 1.2.11 From 217da7e0a24baeb099bb535e05901b231bfd0b39 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 30 Mar 2023 21:08:46 -0400 Subject: [PATCH 193/309] upgrade to version 2.1.9 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c2fc6d2..aa71ac5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.9-SNAPSHOT + 2.1.9 2.14.2 1.7.36 1.2.11 From b7dea02b20366001adf2e6f14cc8e94d25e3d67c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 31 Mar 2023 09:19:29 -0400 Subject: [PATCH 194/309] upgrade to version 2.1.10-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index aa71ac5..d267322 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.9 + 2.1.10-SNAPSHOT 2.14.2 1.7.36 1.2.11 From 22004ddd38cf277281ee07c6b5be32a1a4077858 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 5 Apr 2023 11:49:29 -0400 Subject: [PATCH 195/309] upgrade snakeyaml to 2.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d267322..d2d719a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 1.7.36 1.2.11 4.13.1 - 2.3.3.Final + 2.3.5.Final From 1bec0343e85b4f3d2b614489b2c6cdba0138a527 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 5 Apr 2023 12:00:36 -0400 Subject: [PATCH 196/309] upgrade logback to 1.4.6 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d2d719a..58bdc94 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.1.10-SNAPSHOT 2.14.2 1.7.36 - 1.2.11 + 1.4.6 4.13.1 2.3.5.Final From 9f8e957b7aebf6f540a5ac40ba87e4d1fb31fb44 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 5 Apr 2023 12:07:26 -0400 Subject: [PATCH 197/309] upgrade slf4j to 2.0.7 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 58bdc94..7d1ae99 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.1.10-SNAPSHOT 2.14.2 - 1.7.36 + 2.0.7 1.4.6 4.13.1 2.3.5.Final From 2f48f9465e7f3538ac01a5c58d739307d54191b0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 5 Apr 2023 16:29:36 -0400 Subject: [PATCH 198/309] upgrade junit to 4.13.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7d1ae99..826340c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -13,7 +13,7 @@ 2.14.2 2.0.7 1.4.6 - 4.13.1 + 4.13.2 2.3.5.Final From e7a401e49f81b54b404cc463b5d6e9ea9e9a393f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 6 Apr 2023 06:18:57 -0400 Subject: [PATCH 199/309] upgrade to version 2.1.10 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 826340c..65b90ac 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.10-SNAPSHOT + 2.1.10 2.14.2 2.0.7 1.4.6 From 9911024993f8a7f6256ba3195a884bbdb01828dd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 6 Apr 2023 08:13:00 -0400 Subject: [PATCH 200/309] upgrade to version 2.1.11-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 65b90ac..0cfae25 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.10 + 2.1.11-SNAPSHOT 2.14.2 2.0.7 1.4.6 From cb8998a3fc10df7fc4dd2478465d0c785308b323 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 10 Apr 2023 09:11:03 -0400 Subject: [PATCH 201/309] upgrade to version 2.1.11 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 0cfae25..440f3cb 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.11-SNAPSHOT + 2.1.11 2.14.2 2.0.7 1.4.6 From f43d2332d199b4d2ff3111d497b6c89347a16624 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 10 Apr 2023 11:12:35 -0400 Subject: [PATCH 202/309] upgrade to version 2.1.12-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 440f3cb..63a4ff9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.11 + 2.1.12-SNAPSHOT 2.14.2 2.0.7 1.4.6 From 752e8f00048ec1fe4ebeb52a56f92066a0bbfa39 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 14 Apr 2023 21:05:56 -0400 Subject: [PATCH 203/309] upgrade to version 2.1.12 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 63a4ff9..236f383 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.12-SNAPSHOT + 2.1.12 2.14.2 2.0.7 1.4.6 From d2354da075f0097aff94b4615839f1cdd2b5953e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 15 Apr 2023 08:30:37 -0400 Subject: [PATCH 204/309] upgrade to version 2.1.13-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 236f383..e86e1c3 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.12 + 2.1.13-SNAPSHOT 2.14.2 2.0.7 1.4.6 From be408a837610356fdde5499b55e6defc8406d358 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Apr 2023 14:49:52 -0400 Subject: [PATCH 205/309] upgrade to version 2.1.13 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e86e1c3..1d593c5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.13-SNAPSHOT + 2.1.13 2.14.2 2.0.7 1.4.6 From a6e9811f4de46e22622ec769c1d8cf8e621db812 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Apr 2023 17:42:45 -0400 Subject: [PATCH 206/309] upgrade to version 2.1.14 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 1d593c5..c836247 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.13 + 2.1.14 2.14.2 2.0.7 1.4.6 From c3a3c25f0d9f8e6db1560ac8bfe3ac253be81019 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Apr 2023 17:47:51 -0400 Subject: [PATCH 207/309] upgrade to version 2.1.15 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c836247..a8c8d18 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.14 + 2.1.15 2.14.2 2.0.7 1.4.6 From 9c7323efadadd3fcb049a5cff9b7f693794eee18 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Apr 2023 19:18:31 -0400 Subject: [PATCH 208/309] upgrade to version 2.1.16-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a8c8d18..1a481a9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.15 + 2.1.16-SNAPSHOT 2.14.2 2.0.7 1.4.6 From 493249d77fb5201996caee5d8ee35f8ae9d09d0b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 28 Apr 2023 18:30:55 -0400 Subject: [PATCH 209/309] upgrade to version 2.1.16 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 1a481a9..9adec6e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.16-SNAPSHOT + 2.1.16 2.14.2 2.0.7 1.4.6 From 8de829abb2f7220cddf7dcc500a153d5a015075f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 28 Apr 2023 20:07:32 -0400 Subject: [PATCH 210/309] upgrade to version 2.1.17-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9adec6e..c48bfae 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.16 + 2.1.17-SNAPSHOT 2.14.2 2.0.7 1.4.6 From ede92afe0697aa60faf4af69ecfc19ca91152e56 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 5 May 2023 19:34:17 -0400 Subject: [PATCH 211/309] upgrade to version 2.1.18 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c48bfae..577cfa7 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.17-SNAPSHOT + 2.1.18 2.14.2 2.0.7 1.4.6 From 60bb64b0dbb7ff861390620b45664df7faadabee Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 5 May 2023 21:38:43 -0400 Subject: [PATCH 212/309] upgrade to version 2.1.19-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 577cfa7..9bda386 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.18 + 2.1.19-SNAPSHOT 2.14.2 2.0.7 1.4.6 From 564948166831912e97ad150eb90ebe3723edae46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BA=A7n=20Ng=E1=BB=8Dc=20Khoa?= <30297271+TranNgocKhoa@users.noreply.github.com> Date: Tue, 9 May 2023 09:43:00 +0700 Subject: [PATCH 213/309] Add Spring Boot 3 undertow (#108) * Add Spring Boot 3 undertow * Add Spring Boot 3 undertow --- spring-boot-3-undertow/.gitignore | 37 +++ spring-boot-3-undertow/build.gradle | 35 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + spring-boot-3-undertow/gradlew | 240 ++++++++++++++++++ spring-boot-3-undertow/gradlew.bat | 91 +++++++ spring-boot-3-undertow/settings.gradle | 1 + .../demo/SpringBoot3UndertowApplication.java | 20 ++ .../src/main/resources/application.properties | 1 + .../SpringBoot3UndertowApplicationTests.java | 13 + 10 files changed, 443 insertions(+) create mode 100644 spring-boot-3-undertow/.gitignore create mode 100644 spring-boot-3-undertow/build.gradle create mode 100644 spring-boot-3-undertow/gradle/wrapper/gradle-wrapper.jar create mode 100644 spring-boot-3-undertow/gradle/wrapper/gradle-wrapper.properties create mode 100755 spring-boot-3-undertow/gradlew create mode 100644 spring-boot-3-undertow/gradlew.bat create mode 100644 spring-boot-3-undertow/settings.gradle create mode 100644 spring-boot-3-undertow/src/main/java/demo/SpringBoot3UndertowApplication.java create mode 100644 spring-boot-3-undertow/src/main/resources/application.properties create mode 100644 spring-boot-3-undertow/src/test/java/demo/SpringBoot3UndertowApplicationTests.java diff --git a/spring-boot-3-undertow/.gitignore b/spring-boot-3-undertow/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/spring-boot-3-undertow/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/spring-boot-3-undertow/build.gradle b/spring-boot-3-undertow/build.gradle new file mode 100644 index 0000000..53953d2 --- /dev/null +++ b/spring-boot-3-undertow/build.gradle @@ -0,0 +1,35 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.0.6' + id 'io.spring.dependency-management' version '1.1.0' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '19' + +repositories { + mavenCentral() +} + +dependencies { + implementation('org.springframework.boot:spring-boot-starter-web') { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' + exclude group: 'org.hibernate.validator', module: 'hibernate-validator' + } + implementation 'org.springframework.boot:spring-boot-starter-undertow' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.withType(JavaCompile) { + options.compilerArgs += "--enable-preview" +} + +tasks.withType(JavaExec) { + jvmArgs("--enable-preview") +} + + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/spring-boot-3-undertow/gradle/wrapper/gradle-wrapper.jar b/spring-boot-3-undertow/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/spring-boot-3-undertow/gradlew.bat b/spring-boot-3-undertow/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/spring-boot-3-undertow/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/spring-boot-3-undertow/settings.gradle b/spring-boot-3-undertow/settings.gradle new file mode 100644 index 0000000..b29fe08 --- /dev/null +++ b/spring-boot-3-undertow/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'spring-boot-3-undertow' diff --git a/spring-boot-3-undertow/src/main/java/demo/SpringBoot3UndertowApplication.java b/spring-boot-3-undertow/src/main/java/demo/SpringBoot3UndertowApplication.java new file mode 100644 index 0000000..8b41472 --- /dev/null +++ b/spring-boot-3-undertow/src/main/java/demo/SpringBoot3UndertowApplication.java @@ -0,0 +1,20 @@ +package demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class SpringBoot3UndertowApplication { + @RequestMapping("/") + String home() { + return "Hello World!"; + } + + public static void main(String[] args) { + SpringApplication.run(SpringBoot3UndertowApplication.class, args); + } + +} diff --git a/spring-boot-3-undertow/src/main/resources/application.properties b/spring-boot-3-undertow/src/main/resources/application.properties new file mode 100644 index 0000000..20647fa --- /dev/null +++ b/spring-boot-3-undertow/src/main/resources/application.properties @@ -0,0 +1 @@ +server.compression.enabled=false diff --git a/spring-boot-3-undertow/src/test/java/demo/SpringBoot3UndertowApplicationTests.java b/spring-boot-3-undertow/src/test/java/demo/SpringBoot3UndertowApplicationTests.java new file mode 100644 index 0000000..d763712 --- /dev/null +++ b/spring-boot-3-undertow/src/test/java/demo/SpringBoot3UndertowApplicationTests.java @@ -0,0 +1,13 @@ +package demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringBoot3UndertowApplicationTests { + + @Test + void contextLoads() { + } + +} From 15366c527be19873a088df23e58a1fcf771c442e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BA=A7n=20Ng=E1=BB=8Dc=20Khoa?= <30297271+TranNgocKhoa@users.noreply.github.com> Date: Wed, 10 May 2023 04:43:26 +0700 Subject: [PATCH 214/309] Add spring Boot 3 Tomcat (#109) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Khoa/Kaden/개발지원팀 --- spring-boot-3-tomcat/.gitignore | 37 +++ spring-boot-3-tomcat/build.gradle | 22 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + spring-boot-3-tomcat/gradlew | 240 ++++++++++++++++++ spring-boot-3-tomcat/gradlew.bat | 91 +++++++ spring-boot-3-tomcat/settings.gradle | 1 + .../SpringBoot3TomcatApplication.java | 20 ++ .../src/main/resources/application.properties | 1 + .../SpringBoot3TomcatApplicationTests.java | 13 + 10 files changed, 430 insertions(+) create mode 100644 spring-boot-3-tomcat/.gitignore create mode 100644 spring-boot-3-tomcat/build.gradle create mode 100644 spring-boot-3-tomcat/gradle/wrapper/gradle-wrapper.jar create mode 100644 spring-boot-3-tomcat/gradle/wrapper/gradle-wrapper.properties create mode 100755 spring-boot-3-tomcat/gradlew create mode 100644 spring-boot-3-tomcat/gradlew.bat create mode 100644 spring-boot-3-tomcat/settings.gradle create mode 100644 spring-boot-3-tomcat/src/main/java/com/example/springboot3tomcat/SpringBoot3TomcatApplication.java create mode 100644 spring-boot-3-tomcat/src/main/resources/application.properties create mode 100644 spring-boot-3-tomcat/src/test/java/com/example/springboot3tomcat/SpringBoot3TomcatApplicationTests.java diff --git a/spring-boot-3-tomcat/.gitignore b/spring-boot-3-tomcat/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/spring-boot-3-tomcat/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/spring-boot-3-tomcat/build.gradle b/spring-boot-3-tomcat/build.gradle new file mode 100644 index 0000000..042ac8a --- /dev/null +++ b/spring-boot-3-tomcat/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.0.6' + id 'io.spring.dependency-management' version '1.1.0' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/spring-boot-3-tomcat/gradle/wrapper/gradle-wrapper.jar b/spring-boot-3-tomcat/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/spring-boot-3-tomcat/gradlew.bat b/spring-boot-3-tomcat/gradlew.bat new file mode 100644 index 0000000..53a6b23 --- /dev/null +++ b/spring-boot-3-tomcat/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/spring-boot-3-tomcat/settings.gradle b/spring-boot-3-tomcat/settings.gradle new file mode 100644 index 0000000..2c3fe58 --- /dev/null +++ b/spring-boot-3-tomcat/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'spring-boot-3-tomcat' diff --git a/spring-boot-3-tomcat/src/main/java/com/example/springboot3tomcat/SpringBoot3TomcatApplication.java b/spring-boot-3-tomcat/src/main/java/com/example/springboot3tomcat/SpringBoot3TomcatApplication.java new file mode 100644 index 0000000..3f362a4 --- /dev/null +++ b/spring-boot-3-tomcat/src/main/java/com/example/springboot3tomcat/SpringBoot3TomcatApplication.java @@ -0,0 +1,20 @@ +package com.example.springboot3tomcat; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class SpringBoot3TomcatApplication { + + @RequestMapping("/") + String home() { + return "Hello World!"; + } + public static void main(String[] args) { + SpringApplication.run(SpringBoot3TomcatApplication.class, args); + } + +} diff --git a/spring-boot-3-tomcat/src/main/resources/application.properties b/spring-boot-3-tomcat/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/spring-boot-3-tomcat/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/spring-boot-3-tomcat/src/test/java/com/example/springboot3tomcat/SpringBoot3TomcatApplicationTests.java b/spring-boot-3-tomcat/src/test/java/com/example/springboot3tomcat/SpringBoot3TomcatApplicationTests.java new file mode 100644 index 0000000..7bc3167 --- /dev/null +++ b/spring-boot-3-tomcat/src/test/java/com/example/springboot3tomcat/SpringBoot3TomcatApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.springboot3tomcat; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringBoot3TomcatApplicationTests { + + @Test + void contextLoads() { + } + +} From b01207b002a16a16936277fd40d49b682f6ebcfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BA=A7n=20Ng=E1=BB=8Dc=20Khoa?= <30297271+TranNgocKhoa@users.noreply.github.com> Date: Wed, 10 May 2023 04:44:06 +0700 Subject: [PATCH 215/309] Add undertow (#110) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Undertow simple * Add Run script * Remove dependency --------- Co-authored-by: Khoa/Kaden/개발지원팀 --- undertow/.gitignore | 42 ++++ undertow/build.gradle | 23 ++ undertow/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + undertow/gradlew | 234 ++++++++++++++++++ undertow/gradlew.bat | 89 +++++++ undertow/run.sh | 3 + undertow/settings.gradle | 2 + undertow/src/main/java/Example.java | 14 ++ 9 files changed, 413 insertions(+) create mode 100644 undertow/.gitignore create mode 100644 undertow/build.gradle create mode 100644 undertow/gradle/wrapper/gradle-wrapper.jar create mode 100644 undertow/gradle/wrapper/gradle-wrapper.properties create mode 100755 undertow/gradlew create mode 100644 undertow/gradlew.bat create mode 100644 undertow/run.sh create mode 100644 undertow/settings.gradle create mode 100644 undertow/src/main/java/Example.java diff --git a/undertow/.gitignore b/undertow/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/undertow/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/undertow/build.gradle b/undertow/build.gradle new file mode 100644 index 0000000..f130725 --- /dev/null +++ b/undertow/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'java' + id 'application' + id 'com.github.johnrengelman.shadow' version '8.1.1' +} + +group = 'org.example' +version = '1.0-SNAPSHOT' +sourceCompatibility = 11 + +repositories { + mavenCentral() +} + +application { + mainClass = 'Example' +} + +dependencies { + implementation 'io.undertow:undertow-core:2.3.5.Final' +// implementation 'io.undertow:undertow-servlet:2.3.5.Final' +// implementation 'io.undertow:undertow-websockets-jsr:2.3.5.Final' + } \ No newline at end of file diff --git a/undertow/gradle/wrapper/gradle-wrapper.jar b/undertow/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/undertow/gradlew.bat b/undertow/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/undertow/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/undertow/run.sh b/undertow/run.sh new file mode 100644 index 0000000..069170a --- /dev/null +++ b/undertow/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +./gradlew shadowJar && java -jar build/libs/undertow-1.0-SNAPSHOT-all.jar \ No newline at end of file diff --git a/undertow/settings.gradle b/undertow/settings.gradle new file mode 100644 index 0000000..94dbe87 --- /dev/null +++ b/undertow/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'undertow' + diff --git a/undertow/src/main/java/Example.java b/undertow/src/main/java/Example.java new file mode 100644 index 0000000..b3f58df --- /dev/null +++ b/undertow/src/main/java/Example.java @@ -0,0 +1,14 @@ +import io.undertow.Undertow; +import io.undertow.util.Headers; + +public class Example { + public static void main(String[] args) { + Undertow server = Undertow.builder() + .addHttpListener(8080, "localhost") + .setHandler(exchange -> { + exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); + exchange.getResponseSender().send("Hello World"); + }).build(); + server.start(); + } +} From 0cb1d306dc323f1d10df0f1309fd5f993da62b55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 17:44:50 -0400 Subject: [PATCH 216/309] Bump mysql-connector-java from 8.0.16 to 8.0.28 in /jfinal (#101) Bumps [mysql-connector-java](https://github.com/mysql/mysql-connector-j) from 8.0.16 to 8.0.28. - [Release notes](https://github.com/mysql/mysql-connector-j/releases) - [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.0/CHANGES) - [Commits](https://github.com/mysql/mysql-connector-j/compare/8.0.16...8.0.28) --- updated-dependencies: - dependency-name: mysql:mysql-connector-java dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- jfinal/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfinal/pom.xml b/jfinal/pom.xml index fef6a70..03af26f 100644 --- a/jfinal/pom.xml +++ b/jfinal/pom.xml @@ -37,7 +37,7 @@ mysql mysql-connector-java - 8.0.16 + 8.0.28 com.alibaba From 28f9df68197116160d3ad4058560b3ae7660f455 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 31 May 2023 09:12:27 -0400 Subject: [PATCH 217/309] upgrade jackson to 2.15.1 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9bda386..2e5e384 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.19-SNAPSHOT - 2.14.2 + 2.15.1 2.0.7 1.4.6 4.13.2 From 1744e761661be3162e4278a436d11fa970f5c927 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 31 May 2023 13:06:21 -0400 Subject: [PATCH 218/309] upgrade jackson to 2.15.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2e5e384..930e5e9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.19-SNAPSHOT - 2.15.1 + 2.15.2 2.0.7 1.4.6 4.13.2 From bdf4aa7b7c109a0e61992cda42ff29458aa6214c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 5 Jun 2023 07:56:21 -0400 Subject: [PATCH 219/309] upgrade to version 2.1.19 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 930e5e9..d8b4c5b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.19-SNAPSHOT + 2.1.19 2.15.2 2.0.7 1.4.6 From 61a6b015c8a810d57e2ec083a115d85bc58c5023 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 5 Jun 2023 11:33:21 -0400 Subject: [PATCH 220/309] upgrade to version 2.1.20-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index d8b4c5b..e2ea6d9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.19 + 2.1.20-SNAPSHOT 2.15.2 2.0.7 1.4.6 From 7a1ee601508ec37ec84d7b02a189e6c74860d89b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 7 Jun 2023 15:28:40 -0400 Subject: [PATCH 221/309] upgrade undertow to 2.3.6.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e2ea6d9..ffbf6f3 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.7 1.4.6 4.13.2 - 2.3.5.Final + 2.3.6.Final From af10b3119882cbb3c74a47182aaa3c17fff8456f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 17 Jun 2023 19:19:54 -0400 Subject: [PATCH 222/309] upgrade to version 2.1.20 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ffbf6f3..8b3bddc 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.20-SNAPSHOT + 2.1.20 2.15.2 2.0.7 1.4.6 From 39d48282c019bacac4a2cb6c43deac23c0b91aa2 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 17 Jun 2023 22:38:23 -0400 Subject: [PATCH 223/309] upgrade to version 2.1.21-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8b3bddc..2137ab0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.20 + 2.1.21-SNAPSHOT 2.15.2 2.0.7 1.4.6 From 1530b8694f0f3eac2c08813ee0368f1b8328c6fd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 19 Jun 2023 10:40:37 -0400 Subject: [PATCH 224/309] upgrade undertow to 2.3.7.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2137ab0..fc6d51b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.7 1.4.6 4.13.2 - 2.3.6.Final + 2.3.7.Final From 9efaede982d8c6a4d9d30ecb51c196b3618e7daa Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 22 Jun 2023 10:29:56 -0400 Subject: [PATCH 225/309] upgrade to version 2.1.21 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index fc6d51b..553fa97 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.21-SNAPSHOT + 2.1.21 2.15.2 2.0.7 1.4.6 From 21f3bd9b84f03af897dfab1f06f4cd523517a384 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 22 Jun 2023 13:38:13 -0400 Subject: [PATCH 226/309] upgrade to version 2.1.22 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 553fa97..dab111c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.21 + 2.1.22 2.15.2 2.0.7 1.4.6 From f0afe3740bd9608cf2b7477f28d2539929d3be32 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 23 Jun 2023 11:31:05 -0400 Subject: [PATCH 227/309] upgrade to version 2.1.23-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dab111c..c84edf6 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.22 + 2.1.23-SNAPSHOT 2.15.2 2.0.7 1.4.6 From b030fb29c3b31c34b2a041e6efa459825d621189 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 11 Jul 2023 18:21:29 -0400 Subject: [PATCH 228/309] upgrade to version 2.1.23 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c84edf6..13f4d3c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.23-SNAPSHOT + 2.1.23 2.15.2 2.0.7 1.4.6 From e1d05f28916fac37d9805949bf93aeebacb6f8dd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 11 Jul 2023 22:49:06 -0400 Subject: [PATCH 229/309] upgrade to version 2.1.24-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 13f4d3c..339a078 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.23 + 2.1.24-SNAPSHOT 2.15.2 2.0.7 1.4.6 From 4ebaf8d47b7b208b2141b01757fbfa2f8367a574 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 6 Aug 2023 20:38:33 -0400 Subject: [PATCH 230/309] upgrade to version 2.1.24 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 339a078..4deba6e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.24-SNAPSHOT + 2.1.24 2.15.2 2.0.7 1.4.6 From ecb354b1a0af217376c03beabc7549fbbeeee68f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 7 Aug 2023 15:32:54 -0400 Subject: [PATCH 231/309] upgrade to version 2.1.25-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 4deba6e..535601e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.24 + 2.1.25-SNAPSHOT 2.15.2 2.0.7 1.4.6 From b10b5eb1059f3579585b411c78aa0656e2c3d6de Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 8 Aug 2023 12:47:54 -0400 Subject: [PATCH 232/309] upgrade to version 2.1.25 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 535601e..43cc58c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.25-SNAPSHOT + 2.1.25 2.15.2 2.0.7 1.4.6 From 10b2455f927fdc9c849054af334d698cc117454a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 8 Aug 2023 14:48:11 -0400 Subject: [PATCH 233/309] upgrade to version 2.1.26-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 43cc58c..213666f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.25 + 2.1.26-SNAPSHOT 2.15.2 2.0.7 1.4.6 From b091fd8885901e1eea079fb5e6f382ec7827d0fe Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 17 Aug 2023 14:34:41 -0400 Subject: [PATCH 234/309] upgrade to version 2.1.26 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 213666f..dcb9d6f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.26-SNAPSHOT + 2.1.26 2.15.2 2.0.7 1.4.6 From c6e79ad18080fd4eed442b32702ec3947898039b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 17 Aug 2023 16:55:54 -0400 Subject: [PATCH 235/309] upgrade to version 2.1.27-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dcb9d6f..06fb000 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.26 + 2.1.27-SNAPSHOT 2.15.2 2.0.7 1.4.6 From c3c957548ba984c6ccad29b08df4630df30c36fa Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Oct 2023 09:14:30 -0400 Subject: [PATCH 236/309] upgrade to version 2.1.27 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 06fb000..6a099b4 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.27-SNAPSHOT + 2.1.27 2.15.2 2.0.7 1.4.6 From 96b96284e2e115dc45e863487a607f0e24f38776 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Oct 2023 13:02:25 -0400 Subject: [PATCH 237/309] upgrade to version 2.1.28-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 6a099b4..f40fd1d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.27 + 2.1.28-SNAPSHOT 2.15.2 2.0.7 1.4.6 From d6d736f2beb8fc41176f1515ca3245d0bc37ddf3 Mon Sep 17 00:00:00 2001 From: Kira Johansson <94399385+qigongki@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:54:49 -0600 Subject: [PATCH 238/309] helidon example (#112) --- helidon/.gitignore | 2 + helidon/README.md | 11 + helidon/build.gradle | 40 +++ .../gradle/wrapper/gradle-wrapper.properties | 7 + helidon/gradlew | 249 ++++++++++++++++++ helidon/gradlew.bat | 92 +++++++ helidon/settings.gradle | 1 + helidon/src/main/java/Example.java | 16 ++ 8 files changed, 418 insertions(+) create mode 100644 helidon/.gitignore create mode 100644 helidon/README.md create mode 100644 helidon/build.gradle create mode 100644 helidon/gradle/wrapper/gradle-wrapper.properties create mode 100755 helidon/gradlew create mode 100644 helidon/gradlew.bat create mode 100644 helidon/settings.gradle create mode 100644 helidon/src/main/java/Example.java diff --git a/helidon/.gitignore b/helidon/.gitignore new file mode 100644 index 0000000..f8b92c3 --- /dev/null +++ b/helidon/.gitignore @@ -0,0 +1,2 @@ +.gradle +build diff --git a/helidon/README.md b/helidon/README.md new file mode 100644 index 0000000..6ff08c7 --- /dev/null +++ b/helidon/README.md @@ -0,0 +1,11 @@ +To compile: + +``` +./gradlew clean shadowJar +``` + +to run: + +``` +java -jar build/libs/helidon-1.0-SNAPSHOT-all.jar +``` diff --git a/helidon/build.gradle b/helidon/build.gradle new file mode 100644 index 0000000..9da71ad --- /dev/null +++ b/helidon/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'java' + id 'application' + id 'com.github.johnrengelman.shadow' version '8.1.1' + id 'org.graalvm.buildtools.native' version '0.9.27' +} + +group = 'org.example' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() + gradlePluginPortal() +} + +dependencies { + implementation 'io.helidon.webserver:helidon-webserver:4.0.0-RC1' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +graalvmNative { + binaries { + main { + javaLauncher = javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(21) + vendor = JvmVendorSpec.matching("Oracle Corporation") + } + useFatJar = true + } + } +} + +application { + mainClass = 'Example' +} diff --git a/helidon/gradle/wrapper/gradle-wrapper.properties b/helidon/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3fa8f86 --- /dev/null +++ b/helidon/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/helidon/gradlew b/helidon/gradlew new file mode 100755 index 0000000..1aa94a4 --- /dev/null +++ b/helidon/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/helidon/gradlew.bat b/helidon/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/helidon/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/helidon/settings.gradle b/helidon/settings.gradle new file mode 100644 index 0000000..9074c5d --- /dev/null +++ b/helidon/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'helidon' diff --git a/helidon/src/main/java/Example.java b/helidon/src/main/java/Example.java new file mode 100644 index 0000000..2d8c84f --- /dev/null +++ b/helidon/src/main/java/Example.java @@ -0,0 +1,16 @@ +import io.helidon.webserver.WebServer; + +public class Example { + + public static void main(String[] args) { + WebServer webServer = WebServer.builder() + .routing((rules) -> { + rules.get("/", ((req, res) -> { + res.send("Hello World"); + })); + }) + .port(8080) + .build() + .start(); + } +} From 0db10765f85c75e44e014039a843ed033fd1df58 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 24 Oct 2023 13:48:05 -0400 Subject: [PATCH 239/309] upgrade to version 2.1.28 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f40fd1d..7a05ffa 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.28-SNAPSHOT + 2.1.28 2.15.2 2.0.7 1.4.6 From 444c1100fb8f02c1255c8ad5cda973945d777cbc Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 24 Oct 2023 17:02:18 -0400 Subject: [PATCH 240/309] upgrade to version 2.1.29-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7a05ffa..19afb32 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.28 + 2.1.29-SNAPSHOT 2.15.2 2.0.7 1.4.6 From 7252a0650cdf04d0dd9ed1e402d577684160e109 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 25 Oct 2023 12:03:50 -0400 Subject: [PATCH 241/309] upgrade undertow to 2.3.10.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 19afb32..fcccbf9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.7 1.4.6 4.13.2 - 2.3.7.Final + 2.3.10.Final From 4d51a1e30112e00a45aca78f38f2b50e1a86b7f1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 26 Oct 2023 13:45:37 -0400 Subject: [PATCH 242/309] upgrade jackson to 2.15.3 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index fcccbf9..e057946 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.29-SNAPSHOT - 2.15.2 + 2.15.3 2.0.7 1.4.6 4.13.2 From 13876205cab38748df7a86f2c1a3e592a771ee17 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 19 Nov 2023 11:40:32 -0500 Subject: [PATCH 243/309] upgrade to version 2.1.29 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e057946..7e7a36e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.29-SNAPSHOT + 2.1.29 2.15.3 2.0.7 1.4.6 From 8770b93b19b186c20ebcd7e1f9bb9a2c0fdbdd87 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 19 Nov 2023 19:04:13 -0500 Subject: [PATCH 244/309] upgrade to version 2.1.30-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7e7a36e..41e80b5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.29 + 2.1.30-SNAPSHOT 2.15.3 2.0.7 1.4.6 From 285ad7278cb00a561cd8dc411cf3b1ddb59228a9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 20 Nov 2023 19:32:39 -0500 Subject: [PATCH 245/309] upgrade to version 2.1.30 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 41e80b5..910f40c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.30-SNAPSHOT + 2.1.30 2.15.3 2.0.7 1.4.6 From 5af9b1b08734d04fc1516a55f2e8dff19163e6bd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 21 Nov 2023 07:41:39 -0500 Subject: [PATCH 246/309] upgrade to version 2.1.31-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 910f40c..c2eab2d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.30 + 2.1.31-SNAPSHOT 2.15.3 2.0.7 1.4.6 From fc4acac6d17492a16014a487b71228f365b9e09c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 3 Dec 2023 11:38:40 -0500 Subject: [PATCH 247/309] upgrade slf4j to 2.0.9 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c2eab2d..f43993c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.1.31-SNAPSHOT 2.15.3 - 2.0.7 + 2.0.9 1.4.6 4.13.2 2.3.10.Final From 132bf0581e5472c274ec2ef90812312277e9bec1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 3 Dec 2023 12:07:55 -0500 Subject: [PATCH 248/309] upgrade logback to 1.4.14 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f43993c..17d6267 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.1.31-SNAPSHOT 2.15.3 2.0.9 - 1.4.6 + 1.4.14 4.13.2 2.3.10.Final From d0a6e06448d80418bfdd9e5dd57eef8a81fabdcd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 15 Jan 2024 18:00:24 -0500 Subject: [PATCH 249/309] upgrade to version 2.1.31 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 17d6267..675dd0e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.31-SNAPSHOT + 2.1.31 2.15.3 2.0.9 1.4.14 From bd49ecfbefd2d67d18efdb8a288aa54495561a6b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 16 Jan 2024 21:47:21 -0500 Subject: [PATCH 250/309] upgrade to version 2.1.32-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 675dd0e..c94ad54 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.31 + 2.1.32-SNAPSHOT 2.15.3 2.0.9 1.4.14 From 08054c125a309eddca6722c874b4605cbfd3f4ba Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Feb 2024 15:02:58 -0500 Subject: [PATCH 251/309] upgrade to version 2.1.32 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c94ad54..e304f54 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.32-SNAPSHOT + 2.1.32 2.15.3 2.0.9 1.4.14 From bc22ce67874187a27dd44b1f2f06de96473ff8a1 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Feb 2024 18:55:10 -0500 Subject: [PATCH 252/309] upgrade to version 2.1.33-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e304f54..f6c0944 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.32 + 2.1.33-SNAPSHOT 2.15.3 2.0.9 1.4.14 From bfbb8c69fbba9f66826aa629c28f42fa2a3403af Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 28 Feb 2024 08:26:33 -0500 Subject: [PATCH 253/309] upgrade undertow to 2.3.12.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f6c0944..01ca38f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.9 1.4.14 4.13.2 - 2.3.10.Final + 2.3.12.Final From 2be0c8c9e1260b0f496cf72b96ddc7830b377981 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 31 Mar 2024 13:57:28 -0400 Subject: [PATCH 254/309] upgrade to version 2.1.33 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 01ca38f..c1df76c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.33-SNAPSHOT + 2.1.33 2.15.3 2.0.9 1.4.14 From 5648d33d2778c1435a657413254fe8d7d60aef1b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 31 Mar 2024 22:25:35 -0400 Subject: [PATCH 255/309] upgrade to version 2.1.34-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c1df76c..5d9dc2b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.33 + 2.1.34-SNAPSHOT 2.15.3 2.0.9 1.4.14 From f7e6239a4dc45faa7e96c675169272a98eeaee67 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 22 Apr 2024 08:56:41 -0400 Subject: [PATCH 256/309] upgrade jackson to 2.17.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5d9dc2b..14e9e85 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.34-SNAPSHOT - 2.15.3 + 2.17.0 2.0.9 1.4.14 4.13.2 From 58ff31a1525b15d89981196675f014295ed42402 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 22 Apr 2024 09:01:50 -0400 Subject: [PATCH 257/309] upgrade slf4j to 2.0.13 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 14e9e85..61f57ae 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.1.34-SNAPSHOT 2.17.0 - 2.0.9 + 2.0.13 1.4.14 4.13.2 2.3.12.Final From 32a63f744da7ec35bb6a3b4ee620b597d400c84e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 22 Apr 2024 09:08:16 -0400 Subject: [PATCH 258/309] upgrade logback to 1.5.6 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 61f57ae..8f232c5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.1.34-SNAPSHOT 2.17.0 2.0.13 - 1.4.14 + 1.5.6 4.13.2 2.3.12.Final From 57fbd8ee58011fe89fd437a1dcd99366f156f7c0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 13 Jun 2024 09:01:57 -0400 Subject: [PATCH 259/309] upgrade jackson to 2.17.1 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8f232c5..5b6f5cc 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.34-SNAPSHOT - 2.17.0 + 2.17.1 2.0.13 1.5.6 4.13.2 From d54234b3471ab8da12bd0b262251aab60cc984e3 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Jun 2024 07:47:32 -0400 Subject: [PATCH 260/309] upgrade to version 2.1.34 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5b6f5cc..829b776 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.34-SNAPSHOT + 2.1.34 2.17.1 2.0.13 1.5.6 From afa5fbc7b636bc7e48c82ac6f48bca7fef8a8553 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Jun 2024 11:26:09 -0400 Subject: [PATCH 261/309] upgrade to version 2.1.35-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 829b776..a08ab5e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.34 + 2.1.35-SNAPSHOT 2.17.1 2.0.13 1.5.6 From d1e8bfd8ff0a7e2d4dd6184c41ecb5f5b0021fc3 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 5 Jul 2024 12:09:49 -0400 Subject: [PATCH 262/309] upgrade undertow to 2.3.14.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a08ab5e..ed5630e 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.13 1.5.6 4.13.2 - 2.3.12.Final + 2.3.14.Final From d2612b1ceb9350dd5c382cc4782b7e5059e75177 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 17 Aug 2024 07:44:13 -0400 Subject: [PATCH 263/309] upgrade to version 2.1.35 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ed5630e..997a0e0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.35-SNAPSHOT + 2.1.35 2.17.1 2.0.13 1.5.6 From d880bf1348f0f3d78380cc93c276010f191225a8 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 17 Aug 2024 10:53:00 -0400 Subject: [PATCH 264/309] upgrade to version 2.1.36-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 997a0e0..ef2bfce 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.35 + 2.1.36-SNAPSHOT 2.17.1 2.0.13 1.5.6 From e39374f84770a3a1a60d736941170b90d3638607 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 17 Aug 2024 14:35:16 -0400 Subject: [PATCH 265/309] upgrade undertow to 2.3.15.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ef2bfce..64dd25f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.13 1.5.6 4.13.2 - 2.3.14.Final + 2.3.15.Final From c0269ad152c0ecb893301ce0b4dee208d5be365b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Aug 2024 19:42:34 -0400 Subject: [PATCH 266/309] upgrade to version 2.1.36 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 64dd25f..bd38c2f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.36-SNAPSHOT + 2.1.36 2.17.1 2.0.13 1.5.6 From 300f235f0f8b6f4cc8e55b29fe2ba3fa2d09c7af Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Aug 2024 21:21:16 -0400 Subject: [PATCH 267/309] upgrade to version 2.1.37-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index bd38c2f..a653ce7 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.36 + 2.1.37-SNAPSHOT 2.17.1 2.0.13 1.5.6 From d443486b2250f555476a73045cdafafccd1b05ec Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 27 Aug 2024 21:28:30 -0400 Subject: [PATCH 268/309] upgrade undertow to 2.3.16.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index a653ce7..b27e840 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.13 1.5.6 4.13.2 - 2.3.15.Final + 2.3.16.Final From 84fdb63d9926cc7bd032de3e16467e37b775f03d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Sep 2024 14:22:45 -0400 Subject: [PATCH 269/309] upgrade undertow to 2.3.17.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b27e840..8a910df 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.13 1.5.6 4.13.2 - 2.3.16.Final + 2.3.17.Final From ef504b9f25fcf41f0b756f8f6239804427a0eb0f Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 4 Sep 2024 14:31:11 -0400 Subject: [PATCH 270/309] upgrade jackson to 2.17.2 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8a910df..e49f341 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.37-SNAPSHOT - 2.17.1 + 2.17.2 2.0.13 1.5.6 4.13.2 From 33132a840c50628b9214b3405bf79548a8c9c606 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 20 Sep 2024 14:15:11 -0400 Subject: [PATCH 271/309] upgrade to version 2.1.37 before release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e49f341..eebd4ba 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.37-SNAPSHOT + 2.1.37 2.17.2 2.0.13 1.5.6 From 8c948e0a5386be0e0b98b341cd61878695df0efd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 20 Sep 2024 17:44:04 -0400 Subject: [PATCH 272/309] upgrade to version 2.1.38-SNAPSHOT after release --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index eebd4ba..2f89452 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.37 + 2.1.38-SNAPSHOT 2.17.2 2.0.13 1.5.6 From 890df2dee02aee494e0e21eb8eea4435bee9e2ca Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Oct 2024 10:47:23 -0400 Subject: [PATCH 273/309] upgrade jackson to 2.18.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2f89452..48a3bde 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.38-SNAPSHOT - 2.17.2 + 2.18.0 2.0.13 1.5.6 4.13.2 From 944c1b8b53c8c0fe65d729720b9c8c2ac4aed3d5 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Oct 2024 10:51:57 -0400 Subject: [PATCH 274/309] upgrade jackson to 2.18.0 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 48a3bde..43303ff 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.1.38-SNAPSHOT - 2.18.0 + 2.18.1 2.0.13 1.5.6 4.13.2 From 130a2c92f394e5434e23df81dd68e28e0d57933e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Oct 2024 10:55:20 -0400 Subject: [PATCH 275/309] upgrade slf4j to 2.0.16 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 43303ff..b75ab93 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.1.38-SNAPSHOT 2.18.1 - 2.0.13 + 2.0.16 1.5.6 4.13.2 2.3.17.Final From 2b0064ef909bb96dc559b30df67243ad4531beb6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Oct 2024 11:11:51 -0400 Subject: [PATCH 276/309] upgrade loback to 1.5.12 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b75ab93..b9e2933 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.1.38-SNAPSHOT 2.18.1 2.0.16 - 1.5.6 + 1.5.12 4.13.2 2.3.17.Final From c7fee3c09b1715383009216b8250bf33c9ac024a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 30 Oct 2024 11:15:18 -0400 Subject: [PATCH 277/309] upgrade undertow to 2.3.18 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b9e2933..3725090 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.16 1.5.12 4.13.2 - 2.3.17.Final + 2.3.18.Final From 8b3e1740cad35cafc7d60604bf535aaa920ba662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C5=A9=20=C4=90=C4=83ng=20Ng=E1=BB=8Dc?= Date: Fri, 1 Nov 2024 22:54:32 +0700 Subject: [PATCH 278/309] update Javalin example (#113) * update Javalin example * add HTTS * add Quarkus example --- javalin/pom.xml | 27 +- .../networknt/example/ExampleApplication.java | 91 +---- .../{server.keystore => keystore.jks} | Bin quarkus/.dockerignore | 5 + quarkus/.gitignore | 45 +++ quarkus/README.md | 66 ++++ quarkus/mvnw | 332 ++++++++++++++++++ quarkus/mvnw.cmd | 206 +++++++++++ quarkus/pom.xml | 124 +++++++ quarkus/src/main/docker/Dockerfile.jvm | 97 +++++ quarkus/src/main/docker/Dockerfile.legacy-jar | 93 +++++ quarkus/src/main/docker/Dockerfile.native | 27 ++ .../src/main/docker/Dockerfile.native-micro | 30 ++ .../main/java/org/acme/GreetingResource.java | 16 + .../src/main/resources/application.properties | 4 + quarkus/src/main/resources/keystore.jks | Bin 0 -> 2176 bytes 16 files changed, 1068 insertions(+), 95 deletions(-) rename javalin/src/main/resources/{server.keystore => keystore.jks} (100%) create mode 100644 quarkus/.dockerignore create mode 100644 quarkus/.gitignore create mode 100644 quarkus/README.md create mode 100644 quarkus/mvnw create mode 100644 quarkus/mvnw.cmd create mode 100644 quarkus/pom.xml create mode 100644 quarkus/src/main/docker/Dockerfile.jvm create mode 100644 quarkus/src/main/docker/Dockerfile.legacy-jar create mode 100644 quarkus/src/main/docker/Dockerfile.native create mode 100644 quarkus/src/main/docker/Dockerfile.native-micro create mode 100644 quarkus/src/main/java/org/acme/GreetingResource.java create mode 100644 quarkus/src/main/resources/application.properties create mode 100644 quarkus/src/main/resources/keystore.jks diff --git a/javalin/pom.xml b/javalin/pom.xml index 2408c9d..2ba6512 100644 --- a/javalin/pom.xml +++ b/javalin/pom.xml @@ -18,31 +18,12 @@ io.javalin javalin - 3.7.0 + 6.3.0 - - - ch.qos.logback - logback-classic - 1.2.3 - - - - org.eclipse.jetty.http2 - http2-server - ${jettyVersion} - - - - org.eclipse.jetty - jetty-alpn-conscrypt-server - ${jettyVersion} - - - org.conscrypt - conscrypt-openjdk-uber - 2.4.0 + org.slf4j + slf4j-simple + 2.0.16 diff --git a/javalin/src/main/java/com/networknt/example/ExampleApplication.java b/javalin/src/main/java/com/networknt/example/ExampleApplication.java index 6f7d55c..301feff 100644 --- a/javalin/src/main/java/com/networknt/example/ExampleApplication.java +++ b/javalin/src/main/java/com/networknt/example/ExampleApplication.java @@ -1,88 +1,35 @@ package com.networknt.example; import io.javalin.Javalin; -import io.javalin.http.Context; -import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; -import org.eclipse.jetty.http2.HTTP2Cipher; -import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory; -import org.eclipse.jetty.server.HttpConfiguration; -import org.eclipse.jetty.server.HttpConnectionFactory; -import org.eclipse.jetty.server.SecureRequestCustomizer; -import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.util.ssl.SslContextFactory; public class ExampleApplication { public static void main(String[] args) { - Javalin app = Javalin.create(config -> { - // Manual Jetty configuration required for SSL/TLS/HTTP2 - config.server(ExampleApplication::createServer); - }).start(); - app.get("/", ExampleApplication::helloWorld); - } - - public static void helloWorld(Context ctx) { - ctx.result("Hello world!"); - } - - private static Server createServer() { - Server server = new Server(); - - // HTTP - ServerConnector connector = new ServerConnector(server); - connector.setPort(8080); - server.addConnector(connector); - - // HTTPS - ServerConnector sslConnector = new ServerConnector(server, getSslContextFactory()); - sslConnector.setPort(8443); - server.addConnector(sslConnector); - - - // HTTP/2 - HttpConfiguration httpsConfig = createHttpsConfig(); - - SslContextFactory sslContextFactory = getSslContextFactory(); - sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR); - sslContextFactory.setProvider("Conscrypt"); - - HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(httpsConfig); - - HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpsConfig); - ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory(); - alpn.setDefaultProtocol(httpConnectionFactory.getProtocol()); - - SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol()); - - ServerConnector http2Connector = new ServerConnector( - server, - ssl, - alpn, - h2, - httpConnectionFactory - ); - http2Connector.setPort(9443); - server.addConnector(http2Connector); - - return server; - } + // Get example from https://github.com/javalin/javalin/blob/master/javalin/src/test/java/io/javalin/examples/HelloWorldSecure.java#L22-L30 + Javalin.create(config -> { + config.jetty.addConnector((server, httpConfiguration) -> { + ServerConnector sslConnector = new ServerConnector(server, getSslContextFactory()); + sslConnector.setPort(443); + return sslConnector; + }); + config.jetty.addConnector((server, httpConfiguration) -> { + ServerConnector connector = new ServerConnector(server); + connector.setPort(80); + return connector; + }); + + }) + .start() + .get("/", ctx -> ctx.result("Hello World")); - private static HttpConfiguration createHttpsConfig() { - HttpConfiguration httpConfig = new HttpConfiguration(); - httpConfig.setSendXPoweredBy(false); - httpConfig.setSendServerVersion(false); - httpConfig.setSecureScheme("https"); - httpConfig.addCustomizer(new SecureRequestCustomizer()); - return httpConfig; } - private static SslContextFactory getSslContextFactory() { - SslContextFactory sslContextFactory = new SslContextFactory.Server(); - sslContextFactory.setKeyStorePath(ExampleApplication.class.getResource("/server.keystore").toExternalForm()); + private static SslContextFactory.Server getSslContextFactory() { + SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); + sslContextFactory.setKeyStorePath(ExampleApplication.class.getResource("/keystore.jks").toExternalForm()); sslContextFactory.setKeyStorePassword("password"); - sslContextFactory.setUseCipherSuitesOrder(true); return sslContextFactory; } } diff --git a/javalin/src/main/resources/server.keystore b/javalin/src/main/resources/keystore.jks similarity index 100% rename from javalin/src/main/resources/server.keystore rename to javalin/src/main/resources/keystore.jks diff --git a/quarkus/.dockerignore b/quarkus/.dockerignore new file mode 100644 index 0000000..94810d0 --- /dev/null +++ b/quarkus/.dockerignore @@ -0,0 +1,5 @@ +* +!target/*-runner +!target/*-runner.jar +!target/lib/* +!target/quarkus-app/* \ No newline at end of file diff --git a/quarkus/.gitignore b/quarkus/.gitignore new file mode 100644 index 0000000..91a800a --- /dev/null +++ b/quarkus/.gitignore @@ -0,0 +1,45 @@ +#Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties +.flattened-pom.xml + +# Eclipse +.project +.classpath +.settings/ +bin/ + +# IntelliJ +.idea +*.ipr +*.iml +*.iws + +# NetBeans +nb-configuration.xml + +# Visual Studio Code +.vscode +.factorypath + +# OSX +.DS_Store + +# Vim +*.swp +*.swo + +# patch +*.orig +*.rej + +# Local environment +.env + +# Plugin directory +/.quarkus/cli/plugins/ +# TLS Certificates +.certs/ diff --git a/quarkus/README.md b/quarkus/README.md new file mode 100644 index 0000000..65f9511 --- /dev/null +++ b/quarkus/README.md @@ -0,0 +1,66 @@ +# code-with-quarkus + +This project uses Quarkus, the Supersonic Subatomic Java Framework. + +If you want to learn more about Quarkus, please visit its website: . + +## Running the application in dev mode + +You can run your application in dev mode that enables live coding using: + +```shell script +./mvnw compile quarkus:dev +``` + +> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at . + +## Packaging and running the application + +The application can be packaged using: + +```shell script +./mvnw package +``` + +It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory. +Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory. + +The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`. + +If you want to build an _über-jar_, execute the following command: + +```shell script +./mvnw package -Dquarkus.package.jar.type=uber-jar +``` + +The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`. + +## Creating a native executable + +You can create a native executable using: + +```shell script +./mvnw package -Dnative +``` + +Or, if you don't have GraalVM installed, you can run the native executable build in a container using: + +```shell script +./mvnw package -Dnative -Dquarkus.native.container-build=true +``` + +You can then execute your native executable with: `./target/code-with-quarkus-1.0.0-SNAPSHOT-runner` + +If you want to learn more about building native executables, please consult . + +## Related Guides + +- RESTEasy Classic ([guide](https://quarkus.io/guides/resteasy)): REST endpoint framework implementing Jakarta REST and more + +## Provided Code + +### RESTEasy JAX-RS + +Easily start your RESTful Web Services + +[Related guide section...](https://quarkus.io/guides/getting-started#the-jax-rs-resources) diff --git a/quarkus/mvnw b/quarkus/mvnw new file mode 100644 index 0000000..5e9618c --- /dev/null +++ b/quarkus/mvnw @@ -0,0 +1,332 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF 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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ]; then + + if [ -f /usr/local/etc/mavenrc ]; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ]; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ]; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false +darwin=false +mingw=false +case "$(uname)" in +CYGWIN*) cygwin=true ;; +MINGW*) mingw=true ;; +Darwin*) + darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)" + export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home" + export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ]; then + if [ -r /etc/gentoo-release ]; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin; then + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] \ + && JAVA_HOME="$( + cd "$JAVA_HOME" || ( + echo "cannot cd into $JAVA_HOME." >&2 + exit 1 + ) + pwd + )" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "$javaExecutable" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin; then + javaHome="$(dirname "$javaExecutable")" + javaExecutable="$(cd "$javaHome" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "$javaExecutable")" + fi + javaHome="$(dirname "$javaExecutable")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ]; then + if [ -n "$JAVA_HOME" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$( + \unset -f command 2>/dev/null + \command -v java + )" + fi +fi + +if [ ! -x "$JAVACMD" ]; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ]; then + echo "Warning: JAVA_HOME environment variable is not set." >&2 +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ]; then + echo "Path not specified to find_maven_basedir" >&2 + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ]; do + if [ -d "$wdir"/.mvn ]; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$( + cd "$wdir/.." || exit 1 + pwd + ) + fi + # end of workaround + done + printf '%s' "$( + cd "$basedir" || exit 1 + pwd + )" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' <"$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1 +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in wrapperUrl) + wrapperUrl="$safeValue" + break + ;; + esac + done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget >/dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl >/dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in wrapperSha256Sum) + wrapperSha256Sum=$value + break + ;; + esac +done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c >/dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c >/dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] \ + && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/quarkus/mvnw.cmd b/quarkus/mvnw.cmd new file mode 100644 index 0000000..4136715 --- /dev/null +++ b/quarkus/mvnw.cmd @@ -0,0 +1,206 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. >&2 +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. >&2 +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. >&2 +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. >&2 +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash;"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Error 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Error 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Error 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/quarkus/pom.xml b/quarkus/pom.xml new file mode 100644 index 0000000..0e752d8 --- /dev/null +++ b/quarkus/pom.xml @@ -0,0 +1,124 @@ + + + 4.0.0 + org.acme + code-with-quarkus + 1.0.0-SNAPSHOT + + + 3.13.0 + 21 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 3.16.1 + true + 3.5.0 + + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + native-image-agent + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + true + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + native + + + + false + true + + + + diff --git a/quarkus/src/main/docker/Dockerfile.jvm b/quarkus/src/main/docker/Dockerfile.jvm new file mode 100644 index 0000000..3857821 --- /dev/null +++ b/quarkus/src/main/docker/Dockerfile.jvm @@ -0,0 +1,97 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/code-with-quarkus-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-21:1.20 + +ENV LANGUAGE='en_US:en' + + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 target/quarkus-app/*.jar /deployments/ +COPY --chown=185 target/quarkus-app/app/ /deployments/app/ +COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] + diff --git a/quarkus/src/main/docker/Dockerfile.legacy-jar b/quarkus/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 0000000..7eb464a --- /dev/null +++ b/quarkus/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,93 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package -Dquarkus.package.jar.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/code-with-quarkus-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-21:1.20 + +ENV LANGUAGE='en_US:en' + + +COPY target/lib/* /deployments/lib/ +COPY target/*-runner.jar /deployments/quarkus-run.jar + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] diff --git a/quarkus/src/main/docker/Dockerfile.native b/quarkus/src/main/docker/Dockerfile.native new file mode 100644 index 0000000..60b0f9a --- /dev/null +++ b/quarkus/src/main/docker/Dockerfile.native @@ -0,0 +1,27 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus/src/main/docker/Dockerfile.native-micro b/quarkus/src/main/docker/Dockerfile.native-micro new file mode 100644 index 0000000..373286b --- /dev/null +++ b/quarkus/src/main/docker/Dockerfile.native-micro @@ -0,0 +1,30 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM quay.io/quarkus/quarkus-micro-image:2.0 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus/src/main/java/org/acme/GreetingResource.java b/quarkus/src/main/java/org/acme/GreetingResource.java new file mode 100644 index 0000000..00c9def --- /dev/null +++ b/quarkus/src/main/java/org/acme/GreetingResource.java @@ -0,0 +1,16 @@ +package org.acme; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/") +public class GreetingResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello World"; + } +} diff --git a/quarkus/src/main/resources/application.properties b/quarkus/src/main/resources/application.properties new file mode 100644 index 0000000..ee283bd --- /dev/null +++ b/quarkus/src/main/resources/application.properties @@ -0,0 +1,4 @@ +# Enable SSL +quarkus.http.ssl-port=443 +quarkus.http.ssl.certificate.key-store-file=keystore.jks +quarkus.http.ssl.certificate.key-store-password=password \ No newline at end of file diff --git a/quarkus/src/main/resources/keystore.jks b/quarkus/src/main/resources/keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..feab9b6d2441e9f380b85fbbb1b8cd53d9177129 GIT binary patch literal 2176 zcmcJQ`8U*y8^`A}D>GvqOqPo*S?$@X|h)u+m{K0Q3>f=_k6$S+<)Nv!~2KVdCqg5^SsadJkS2>{wfFr0{;~7x8O7{ zYN!|WCmK?S9u^=F41$k?{=f^uk-x(MD4-4&0RR{X8VCK9z#|ovEiPw-FRBbz`aLWT zUl|mhVt$pPs-CVJ4a)Cs^xHRzKx&1$iFLqh#!p*gZogOTQJsJ+FT8ao<-W}D7T3A1 z+`8B%FD{!Et^Y$8fui)6e`a3>6=!&0jSAa22`*Wui&{lpZ55wY(F@1noEByNA?>IXcR%or zXYp0q`$ZK|8mZ|yw3oo_5$9bw{%_Yz1Y**McRgkL)KFP%wP9(lf^+0zhV}8_jb_w% zqxopkJuoZTSFl#*t({{WJ9!iqO?OR>A!oKwr4zUthiaFj<9+_f+jM56YpHxUTgOuT zy;{aaj<4F^B7Mkv(7LkL{6^_*iPJ)+hUwJIvG=?!KRdMuKb&M>nk5hgnbZj{r?r<{ zWl;O>Es=Vi`LwSoD~XyK)N1!L&sZ~YH1gAbaeH16R%+PHGIuL9a%23s(=-y!*`W(aJ zNxWo#eMHVY+W3}AlMvpFVeU6-js5)UM<4ZbWa?A{a)clC$0pjxR?l-R8{cbjRT2jMWRV{;S;aOK7Dp99?VD zZt8xV!OkLmfYTze@JQ;Ya5i&>17I8?9mz57n^y|4iTUmkT^~cgAT5aWmm&@F?>?+pnofT6j2%_?#>mc_TQ9YF} z>>k#^#ZGbVd1$e1zhJ%!_hRYev?YZCwch*c#^{VwdUKF3>@jVw~p6o;PmmCmW!HPqddoC!)$BEe?K&$(4V zgf>qiMy_`}%`CA@WDU%}>YR{cc8}803gnlP5&t1>N=308PJO(p*F|HKC1T2-4z$XiY-^0M+qs(Vku8l~HFUjRdqZQR0o$gx zItAb;fwF66AGYczAzA1x`kLgs+`N%s@}YV|l#LLPB=05AB%+oE zIp9l0yxg*B&d33|oC}6+i67s*w(1=*>9MB-eA3T(46bSzJK|n27lJ7F+EKoJN{D~Z zlA*D4^I8HhsSaYe`ntstWtt0vn9<+U*_|^7ow6?KNw;&v;$70W?<2{q66gioYV+JJ zhm-};V@Fb}AKfV3%z;N%AQF(h^$O&Hs000F8;hhO6JU<-b0EJ_~q~ioZJo*># zVPKRHw-7Ia03P*=5g6!+%OPO|G#>d2kr;>#)%$;)C=A%ffgp+({#Alt`2B-C-28ol zXd!r6tN=k9PaxtCy-SZ z!EN?3?Wm9F2BSCktXa|g2H&w+QAgRdvx>o_ZL(t=aI%WWee@r99=A#W literal 0 HcmV?d00001 From b00e1d78dd8ff8e217be9bb1ebb26187a75a1539 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 23 Nov 2024 14:55:41 -0500 Subject: [PATCH 279/309] upgrade to version 2.2.0-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3725090..bda02a2 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.1.38-SNAPSHOT + 2.2.0-SNAPSHOT 2.18.1 2.0.16 1.5.12 From a1d40c1d3f9e19c98e238f3911438ffe4a8c8493 Mon Sep 17 00:00:00 2001 From: Jes Bak Hansen Date: Sat, 7 Dec 2024 13:55:56 +0100 Subject: [PATCH 280/309] Update .NET benchmark from netcoreapp1.1 to net9.0 (#114) --- dotnet-core/.gitignore | 9 --- dotnet-core/hello-world/Program.cs | 30 -------- dotnet-core/hello-world/README.md | 21 ------ dotnet-core/hello-world/dotnet-core.csproj | 11 --- dotnet-core/scenario1/README.md | 34 --------- .../scenario1/apiA/Controllers/ApiA.cs | 14 ---- .../scenario1/apiA/Controllers/Http.cs | 9 --- .../scenario1/apiA/Controllers/Https.cs | 10 --- dotnet-core/scenario1/apiA/Program.cs | 60 ---------------- dotnet-core/scenario1/apiA/apiA.csproj | 10 --- .../apiA/appsettings.Development.json | 10 --- dotnet-core/scenario1/apiA/appsettings.json | 9 --- dotnet-core/scenario1/apiA/certificate.pfx | Bin 2589 -> 0 bytes dotnet-core/scenario2/README.md | 44 ------------ .../scenario2/apiA/Controllers/ApiA.cs | 45 ------------ .../scenario2/apiA/Controllers/Http.cs | 29 -------- .../scenario2/apiA/Controllers/Https.cs | 30 -------- dotnet-core/scenario2/apiA/Program.cs | 58 ---------------- dotnet-core/scenario2/apiA/apiA.csproj | 10 --- dotnet-core/scenario2/apiA/appsettings.json | 14 ---- dotnet-core/scenario2/apiA/certificate.pfx | Bin 2589 -> 0 bytes .../scenario2/apiB/Controllers/ApiB.cs | 45 ------------ .../scenario2/apiB/Controllers/Http.cs | 29 -------- .../scenario2/apiB/Controllers/Https.cs | 30 -------- dotnet-core/scenario2/apiB/Program.cs | 58 ---------------- dotnet-core/scenario2/apiB/apiB.csproj | 10 --- dotnet-core/scenario2/apiB/appsettings.json | 14 ---- dotnet-core/scenario2/apiB/certificate.pfx | Bin 2589 -> 0 bytes .../scenario2/apiC/Controllers/Http.cs | 15 ---- .../scenario2/apiC/Controllers/Https.cs | 15 ---- dotnet-core/scenario2/apiC/Program.cs | 58 ---------------- dotnet-core/scenario2/apiC/apiC.csproj | 10 --- dotnet-core/scenario2/apiC/appsettings.json | 10 --- dotnet-core/scenario2/apiC/certificate.pfx | Bin 2589 -> 0 bytes dotnet-core/scenario3/README.md | 46 ------------- .../scenario3/apiA/Controllers/ApiA.cs | 48 ------------- .../scenario3/apiA/Controllers/Http.cs | 31 --------- .../scenario3/apiA/Controllers/Https.cs | 32 --------- dotnet-core/scenario3/apiA/Program.cs | 58 ---------------- dotnet-core/scenario3/apiA/apiA.csproj | 10 --- dotnet-core/scenario3/apiA/appsettings.json | 16 ----- dotnet-core/scenario3/apiA/certificate.pfx | Bin 2589 -> 0 bytes .../scenario3/apiB/Controllers/Http.cs | 14 ---- .../scenario3/apiB/Controllers/Https.cs | 16 ----- dotnet-core/scenario3/apiB/Program.cs | 58 ---------------- dotnet-core/scenario3/apiB/apiB.csproj | 10 --- dotnet-core/scenario3/apiB/appsettings.json | 11 --- dotnet-core/scenario3/apiB/certificate.pfx | Bin 2589 -> 0 bytes .../scenario3/apiC/Controllers/Http.cs | 14 ---- .../scenario3/apiC/Controllers/Https.cs | 15 ---- dotnet-core/scenario3/apiC/Program.cs | 58 ---------------- dotnet-core/scenario3/apiC/apiC.csproj | 10 --- dotnet-core/scenario3/apiC/appsettings.json | 10 --- dotnet-core/scenario3/apiC/certificate.pfx | Bin 2589 -> 0 bytes dotnet/Dotnet.sln | 65 ++++++++++++++++++ dotnet/hello-world/Program.cs | 4 ++ .../Properties/launchSettings.json | 15 ++++ dotnet/hello-world/README.md | 11 +++ dotnet/hello-world/appsettings.json | 16 +++++ dotnet/hello-world/hello-world.csproj | 12 ++++ dotnet/scenario1/Program.cs | 11 +++ .../scenario1/Properties/launchSettings.json | 15 ++++ dotnet/scenario1/README-Scenario1.md | 26 +++++++ dotnet/scenario1/WebServerConfig.cs | 15 ++++ dotnet/scenario1/appsettings.json | 24 +++++++ dotnet/scenario1/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario1/scenario1.csproj | 17 +++++ dotnet/scenario2/ApiA/CallApiB.cs | 25 +++++++ dotnet/scenario2/ApiA/Program.cs | 10 +++ .../ApiA/Properties/launchSettings.json | 15 ++++ dotnet/scenario2/ApiA/Scenario2-ApiA.csproj | 18 +++++ dotnet/scenario2/ApiA/WebServerConfig.cs | 15 ++++ dotnet/scenario2/ApiA/appsettings.json | 24 +++++++ dotnet/scenario2/ApiA/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario2/ApiB/CallApiC.cs | 25 +++++++ dotnet/scenario2/ApiB/Program.cs | 10 +++ .../ApiB/Properties/launchSettings.json | 15 ++++ dotnet/scenario2/ApiB/Scenario2-ApiB.csproj | 18 +++++ dotnet/scenario2/ApiB/WebServerConfig.cs | 15 ++++ dotnet/scenario2/ApiB/appsettings.json | 24 +++++++ dotnet/scenario2/ApiB/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario2/ApiC/Program.cs | 11 +++ .../ApiC/Properties/launchSettings.json | 15 ++++ dotnet/scenario2/ApiC/Scenario2-ApiC.csproj | 18 +++++ dotnet/scenario2/ApiC/WebServerConfig.cs | 15 ++++ dotnet/scenario2/ApiC/appsettings.json | 24 +++++++ dotnet/scenario2/ApiC/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario2/README-Scenario2.md | 32 +++++++++ dotnet/scenario3/ApiA/CallApiB.cs | 21 ++++++ dotnet/scenario3/ApiA/CallApiC.cs | 29 ++++++++ dotnet/scenario3/ApiA/CallApisInParallel.cs | 21 ++++++ dotnet/scenario3/ApiA/Program.cs | 10 +++ .../ApiA/Properties/launchSettings.json | 15 ++++ dotnet/scenario3/ApiA/Scenario3-ApiA.csproj | 18 +++++ dotnet/scenario3/ApiA/WebServerConfig.cs | 15 ++++ dotnet/scenario3/ApiA/appsettings.json | 24 +++++++ dotnet/scenario3/ApiA/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario3/ApiB/Program.cs | 11 +++ .../ApiB/Properties/launchSettings.json | 15 ++++ dotnet/scenario3/ApiB/Scenario3-ApiB.csproj | 18 +++++ dotnet/scenario3/ApiB/WebServerConfig.cs | 15 ++++ dotnet/scenario3/ApiB/appsettings.json | 24 +++++++ dotnet/scenario3/ApiB/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario3/ApiC/Program.cs | 22 ++++++ .../ApiC/Properties/launchSettings.json | 15 ++++ dotnet/scenario3/ApiC/Scenario3-ApiC.csproj | 18 +++++ dotnet/scenario3/ApiC/WebServerConfig.cs | 10 +++ dotnet/scenario3/ApiC/appsettings.json | 24 +++++++ dotnet/scenario3/ApiC/certificate.pfx | Bin 0 -> 2381 bytes dotnet/scenario3/README-Scenario3.md | 31 +++++++++ 110 files changed, 916 insertions(+), 1208 deletions(-) delete mode 100644 dotnet-core/.gitignore delete mode 100644 dotnet-core/hello-world/Program.cs delete mode 100644 dotnet-core/hello-world/README.md delete mode 100644 dotnet-core/hello-world/dotnet-core.csproj delete mode 100644 dotnet-core/scenario1/README.md delete mode 100644 dotnet-core/scenario1/apiA/Controllers/ApiA.cs delete mode 100644 dotnet-core/scenario1/apiA/Controllers/Http.cs delete mode 100644 dotnet-core/scenario1/apiA/Controllers/Https.cs delete mode 100644 dotnet-core/scenario1/apiA/Program.cs delete mode 100644 dotnet-core/scenario1/apiA/apiA.csproj delete mode 100644 dotnet-core/scenario1/apiA/appsettings.Development.json delete mode 100644 dotnet-core/scenario1/apiA/appsettings.json delete mode 100644 dotnet-core/scenario1/apiA/certificate.pfx delete mode 100644 dotnet-core/scenario2/README.md delete mode 100644 dotnet-core/scenario2/apiA/Controllers/ApiA.cs delete mode 100644 dotnet-core/scenario2/apiA/Controllers/Http.cs delete mode 100644 dotnet-core/scenario2/apiA/Controllers/Https.cs delete mode 100644 dotnet-core/scenario2/apiA/Program.cs delete mode 100644 dotnet-core/scenario2/apiA/apiA.csproj delete mode 100644 dotnet-core/scenario2/apiA/appsettings.json delete mode 100644 dotnet-core/scenario2/apiA/certificate.pfx delete mode 100644 dotnet-core/scenario2/apiB/Controllers/ApiB.cs delete mode 100644 dotnet-core/scenario2/apiB/Controllers/Http.cs delete mode 100644 dotnet-core/scenario2/apiB/Controllers/Https.cs delete mode 100644 dotnet-core/scenario2/apiB/Program.cs delete mode 100644 dotnet-core/scenario2/apiB/apiB.csproj delete mode 100644 dotnet-core/scenario2/apiB/appsettings.json delete mode 100644 dotnet-core/scenario2/apiB/certificate.pfx delete mode 100644 dotnet-core/scenario2/apiC/Controllers/Http.cs delete mode 100644 dotnet-core/scenario2/apiC/Controllers/Https.cs delete mode 100644 dotnet-core/scenario2/apiC/Program.cs delete mode 100644 dotnet-core/scenario2/apiC/apiC.csproj delete mode 100644 dotnet-core/scenario2/apiC/appsettings.json delete mode 100644 dotnet-core/scenario2/apiC/certificate.pfx delete mode 100644 dotnet-core/scenario3/README.md delete mode 100644 dotnet-core/scenario3/apiA/Controllers/ApiA.cs delete mode 100644 dotnet-core/scenario3/apiA/Controllers/Http.cs delete mode 100644 dotnet-core/scenario3/apiA/Controllers/Https.cs delete mode 100644 dotnet-core/scenario3/apiA/Program.cs delete mode 100644 dotnet-core/scenario3/apiA/apiA.csproj delete mode 100644 dotnet-core/scenario3/apiA/appsettings.json delete mode 100644 dotnet-core/scenario3/apiA/certificate.pfx delete mode 100644 dotnet-core/scenario3/apiB/Controllers/Http.cs delete mode 100644 dotnet-core/scenario3/apiB/Controllers/Https.cs delete mode 100644 dotnet-core/scenario3/apiB/Program.cs delete mode 100644 dotnet-core/scenario3/apiB/apiB.csproj delete mode 100644 dotnet-core/scenario3/apiB/appsettings.json delete mode 100644 dotnet-core/scenario3/apiB/certificate.pfx delete mode 100644 dotnet-core/scenario3/apiC/Controllers/Http.cs delete mode 100644 dotnet-core/scenario3/apiC/Controllers/Https.cs delete mode 100644 dotnet-core/scenario3/apiC/Program.cs delete mode 100644 dotnet-core/scenario3/apiC/apiC.csproj delete mode 100644 dotnet-core/scenario3/apiC/appsettings.json delete mode 100644 dotnet-core/scenario3/apiC/certificate.pfx create mode 100644 dotnet/Dotnet.sln create mode 100644 dotnet/hello-world/Program.cs create mode 100644 dotnet/hello-world/Properties/launchSettings.json create mode 100644 dotnet/hello-world/README.md create mode 100644 dotnet/hello-world/appsettings.json create mode 100644 dotnet/hello-world/hello-world.csproj create mode 100644 dotnet/scenario1/Program.cs create mode 100644 dotnet/scenario1/Properties/launchSettings.json create mode 100644 dotnet/scenario1/README-Scenario1.md create mode 100644 dotnet/scenario1/WebServerConfig.cs create mode 100644 dotnet/scenario1/appsettings.json create mode 100644 dotnet/scenario1/certificate.pfx create mode 100644 dotnet/scenario1/scenario1.csproj create mode 100644 dotnet/scenario2/ApiA/CallApiB.cs create mode 100644 dotnet/scenario2/ApiA/Program.cs create mode 100644 dotnet/scenario2/ApiA/Properties/launchSettings.json create mode 100644 dotnet/scenario2/ApiA/Scenario2-ApiA.csproj create mode 100644 dotnet/scenario2/ApiA/WebServerConfig.cs create mode 100644 dotnet/scenario2/ApiA/appsettings.json create mode 100644 dotnet/scenario2/ApiA/certificate.pfx create mode 100644 dotnet/scenario2/ApiB/CallApiC.cs create mode 100644 dotnet/scenario2/ApiB/Program.cs create mode 100644 dotnet/scenario2/ApiB/Properties/launchSettings.json create mode 100644 dotnet/scenario2/ApiB/Scenario2-ApiB.csproj create mode 100644 dotnet/scenario2/ApiB/WebServerConfig.cs create mode 100644 dotnet/scenario2/ApiB/appsettings.json create mode 100644 dotnet/scenario2/ApiB/certificate.pfx create mode 100644 dotnet/scenario2/ApiC/Program.cs create mode 100644 dotnet/scenario2/ApiC/Properties/launchSettings.json create mode 100644 dotnet/scenario2/ApiC/Scenario2-ApiC.csproj create mode 100644 dotnet/scenario2/ApiC/WebServerConfig.cs create mode 100644 dotnet/scenario2/ApiC/appsettings.json create mode 100644 dotnet/scenario2/ApiC/certificate.pfx create mode 100644 dotnet/scenario2/README-Scenario2.md create mode 100644 dotnet/scenario3/ApiA/CallApiB.cs create mode 100644 dotnet/scenario3/ApiA/CallApiC.cs create mode 100644 dotnet/scenario3/ApiA/CallApisInParallel.cs create mode 100644 dotnet/scenario3/ApiA/Program.cs create mode 100644 dotnet/scenario3/ApiA/Properties/launchSettings.json create mode 100644 dotnet/scenario3/ApiA/Scenario3-ApiA.csproj create mode 100644 dotnet/scenario3/ApiA/WebServerConfig.cs create mode 100644 dotnet/scenario3/ApiA/appsettings.json create mode 100644 dotnet/scenario3/ApiA/certificate.pfx create mode 100644 dotnet/scenario3/ApiB/Program.cs create mode 100644 dotnet/scenario3/ApiB/Properties/launchSettings.json create mode 100644 dotnet/scenario3/ApiB/Scenario3-ApiB.csproj create mode 100644 dotnet/scenario3/ApiB/WebServerConfig.cs create mode 100644 dotnet/scenario3/ApiB/appsettings.json create mode 100644 dotnet/scenario3/ApiB/certificate.pfx create mode 100644 dotnet/scenario3/ApiC/Program.cs create mode 100644 dotnet/scenario3/ApiC/Properties/launchSettings.json create mode 100644 dotnet/scenario3/ApiC/Scenario3-ApiC.csproj create mode 100644 dotnet/scenario3/ApiC/WebServerConfig.cs create mode 100644 dotnet/scenario3/ApiC/appsettings.json create mode 100644 dotnet/scenario3/ApiC/certificate.pfx create mode 100644 dotnet/scenario3/README-Scenario3.md diff --git a/dotnet-core/.gitignore b/dotnet-core/.gitignore deleted file mode 100644 index 70e7072..0000000 --- a/dotnet-core/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -obj/ -bin/ -*.nuget.g.props -*.nuget.g.targets -*.suo -*.csproj.user -launchSettings.json -*.bak - diff --git a/dotnet-core/hello-world/Program.cs b/dotnet-core/hello-world/Program.cs deleted file mode 100644 index 173b5b9..0000000 --- a/dotnet-core/hello-world/Program.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; - -namespace dotnet_core -{ - public class Program - { - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .UseKestrel() - .UseStartup() - .Build(); - - host.Run(); - } - } - - public class Configuration - { - public void Configure(IApplicationBuilder app) - { - app.Run(async (context) => - { - await context.Response.WriteAsync("Hello World!"); - }); - } - } -} diff --git a/dotnet-core/hello-world/README.md b/dotnet-core/hello-world/README.md deleted file mode 100644 index f763bf2..0000000 --- a/dotnet-core/hello-world/README.md +++ /dev/null @@ -1,21 +0,0 @@ -ASP.NET CORE -============ -This is a minimal .NET Core ASP.NET core Hello World! - -Please be aware that this does not do any routing, so all urls will be -matched. This is purely in order to do the absolutely minimal work in -order to return 'Hello World!'. - -Restore dependencies: ---------------------- -``` -dotnet restore -``` - -Run application: ----------------- -``` -dotnet run -c Release -``` - -Server will be online @ http://localhost:5000 \ No newline at end of file diff --git a/dotnet-core/hello-world/dotnet-core.csproj b/dotnet-core/hello-world/dotnet-core.csproj deleted file mode 100644 index a5acd1c..0000000 --- a/dotnet-core/hello-world/dotnet-core.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - netcoreapp1.1 - - - - - - - diff --git a/dotnet-core/scenario1/README.md b/dotnet-core/scenario1/README.md deleted file mode 100644 index 898dad2..0000000 --- a/dotnet-core/scenario1/README.md +++ /dev/null @@ -1,34 +0,0 @@ -Routing in ASP.NET Core -======================= - -This is a simple implementation scenario 1 of the spec from https://networknt.github.io/microservices-framework-benchmark/specification/ - -In the 'Hello World!' app sample found in the hello-world folder we focused on a minimal ASP.NET Core app that only did the bare mininum in order to return 'Hello World!' to the caller. This meant that we could do away with large parts of what is traditionally present in ASP.NET MVC applications. One of the things we sacrificed on the alter of simplicity was the ability to do routing (in the traditional MVC sense). - -In this sample we look at a slightly more realistic scenario where we still use the Kestrel web server from ASP.NET Core, but this time we use more of the MVC framework. This allows us to use controllers with a Routing attribute which describes what requests should be handled where. Two controllers are present, one which handles the http protocol and one which handles https. - - -Restore dependencies: ------- -Getting the app ready to run should be as simple as opening a console in the apiA folder and executing -``` -dotnet restore -``` - -Run the app: ------- -You can now run the app by opening a console in the apiA folder and executing -``` -dotnet run -c Release -``` - -The app should then print the following in the console -``` -Hosting environment: Production -Content root path: ....microservices-framework-benchmark/dotnet-core/scenario1/apiA -Now listening on: http://*:7000 -Now listening on: https://*:7441 -Application started. Press Ctrl+C to shut down. -``` - -You can then call the app using a browser, Postman or another tool at http://localhost:7000/text for http and https://localhost:7441/tls/text for a https request. The certificate is, of course, a self-signed cert. \ No newline at end of file diff --git a/dotnet-core/scenario1/apiA/Controllers/ApiA.cs b/dotnet-core/scenario1/apiA/Controllers/ApiA.cs deleted file mode 100644 index 8776a50..0000000 --- a/dotnet-core/scenario1/apiA/Controllers/ApiA.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace ApiA.Controllers -{ - public abstract class ApiA : Controller - { - [HttpGet] - public string Get() - { - return "Hello World!"; - } - - } -} diff --git a/dotnet-core/scenario1/apiA/Controllers/Http.cs b/dotnet-core/scenario1/apiA/Controllers/Http.cs deleted file mode 100644 index 8ca0a82..0000000 --- a/dotnet-core/scenario1/apiA/Controllers/Http.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace ApiA.Controllers -{ - [Route("text")] - public class Http : ApiA - { - } -} \ No newline at end of file diff --git a/dotnet-core/scenario1/apiA/Controllers/Https.cs b/dotnet-core/scenario1/apiA/Controllers/Https.cs deleted file mode 100644 index 51df07b..0000000 --- a/dotnet-core/scenario1/apiA/Controllers/Https.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace ApiA.Controllers -{ - [Route("tls/text")] - [RequireHttps] - public class Https : ApiA - { - } -} \ No newline at end of file diff --git a/dotnet-core/scenario1/apiA/Program.cs b/dotnet-core/scenario1/apiA/Program.cs deleted file mode 100644 index 16c801c..0000000 --- a/dotnet-core/scenario1/apiA/Program.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace ApiA -{ - public class Program - { - public static void Main(string[] args) - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - var host = new WebHostBuilder() - .UseKestrel(options => - { - // Here we read the certificate filename and and password from the appsettings config file. - // Please never store passwords in a config file for real apps! - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario1/apiA/apiA.csproj b/dotnet-core/scenario1/apiA/apiA.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario1/apiA/apiA.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario1/apiA/appsettings.Development.json b/dotnet-core/scenario1/apiA/appsettings.Development.json deleted file mode 100644 index fa8ce71..0000000 --- a/dotnet-core/scenario1/apiA/appsettings.Development.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - } -} diff --git a/dotnet-core/scenario1/apiA/appsettings.json b/dotnet-core/scenario1/apiA/appsettings.json deleted file mode 100644 index a56896d..0000000 --- a/dotnet-core/scenario1/apiA/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Urls": [ - "http://*:7000", - "https://*:7441" - ], - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2" -} \ No newline at end of file diff --git a/dotnet-core/scenario1/apiA/certificate.pfx b/dotnet-core/scenario1/apiA/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa BaseGet(string nexturl) - { - return Content("A OK!" + await Next(nexturl)); - } - - async Task Next(string url) - { - // This is demo code, so we don't bother with a real signed certificate. Please never do this in a real app! - using (var bypassSelfSignedCertError = new HttpClientHandler()) - { - //All certificates are considered valid! Carry on! :D - bypassSelfSignedCertError.ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) => { return true; }; - - using (var client = new HttpClient(bypassSelfSignedCertError)) - { - HttpResponseMessage response; - try - { - response = await client.GetAsync(url); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadAsStringAsync(); - } - catch (Exception e) - { - while (e.InnerException != null) - e = e.InnerException; - - // This is where you would do error handling. Here we we just print to the console. - Console.WriteLine(e.Message); - throw; - } - } - } - } - } -} diff --git a/dotnet-core/scenario2/apiA/Controllers/Http.cs b/dotnet-core/scenario2/apiA/Controllers/Http.cs deleted file mode 100644 index dad1e81..0000000 --- a/dotnet-core/scenario2/apiA/Controllers/Http.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiA.Controllers -{ - [Route("chain/text")] - public class Http : ApiA - { - static Http() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointB = AppConf.GetSection("EndpointB").Value; - } - - static readonly string endpointB; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointB); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiA/Controllers/Https.cs b/dotnet-core/scenario2/apiA/Controllers/Https.cs deleted file mode 100644 index b9f3b4f..0000000 --- a/dotnet-core/scenario2/apiA/Controllers/Https.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiA.Controllers -{ - [Route("tls/chain/text")] - [RequireHttps] - public class Https : ApiA - { - static Https() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointBhttps = AppConf.GetSection("EndpointBhttps").Value; - } - - static readonly string endpointBhttps; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointBhttps); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiA/Program.cs b/dotnet-core/scenario2/apiA/Program.cs deleted file mode 100644 index 2d165ff..0000000 --- a/dotnet-core/scenario2/apiA/Program.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace ApiA -{ - public class Program - { - public static void Main(string[] args) - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - var host = new WebHostBuilder() - .UseKestrel(options => - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario2/apiA/apiA.csproj b/dotnet-core/scenario2/apiA/apiA.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario2/apiA/apiA.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario2/apiA/appsettings.json b/dotnet-core/scenario2/apiA/appsettings.json deleted file mode 100644 index fcf8179..0000000 --- a/dotnet-core/scenario2/apiA/appsettings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Urls": [ - "http://*:7001", - "https://*:7441" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2", - - "EndpointB": "http://localhost:7002/chain/text", - "EndpointBhttps": "https://localhost:7442/tls/chain/text" - -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiA/certificate.pfx b/dotnet-core/scenario2/apiA/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa BaseGet(string nexturl) - { - return Content("B OK!" + await Next(nexturl)); - } - - async Task Next(string url) - { - // This is demo code, so we don't bother with a real signed certificate. Please never do this in a real app! - using (var bypassSelfSignedCertError = new HttpClientHandler()) - { - //All certificates are considered valid! Carry on! :D - bypassSelfSignedCertError.ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) => { return true; }; - - using (var client = new HttpClient(bypassSelfSignedCertError)) - { - HttpResponseMessage response; - try - { - response = await client.GetAsync(url); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadAsStringAsync(); - } - catch (Exception e) - { - while (e.InnerException != null) - e = e.InnerException; - - // This is where you would do error handling. Here we we just print to the console. - Console.WriteLine(e.Message); - throw; - } - } - } - } - } -} diff --git a/dotnet-core/scenario2/apiB/Controllers/Http.cs b/dotnet-core/scenario2/apiB/Controllers/Http.cs deleted file mode 100644 index c5057d1..0000000 --- a/dotnet-core/scenario2/apiB/Controllers/Http.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiB.Controllers -{ - [Route("chain/text")] - public class Http : ApiB - { - static Http() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointC = AppConf.GetSection("EndpointC").Value; - } - - static readonly string endpointC; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointC); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiB/Controllers/Https.cs b/dotnet-core/scenario2/apiB/Controllers/Https.cs deleted file mode 100644 index a94df67..0000000 --- a/dotnet-core/scenario2/apiB/Controllers/Https.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiB.Controllers -{ - [Route("tls/chain/text")] - [RequireHttps] - public class Https : ApiB - { - static Https() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointChttps = AppConf.GetSection("EndpointChttps").Value; - } - - static readonly string endpointChttps; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointChttps); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiB/Program.cs b/dotnet-core/scenario2/apiB/Program.cs deleted file mode 100644 index 35afd59..0000000 --- a/dotnet-core/scenario2/apiB/Program.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace ApiB -{ - public class Program - { - public static void Main(string[] args) - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - var host = new WebHostBuilder() - .UseKestrel(options => - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario2/apiB/apiB.csproj b/dotnet-core/scenario2/apiB/apiB.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario2/apiB/apiB.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario2/apiB/appsettings.json b/dotnet-core/scenario2/apiB/appsettings.json deleted file mode 100644 index 46cb3a2..0000000 --- a/dotnet-core/scenario2/apiB/appsettings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Urls": [ - "http://*:7002", - "https://*:7442" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2", - - "EndpointC": "http://localhost:7003/chain/text", - "EndpointChttps": "https://localhost:7443/tls/chain/text" - -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiB/certificate.pfx b/dotnet-core/scenario2/apiB/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario2/apiC/apiC.csproj b/dotnet-core/scenario2/apiC/apiC.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario2/apiC/apiC.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario2/apiC/appsettings.json b/dotnet-core/scenario2/apiC/appsettings.json deleted file mode 100644 index 6f9c383..0000000 --- a/dotnet-core/scenario2/apiC/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Urls": [ - "http://*:7003", - "https://*:7443" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2" -} \ No newline at end of file diff --git a/dotnet-core/scenario2/apiC/certificate.pfx b/dotnet-core/scenario2/apiC/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa BaseGet(string endpointB, string endpointC) - { - var apiBRequest = Call(endpointB); - var apiCRequest = Call(endpointC); - - return Content("A OK!" + await apiBRequest + await apiCRequest); - } - - internal async Task Call(string url) - { - // This is demo code, so we don't bother with a real signed certificate. Please never do this in a real app! - using (var bypassSelfSignedCertError = new HttpClientHandler()) - { - //All certificates are considered valid! Carry on! :D - bypassSelfSignedCertError.ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) => { return true; }; - - using (var client = new HttpClient(bypassSelfSignedCertError)) - { - HttpResponseMessage response; - try - { - response = await client.GetAsync(url); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadAsStringAsync(); - } - catch (Exception e) - { - while (e.InnerException != null) - e = e.InnerException; - - // This is where you would do error handling. Here we we just print to the console. - Console.WriteLine(e.Message); - throw; - } - } - } - } - } -} diff --git a/dotnet-core/scenario3/apiA/Controllers/Http.cs b/dotnet-core/scenario3/apiA/Controllers/Http.cs deleted file mode 100644 index 266b0e8..0000000 --- a/dotnet-core/scenario3/apiA/Controllers/Http.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiA.Controllers -{ - [Route("aggregator/text")] - public class Http : ApiA - { - static Http() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointB = AppConf.GetSection("EndpointB").Value; - endpointC = AppConf.GetSection("EndpointC").Value; - } - - static readonly string endpointB; - static readonly string endpointC; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointB, endpointC); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario3/apiA/Controllers/Https.cs b/dotnet-core/scenario3/apiA/Controllers/Https.cs deleted file mode 100644 index 2e8275c..0000000 --- a/dotnet-core/scenario3/apiA/Controllers/Https.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; - -namespace ApiA.Controllers -{ - [Route("tls/aggregator/text")] - [RequireHttps] - public class Https : ApiA - { - static Https() - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - endpointBhttps = AppConf.GetSection("EndpointBhttps").Value; - endpointChttps = AppConf.GetSection("EndpointChttps").Value; - } - - static readonly string endpointBhttps; - static readonly string endpointChttps; - - [HttpGet] - public async Task Get() - { - return await BaseGet(endpointBhttps, endpointChttps); - } - } -} \ No newline at end of file diff --git a/dotnet-core/scenario3/apiA/Program.cs b/dotnet-core/scenario3/apiA/Program.cs deleted file mode 100644 index 2d165ff..0000000 --- a/dotnet-core/scenario3/apiA/Program.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.IO; -using System.Linq; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace ApiA -{ - public class Program - { - public static void Main(string[] args) - { - var AppConf = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json") - .Build(); - - var host = new WebHostBuilder() - .UseKestrel(options => - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario3/apiA/apiA.csproj b/dotnet-core/scenario3/apiA/apiA.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario3/apiA/apiA.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario3/apiA/appsettings.json b/dotnet-core/scenario3/apiA/appsettings.json deleted file mode 100644 index 44a1d88..0000000 --- a/dotnet-core/scenario3/apiA/appsettings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Urls": [ - "http://*:7001", - "https://*:7441" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2", - - "EndpointB": "http://localhost:7002/aggregator/text", - "EndpointBhttps": "https://localhost:7442/tls/aggregator/text", - "EndpointC": "http://localhost:7003/aggregator/text", - "EndpointChttps": "https://localhost:7443/tls/aggregator/text" - -} \ No newline at end of file diff --git a/dotnet-core/scenario3/apiA/certificate.pfx b/dotnet-core/scenario3/apiA/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario3/apiB/apiB.csproj b/dotnet-core/scenario3/apiB/apiB.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario3/apiB/apiB.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario3/apiB/appsettings.json b/dotnet-core/scenario3/apiB/appsettings.json deleted file mode 100644 index e0b9d03..0000000 --- a/dotnet-core/scenario3/apiB/appsettings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Urls": [ - "http://*:7002", - "https://*:7442" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2" - -} \ No newline at end of file diff --git a/dotnet-core/scenario3/apiB/certificate.pfx b/dotnet-core/scenario3/apiB/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa - { - var cert = AppConf.GetSection("Certificate").Value; - var certPassword = AppConf.GetSection("Password").Value; - options.UseHttps(cert, certPassword); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseStartup() - .UseUrls(AppConf.GetSection("Urls").GetChildren().Select(x => x.Value).ToArray()) - .Build(); - - host.Run(); - } - } - - public class Startup - { - public Startup(IHostingEnvironment env) - { - var builder = new ConfigurationBuilder() - .SetBasePath(env.ContentRootPath) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public IConfigurationRoot Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - } - } -} diff --git a/dotnet-core/scenario3/apiC/apiC.csproj b/dotnet-core/scenario3/apiC/apiC.csproj deleted file mode 100644 index 178fcc6..0000000 --- a/dotnet-core/scenario3/apiC/apiC.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netcoreapp1.1 - - - - - - - \ No newline at end of file diff --git a/dotnet-core/scenario3/apiC/appsettings.json b/dotnet-core/scenario3/apiC/appsettings.json deleted file mode 100644 index 6f9c383..0000000 --- a/dotnet-core/scenario3/apiC/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Urls": [ - "http://*:7003", - "https://*:7443" - ], - - //Please do not put certificate information ESPECIALLY passwords into a config file in a real app! - "Certificate": "certificate.pfx", - "Password": "hunter2" -} \ No newline at end of file diff --git a/dotnet-core/scenario3/apiC/certificate.pfx b/dotnet-core/scenario3/apiC/certificate.pfx deleted file mode 100644 index 21256e45b5ad7c3408e28c5a3f336092d1fb722b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2589 zcmY+^cQ_P|9|v&fhH*0D>^-y3A%)x_BjanY>=kmd30Y@k&kz}h=xdL&F3N}y*&U)p zMG0q|O@4Zw-|zSR{r>nopXYhMpXdGO3yz^?BL@KC7^)=*l~}xX{NWV<1pteongC&_ zMla(bI0h8?PX)nZKt7idnjAoO`CR{L0B}wS^}iQr01!AWh|))Rbc@lQ$&;L%k}L`X zx*;IH;m;FOYFeqdN$$PXsA3#IeQ#M4e}(MomoQwfV;9YEfj#i;kr!}c%Dj3%wE0S4EefXEWnO@X^In5jpx)hm-f4I2%>#_5jNyn1!VR44Mk7!%Cx#@+=Ur26Piv7jRo&JO?sISVN!v*X($aDkoZOp|KJ!3!)F3*G ziK^L%6DNzR2%CLnW|in;hpCnJNV|?{dRThjNBCEM(ciP)^WvK#|-5SlxPk_5?H`4 zMnU>*ZlFsM0(z62t4@nB_!A*vh}LOLD5lrvjP=nHEp0I;auc@Oh@8Y7iF8m?ZA9>{ z)1vh)LOB1Fy%O$<@^=$@FQJaxJMZ3!c9N>t#EIg@%0@n7qyw-fmNBk>;_vNKeaPwh7isM#8@!wuOf+h;Od;0!( zATYGm$x!f;Ybc!%!>VB9Gl%0EIqX%D6lH*I7itmh;B8-Tm)te8-~SemNM-4+Ios?u zRavo$w<-!k2TGtIMo;^TeIwLnSTa4KM16utCo*aoWz9|>w|Fq_A`-T@+M4~f>? zr$##6tQl^Wl3-&$){99*aS|=V1{5xQ;nAe=^ydTcu`kk2gMj}QKv^5V6;rtqMCZY6 z#NV4cawB6_INbH`TK>H3sg)d7t($3|x3`A5es`RjxfVrek~xPa8dkY)KFwlD)yL`n z{5W3hZTem!k7ggd$1SC%i(b-^%eq!1IFr=$Yul2Br$u*`uyGRb#>0zmyVh*2n1@d} z7uM~_43@nO>6LSrqe0y2(WGiXsc3*lhP` z^S<1U&6;h^VdU8p(D0d829-c~*PY0|7dl@($qS$9`eDeogP(^Cs`!_q?;bLpw>B$E zZo@X*k|&z8rwL@GF;}^848*0Ytj~q2^MJ4C33@KQB}6|m4H`N)2CVu&&|ooO1PB9` zx{SpxPZ$FI4?ENV@=Kq#E@4{#KaGHYG}1h|bjs1u0{>$>-&LQW)5E{uX8UuK+PBNjZ)Me~RT7wlaMHRm?&>)!`=>Cg z&dBJWFt4X!PaBGgDfSj!c=J3*-a=hp>QUi>jnocG)}(b(dQ_3)a=^*(i}+4Q6B|-j z(kOnb{8%93_{I*EK@qyMz>nC7S&q!+9I4!kLkoKb3Zy96Y_T&&Q9=dtx>B_XB$DiW z#M`=xN|(u0mN0>kC$E^D-$qA|)VAiMkG#iX7q|xU_1>+8Y*qRUILS_5XF!P05jY$3 zfnv$M)Zl#1aNONtj>AM&OLGS*>zjy*R=h)>O=mwMwR7iYAjHH<2sxPHm?8bG2_GN( zJ_=v1WdnYUQ@!gjJz>=Z z$jG+QCQ+1?>5DCj*fR zWbD1tK9%cN-P%33!%~^opRjAOL2$ZY0j1)mQJuibjW3~w(Un2v>z%1a^>;pK7-Lgz zHDr3*qHF`^3+OeqNGQ<8!&Bw?vPVvLwQEe|6bud;SS3?gXbZKQL#SXcw0g{rL zBkylRsaKa6JDHiX_*u<16r*OAY;5hHnq8+B(~@^6YViw5elUiv;2ASXMxUD9Lx~#} zr*y~*A$jba*$xLlk(^Rh4b4UFxmDVmzjtD+s_(aEfBzd6YSg--6P}mkN@|c*&KLq1 z?>Sia_r(Qn26m!@RHUn~qbk$NN56>;ve_ zY5IDX-s%;QzW%zvq+Nbas$w3_1VzUuY)oTc%zGjp0B0wc<?bg3niip0RQa2=f;0CTltM7nQj+w3qo6?VBOE#H8TQrr@0kG8GMW24O#wxs z`cTU@BZ{;aZvLj{Sx2+Ae-q?mO=kNcWpoE(9_ zuCTielz4E@RQa Results.Text("Hello World!")); +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/hello-world/Properties/launchSettings.json b/dotnet/hello-world/Properties/launchSettings.json new file mode 100644 index 0000000..b70654f --- /dev/null +++ b/dotnet/hello-world/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "", + "applicationUrl": "http://localhost:7001", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/hello-world/README.md b/dotnet/hello-world/README.md new file mode 100644 index 0000000..a2b0060 --- /dev/null +++ b/dotnet/hello-world/README.md @@ -0,0 +1,11 @@ +ASP.NET CORE +============ +This is a .NET web api 'Hello World!' application. + +Run application: +---------------- +``` +dotnet run --configuration Release +``` + +Server will be online @ http://localhost:5161 \ No newline at end of file diff --git a/dotnet/hello-world/appsettings.json b/dotnet/hello-world/appsettings.json new file mode 100644 index 0000000..0f98448 --- /dev/null +++ b/dotnet/hello-world/appsettings.json @@ -0,0 +1,16 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "HelloWorld" : { + "Url": "http://localhost:7001" + } + } + } +} diff --git a/dotnet/hello-world/hello-world.csproj b/dotnet/hello-world/hello-world.csproj new file mode 100644 index 0000000..fbde496 --- /dev/null +++ b/dotnet/hello-world/hello-world.csproj @@ -0,0 +1,12 @@ + + + + net9.0 + enable + enable + hello_world + true + true + + + diff --git a/dotnet/scenario1/Program.cs b/dotnet/scenario1/Program.cs new file mode 100644 index 0000000..278dd1f --- /dev/null +++ b/dotnet/scenario1/Program.cs @@ -0,0 +1,11 @@ +using scenario2; + +var builder = WebApplication.CreateSlimBuilder(args); +builder.WebHost.ConfigureKestrelWebServer(); +var app = builder.Build(); + +const string Response = "Hello, World!"; +app.MapGet("/text", () => Results.Text(Response)); +app.MapGet("/tls/text", () => Results.Text(Response)); + +await app.RunAsync(); diff --git a/dotnet/scenario1/Properties/launchSettings.json b/dotnet/scenario1/Properties/launchSettings.json new file mode 100644 index 0000000..15d5242 --- /dev/null +++ b/dotnet/scenario1/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "tls/text", + "applicationUrl": "https://localhost:7441", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario1/README-Scenario1.md b/dotnet/scenario1/README-Scenario1.md new file mode 100644 index 0000000..0ae6d5e --- /dev/null +++ b/dotnet/scenario1/README-Scenario1.md @@ -0,0 +1,26 @@ +Routing in ASP.NET Core +======================= + +This is a simple implementation scenario 1 of the spec from https://networknt.github.io/microservices-framework-benchmark/specification/ + +In this sample we again look at using .NET Minimal Apis. + + +Restore dependencies: +------ +Getting the app ready to run should be as simple as opening a console in the apiA folder and executing +``` +dotnet restore +``` + +Run the app: +------ +You can now run the app by opening a console in the apiA folder and executing +``` +dotnet run -c Release +``` + +You can then call the app using a browser, Postman or another tool at http://localhost:7000/text for http +and https://localhost:7441/tls/text for a https request. + +The certificate is, of course, a self-signed cert. \ No newline at end of file diff --git a/dotnet/scenario1/WebServerConfig.cs b/dotnet/scenario1/WebServerConfig.cs new file mode 100644 index 0000000..92d7439 --- /dev/null +++ b/dotnet/scenario1/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario2; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario1/appsettings.json b/dotnet/scenario1/appsettings.json new file mode 100644 index 0000000..8e35307 --- /dev/null +++ b/dotnet/scenario1/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "Text" : { + "Url": "http://localhost:7001" + }, + "Tls": { + "Url": "https://localhost:7441", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario1/certificate.pfx b/dotnet/scenario1/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ + + + net8.0 + enable + enable + true + true + + + + + Always + + + + diff --git a/dotnet/scenario2/ApiA/CallApiB.cs b/dotnet/scenario2/ApiA/CallApiB.cs new file mode 100644 index 0000000..af3d2b1 --- /dev/null +++ b/dotnet/scenario2/ApiA/CallApiB.cs @@ -0,0 +1,25 @@ +namespace scenario2; + +public class CallApiB +{ + private static HttpClientHandler allowSelfsignedCert = new() + { + ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true + }; + + private static HttpClient bClient = new(allowSelfsignedCert); + + const string AResponse = "A OK!"; + + public static async ValueTask ViaHttp() + { + var bResponse = await bClient.GetStringAsync("http://localhost:7002/chain/text"); + return Results.Text(AResponse + bResponse); + } + + public static async ValueTask ViaHttps() + { + var bResponse = await bClient.GetStringAsync("https://localhost:7442/chain/text"); + return Results.Text(AResponse + bResponse); + } +} \ No newline at end of file diff --git a/dotnet/scenario2/ApiA/Program.cs b/dotnet/scenario2/ApiA/Program.cs new file mode 100644 index 0000000..5f42156 --- /dev/null +++ b/dotnet/scenario2/ApiA/Program.cs @@ -0,0 +1,10 @@ +using scenario2; + +var builder = WebApplication.CreateSlimBuilder(args); +builder.WebHost.ConfigureKestrelWebServer(); +var app = builder.Build(); + +app.MapGet("/chain/text", CallApiB.ViaHttp); +app.MapGet("/tls/chain/text", CallApiB.ViaHttps); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario2/ApiA/Properties/launchSettings.json b/dotnet/scenario2/ApiA/Properties/launchSettings.json new file mode 100644 index 0000000..b37362b --- /dev/null +++ b/dotnet/scenario2/ApiA/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "tls/chain/text", + "applicationUrl": "https://localhost:7441", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj b/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj new file mode 100644 index 0000000..96f284c --- /dev/null +++ b/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiA + + + + + Always + + + + diff --git a/dotnet/scenario2/ApiA/WebServerConfig.cs b/dotnet/scenario2/ApiA/WebServerConfig.cs new file mode 100644 index 0000000..92d7439 --- /dev/null +++ b/dotnet/scenario2/ApiA/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario2; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario2/ApiA/appsettings.json b/dotnet/scenario2/ApiA/appsettings.json new file mode 100644 index 0000000..670d762 --- /dev/null +++ b/dotnet/scenario2/ApiA/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7001" + }, + "tls": { + "Url": "https://localhost:7441", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario2/ApiA/certificate.pfx b/dotnet/scenario2/ApiA/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ true + }; + + private static HttpClient cClient = new(allowSelfsignedCert); + + const string BResponse = "B OK!"; + + public static async ValueTask ViaHttp() + { + var cResponse = await cClient.GetStringAsync("http://localhost:7003/chain/text"); + return Results.Text(BResponse + cResponse); + } + + public static async ValueTask ViaHttps() + { + var cResponse = await cClient.GetStringAsync("https://localhost:7443/chain/text"); + return Results.Text(BResponse + cResponse); + } +} \ No newline at end of file diff --git a/dotnet/scenario2/ApiB/Program.cs b/dotnet/scenario2/ApiB/Program.cs new file mode 100644 index 0000000..4a1b1d0 --- /dev/null +++ b/dotnet/scenario2/ApiB/Program.cs @@ -0,0 +1,10 @@ +using scenario2; + +var builder = WebApplication.CreateSlimBuilder(args); +builder.WebHost.ConfigureKestrelWebServer(); +var app = builder.Build(); + +app.MapGet("/chain/text", CallApiC.ViaHttp); +app.MapGet("/tls/chain/text", CallApiC.ViaHttps); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario2/ApiB/Properties/launchSettings.json b/dotnet/scenario2/ApiB/Properties/launchSettings.json new file mode 100644 index 0000000..98e6723 --- /dev/null +++ b/dotnet/scenario2/ApiB/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "tls/chain/text", + "applicationUrl": "https://localhost:7442", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj b/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj new file mode 100644 index 0000000..f0dfdf2 --- /dev/null +++ b/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiB + + + + + Always + + + + diff --git a/dotnet/scenario2/ApiB/WebServerConfig.cs b/dotnet/scenario2/ApiB/WebServerConfig.cs new file mode 100644 index 0000000..92d7439 --- /dev/null +++ b/dotnet/scenario2/ApiB/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario2; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario2/ApiB/appsettings.json b/dotnet/scenario2/ApiB/appsettings.json new file mode 100644 index 0000000..741019d --- /dev/null +++ b/dotnet/scenario2/ApiB/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7002" + }, + "tls": { + "Url": "https://localhost:7442", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario2/ApiB/certificate.pfx b/dotnet/scenario2/ApiB/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ Results.Text(Response)); +app.MapGet("/tls/chain/text", () => Results.Text(Response)); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario2/ApiC/Properties/launchSettings.json b/dotnet/scenario2/ApiC/Properties/launchSettings.json new file mode 100644 index 0000000..53a4c6f --- /dev/null +++ b/dotnet/scenario2/ApiC/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "tls/chain/text", + "applicationUrl": "https://localhost:7443", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj b/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj new file mode 100644 index 0000000..1e57797 --- /dev/null +++ b/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiC + + + + + Always + + + + diff --git a/dotnet/scenario2/ApiC/WebServerConfig.cs b/dotnet/scenario2/ApiC/WebServerConfig.cs new file mode 100644 index 0000000..92d7439 --- /dev/null +++ b/dotnet/scenario2/ApiC/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario2; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario2/ApiC/appsettings.json b/dotnet/scenario2/ApiC/appsettings.json new file mode 100644 index 0000000..2e21919 --- /dev/null +++ b/dotnet/scenario2/ApiC/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7003" + }, + "tls": { + "Url": "https://localhost:7443", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario2/ApiC/certificate.pfx b/dotnet/scenario2/ApiC/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ true + }; + + private static HttpClient bClient = new(allowSelfsignedCert); + + public static async ValueTask ViaHttp() + { + return await bClient.GetStringAsync("http://localhost:7002/aggregator/text"); + } + + public static async ValueTask ViaHttps() + { + return await bClient.GetStringAsync("https://localhost:7442/tls/aggregator/text"); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiA/CallApiC.cs b/dotnet/scenario3/ApiA/CallApiC.cs new file mode 100644 index 0000000..4b38112 --- /dev/null +++ b/dotnet/scenario3/ApiA/CallApiC.cs @@ -0,0 +1,29 @@ +using System.Text; + +namespace scenario3; + +public class CallApiC +{ + private static HttpClientHandler allowSelfsignedCert = new() + { + ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true + }; + + private static HttpClient cClient = new(allowSelfsignedCert); + private static Uri httpUrl = new("http://localhost:7003/aggregator/text"); + private static Uri httpsUrl = new("https://localhost:7443/tls/aggregator/text"); + private static StringContent cRequest = new StringContent("C OK!", Encoding.UTF8, "text/plain"); + + + public static async ValueTask ViaHttp() + { + var response = await cClient.PostAsync(httpUrl, cRequest); + return await response.Content.ReadAsStringAsync(); + } + + public static async ValueTask ViaHttps() + { + var response = await cClient.PostAsync(httpsUrl, cRequest); + return await response.Content.ReadAsStringAsync(); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiA/CallApisInParallel.cs b/dotnet/scenario3/ApiA/CallApisInParallel.cs new file mode 100644 index 0000000..bc6d867 --- /dev/null +++ b/dotnet/scenario3/ApiA/CallApisInParallel.cs @@ -0,0 +1,21 @@ +namespace scenario3; + +public static class ParallelCalls +{ + const string AResponse = "A OK!"; + public static async ValueTask CallApisViaHttp() + { + var bResult = CallApiB.ViaHttp(); + var cResult = CallApiC.ViaHttp(); + + return Results.Text(AResponse + await bResult + await cResult); + } + + public static async ValueTask CallApisViaHttps() + { + var bResult = CallApiB.ViaHttps(); + var cResult = CallApiC.ViaHttps(); + + return Results.Text(AResponse + await bResult + await cResult); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiA/Program.cs b/dotnet/scenario3/ApiA/Program.cs new file mode 100644 index 0000000..b96baa0 --- /dev/null +++ b/dotnet/scenario3/ApiA/Program.cs @@ -0,0 +1,10 @@ +using scenario3; + +var builder = WebApplication.CreateSlimBuilder(args); +builder.WebHost.ConfigureKestrelWebServer(); +var app = builder.Build(); + +app.MapGet("/aggregator/text", ParallelCalls.CallApisViaHttp); +app.MapGet("/tls/aggregator/text", ParallelCalls.CallApisViaHttps); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario3/ApiA/Properties/launchSettings.json b/dotnet/scenario3/ApiA/Properties/launchSettings.json new file mode 100644 index 0000000..73fd1d2 --- /dev/null +++ b/dotnet/scenario3/ApiA/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "tls/aggregator/text", + "applicationUrl": "https://localhost:7441", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj b/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj new file mode 100644 index 0000000..96f284c --- /dev/null +++ b/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiA + + + + + Always + + + + diff --git a/dotnet/scenario3/ApiA/WebServerConfig.cs b/dotnet/scenario3/ApiA/WebServerConfig.cs new file mode 100644 index 0000000..a557da0 --- /dev/null +++ b/dotnet/scenario3/ApiA/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario3; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiA/appsettings.json b/dotnet/scenario3/ApiA/appsettings.json new file mode 100644 index 0000000..670d762 --- /dev/null +++ b/dotnet/scenario3/ApiA/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7001" + }, + "tls": { + "Url": "https://localhost:7441", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario3/ApiA/certificate.pfx b/dotnet/scenario3/ApiA/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ Results.Text(Response)); +app.MapGet("/tls/aggregator/text",() => Results.Text(Response)); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario3/ApiB/Properties/launchSettings.json b/dotnet/scenario3/ApiB/Properties/launchSettings.json new file mode 100644 index 0000000..3654a5c --- /dev/null +++ b/dotnet/scenario3/ApiB/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "launchUrl": "tls/aggregator/text", + "applicationUrl": "https://localhost:7442", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj b/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj new file mode 100644 index 0000000..f0dfdf2 --- /dev/null +++ b/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiB + + + + + Always + + + + diff --git a/dotnet/scenario3/ApiB/WebServerConfig.cs b/dotnet/scenario3/ApiB/WebServerConfig.cs new file mode 100644 index 0000000..a557da0 --- /dev/null +++ b/dotnet/scenario3/ApiB/WebServerConfig.cs @@ -0,0 +1,15 @@ +namespace scenario3; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration() + .ConfigureKestrel(c => + { + //Set body request size to 0, as we do not expect anything + c.Limits.MaxRequestBodySize = 0; + }); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiB/appsettings.json b/dotnet/scenario3/ApiB/appsettings.json new file mode 100644 index 0000000..741019d --- /dev/null +++ b/dotnet/scenario3/ApiB/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7002" + }, + "tls": { + "Url": "https://localhost:7442", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario3/ApiB/certificate.pfx b/dotnet/scenario3/ApiB/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ +{ + using var reader = new StreamReader(request.Body); + var content = await reader.ReadToEndAsync(); + return Results.Text(content); +}); + +app.MapPost("/tls/aggregator/text", async (HttpRequest request) => +{ + using var reader = new StreamReader(request.Body); + var content = await reader.ReadToEndAsync(); + return Results.Text(content); +}); + +await app.RunAsync(); \ No newline at end of file diff --git a/dotnet/scenario3/ApiC/Properties/launchSettings.json b/dotnet/scenario3/ApiC/Properties/launchSettings.json new file mode 100644 index 0000000..0436398 --- /dev/null +++ b/dotnet/scenario3/ApiC/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "launchUrl": "tls/aggregator/text", + "applicationUrl": "https://localhost:7443", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Production" + } + } + } +} diff --git a/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj b/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj new file mode 100644 index 0000000..1e57797 --- /dev/null +++ b/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + true + true + ApiC + + + + + Always + + + + diff --git a/dotnet/scenario3/ApiC/WebServerConfig.cs b/dotnet/scenario3/ApiC/WebServerConfig.cs new file mode 100644 index 0000000..3ccf2d0 --- /dev/null +++ b/dotnet/scenario3/ApiC/WebServerConfig.cs @@ -0,0 +1,10 @@ +namespace scenario3; + +public static class WebServerConfig +{ + public static void ConfigureKestrelWebServer(this ConfigureWebHostBuilder builder) + { + // Certificate is configured in the appsettings.json file + builder.UseKestrelHttpsConfiguration(); + } +} \ No newline at end of file diff --git a/dotnet/scenario3/ApiC/appsettings.json b/dotnet/scenario3/ApiC/appsettings.json new file mode 100644 index 0000000..2e21919 --- /dev/null +++ b/dotnet/scenario3/ApiC/appsettings.json @@ -0,0 +1,24 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Critical", + "Microsoft.AspNetCore": "Critical" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "text" : { + "Url": "http://localhost:7003" + }, + "tls": { + "Url": "https://localhost:7443", + "SslProtocols": ["Tls13"], + "Certificate": { + "Path": "certificate.pfx", + "Password": "" + } + } + } + } +} diff --git a/dotnet/scenario3/ApiC/certificate.pfx b/dotnet/scenario3/ApiC/certificate.pfx new file mode 100644 index 0000000000000000000000000000000000000000..dfa8f32ad5594d6a77a6ef12015f974cef30c353 GIT binary patch literal 2381 zcmY+Ec{me}AICR4Yzs;5BWyWFTbqcosHof}*J^U#*Vo;5eVwB<(%i>N+Sggm7$YH} zP|2Mbnp~BfBPqwPp6B=beSg0{KF{ZQ-tXsm|Mz;~C~#vwAP7f+?}x(Gs7BOHK_EYn zNr3~v6xcS70{f1mfU5qfpiByg`76rh0|I`%%zqjnP8N#z_ksWriW36E3Tto}rsI7D zK0X*Ah63_>I*&ZK%DoS;GlUJP4@HriU7IZ8$6Klo5oa@bum*kwf%p40B^gGy(7le2fE@T^?ZZrs1KTx1p=aiI`l z=}P|8?3Om!U^E6}>DH9$_@$vi8Y)(M-gDPLsr%$uZ=bD4^Jf)cgT#V^!t=?T6a6mS zb&D70YF?qZ@|Vo-q%W$fON!(D>Jf=X>olZ_Um<2TBh?Z6P=)vBe>rK@G5BitO2peJzqbaQ=luma* zy-^G0(E2ou_3@3g6vJ-TZdj?5+t)v5C4b$BE}+ytAiP+b zbgkIy3pf3qgX~H|mk=gn+vve7gF~po)<>;iMQ55v9w27xqF&|o?%qgGU3Xsf*U!28 z0Da<JZa-EU0{Fnbfo3F{r_9Iu+-bFiSGqL05S7$>_uy>@ocOi8o1V zrSny6+rVdyOOGqC+BCN7l22Fq+e=G!_ky{SLZrYw=eB0ZiGk`89G23g^f4R-a^`=)WKtj+ zUI?<-KBDF8n>G(_L%|R8BoEbE_#WWT~D#7vXLiM;b>&dw!w$l4mY_XSz;gFB1kj z+zmYRnV5*!jxl@JBZROo4a1i2be<;08{1a*+R)k+_UHP8MzjkL<4-x#ir$`v)_T_6 zz^l?;L9}$}HvKlaYqzwr%5) zq`4$fnNHOJ|Fvi{HyR5_KDm-Nfw>)BoE*UX0<~;p^C=CQs)uRvjqQ z&I^1D!{UoqI%9SQy9T7_5A|N(ATLKvO_$ZX=XH9O7pat=FdF5}5&dRj#`BTAO6r=q za_Gq12J86-p0;_Y&Y1h&PZgr#YI6Y8X-t8$Apgd>+Z#hZE&KkceBV6!v6^zNTJ74? zI6?MKnhROX@O0q!dOWO(StE&jK`X_oB$k~#$^mJ%_TICd>w0l&EvD+n3kqPy`@yv0bqFL@|I707SVq^zTV@}^RzhDf|W z{DDH!n;&K?s@_eA%W@$*6>V-!{G!@z$Y~^YLqz_?Azit&NyKwPTbXEwwabHZORS5L zp?r($>gMg96Ct~1-l8)eMaHAT`HuZXue|kgQnD|^|B}scqbp?i+W{c#s>;gZp21A+ zl%W|lb?(V#OR&foQl#eb!?y;Rj13HXCNYl>chWs~G}@vf8G20H5*^kefv5+!MP4M|r@kn!nVm!a5(;H+fx}{n>CfWr7h| zd|D+bq&7t!q2Rkp(%iLe#c9Z-5Zsd7Eh#3@d^c*HsU3Kt^D>_rGwJJ}o*XT+8~wn@uU@+wX# zhgtY_8levesmo?Ui_ityz6IsSCWHF|$mM@bw`L|GRegmHkpfajX7^VXK>KCKjyQ!T zqo3%mpe(`z!dRhyE??So&0yYU{@tj+F7+Q51IJs7I&{WO=#)(lX zGLo7EUQj2*+aWV=wnFv%bWL(po4Zrj-cebcO_uo*xD3PhBEn@|OYl?*_RHaj7YB>}Xv4g#T(icSTLlF5|2$dZ Date: Sun, 8 Dec 2024 00:15:04 +0100 Subject: [PATCH 281/309] Dotnet9 release tweaks (#116) * Bind to all IP interfaces when running. This makes it easier to use the app, if your machine has multiple IP interfaces, or you have virtual interfaces, like the Linux Subsystem on Windows. * Use same structure for all project files. * Update documentation to use dotnet publish The applications should be built using dotnet publish to create the most realistic release builds. --- dotnet/scenario1/README-Scenario1.md | 20 +++++++------- dotnet/scenario1/appsettings.json | 4 +-- dotnet/scenario1/scenario1.csproj | 27 ++++++++++--------- dotnet/scenario2/ApiA/Scenario2-ApiA.csproj | 29 ++++++++++++--------- dotnet/scenario2/ApiB/Scenario2-ApiB.csproj | 29 ++++++++++++--------- dotnet/scenario2/ApiC/Scenario2-ApiC.csproj | 29 ++++++++++++--------- dotnet/scenario2/README-Scenario2.md | 23 ++++++++++------ dotnet/scenario3/ApiA/Scenario3-ApiA.csproj | 29 ++++++++++++--------- dotnet/scenario3/ApiA/appsettings.json | 6 ++--- dotnet/scenario3/ApiB/Scenario3-ApiB.csproj | 29 ++++++++++++--------- dotnet/scenario3/ApiB/appsettings.json | 6 ++--- dotnet/scenario3/ApiC/Scenario3-ApiC.csproj | 29 ++++++++++++--------- dotnet/scenario3/ApiC/appsettings.json | 6 ++--- dotnet/scenario3/README-Scenario3.md | 21 +++++++++------ 14 files changed, 161 insertions(+), 126 deletions(-) diff --git a/dotnet/scenario1/README-Scenario1.md b/dotnet/scenario1/README-Scenario1.md index 0ae6d5e..47822c2 100644 --- a/dotnet/scenario1/README-Scenario1.md +++ b/dotnet/scenario1/README-Scenario1.md @@ -6,21 +6,23 @@ This is a simple implementation scenario 1 of the spec from https://networknt.gi In this sample we again look at using .NET Minimal Apis. -Restore dependencies: +Build the app: ------ -Getting the app ready to run should be as simple as opening a console in the apiA folder and executing +Getting the app ready to run should be as simple as opening a console in the project folder and executing ``` -dotnet restore +dotnet publish ``` - -Run the app: ------- -You can now run the app by opening a console in the apiA folder and executing +This will build the app for your machine architecture, e.g. on Windows this gives ``` -dotnet run -c Release +> dotnet publish + scenario1 succeeded (14,2s) → bin\Release\net9.0\win-x64\publish\ ``` +Run the app: +------ +After the app has been built by running `dotnet publish`, you can run the app by going into the publish folder shown +above and run the `scenario1` binary. -You can then call the app using a browser, Postman or another tool at http://localhost:7000/text for http +You can then call the app using a browser, Postman or another tool at http://localhost:7001/text for http and https://localhost:7441/tls/text for a https request. The certificate is, of course, a self-signed cert. \ No newline at end of file diff --git a/dotnet/scenario1/appsettings.json b/dotnet/scenario1/appsettings.json index 8e35307..143c980 100644 --- a/dotnet/scenario1/appsettings.json +++ b/dotnet/scenario1/appsettings.json @@ -9,10 +9,10 @@ "Kestrel": { "Endpoints": { "Text" : { - "Url": "http://localhost:7001" + "Url": "http://0.0.0.0:7001" }, "Tls": { - "Url": "https://localhost:7441", + "Url": "https://0.0.0.0:7441", "SslProtocols": ["Tls13"], "Certificate": { "Path": "certificate.pfx", diff --git a/dotnet/scenario1/scenario1.csproj b/dotnet/scenario1/scenario1.csproj index bd6ed27..98b4e6d 100644 --- a/dotnet/scenario1/scenario1.csproj +++ b/dotnet/scenario1/scenario1.csproj @@ -1,17 +1,20 @@ - - net8.0 - enable - enable - true - true - + + net9.0 + enable + enable + true + true + true + true + link + - - - Always - - + + + Always + + diff --git a/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj b/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj index 96f284c..7a168c2 100644 --- a/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj +++ b/dotnet/scenario2/ApiA/Scenario2-ApiA.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiA - + + net9.0 + enable + enable + true + true + true + true + link + ApiA + - - - Always - - + + + Always + + diff --git a/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj b/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj index f0dfdf2..b58c482 100644 --- a/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj +++ b/dotnet/scenario2/ApiB/Scenario2-ApiB.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiB - + + net9.0 + enable + enable + true + true + true + true + link + ApiB + - - - Always - - + + + Always + + diff --git a/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj b/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj index 1e57797..a4ae79c 100644 --- a/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj +++ b/dotnet/scenario2/ApiC/Scenario2-ApiC.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiC - + + net9.0 + enable + enable + true + true + true + true + link + ApiC + - - - Always - - + + + Always + + diff --git a/dotnet/scenario2/README-Scenario2.md b/dotnet/scenario2/README-Scenario2.md index f8a0af6..de4ec9d 100644 --- a/dotnet/scenario2/README-Scenario2.md +++ b/dotnet/scenario2/README-Scenario2.md @@ -2,28 +2,35 @@ Chained calls in ASP.NET Core ======================= This is a simple implementation of scenario 2 of the spec from https://networknt.github.io/microservices-framework-benchmark/specification/ + In this sample we look at how .NET handles chaining calls from one service to another. + We use the built-in Kestrel web server. The three services run as 3 completely separated processes, only sharing the -underlaying .NET framework. This means some code duplication is found, but it makes each service a more natural self-contained entity. +underlaying .NET framework. + +This means some code duplication is found, but it makes each service a more natural self-contained entity. Each service has its urls and certificate configured in an appsettings.json file. -Restore dependencies: +Build the apps: ------ Getting the app samples ready to run should be as simple as opening a console in each of the three api folders and executing ``` -dotnet restore +dotnet publish +``` +This will build the apps for your machine architecture, e.g. on Windows this gives +``` +> dotnet publish + Scenario2-ApiA succeeded (14,4s) → bin\Release\net9.0\win-x64\publish\ ``` in each console. -Run the app: +Run the apps: ------ -You can now run the app by opening a console in each of the three api folders and executing -``` -dotnet run -c Release -``` +After the apps has been built by running `dotnet publish`, you can run the apps by going into the publish folder shown +above and run the `Scenario2-ApiA`, `Scenario2-ApiB` and `Scenario2-Apic` binaries. You can then call the app using a browser, Postman or another tool at http://localhost:7001/chain/text for http and https://localhost:7441/tls/chain/text for a https request. The certificates are, of course, self-signed certs. diff --git a/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj b/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj index 96f284c..7a168c2 100644 --- a/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj +++ b/dotnet/scenario3/ApiA/Scenario3-ApiA.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiA - + + net9.0 + enable + enable + true + true + true + true + link + ApiA + - - - Always - - + + + Always + + diff --git a/dotnet/scenario3/ApiA/appsettings.json b/dotnet/scenario3/ApiA/appsettings.json index 670d762..8d3aa58 100644 --- a/dotnet/scenario3/ApiA/appsettings.json +++ b/dotnet/scenario3/ApiA/appsettings.json @@ -8,11 +8,11 @@ "AllowedHosts": "*", "Kestrel": { "Endpoints": { - "text" : { - "Url": "http://localhost:7001" + "text": { + "Url": "http://0.0.0.0:7001" }, "tls": { - "Url": "https://localhost:7441", + "Url": "https://0.0.0.0:7441", "SslProtocols": ["Tls13"], "Certificate": { "Path": "certificate.pfx", diff --git a/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj b/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj index f0dfdf2..b58c482 100644 --- a/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj +++ b/dotnet/scenario3/ApiB/Scenario3-ApiB.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiB - + + net9.0 + enable + enable + true + true + true + true + link + ApiB + - - - Always - - + + + Always + + diff --git a/dotnet/scenario3/ApiB/appsettings.json b/dotnet/scenario3/ApiB/appsettings.json index 741019d..f2c4c07 100644 --- a/dotnet/scenario3/ApiB/appsettings.json +++ b/dotnet/scenario3/ApiB/appsettings.json @@ -8,11 +8,11 @@ "AllowedHosts": "*", "Kestrel": { "Endpoints": { - "text" : { - "Url": "http://localhost:7002" + "text": { + "Url": "http://0.0.0.0:7002" }, "tls": { - "Url": "https://localhost:7442", + "Url": "https://0.0.0.0:7442", "SslProtocols": ["Tls13"], "Certificate": { "Path": "certificate.pfx", diff --git a/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj b/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj index 1e57797..a4ae79c 100644 --- a/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj +++ b/dotnet/scenario3/ApiC/Scenario3-ApiC.csproj @@ -1,18 +1,21 @@ - - net9.0 - enable - enable - true - true - ApiC - + + net9.0 + enable + enable + true + true + true + true + link + ApiC + - - - Always - - + + + Always + + diff --git a/dotnet/scenario3/ApiC/appsettings.json b/dotnet/scenario3/ApiC/appsettings.json index 2e21919..ae7d706 100644 --- a/dotnet/scenario3/ApiC/appsettings.json +++ b/dotnet/scenario3/ApiC/appsettings.json @@ -8,11 +8,11 @@ "AllowedHosts": "*", "Kestrel": { "Endpoints": { - "text" : { - "Url": "http://localhost:7003" + "text": { + "Url": "http://0.0.0.0:7003" }, "tls": { - "Url": "https://localhost:7443", + "Url": "https://0.0.0.0:7443", "SslProtocols": ["Tls13"], "Certificate": { "Path": "certificate.pfx", diff --git a/dotnet/scenario3/README-Scenario3.md b/dotnet/scenario3/README-Scenario3.md index 957454c..2aa2e5a 100644 --- a/dotnet/scenario3/README-Scenario3.md +++ b/dotnet/scenario3/README-Scenario3.md @@ -4,28 +4,33 @@ Chained calls in ASP.NET Core This is a simple implementation of scenario 3 of the spec from https://networknt.github.io/microservices-framework-benchmark/specification/ In this sample we look at how .NET handles chaining calls from one service to another. + We use the built-in Kestrel web server. The three services run as 3 completely separated processes, -only sharing the underlaying .NET framework. This means some code duplication is found, but it makes each -service a more natural self-contained entity. +only sharing the underlaying .NET framework. + +This means some code duplication is found, but it makes each service a more natural self-contained entity. Each service has its urls and certificate configured in an appsettings.json file. -Restore dependencies: +Build the apps: ------ Getting the app samples ready to run should be as simple as opening a console in each of the three api folders and executing ``` -dotnet restore +dotnet publish +``` +This will build the apps for your machine architecture, e.g. on Windows this gives +``` +> dotnet publish + Scenario3-ApiA succeeded (13,6s) → bin\Release\net9.0\win-x64\publish\ ``` in each console. Run the app: ------ -You can now run the app by opening a console in each of the three api folders and executing -``` -dotnet run -c Release -``` +After the apps has been built by running `dotnet publish`, you can run the apps by going into the publish folder shown +above and run the `Scenario3-ApiA`, `Scenario3-ApiB` and `Scenario3-Apic` binaries. You can then call the app using a browser, Postman or another tool at http://localhost:7001/aggregator/text for http and https://localhost:7441/tls/aggregator/text for a https request. The certificates are, of course, self-signed certs. \ No newline at end of file From 22808b5078718fdb61a987385734222105a52e4a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 11 Feb 2025 17:30:23 -0500 Subject: [PATCH 282/309] upgrade to version 2.2.0 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index bda02a2..94d16d8 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.0-SNAPSHOT + 2.2.0 2.18.1 2.0.16 1.5.12 From 7017548305c3e960420958936bcb19da9edd92c6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 12 Feb 2025 10:02:45 -0500 Subject: [PATCH 283/309] upgrade to version 2.2.1-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 94d16d8..7f3594d 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.0 + 2.2.1-SNAPSHOT 2.18.1 2.0.16 1.5.12 From e1f888ec3219a6a6023989d11d39eb6649dd1c43 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 12 Feb 2025 14:59:22 -0500 Subject: [PATCH 284/309] update logback to 1.5.16 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 7f3594d..8f72336 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.2.1-SNAPSHOT 2.18.1 2.0.16 - 1.5.12 + 1.5.16 4.13.2 2.3.18.Final From 522885dcc59904586480d39993d9d0932914ca60 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Mar 2025 09:43:38 -0400 Subject: [PATCH 285/309] update jackson to 2.18.3 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 8f72336..54c6fce 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.2.1-SNAPSHOT - 2.18.1 + 2.18.3 2.0.16 1.5.16 4.13.2 From f50ed12cd72ebe2459a584deb28466d9538aff36 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Mar 2025 09:49:36 -0400 Subject: [PATCH 286/309] update slf4j to 2.0.17 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 54c6fce..e6634fe 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -11,7 +11,7 @@ UTF-8 2.2.1-SNAPSHOT 2.18.3 - 2.0.16 + 2.0.17 1.5.16 4.13.2 2.3.18.Final From 6beca164453560615322317dfa11c1f04b0472a6 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 19 Mar 2025 11:00:00 -0400 Subject: [PATCH 287/309] update logback to 1.5.18 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index e6634fe..82115f7 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.2.1-SNAPSHOT 2.18.3 2.0.17 - 1.5.16 + 1.5.18 4.13.2 2.3.18.Final From 0a8489eff3a7ff7c7f0eb4b4d9f2e392568404da Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Mar 2025 09:41:03 -0400 Subject: [PATCH 288/309] upgrade to version 2.2.1 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 82115f7..c0fb3a5 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.1-SNAPSHOT + 2.2.1 2.18.3 2.0.17 1.5.18 From 92f97e09c4b1b068b21435b5eb7e1d9d1f53b187 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sat, 22 Mar 2025 15:03:00 -0400 Subject: [PATCH 289/309] upgrade to version 2.2.2-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c0fb3a5..ee0a324 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.1 + 2.2.2-SNAPSHOT 2.18.3 2.0.17 1.5.18 From 913dfb11b9df46ec554e34c923cfefa4083e9aa4 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 5 Jun 2025 14:37:47 -0400 Subject: [PATCH 290/309] upgrade to version 2.2.2 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ee0a324..f7c5a46 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.2-SNAPSHOT + 2.2.2 2.18.3 2.0.17 1.5.18 From 1452e0081b7bace683ac94e28e44647b0a3b46f3 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 6 Jun 2025 10:27:27 -0400 Subject: [PATCH 291/309] upgrade to version 2.2.3-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f7c5a46..f2dcc0a 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.2 + 2.2.3-SNAPSHOT 2.18.3 2.0.17 1.5.18 From 238c34ac9b61207b31d7be379544d959e150e1f0 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 25 Jun 2025 14:09:00 -0400 Subject: [PATCH 292/309] upgrade to version 2.3.0 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f2dcc0a..94fccf4 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.2.3-SNAPSHOT + 2.3.0 2.18.3 2.0.17 1.5.18 From 3beceec8b5424a2731c71c01cfdfdedc0ccd55ef Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 25 Jun 2025 16:34:43 -0400 Subject: [PATCH 293/309] upgrade to version 2.3.1-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 94fccf4..9805a5c 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.0 + 2.3.1-SNAPSHOT 2.18.3 2.0.17 1.5.18 From 768671eaffbe0b745554653ccd04b29635d6960e Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 19 Sep 2025 20:33:30 -0400 Subject: [PATCH 294/309] upgrade to version 2.3.1 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9805a5c..592d8e0 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.1-SNAPSHOT + 2.3.1 2.18.3 2.0.17 1.5.18 From 060008165128c9b3345e268ccef618d1939b8ebb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 19 Sep 2025 21:42:54 -0400 Subject: [PATCH 295/309] upgrade to version 2.3.2-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 592d8e0..5fd4a85 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.1 + 2.3.2-SNAPSHOT 2.18.3 2.0.17 1.5.18 From b429bbe35e5ebafffee6f04a77c4ea74d8d4616a Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 30 Oct 2025 09:32:35 -0400 Subject: [PATCH 296/309] update undertow to 2.3.20.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 5fd4a85..b3d4c8f 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.17 1.5.18 4.13.2 - 2.3.18.Final + 2.3.20.Final From be1c79589fe432b35b66e5ff239d4c73a2b2f64d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 22 Jan 2026 17:36:32 -0500 Subject: [PATCH 297/309] update undertow to 2.3.22.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index b3d4c8f..28e3ac1 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.17 1.5.18 4.13.2 - 2.3.20.Final + 2.3.22.Final From b2130a2567417a3c8ff70c8d1116d476bca307cd Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 29 Jan 2026 14:33:31 -0500 Subject: [PATCH 298/309] update logback to 1.5.26 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 28e3ac1..dec2869 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.3.2-SNAPSHOT 2.18.3 2.0.17 - 1.5.18 + 1.5.26 4.13.2 2.3.22.Final From 013eee2622a16d8825c3ed412b894678f0756f3b Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 2 Feb 2026 16:21:32 -0500 Subject: [PATCH 299/309] upgrade to version 2.3.2 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index dec2869..ee1b091 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.2-SNAPSHOT + 2.3.2 2.18.3 2.0.17 1.5.26 From a8f92fe7784eb0385b9abbf92440f82620d5dc93 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 2 Feb 2026 20:08:30 -0500 Subject: [PATCH 300/309] upgrade to version 2.3.3-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index ee1b091..75a643b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.2 + 2.3.3-SNAPSHOT 2.18.3 2.0.17 1.5.26 From e8719fac8b8df3d18b0fcc8400d7cebfeff04a8d Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 19 Feb 2026 19:56:58 -0500 Subject: [PATCH 301/309] upgrade to version 2.3.3 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 75a643b..adea401 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.3-SNAPSHOT + 2.3.3 2.18.3 2.0.17 1.5.26 From bb3fe97df8a0306f254aceba47502b9d2d2478b9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Thu, 19 Feb 2026 21:53:10 -0500 Subject: [PATCH 302/309] upgrade to version 2.3.4-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index adea401..c284baf 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.3 + 2.3.4-SNAPSHOT 2.18.3 2.0.17 1.5.26 From 94d8078e98fb0b683d66574b190616f3e0fc5cf9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Sun, 1 Mar 2026 21:20:10 -0500 Subject: [PATCH 303/309] update version.jackson to 2.19.4 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index c284baf..f15da6b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -10,7 +10,7 @@ 11 UTF-8 2.3.4-SNAPSHOT - 2.18.3 + 2.19.4 2.0.17 1.5.26 4.13.2 From a3fc2eee7de0acda1ab8aca6374ee4ce6d6ce6eb Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 5 May 2026 18:30:23 -0400 Subject: [PATCH 304/309] upgrade to version 2.3.4 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f15da6b..f1a6b82 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.4-SNAPSHOT + 2.3.4 2.19.4 2.0.17 1.5.26 From 020cb49e9015dbe7f26793b672b9ca60fea2fec9 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Tue, 5 May 2026 21:39:18 -0400 Subject: [PATCH 305/309] upgrade to version 2.3.5-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index f1a6b82..9d99344 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.4 + 2.3.5-SNAPSHOT 2.19.4 2.0.17 1.5.26 From 42baff7cede4c17029248a3f2ccfcb8515731ede Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Mon, 1 Jun 2026 11:42:21 -0400 Subject: [PATCH 306/309] update undertow version to 2.4.1.Final --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 9d99344..640820b 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -14,7 +14,7 @@ 2.0.17 1.5.26 4.13.2 - 2.3.22.Final + 2.4.1.Final From 9fb5878f8b3ed3c981320c892d3ab6a074c92bb4 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Fri, 10 Jul 2026 08:25:31 -0400 Subject: [PATCH 307/309] update logback version to 1.5.37 --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 640820b..3413d18 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -12,7 +12,7 @@ 2.3.5-SNAPSHOT 2.19.4 2.0.17 - 1.5.26 + 1.5.37 4.13.2 2.4.1.Final From 7eabd73e82d90faa4e6f3537a0446af969e88f4c Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 29 Jul 2026 17:59:53 -0400 Subject: [PATCH 308/309] upgrade to version 2.3.5 before release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 3413d18..2c81952 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.5-SNAPSHOT + 2.3.5 2.19.4 2.0.17 1.5.37 From 5473954f01eaa12e95880b5826b50f35ef8c3c05 Mon Sep 17 00:00:00 2001 From: Steve Hu Date: Wed, 29 Jul 2026 20:26:06 -0400 Subject: [PATCH 309/309] upgrade to version 2.3.6-SNAPSHOT after release in master branch --- light-4j/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-4j/pom.xml b/light-4j/pom.xml index 2c81952..ade88f9 100644 --- a/light-4j/pom.xml +++ b/light-4j/pom.xml @@ -9,7 +9,7 @@ 11 UTF-8 - 2.3.5 + 2.3.6-SNAPSHOT 2.19.4 2.0.17 1.5.37