From 23297bde017504e25cdc8a866f000096ffbd1b8d Mon Sep 17 00:00:00 2001 From: Jean-Francois Denise Date: Wed, 10 Jan 2024 12:55:30 +0100 Subject: [PATCH 1/2] WildFly Glow blog for WF 31 --- _posts/2024-01-29-wildfly-glow.adoc | 523 ++++++++++++++++++++++++++++ assets/img/news/wildfly-glow1.jpg | Bin 0 -> 46959 bytes assets/img/news/wildfly-glow2.jpg | Bin 0 -> 51858 bytes 3 files changed, 523 insertions(+) create mode 100644 _posts/2024-01-29-wildfly-glow.adoc create mode 100644 assets/img/news/wildfly-glow1.jpg create mode 100644 assets/img/news/wildfly-glow2.jpg diff --git a/_posts/2024-01-29-wildfly-glow.adoc b/_posts/2024-01-29-wildfly-glow.adoc new file mode 100644 index 00000000..66e3ebab --- /dev/null +++ b/_posts/2024-01-29-wildfly-glow.adoc @@ -0,0 +1,523 @@ +--- +layout: post +title: "WildFly Glow, an evolution of WildFly provisioning" +date: 2024-01-29 +tags: galleon provisioning wildfly-glow +author: jdenise +description: WildFly Glow, an evolution of WildFly provisioning. +--- + +We are introducing an evolution of WildFly provisioning by means of the https://github.com/wildfly/wildfly-glow[WildFly Glow] project. + +== What is WildFly provisioning? + +Even though WildFly provisioning has been available for some time now, a quick summary seems useful to put WildFly Glow in context. + +WildFly provisioning is: + +* The ability to create a WildFly server installation on the fly. +* The ability to choose the set of features you want to see in the created server. +* The ability to extend the capabilities of the WildFly server (e.g.: datasources, Keycloak SAML). + +The produced server has a smaller size than a full installation and the server process has a smaller memory footprint. Trimming comes with some benefits: + +* Reduced resource consumption. +* Smaller attack surface. +* Simpler server configuration. + +https://docs.wildfly.org/galleon/[Galleon] is the technology used by WildFly provisioning. + +=== How is provisioning performed? + +WildFly provisioning uses two kinds of tooling: + +* Command Line tools: +** https://docs.wildfly.org/galleon/[Galleon CLI] + +* Maven Plugins: +** https://docs.wildfly.org/galleon/[Galleon Maven Plugin] +** https://github.com/wildfly/wildfly-maven-plugin[WildFly Maven Plugin] +** https://github.com/wildfly-extras/wildfly-jar-maven-plugin[WildFly Bootable JAR Maven Plugin] + +=== What are the main concepts of WildFly provisioning? + +* Galleon feature-packs: contains metadata on how to build a WildFly server. +* Galleon layers: contains metadata of a server feature (eg: jaxrs, ejb, jsf, ...). + +If you want to deep dive into Galleon concepts, you can have a look at its https://docs.wildfly.org/galleon/[documentation]. In the context of WildFly Glow, feature-packs and layers are really +all you need to know about. + +Provisioning a WildFly server is mainly selecting Galleon feature-packs and Galleon layers. + +=== WildFly provisioning diagram + +image::wildfly-glow1.jpg[WildFly provisioning diagram] + +The above shows a simplified representation of what provisioning is. Let's look at the complexity that comes with such flexibility. + +== Current WildFly provisioning has a complex configuration + +The issues we are currently facing are mainly located at the user configuration level. +It is not that trivial to build up a proper WildFly server to run your applications. + +Known issues: + +* How to know about available Galleon feature-packs? +* How to discover the Galleon layers that my application requires to properly work? + +Current solutions: + +* Use https://docs.wildfly.org/30/[WildFly documentation], look at https://github.com/wildfly/quickstart[WildFly quickstarts], +search for blogs and/or github projects to discover extra feature-packs. + +* Use WildFly base layers (aggregators for the main application use cases) such as `cloud-server` or `jaxrs-server` layers. +Something to note is that when using these aggregators the set of features that you are provisioning may not be optimal. +More content is usually provisioned than what your application requires. Furthermore these layers don't contain everything, +and, to meet your application's requirements, you may need to add some more layers (e.g.: `microprofile-config`, `ejb`, `jsf`, ...). + +To summarize we need a way to discover all the extra Galleon feature-packs that would provide interesting features and a way to link +the deployed application(s) to the set of required Galleon layers. + +This is what https://github.com/wildfly/wildfly-glow[WildFly Glow] is all about, a provisioning time bridge between the deployment and the WildFly server. + +== WildFly Glow + +Glow stands for “Galleon Layers Output from War”. By inspecting your deployments(s), WildFly Glow +can determine the set of Galleon feature-packs and layers that your application requires. + +[NOTE] +==== +Despite the "War" used in the acronym that led to WildFly Glow's name, it can analyze all Jakarta EE deployment types, not just .war files. +==== + +WildFly Glow knows the set of feature-packs compatible with a given WildFly version. +It understands the connection that exists between Galleon layers and your application: + +* Java types and annotations in use +* XML descriptors, +* Properties files, … + +WildFly Glow can suggest interesting features not directly required by your application but meaningful. For example: SSL when Undertow is in use, +Microprofile OpenAPI when Jakarta REST is in use, WildFly CLI tools (all CLI launch scripts located in the WILDFLY_HOME/bin directory), ... + +WildFly Glow goes one step further than pure provisioning by identifying potential errors. And, when errors are identified, +it can suggest ways to fix them (eg: add a missing datasource, add a missing access to a JMS broker). + +To summarize, WildFly Glow can build the server from your deployments and helps you discover additional +WildFly server features that you are perhaps not aware of. + +The WildFly documentation site includes http://docs.wildfly.org/wildfly-glow[detailed documentation] of WildFly Glow. + +=== WildFly Glow Features + +==== A set of Tooling + +* WildFly Glow CLI, a standalone tool to scan your deployment to produce a WildFly server, a WildFly Bootable JAR or a docker image. +* Integration into the WildFly Maven plugin 5.x -- no more explicit feature-packs and layers in the plugin configuration. +* WildFly Glow Arquillian Maven plugin to scan your tests to produce a WildFly server required to execute your tests. + +==== Handling of High Availability + +* WildFly Glow allows you to enable a “ha” profile to produce an High Available WildFly server. + +==== Handling of 2 execution contexts + +* bare-metal (the default). +* cloud, to execute on Openshift and/or Kubernetes. In addition to fine tuning the server configuration for cloud execution, +WildFly Glow discovers and advertises the WildFly env variables usable to configure the server at startup. + +==== Handling of datasources + +* Identify missing datasources and suggest datasources that you can use to connect to databases. + +==== Knowledge of extra Feature-packs + +A centralized knowledge (located in the https://github.com/wildfly/wildfly-galleon-feature-packs[wildfly-galleon-feature-packs] github project) +of extra Galleon feature-packs compatible with WildFly. The WildFly features defined in these extra feature-packs +are included in the provisioned server when WildFly Glow detects a need for them. + +The set of extra features supported are: + +* https://github.com/wildfly-extras/wildfly-cloud-galleon-pack[Cloud features] +* Support for the major https://github.com/wildfly-extras/wildfly-datasources-galleon-pack[datasources] (PostgreSQL, MySQL, MariaDB, MSSQLServer, Oracle) +* https://github.com/keycloak/keycloak[Keycloak] SAML +* https://github.com/wildfly-extras/wildfly-grpc-feature-pack[GRPc] +* https://github.com/wildfly-extras/wildfly-myfaces-feature-pack[MyFaces] +* https://github.com/wildfly-extras/wildfly-graphql-feature-pack[Microprofile-GraphQL] + +==== Support for WildFly Preview + +WildFly Glow allows you to choose to provision a WildFly Preview server instead of a WildFly server. + +[NOTE] +==== +Don't know about WildFly Preview? To learn more, see the https://docs.wildfly.org/30/WildFly_and_WildFly_Preview.html[WildFly documentation]. +==== + +=== How WildFly Glow operates + +WildFly Glow is used from provisioning tooling: WildFly Glow command line tool or WildFly Maven Plugin (starting with version 5.0.0 Beta). + +Java classes and file descriptors located in your deployments are scanned to identify the required set of galleon layers. + +* It leverages Galleon provisioning artifacts (Feature-packs and Layers). +* It relies on rules included in each Galleon Layer. +** Rules capture the content expected inside the deployment for the layer to be required. +** Rules express the High Availability capability of a layer. +** Rules classify some layers as `add-on` that can be explicitly included. add-ons are advertised according to the set of layers discovered in the deployments. +e.g.: SSL, embedded/remote JMS brokers, datasources, WildFly CLI (jboss-cli, add-users, elytron tooling, .,..). +* It knows about High Availability profile, and will automatically include HA Galleon layers. + +==== WildFly Glow rules + +You can find documentation on the rules contained in WildFly Galleon layers in +this http://docs.wildfly.org/wildfly-galleon-feature-packs/[documentation]. + +==== WildFly Glow Provisioning diagram + +image::wildfly-glow2.jpg[WildFly Glow provisioning diagram] + +== Provisioning tooling usage comparison + +=== WildFly Maven plugin + +==== Simple server + +===== Configuration without WildFly Glow support + +[source,xml] +---- +... + + + + org.wildfly:wildfly-galleon-pack:${version.server} + + + + cloud-server + ejb + +... +---- + +===== Configuration with support for WildFly Glow + +The XML element `` enables the support for WildFly Glow (starting with WildFly Maven Plugin version 5 Beta). +[source,xml] +---- +... + +... +---- + +The provisioning configuration is fully delegated to WildFly Glow. It will include and exclude Galleon layers according to what has been discovered +(exclusion of layers can be required when provisioning an HA server). + +==== HA server for cloud execution with support for a PostgreSQL datasource + +===== Configuration without WildFly Glow support + +[source,xml] +---- +... + + + + org.wildfly:wildfly-galleon-pack:${version.server} + + + org.wildfly.cloud:wildfly-cloud-galleon-pack:${version.cloud} + + + org.wildfly:wildfly-datasources-galleon-pack:${version.ds} + + + + cloud-server + ejb + ejb-dist-cache + jpa-distributed + postgresql-driver + + + ejb-local-cache + jpa + +... +---- + +You can notice that some Galleon layers have been excluded and their HA counter parts have been included. + +==== Configuration with support for WildFly Glow + +The XML element `` is evolved with the `ha` profile, `cloud` context and the `postgresql` add-on. + +[source,xml] +---- +... + + ha + cloud + + postgresql + + +... +---- + +=== And What about WildFly Bootable JAR? + +The https://github.com/wildfly-extras/wildfly-jar-maven-plugin[WildFly Bootable JAR Maven Plugin] has not been evolved to support Glow, +we have evolved the WildFly Maven Plugin to also produce a WildFly Bootable JAR. + +So you can benefit from WildFly Glow and build WildFly executable JARs by using the same Maven plugin. + +To enable Bootable JAR packaging, set the `true` plugin option. + +Details on how to produce WildFly Bootable JAR from the WildFly Maven Plugin will come in a following blog post. + +=== Galleon CLI vs WildFly Glow CLI + +==== Server with support for postgresql datasource + +===== Galleon CLI + +[source,bash] +---- +galleon.sh install wildfly --layers=cloud-server,ejb,jsf --dir=server +galleon.sh install org.wildfly:wildfly-datasources-galleon-pack:6.0.0.Final --layers=postgresql-datasource --dir=server +---- + +You will then have to deploy your application into the provisioned server. + +===== WildFly Glow CLI + +[source,bash] +---- +wildfly-glow.sh scan myapp.war --add-ons=postgresql --provision=SERVER +---- + +[NOTE] +==== +* The provisioned server contains the deployment that has been scanned. + +* By specifying `--provision=BOOTABLE_JAR` you can produce a WildFly bootable JAR. By specifying `--provision=DOCKER_IMAGE` you can produce a Docker image. + +* If you don't use the `--provision` parameter at all, WildFly Glow will simply output a report of what it has discovered. +==== + +Here's an example of producing a Docker image for cloud execution: + +[source,bash] +---- +wildfly-glow.sh scan myapp.war --add-ons=postgresql --provision=DOCKER_IMAGE --cloud +---- + +===== Output example + +WildFly Glow CLI output what it has discovered, for example: + +[source,bash] +---- + +wildfly-glow.sh scan myapp.war + +Wildfly Glow is scanning... +context: bare-metal +enabled profile: none +galleon discovery +- feature-packs + org.wildfly:wildfly-galleon-pack:30.0.1.Final +- layers + ee-core-profile-server + jpa + ejb-lite + jaxrs + jsf + h2-driver + +Some suggestions have been found. You could enable suggestions with --suggest option (if using the WildFly Glow CLI) or true (if using the WildFly Maven Plugin). +If you had included a --provision option to the scan command, after outputting this report, WildFly Glow will continue on to provisioning your WildFly server, bootable jar or Docker image. +---- + +== Understanding why a Galleon layer has been selected + +WildFly Glow is based on rules contained in the Wildfy Galleon layers. If a rule matches, the layer is included. The set of rules +contained in WildFly layers is documented in this http://docs.wildfly.org/wildfly-galleon-feature-packs/[documentation]. + +If verbose mode is enabled (`--verbose` option with the WildFly Glow CLI, `true` option for the maven plugin), +WildFly Glow will output for each layer the rules that matched. + +An example of output: + +---- +... +layers inclusion rules +* ee-core-profile-server + - BASE_LAYER +* ee-concurrency + - JAVA_TYPE: [jakarta.enterprise.concurrent.*] +* undertow-https + - ADD_ON +... +---- + +This output means: + +* `ee-core-profile-server` is a base layer (always included). +* `ee-concurrency` layer is included because a Java class located in the java package `jakarta.enterprise.concurrent` has been found. +* `undertow-https` is included because it is bound to an included add-on (in this case `ssl`). + +== Trimming numbers with WildFly Glow + +We have measured the Disk usage and Memory consumption of some WildFly quickstarts +(using https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[WildFly Glow branch] vs https://github.com/wildfly/quickstart/tree/main[main branch]). We have observed a reduction of 5% to 55% for disk usage +and 5% to 32% for memory consumption. Variation bound to the complexity of the quickstart. If the quickstart requires all the Galleon layers +present in an aggregator layer (eg: `cloud-server` or `jaxrs-server`) then the gain is lower. + +My colleague Kabir Khan has written an interesting https://github.com/kabir/vlog-glow/blob/main/README.md[project] +and is going to publish a Vlog on the https://www.youtube.com/@WildFlyAS[WildFly Channel] that will showcase the gain you can expect with WildFly Glow. Stay tuned! + +== Datasources support, missing datasource detection + +If WildFly Glow detects that your deployment uses datasources, it will abort asking you to take an action to fix the problem. +It will suggest the set of known add-ons allowing WildFly to connect to a database. + +You will have to choose one of the proposed add-ons. + +An example of a reported error when using the WildFly Glow CLI: + +[source,bash] +---- +wildfly-glow scan todo-backend.war + +Wildfly Glow is scanning... +context: bare-metal +enabled profile: none +galleon discovery +- feature-packs + org.wildfly:wildfly-galleon-pack:30.0.1.Final +- layers + ee-core-profile-server + ejb-lite + jpa + jaxrs + +identified errors +* unbound datasources error: java:jboss/datasources/ToDos + To correct this error, enable one of the following add-ons: + - mariadb + - mssqlserver + - mysql + - oracle + - postgresql + +Some suggestions have been found. You could enable suggestions with --suggest option (if using the WildFly Glow CLI) or true (if using the WildFly Maven Plugin). +To enable add-ons, add the --add-ons= option to the scan command +Some errors have been reported. You should fix them prior provisioning a server with the --provision option of the scan command +---- + +== Datasources support, setting a datasource add-on + +We will use the `postgresql` add-on to fix the reported error. + +[source,bash] +---- +wildfly-glow scan todo-backend.war --add-ons=postgresql + +Wildfly Glow is scanning... +context: bare-metal +enabled profile: none +galleon discovery +- feature-packs + org.wildfly:wildfly-galleon-pack:30.0.1.Final + org.wildfly:wildfly-datasources-galleon-pack:6.0.0.Final +- layers + ee-core-profile-server + ejb-lite + jpa + jaxrs + postgresql-datasource + +enabled add-ons +- postgresql : Documentation in https://github.com/wildfly-extras/wildfly-datasources-galleon-pack + +strongly suggested configuration + +postgresql-datasource environment variables: + - POSTGRESQL_DATABASE=Defines the database name to be used in the datasource’s `connection-url` property. + - POSTGRESQL_JNDI=java:jboss/datasources/ToDos + - POSTGRESQL_PASSWORD=Defines the password for the datasource. + - POSTGRESQL_USER=Defines the username for the datasource. + +---- + +WildFly Glow detects that the postgresql datasource has to be configured with environment variables and advertise the set of environment variables to be used when starting the server. + +Example of a server started with environment variables set: + +[source,bash] +---- +POSTGRESQL_DATABASE=test \ +POSTGRESQL_JNDI=java:jboss/datasources/ToDos \ +POSTGRESQL_PASSWORD=test \ +POSTGRESQL_USER=test \ +sh ./bin/target/server/bin/standalone.sh +---- + +== Experimenting with WildFly Glow + +=== Using the WildFly Glow CLI + +To get started with the WildFly Glow CLI, you can download the https://github.com/wildfly/wildfly-glow/releases[latest WildFly Glow CLI]. + +To scan a deployment you plan to deploy to WildFly, call: + +[source,bash] +---- +wildfly-glow.sh scan +---- + +You can report issues/suggestions as https://github.com/wildfly/wildfly-glow/issues[Issues] in the WildFly Glow project. + +=== Using the WildFly Maven Plugin + +The WildFly quickstarts have been ported to rely on WildFly Glow. You can clone the following quickstart https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[branch] and play with the quickstarts of your choice. +For example: + +[source,bash] +---- +cd helloworld +mvn clean package -Pprovisioned-server +---- + +To produce a WildFly Bootable JAR call: + +[source,bash] +---- +cd microprofile-config +mvn clean package -Pbootable-jar +---- + +== Status + +For WildFly 31, WildFly Glow is at a Beta level of quality. Some facts: + +** https://github.com/wildfly/wildfly-glow/releases[Latest WildFly Glow] version is currently 1.0.0.Beta7. +** https://github.com/wildfly/wildfly-maven-plugin[WildFly Maven Plugin] 5.0.0.Beta2 supports WildFly Glow and the ability to produce a WildFly Bootable JAR. +** All WildFly quickstarts have been ported to use WildFly Glow in this preview https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[branch]. +** The WildFly 31 testsuite has been enhanced to use WildFly Glow everywhere where it is practical. +** WildFly Galleon feature-packs https://github.com/wildfly/wildfly-galleon-feature-packs[registry] is open to contribute more extra feature-packs compatible with WildFly. + +Final level of quality is expected for WildFly 32 + +** WildFly Glow Final. +** WildFly Quickstarts main branch migrated to WildFly Glow. + +We hope that you will find interest in this simplified approach to provisioning WildFly servers. Your feedback would be very valuable to evolve WildFly Glow in the right direction. +Feel free to log issues in the https://github.com/wildfly/wildfly-glow/issues[project]. + +Thank-you! + +Jean-Francois Denise \ No newline at end of file diff --git a/assets/img/news/wildfly-glow1.jpg b/assets/img/news/wildfly-glow1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ec96f43940dedb72a58bac2397fa66b234c4131 GIT binary patch literal 46959 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 literal 0 HcmV?d00001 diff --git a/assets/img/news/wildfly-glow2.jpg b/assets/img/news/wildfly-glow2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0f223f4907e9cc48b6ccbe54ec29d0141ca5ab7 GIT binary patch literal 51858 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 B4!r;X literal 0 HcmV?d00001 From 0cd1e8b677b617e99632488f334a08c6016f7cc6 Mon Sep 17 00:00:00 2001 From: Brian Stansberry Date: Mon, 29 Jan 2024 11:39:17 -0600 Subject: [PATCH 2/2] WildFly Glow blog copy edits, link updates (e.g. to WF 31) --- _posts/2024-01-29-wildfly-glow.adoc | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/_posts/2024-01-29-wildfly-glow.adoc b/_posts/2024-01-29-wildfly-glow.adoc index 66e3ebab..a4ec13da 100644 --- a/_posts/2024-01-29-wildfly-glow.adoc +++ b/_posts/2024-01-29-wildfly-glow.adoc @@ -32,17 +32,17 @@ https://docs.wildfly.org/galleon/[Galleon] is the technology used by WildFly pro WildFly provisioning uses two kinds of tooling: * Command Line tools: -** https://docs.wildfly.org/galleon/[Galleon CLI] +** https://docs.wildfly.org/galleon/#_galleon_cli_tool[Galleon CLI] * Maven Plugins: -** https://docs.wildfly.org/galleon/[Galleon Maven Plugin] +** https://docs.wildfly.org/galleon/#_maven_plugin[Galleon Maven Plugin] ** https://github.com/wildfly/wildfly-maven-plugin[WildFly Maven Plugin] ** https://github.com/wildfly-extras/wildfly-jar-maven-plugin[WildFly Bootable JAR Maven Plugin] === What are the main concepts of WildFly provisioning? -* Galleon feature-packs: contains metadata on how to build a WildFly server. -* Galleon layers: contains metadata of a server feature (eg: jaxrs, ejb, jsf, ...). +* Galleon feature-packs: contain metadata on how to build a WildFly server. +* Galleon layers: contain metadata of a high level server feature (eg: jaxrs, ejb, jsf, ...). If you want to deep dive into Galleon concepts, you can have a look at its https://docs.wildfly.org/galleon/[documentation]. In the context of WildFly Glow, feature-packs and layers are really all you need to know about. @@ -67,7 +67,7 @@ Known issues: Current solutions: -* Use https://docs.wildfly.org/30/[WildFly documentation], look at https://github.com/wildfly/quickstart[WildFly quickstarts], +* Use https://docs.wildfly.org/31/[WildFly documentation], look at https://github.com/wildfly/quickstart[WildFly quickstarts], search for blogs and/or github projects to discover extra feature-packs. * Use WildFly base layers (aggregators for the main application use cases) such as `cloud-server` or `jaxrs-server` layers. @@ -113,12 +113,12 @@ The WildFly documentation site includes http://docs.wildfly.org/wildfly-glow[det ==== A set of Tooling * WildFly Glow CLI, a standalone tool to scan your deployment to produce a WildFly server, a WildFly Bootable JAR or a docker image. -* Integration into the WildFly Maven plugin 5.x -- no more explicit feature-packs and layers in the plugin configuration. +* Integration into the WildFly Maven Plugin 5.x -- no more need for explicit feature-packs and layers in the plugin configuration. * WildFly Glow Arquillian Maven plugin to scan your tests to produce a WildFly server required to execute your tests. ==== Handling of High Availability -* WildFly Glow allows you to enable a “ha” profile to produce an High Available WildFly server. +* WildFly Glow allows you to enable an “ha” profile to produce a High Availablity WildFly server. ==== Handling of 2 execution contexts @@ -156,7 +156,7 @@ Don't know about WildFly Preview? To learn more, see the https://docs.wildfly.or === How WildFly Glow operates -WildFly Glow is used from provisioning tooling: WildFly Glow command line tool or WildFly Maven Plugin (starting with version 5.0.0 Beta). +WildFly Glow is used from provisioning tooling: the WildFly Glow command line tool or the WildFly Maven Plugin (starting with version 5.0.0 Beta). Java classes and file descriptors located in your deployments are scanned to identify the required set of galleon layers. @@ -268,8 +268,8 @@ The XML element `` is evolved with the `ha` profile, === And What about WildFly Bootable JAR? -The https://github.com/wildfly-extras/wildfly-jar-maven-plugin[WildFly Bootable JAR Maven Plugin] has not been evolved to support Glow, -we have evolved the WildFly Maven Plugin to also produce a WildFly Bootable JAR. +The https://github.com/wildfly-extras/wildfly-jar-maven-plugin[WildFly Bootable JAR Maven Plugin] has not been evolved to support WildFly Glow. +Instead, we have evolved the WildFly Maven Plugin to also produce a WildFly Bootable JAR. So you can benefit from WildFly Glow and build WildFly executable JARs by using the same Maven plugin. @@ -316,7 +316,7 @@ wildfly-glow.sh scan myapp.war --add-ons=postgresql --provision=DOCKER_IMAGE --c ===== Output example -WildFly Glow CLI output what it has discovered, for example: +WildFly Glow CLI output shows what it has discovered, for example: [source,bash] ---- @@ -343,7 +343,7 @@ If you had included a --provision option to the scan command, after outputting t == Understanding why a Galleon layer has been selected -WildFly Glow is based on rules contained in the Wildfy Galleon layers. If a rule matches, the layer is included. The set of rules +WildFly Glow is based on rules contained in the WildFly Galleon layers. If a rule matches, the layer is included. The set of rules contained in WildFly layers is documented in this http://docs.wildfly.org/wildfly-galleon-feature-packs/[documentation]. If verbose mode is enabled (`--verbose` option with the WildFly Glow CLI, `true` option for the maven plugin), @@ -372,8 +372,8 @@ This output means: == Trimming numbers with WildFly Glow We have measured the Disk usage and Memory consumption of some WildFly quickstarts -(using https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[WildFly Glow branch] vs https://github.com/wildfly/quickstart/tree/main[main branch]). We have observed a reduction of 5% to 55% for disk usage -and 5% to 32% for memory consumption. Variation bound to the complexity of the quickstart. If the quickstart requires all the Galleon layers +(using the https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[WildFly Glow branch] vs the https://github.com/wildfly/quickstart/tree/main[main branch]). We have observed a reduction of 5% to 55% for disk usage +and 5% to 32% for memory consumption. Variation is bound to the complexity of the quickstart. If the quickstart requires all the Galleon layers present in an aggregator layer (eg: `cloud-server` or `jaxrs-server`) then the gain is lower. My colleague Kabir Khan has written an interesting https://github.com/kabir/vlog-glow/blob/main/README.md[project] @@ -453,7 +453,7 @@ postgresql-datasource environment variables: ---- -WildFly Glow detects that the postgresql datasource has to be configured with environment variables and advertise the set of environment variables to be used when starting the server. +WildFly Glow detects that the postgresql datasource has to be configured with environment variables and advertises the set of environment variables to be used when starting the server. Example of a server started with environment variables set: @@ -470,7 +470,7 @@ sh ./bin/target/server/bin/standalone.sh === Using the WildFly Glow CLI -To get started with the WildFly Glow CLI, you can download the https://github.com/wildfly/wildfly-glow/releases[latest WildFly Glow CLI]. +To get started with the WildFly Glow CLI, you can download the https://github.com/wildfly/wildfly-glow/releases[latest release]. To scan a deployment you plan to deploy to WildFly, call: @@ -483,7 +483,7 @@ You can report issues/suggestions as https://github.com/wildfly/wildfly-glow/iss === Using the WildFly Maven Plugin -The WildFly quickstarts have been ported to rely on WildFly Glow. You can clone the following quickstart https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[branch] and play with the quickstarts of your choice. +The WildFly quickstarts have been ported to rely on WildFly Glow. You can clone the quickstart https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[glow-preview branch] and play with the quickstarts of your choice. For example: [source,bash] @@ -507,7 +507,7 @@ For WildFly 31, WildFly Glow is at a Beta level of quality. Some facts: ** https://github.com/wildfly/wildfly-glow/releases[Latest WildFly Glow] version is currently 1.0.0.Beta7. ** https://github.com/wildfly/wildfly-maven-plugin[WildFly Maven Plugin] 5.0.0.Beta2 supports WildFly Glow and the ability to produce a WildFly Bootable JAR. ** All WildFly quickstarts have been ported to use WildFly Glow in this preview https://github.com/wildfly/quickstart/tree/31.0.0.Final-glow-preview[branch]. -** The WildFly 31 testsuite has been enhanced to use WildFly Glow everywhere where it is practical. +** The WildFly 31 testsuite has been enhanced to use WildFly Glow everywhere it is practical. ** WildFly Galleon feature-packs https://github.com/wildfly/wildfly-galleon-feature-packs[registry] is open to contribute more extra feature-packs compatible with WildFly. Final level of quality is expected for WildFly 32