From c957be588f8c1eb70fcc29f020a488e89ce245c3 Mon Sep 17 00:00:00 2001 From: Lisa Jamen <31409174+ljamen@users.noreply.github.com> Date: Wed, 15 Apr 2020 15:53:54 -0400 Subject: [PATCH 01/93] updates to the Helidon MP intro with notes --- docs/about/01_overview.adoc | 2 + docs/mp/introduction/01_introduction.adoc | 58 ++++++++++++++++------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/docs/about/01_overview.adoc b/docs/about/01_overview.adoc index 13d402323b4..670983c707c 100644 --- a/docs/about/01_overview.adoc +++ b/docs/about/01_overview.adoc @@ -39,6 +39,8 @@ Microprofile implementation. -- ==== + + == Get going [PILLARS] diff --git a/docs/mp/introduction/01_introduction.adoc b/docs/mp/introduction/01_introduction.adoc index 7e78a2463a6..f8b301d0cf3 100644 --- a/docs/mp/introduction/01_introduction.adoc +++ b/docs/mp/introduction/01_introduction.adoc @@ -20,25 +20,37 @@ :description: about Helidon MP :keywords: helidon, java, microservices, microprofile -== Helidon MP +Helidon is a collection of Java libraries for writing microservices and offers two programming models: Helidon MP and <>. + -Helidon is a collection of Java libraries for writing microservices. Helidon -offers two programming models: <> -and Helidon MP. +== Helidon MP -Helidon MP is an implementation of the +Helidon MP {helidon-version} is an implementation of the https://microprofile.io[MicroProfile] -https://github.com/eclipse/microprofile/releases[specification]. -Helidon {helidon-version} supports MicroProfile {mp-version}. Since -MicroProfile has its roots in Java EE, you'll find that the MicroProfile +https://github.com/eclipse/microprofile/releases[specification] and supports MicroProfile {mp-version}. Since +MicroProfile has its roots in Java EE, the MicroProfile APIs follow a familiar, declarative approach with heavy use of annotations. -This makes it a good choice for Java EE developers. +This makes it a good choice for Java EE developers. + +For comparison, the high-level differences between Helidon MP and Helidon SE are described below. + +[width="100%",options="header"] +|==================== +| Helidon MP | Helidon SE +| MicroProfile {mp-version} implementation; slightly larger footprint than SE (~13 MB)| Microframework model with very small footprint and limited functionality (~7 MB) +| Declarative style with dependency injection | Functional style is reactive non-blocking +| Jakarta EE microprofile development experience; all Jakarta components (CDI, JAX-RS, JSON-P/B) |Transparent "no magic" development experience; pure java application development with no annotations and no dependency injections +| +|==================== + +=== MicroProfile APIs -== MicroProfile APIs MicroProfile starts with a core of Java EE APIs, then defines a number of new APIs to add capabilities you need for writing modern cloud native -applications: +applications. + +//sent new image to graphics on 4/13 that will replace this long list of bullets. * JAX-RS * JSON-P @@ -46,16 +58,16 @@ applications: * CDI * MicroProfile Config * MicroProfile Fault Tolerance -* MicroProfile Health +* MicroProfile Health Checks * MicroProfile JWT Authentication * MicroProfile Metrics * MicroProfile OpenAPI * MicroProfile OpenTracing * MicroProfile Rest Client -For more information see <>. +For more information about the Helidon MicroProfile APIs see https://github.com/oracle/helidon/wiki/Supported-APIs[the Helidon API Wiki page]. -== Helidon MP CDI Extensions +=== Helidon MP CDI Extensions In addition to MicroProfile support, Helidon MP provides <> to address areas not @@ -67,12 +79,24 @@ covered by MicroProfile. Examples include: * Jedis * OCI Object storage -== No Application Server + +=== No Application Server Helidon is a collection of libraries that runs on top of Netty. It is not derived from a Java EE application server. That means your cloud native -application is compact -and efficient without unnecessary overhead or bloat. +application is compact and efficient without unnecessary overhead or bloat. + +=== GraalVM Native Image Support for Helidon MP +Helidon now includes support for GraalVM to enable the conversion of Helidon MP applications to native executable code via the native-image utility. +GraalVM native-image support is now available for both Helidon MP and Helidon SE. + +//add link to GraalVM MP topic +<> + +=== MicroProfile Reactive Messaging and Reactive Streams Operators +Asynchronous messaging is a commonly used form of communication in the world of microservices and the Reactive Messaging for MicroProfile specification is a logical response to formalizing the ways we connect things together. And the best way to communicate asychronously is through Reactive Streams. With the release of the MicroProfile Reactive Streams Operators specification we can now formalize manipulation with reactive streams. Reactive messaging heavily depends on standardized operators so together they provide great portability between existing implementations. + +<> == Try it now From b800ad4e7481fb067bfc1ba4fab3c3c87f450b92 Mon Sep 17 00:00:00 2001 From: Vanaja Guruprasad <42369326+vanajaguru@users.noreply.github.com> Date: Fri, 17 Apr 2020 11:35:56 +0530 Subject: [PATCH 02/93] WebClient intro doc first draft --- docs/se/webclient/01_introduction.adoc | 108 +++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 5 deletions(-) diff --git a/docs/se/webclient/01_introduction.adoc b/docs/se/webclient/01_introduction.adoc index 2014b6af500..995aad15429 100644 --- a/docs/se/webclient/01_introduction.adoc +++ b/docs/se/webclient/01_introduction.adoc @@ -16,10 +16,108 @@ /////////////////////////////////////////////////////////////////////////////// -= Helidon WebClient -:toc: -:toc-placement: preamble + + += WebClient Introduction +:pagename: WebClient-Introduction :description: Helidon WebClient -:keywords: helidon, se, rest, httpclient, webclient +:keywords: helidon, se, rest, httpclient, webclient, reactive + +// Have not included the configuration related info. Should this info be included in the Introduction doc or Configuration doc. Please confirm. + +WebClient is an HTTP client for Helidon SE 2.0. It handles the responses to the HTTP requests in a reactive way. + +Helidon WebClient provides the following features: + +* Reactive approach - Allows you to execute HTTP requests and handle the responses without having to wait for the server response. When the response is received, the client requests only a specific amount of data it can handle at a time. So, there is no overflow of memory. + +* Builder-like setup and execution - Creates every client and request as a builder pattern. This improves readability and code maintenance. + +* Redirect chain - Follows the redirect chain and perform requests on the correct endpoint by itself. + +* Tracing, metrics and security propagation - Automatically propogates the configured tracing, metrics and security settings of the Helidon WebServer to the WebClient and uses them during request and response. + +== Setting up the WebClient + +// Not clear of the info provided in the WebClient example setup README.md. Need more details to include info in the section; please provide. + +== Getting Started with WebClient + +// Need some info to get started with WebClient. + +=== Example of a Simple GET Request + +[source,java] +---- +WebClient client = WebClient.builder() + .baseUri("http://localhost") + .build(); + +CompletionStage response = webClient.get() + .path("/endpoint") + .request(String.class); +---- + +=== Example of a GET Request With Json Object + +In this case, JsonObject processing is not present in the WebClient by default. So, you must first register the Json object before making a request. + +[source,java] +.Register JsonObject to the request builder using the register method. +---- +JsonProcessing jsonProcessing = JsonProcessing.create(); +WebClient client = WebClient.builder() + .baseUri("http://localhost") + .build(); + +CompletionStage response = webClient.get() + .path("/endpoint") + .register(jsonProcessing.newReader()) + .request(JsonObject.class); +---- + +[source,java] +.Make a GET or PUT request to the endpoint. +---- +JsonProcessing jsonProcessing = JsonProcessing.create(); +JsonObject entity = //some JsonObject entity +WebClient client = WebClient.builder() + .baseUri("http://localhost") + .build(); + +CompletionStage response = webClient.put() + .path("/endpoint") + .register(jsonProcessing.newWriter()) + .submit(entity); +---- + +== Maven Coordinates + +The <> page describes how you should declare dependency management for Helidon applications. You must declare the following dependency in your project's pom.xml: + +[source,xml,subs="verbatim,attributes"] +---- + + io.helidon.webclient + helidon-webclient + <1> + +---- + +<1> Dependency on WebClient. + + + + + + + + + + + + + + + -== This page is Under Construction and will be available soon From d75f170ca4f9991b0684a95a85d425575936d305 Mon Sep 17 00:00:00 2001 From: Lisa Jamen <31409174+ljamen@users.noreply.github.com> Date: Fri, 17 Apr 2020 11:44:09 -0400 Subject: [PATCH 03/93] small update to MP intro --- docs/mp/introduction/01_introduction.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mp/introduction/01_introduction.adoc b/docs/mp/introduction/01_introduction.adoc index f8b301d0cf3..1ff28d5c36e 100644 --- a/docs/mp/introduction/01_introduction.adoc +++ b/docs/mp/introduction/01_introduction.adoc @@ -98,7 +98,7 @@ Asynchronous messaging is a commonly used form of communication in the world of <> -== Try it now +== Next Steps Try the <> to get your first Helidon MP application up and running in minutes. From d5f46842b80604b548daf0257727274596c65f76 Mon Sep 17 00:00:00 2001 From: Lisa Jamen <31409174+ljamen@users.noreply.github.com> Date: Tue, 21 Apr 2020 12:24:04 -0400 Subject: [PATCH 04/93] removed table for se/mp comparison --- docs/mp/introduction/01_introduction.adoc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docs/mp/introduction/01_introduction.adoc b/docs/mp/introduction/01_introduction.adoc index 1ff28d5c36e..bf31c59ae90 100644 --- a/docs/mp/introduction/01_introduction.adoc +++ b/docs/mp/introduction/01_introduction.adoc @@ -34,14 +34,6 @@ This makes it a good choice for Java EE developers. For comparison, the high-level differences between Helidon MP and Helidon SE are described below. -[width="100%",options="header"] -|==================== -| Helidon MP | Helidon SE -| MicroProfile {mp-version} implementation; slightly larger footprint than SE (~13 MB)| Microframework model with very small footprint and limited functionality (~7 MB) -| Declarative style with dependency injection | Functional style is reactive non-blocking -| Jakarta EE microprofile development experience; all Jakarta components (CDI, JAX-RS, JSON-P/B) |Transparent "no magic" development experience; pure java application development with no annotations and no dependency injections -| -|==================== === MicroProfile APIs From 1f5715751dc6ef73f39019a35f6f8f6d083233e6 Mon Sep 17 00:00:00 2001 From: Vanaja Guruprasad <42369326+vanajaguru@users.noreply.github.com> Date: Wed, 22 Apr 2020 12:45:04 +0530 Subject: [PATCH 05/93] Updated the doc with additional info --- docs/se/webclient/01_introduction.adoc | 156 ++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 16 deletions(-) diff --git a/docs/se/webclient/01_introduction.adoc b/docs/se/webclient/01_introduction.adoc index 995aad15429..a5a8c061ca6 100644 --- a/docs/se/webclient/01_introduction.adoc +++ b/docs/se/webclient/01_introduction.adoc @@ -23,44 +23,156 @@ :description: Helidon WebClient :keywords: helidon, se, rest, httpclient, webclient, reactive -// Have not included the configuration related info. Should this info be included in the Introduction doc or Configuration doc. Please confirm. WebClient is an HTTP client for Helidon SE 2.0. It handles the responses to the HTTP requests in a reactive way. Helidon WebClient provides the following features: -* Reactive approach - Allows you to execute HTTP requests and handle the responses without having to wait for the server response. When the response is received, the client requests only a specific amount of data it can handle at a time. So, there is no overflow of memory. +* *Reactive approach* + +Allows you to execute HTTP requests and handle the responses without having to wait for the server response. When the response is received, the client requests only the amount of data that it can handle at that time. So, there is no overflow of memory. -* Builder-like setup and execution - Creates every client and request as a builder pattern. This improves readability and code maintenance. +* *Builder-like setup and execution* + +Creates every client and request as a builder pattern. This improves readability and code maintenance. -* Redirect chain - Follows the redirect chain and perform requests on the correct endpoint by itself. +* *Redirect chain* + +Follows the redirect chain and perform requests on the correct endpoint by itself. -* Tracing, metrics and security propagation - Automatically propogates the configured tracing, metrics and security settings of the Helidon WebServer to the WebClient and uses them during request and response. +* *Tracing, metrics and security propagation* + +Automatically propogates the configured tracing, metrics and security settings of the Helidon WebServer to the WebClient and uses them during request and response. -== Setting up the WebClient +== Configuring the WebClient -// Not clear of the info provided in the WebClient example setup README.md. Need more details to include info in the section; please provide. +The WebClient default configuration may be suitable in most use cases. However, you can configure it to suit your specific requirements. -== Getting Started with WebClient +=== Example of a WebClient Configuration -// Need some info to get started with WebClient. +[source,java] +---- +Config config = Config.create(); +WebClient client = WebClient.builder() + .baseUri("http://localhost") + .config(config.get("client")) + .build(); +---- -=== Example of a Simple GET Request +=== Example of Yaml WebClient Configuration +[source, java] +---- +client: + connect-timeout-millis: 2000 + read-timeout-millis: 2000 + follow-redirects: true <1> + max-redirects: 5 + cookies: + automatic-store-enabled: true + default-cookies: + - name: "env" + value: "dev" + headers: + - name: "Accept" + value: ["application/json","text/plain"] <2> + services: + exclude: ["io.helidon.webclient.DefaultServiceRegistry"] + config: + metrics: + - methods: ["PUT", "POST", "DELETE"] + - type: METER + name-format: "client.meter.overall" + - type: TIMER + # meter per method + name-format: "client.meter.%1$s" + - methods: ["GET"] + type: COUNTER + errors: false + name-format: "client.counter.%1$s.success" + description: "Counter of successful GET requests" + - methods: ["PUT", "POST", "DELETE"] + type: COUNTER + success: false + name-format: "wc.counter.%1$s.error" + description: "Counter of failed PUT, POST and DELETE requests" + - methods: ["GET"] + type: GAUGE_IN_PROGRESS + name-format: "client.inprogress.%2$s" + description: "In progress requests to host" + tracing: + proxy: + use-system-selector: false + host: "hostName" + port: 80 + no-proxy: ["localhost:8080", ".helidon.io", "192.168.1.1"] <3> + ssl: + server: + disable-hostname-verification: false + trust-all: false + truststore: + keystore-resource-path: "path to the keystore" + keystore-type: "JKS" + keystore-passphrase: "password" + trust-store: true <4> + client: + keystore: + keystore-resource-path: "path to client keystore" + keystore-passphrase: "password" + trust-store: true <5> +---- + +<1> Client functional settings +<2> Default client headers and cookies +<3> Proxy configuration +<4> SSL configuration +<5> Client service configuration + +== Creating the WebClient + +You can create WebClient by executing `WebClient.create()` method. This will create an instance of client with default settings and without a base uri set. + +To change the default settings and register +additional services, you can use simple builder that allows you to customize the client behavior. + +=== Example +.Create a WebClient with simple builder: [source,java] ---- WebClient client = WebClient.builder() .baseUri("http://localhost") .build(); +---- + +== Creating and Executing the WebClient Request -CompletionStage response = webClient.get() +WebClient executes requests to the target endpoints and returns specific response type. + +It offers the following methods to specify the type of request you want to execute: + +* `put()` +* `get()` +* `method(String methodName)` + +These methods set specific request type based on their name or parameter to the new instance of `WebClientRequesBuilder` and return this instance based on configurations for specific request type. + +You can set configuration for every request type before it is sent. + +// Do we need to include how to configure the request. If so, please provide info for request type. + +For the final execution, use the following methods with variations and different parameters: + +* `CompletionStage submit(Object entity, Class responseType)` +* `CompletionStage request(Class responseType)` + +=== Example +.Execute a simple GET request to endpoint: +[source,java] +---- +CompletionStage response = client.get() .path("/endpoint") .request(String.class); ---- -=== Example of a GET Request With Json Object +== Designing the WebClient for JsonObject -In this case, JsonObject processing is not present in the WebClient by default. So, you must first register the Json object before making a request. +JsonObject processing is not present in the WebClient by default. So, you must first register the JsonObject before making a request. [source,java] .Register JsonObject to the request builder using the register method. @@ -70,11 +182,11 @@ WebClient client = WebClient.builder() .baseUri("http://localhost") .build(); -CompletionStage response = webClient.get() +CompletionStage response = client.get() .path("/endpoint") .register(jsonProcessing.newReader()) .request(JsonObject.class); ----- +---- [source,java] .Make a GET or PUT request to the endpoint. @@ -85,12 +197,24 @@ WebClient client = WebClient.builder() .baseUri("http://localhost") .build(); -CompletionStage response = webClient.put() +CompletionStage response = client.put() .path("/endpoint") .register(jsonProcessing.newWriter()) .submit(entity); ---- +== Using a Sample WebClient + +The sample setup shows you how to use the WebClient. + +. Set the port that will be used in one of folowing ways: +.. Set explicit port to `application.yaml` in section `server.port`. +.. Pass server port as the main method parameter to `ClientMain`. +. Start `WebServer` by calling `ServerMain.main()`. +. Start `WebClientExample` by calling `ClientMain.main()`. + +If you did not set port using config file, pass generated server port to the main method as a parameter. + == Maven Coordinates The <> page describes how you should declare dependency management for Helidon applications. You must declare the following dependency in your project's pom.xml: From aac753d057c1f792c4ceafb63b5ebba1b963ab72 Mon Sep 17 00:00:00 2001 From: Vanaja Guruprasad <42369326+vanajaguru@users.noreply.github.com> Date: Thu, 23 Apr 2020 22:51:15 +0530 Subject: [PATCH 06/93] Worked on the suggested changes --- docs/se/webclient/01_introduction.adoc | Bin 7731 -> 9059 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/se/webclient/01_introduction.adoc b/docs/se/webclient/01_introduction.adoc index a5a8c061ca62ae376a4d371787e9da14d879aa31..a721c050de0902ff7571515144526e2d65ce07e2 100644 GIT binary patch delta 2611 zcmb_eOK%%h6ej8dbyP)a32mvmICy1O$qZSrsEJcKfvB#avGPzB2;u9QW6zal<_`B> z$Bh(ee#C6xUm)d2ux5$G2Jt_Db06b4A%O_tg&+5E&iT&weP?{J_50qB_wTJn5gcGH zPB8(UVx2$xr~-wt=AsB_ub(7tr&$D1Kq}^-1+8e1_}vVZhFBC6KAlO{Ts$rlrv247 zN)$sWVpNJ3Q;0LB6ikGK6CCem91Gn<4}zd~@!($h@C7gh394A~F-748Y;7I*T)WG; zwzn^STl-<9>JbcA%9ZUPI7)F*B~`4c0tHMWjG3ay1cz`_HCZO+raDm?2rPq=NtUBV zsn&rN3B)NYrU>&C3t*s1jQNDeK6a&nE5LUc&j@uG1n0e8FE}4IG2r}j3&sYg-O)_) zb}QAo>_!p3V|kfj7>m5s83Dlg{wYey3BRrKSaO(1kze+U0+dXr?N($y=u%~F5m}1L z)~R8~prRynlG-BAY$ffM{oY!K)&iZ+Xz$wHOW;iyPcns?NH)!huXam`9QXXMEBTuv zf4`g}OQ@S|{|Ou0;J=0}N&0b&rEY(P31>%VC5HXs@XNt&|7fuP_S-jy`)@n0HMUT9 zZz)A(RQR6jdN5k(%4=e0#xqJi^3r3O5>QHUYCF7O(g!8ZQ$dZ?DbrM7R=QRylqR1M zJu@xRJf3AtdI(hrMrh4l(pNVKUciWap{ZX6&`z2<98)t%;gP53wG&2|>OA|pv9VwL2KvJRRY0^GcS?8E8gfp6NKaM;)so8% zXLgkgn`Ev`;=rI66I--IRf>Y}8ee;LQx4)m;*=|jN>nMurnn=LvjdxR>(#c;-Whdi z*tm1b4}$uaM-O&<5?5n*TeuTjwh89|EQhOqezaEkFm9L1>h;VRHt3BFU}=(Cv%ul3 zEQQpK8y4aZg6rqoW?^I4al!)SFVf^HgeJY9qTKaQkGm_pUVZYcf`OTicCgtAwGN}J zv%GN>9hsSFYKFSY(FC{k_uvaR;w+EN3D+mffxqJ*o0)7upnWuqoq3(Xoc3>0ff?y4 zrS}9_ECoGbSe7;9s)qT6*(pJ6A3b6H=ldVle>^;{D7K@zeHCQr(zQFCfTpZ{MG-Ng zt^py-nUpT+v1z>h=V_FLy{_6>&)J;xS%N6B7=Nw`R$`9=$2dtTvMR zM@W{NcIUHTgI;iFcInwvf4ueq7t|%^BX2DtjU4IVD#v(pf_S}&cKaxI>J=rMy8j#k z1f`G*4h+Xn>idsZ>-DFv{|}z6DHdAt6XcFeS2SI2mC_~C|DNJMavhlwa5L98=B&Se L+POG+{_DzLiRpov delta 1197 zcma)6!EO^V5LML+^$jH8f?z83kU--|oDgk#X$vY+Mb)&b5CYb_J4xN{+KcUNnp2K^ zz@88nJ^&=7{0rj1jUQpWPLnNgU{79q-kbMk#{Ttey7_HodHQA9-bBt=w+lNOMhFTq z1*bu(Br8*dQ$6y(iBj;0i~FC@6EQ-LBrQwqy89 z{k}Lya`$}q2&k|J$46I2eRsSERB555awPG874nT{nW+oXjiCqKuGRUq8i%9m^R0JJ z*tX88-A-!NcVdW}^A;YWEwr+@Masg8xRScNyeO+rcOFhcE&t*E#7OE4xo0r@xGm#c zx>iU{1*~1MUJs7z<_PEuF9hcK89Smf*syESl?7OuUJGMghB2OK>THIF%U z$X37RjvyXGBC^bjjl$mkgrd2pY_ Date: Fri, 24 Apr 2020 09:12:42 -0400 Subject: [PATCH 07/93] new images and updates to MP intro --- docs/mp/introduction/01_introduction.adoc | 27 ++++++----------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/docs/mp/introduction/01_introduction.adoc b/docs/mp/introduction/01_introduction.adoc index bf31c59ae90..519687add9b 100644 --- a/docs/mp/introduction/01_introduction.adoc +++ b/docs/mp/introduction/01_introduction.adoc @@ -32,30 +32,18 @@ MicroProfile has its roots in Java EE, the MicroProfile APIs follow a familiar, declarative approach with heavy use of annotations. This makes it a good choice for Java EE developers. -For comparison, the high-level differences between Helidon MP and Helidon SE are described below. +image::images/MP_components.png["MP Components",align="center"] + === MicroProfile APIs -MicroProfile starts with a core of Java EE APIs, then defines a number +MicroProfile starts with a core set of Java EE APIs, such as Config, Metrics and Fault Tolerance. Helidon then defines a number of new APIs to add capabilities you need for writing modern cloud native -applications. - -//sent new image to graphics on 4/13 that will replace this long list of bullets. - -* JAX-RS -* JSON-P -* JSON-B -* CDI -* MicroProfile Config -* MicroProfile Fault Tolerance -* MicroProfile Health Checks -* MicroProfile JWT Authentication -* MicroProfile Metrics -* MicroProfile OpenAPI -* MicroProfile OpenTracing -* MicroProfile Rest Client +applications. + + For more information about the Helidon MicroProfile APIs see https://github.com/oracle/helidon/wiki/Supported-APIs[the Helidon API Wiki page]. @@ -68,8 +56,7 @@ covered by MicroProfile. Examples include: * DataSource for Oracle UCP and HikariCP * JPA * JTA -* Jedis -* OCI Object storage + === No Application Server From dd3c03224be23e76fc41f03e194e7f255620c7e5 Mon Sep 17 00:00:00 2001 From: Lisa Jamen <31409174+ljamen@users.noreply.github.com> Date: Fri, 24 Apr 2020 09:17:02 -0400 Subject: [PATCH 08/93] new images --- docs/images/MP_components.png | Bin 0 -> 15947 bytes docs/images/SE_components.png | Bin 0 -> 16719 bytes docs/images/helidon_arch.png | Bin 0 -> 5197 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/MP_components.png create mode 100644 docs/images/SE_components.png create mode 100644 docs/images/helidon_arch.png diff --git a/docs/images/MP_components.png b/docs/images/MP_components.png new file mode 100644 index 0000000000000000000000000000000000000000..83b906cf7e2024e63c9d13ddcd1cd76122dbef9f GIT binary patch literal 15947 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