[[wildfly_layers]]
=== WildFly Layers

ifdef::env-github[]
:tip-caption: :bulb:
:note-caption: :information_source:
:important-caption: :heavy_exclamation_mark:
:caution-caption: :fire:
:warning-caption: :warning:
endif::[]

A Galleon layer is a name that identifies a server capability (e.g.: jaxrs, 
ejb, microprofile-config, jpa) or an aggregation of such capabilities. A layer captures a server capability in the form of:

* A piece of server XML configuration (e.g.: extension, configured subsystem, interfaces) that describes the capability.
* A set of modules and other filesystem content that implements the capability.

When you are using a layer, it delivers these pieces of information in order for 
Galleon to assemble a server containing only the required configuration and modules. 

In the tables below we provide basic information about all of the layers WildFly provides.

Besides the layer names and a brief description of each, the tables below detail the various dependency relationships
between layers. If the capabilities provided by a layer A require capabilities provided by another layer B, then layer A will _depend on_ layer B.
If you ask for layer A, then Galleon will automatically provide B as well. In some cases A's dependency on B can be _optional_; that
is A typically comes with B, but can function without it. In this case if you ask for A by default Galleon will provide B as well,
but you can tell Galleon to _exclude_ B.

Some layers are logical _alternatives_ to other layers. If two layers are alternatives to each other they both provide the same general
capabilities, but with different implementation characteristics. For example a number of layers provide the capability to cache different
types of objects. These layers typically come in pairs of alternatives, where one alternative provides local caching, while the other provides
distributed caching.  If a layer you want has an optional dependency on a layer that has an alternative, you can exclude that dependency
and instead specify the alternative. If a layer has an alternative the Description column in the tables below will identify it.

[NOTE]
====
If the elytron layer is present, security will be handled by the elytron subsystem.
The undertow and ejb subsystems are configured with an _other_ _application-security-domain_ that references the Elytron _ApplicationDomain_ security domain.
====

[[wildfly_foundational_galleon_layers]]
==== Foundational Galleon layers

A single Galleon layer can provide a relatively small set of capabilities, but most users will want to start with a broader set
of capabilities without having to spell out all the details. To help with this WildFly provides a few foundational layers
all of which provide typical core WildFly capabilities like the logging subsystem and a secure remote management interface.

You don't have to base your WildFly installation on one of these foundational layers, but doing so may be more convenient.

[cols="1,2,1"]
|===
|Name |Description |Dependencies

|[[gal.datasources-web-server]]datasources-web-server
| A servlet container with support for datasources.
|
link:#gal.core-server[core-server] +
link:#gal.core-tools[core-tools] (optional) +
link:#gal.datasources[datasources] (optional) +
link:#gal.elytron[elytron] +
link:#gal.web-server[web-server] +

|[[gal.jaxrs-server]]jaxrs-server
|An extension of _datasources-web-server_ with support for Jakarta RESTful Web Services, CDI and JPA.
|
link:#gal.bean-validation[bean-validation] (optional) +
link:#gal.cdi[cdi] (optional) +
link:#gal.datasources-web-server[datasources-web-server] +
link:#gal.jaxrs[jaxrs] (optional) +
link:#gal.jpa[jpa] (optional) +
link:#gal.microprofile-rest-client[microprofile-rest-client] (optional) +

|[[gal.cloud-server]]cloud-server
| An extension of _jaxrs-server_ to address common cloud requirements.
|
link:#gal.ee-security[ee-security] (optional) +
link:#gal.jaxrs-server[jaxrs-server] +
link:#gal.jms-activemq[jms-activemq] (optional) +
link:#gal.observability[observability] (optional) +
link:#gal.resource-adapters[resource-adapters] (optional) +

|[[gal.core-server]]core-server
|A typical manageable server core. This layer could serve as a base for a more 
specialized WildFly that doesn't need the capabilities provided by the other foundational layers.
|
link:#gal.core-management[core-management] (optional) +
link:#gal.jmx-remoting[jmx-remoting] (optional) +
link:#gal.logging[logging] (optional) +
link:#gal.management[management] (optional) +
link:#gal.request-controller[request-controller] (optional) +
link:#gal.security-manager[security-manager] (optional) +

|[[gal.ee-core-profile-server]]ee-core-profile-server
| A Jakarta EE Core Profile server.
|
link:#gal.core-server[core-server] +
link:#gal.cdi[cdi] +
link:#gal.ee-integration[ee-integration] +
link:#gal.elytron[elytron] +
link:#gal.jaxrs[jaxrs-core] +
link:#gal.jsonp[jsonp] +
link:#gal.jsonb[jsonb] +

|===

[[wildfly_basic_galleon_layers]]
==== Basic Galleon Layers

[cols="1,2,1"]
|===
|Name |Description |Dependencies
|[[gal.base-server]]base-server
|Empty runnable server.
|
link:#gal.git-history[git-history] (optional) +

|[[gal.batch-jberet]]batch-jberet
|Support for Jakarta Batch.
|
link:#gal.cdi[cdi] +
link:#gal.ee[ee] +
link:#gal.elytron[elytron] +
link:#gal.transactions[transactions] +

|[[gal.bean-validation]]bean-validation
|Support for Jakarta Bean Validation.
|
link:#gal.base-server[base-server] +
link:#gal.cdi[cdi] (optional) +

|[[gal.cdi]]cdi
|Support for Jakarta Contexts and Dependency Injection.
|
link:#gal.base-server[base-server] +
link:#gal.bean-validation[bean-validation] (optional) +

|[[gal.cloud-profile]]cloud-profile
|An aggregation of some basic layers to address cloud use cases.
|
link:#gal.bean-validation[bean-validation] (optional) +
link:#gal.cdi[cdi] (optional) +
link:#gal.ee-security[ee-security] (optional) +
link:#gal.jaxrs[jaxrs] (optional) +
link:#gal.jms-activemq[jms-activemq] (optional) +
link:#gal.jpa[jpa] (optional) +
link:#gal.observability[observability] (optional) +
link:#gal.resource-adapters[resource-adapters] (optional) +
link:#gal.web-server[web-server] +

|[[gal.core-management]]core-management
|Support for server management services.
|
link:#gal.base-server[base-server] +

|[[gal.core-tools]]core-tools
|Support for _jboss-cli_, _add-user_ and _elytron-tool_ launch scripts and configuration files.
|
link:#gal.management[management] (optional) +

|[[gal.datasources]]datasources
|Support for datasources.
|
link:#gal.transactions[transactions] +

|[[gal.deployment-scanner]]deployment-scanner
|Support for deployment directory scanning.
|
link:#gal.base-server[base-server] +

|[[gal.discovery]]discovery
|Support for discovery.
|
link:#gal.base-server[base-server] +

|[[gal.ee]]ee
|Support for common functionality in the Jakarta EE platform and for Jakarta Concurrency.
|
link:#gal.ee-concurrency[ee-concurrency] (optional) +
link:#gal.ee-integration[ee-integration] +

|[[gal.ee-concurrency]]ee-concurrency
|Support for Jakarta Concurrency.
|
link:#gal.naming[naming] +

|[[gal.ee-integration]]ee-integration
|Support for common functionality in the Jakarta EE platform.
|
link:#gal.jsonb[jsonb] (optional) +
link:#gal.naming[naming] +

|[[gal.ee-security]]ee-security
|Support for EE Security.
|
link:#gal.cdi[cdi] +
link:#gal.elytron[elytron] +

|[[gal.ejb-http-invoker]]ejb-http-invoker
|Support for invoking Jakarta Enterprise Beans over HTTP.
|
link:#gal.ejb-lite[ejb-lite] +
link:#gal.elytron[elytron] +
link:#gal.undertow[undertow] +

|[[gal.ejb]]ejb
|Support for Jakarta Enterprise Beans, excluding the IIOP protocol.
|
link:#gal.ejb-lite[ejb-lite] +
link:#gal.messaging-activemq[messaging-activemq] +
link:#gal.remoting[remoting] +
link:#gal.resource-adapters[resource-adapters] +
link:#gal.undertow[undertow] +

|[[gal.ejb-dist-cache]]ejb-dist-cache
|Infinispan-based distributed cache for stateful session beans. +
_Alternative:_ link:#gal.ejb-local-cache[ejb-local-cache]
|
link:#gal.transactions[transactions] +

|[[gal.ejb-lite]]ejb-lite
|Support for Jakarta Enterprise Beans Lite.
|
link:#gal.ejb-local-cache[ejb-local-cache] (optional) +
link:#gal.naming[naming] +
link:#gal.transactions[transactions] +

|[[gal.ejb-local-cache]]ejb-local-cache
|Infinispan-based local cache for stateful session beans. +
_Alternative:_ link:#gal.ejb-dist-cache[ejb-dist-cache]
|
link:#gal.transactions[transactions] +

|[[gal.elytron]]elytron
|Support for Elytron security.
|
link:#gal.base-server[base-server] +

|[[gal.embedded-activemq]]embedded-activemq
|Support for an embedded Apache Activemq Artemis Jakarta Messaging broker. +
_Alternative:_ link:#gal.remote-activemq[remote-activemq]
|
link:#gal.cdi[cdi] +
link:#gal.ee[ee] +
link:#gal.elytron[elytron] +
link:#gal.naming[naming] +
link:#gal.remoting[remoting] +
link:#gal.resource-adapters[messaging-activemq] +
link:#gal.undertow[undertow] +

|[[gal.git-history]]git-history
|Support for using _git_ for configuration management.
|

|[[gal.hibernate-search]]hibernate-search
|Support for Hibernate Search. The _link:#gal.jpa[jpa]_ dependency can be excluded and _link:#gal.jpa-distributed[jpa-distributed]_ used instead.
|
link:#gal.jpa[jpa] (optional) +

|[[gal.h2-datasource]]h2-datasource
|Support for an H2 datasource
|
link:#gal.h2-driver[h2-driver] +

|[[gal.h2-default-datasource]]h2-default-datasource
|Support for an H2 datasource set as the ee subsystem default datasource.
|
link:#gal.h2-datasource[h2-datasource] +

|[[gal.h2-driver]]h2-driver
|Support for the H2 JDBC driver.
|
link:#gal.base-server[base-server] +

|[[gal.iiop-openjdk]]iiop-openjdk
|Support for IIOP
|
link:#gal.naming[naming] +

|[[gal.io]]io
|Support for XNIO workers and buffer pools.
|
link:#gal.base-server[base-server] +

|[[gal.jaxrs-core]]jaxrs-core
|Support for Jakarta RESTful Web Services.
|
link:#gal.ee-integration[ee-integration] +
link:#gal.servlet[servlet] +

|[[gal.jaxrs]]jaxrs
|Support for Jakarta RESTful Web Services with optional ee-concurrency and deployment scanner layers.
|
link:#gal.deployment-scanner[deployment-scanner] (optional) +
link:#gal.ee-concurrency[ee-concurrency] (optional) +
link:#gal.jaxrs-core[jaxrs-core] +

|[[gal.jdr]]jdr
|Support for the JBoss Diagnostic Reporting (JDR) subsystem.
|
link:#gal.base-server[base-server] +
link:#gal.management[management] (optional) +

|[[gal.jms-activemq]]jms-activemq
|Deprecated - use link:#gal.messaging-activemq[messaging-activemq].
|
link:#gal.messaging-activemq[messaging-activemq] +

|[[gal.jmx]]jmx
|Support for registration of Management Model MBeans.
|
link:#gal.base-server[base-server] +

|[[gal.jmx-remoting]]jmx-remoting
|Support for a JMX remoting connector.
|
link:#gal.jmx[jmx] +
link:#gal.management[management] +

|[[gal.jpa]]jpa
|Support for JPA (using the latest WildFly supported Hibernate release). +
_Alternative:_ link:#gal.jpa-distributed[jpa-distributed]
|
link:#gal.bean-validation[bean-validation] (optional) +
link:#gal.datasources[datasources] +

|[[gal.jpa-distributed]]jpa-distributed
|Support for JPA with a distributed second level cache. +
_Alternative:_ link:#gal.jpa[jpa]
|
link:#gal.bean-validation[bean-validation] (optional) +
link:#gal.datasources[datasources] +

|[[gal.jsf]]jsf
|Support for Jakarta Faces.
|
link:#gal.bean-validation[bean-validation] (optional) +
link:#gal.cdi[cdi] +
link:#gal.web-server[web-server] +

|[[gal.jsonb]]jsonb
|Support for JSON Binding (Jakarta JSON Binding) provisioning the Jakarta JSON Binding API and Implementation modules.
|
link:#gal.base-server[base-server] +

|[[gal.jsonp]]jsonp
|Support for JSON Processing (Jakarta JSON Processing) provisioning the Jakarta JSON Processing API and Implementation modules.
|
link:#gal.base-server[base-server] +

|[[gal.logging]]logging
|Support for the logging subsystem.
|
link:#gal.base-server[base-server] +

|[[gal.mail]]mail
|Support for Jakarta Mail.
|
link:#gal.base-server[base-server] +
link:#gal.naming[naming] +

|[[gal.management]]management
|Support for remote access to management interfaces secured using Elytron.
|
link:#gal.elytron[elytron] +

|[[gal.messaging-activemq]]messaging-activemq
|Support for connections to a remote Jakarta Messaging broker.
|
link:#gal.resource-adapters[resource-adapters] +

|[[gal.micrometer]]micrometer
|Support for Micrometer
|
link:#gal.cdi[cdi] +

|[[gal.microprofile-config]]microprofile-config
|Support for MicroProfile Config.
|
link:#gal.cdi[cdi] +

|[[gal.microprofile-fault-tolerance]]microprofile-fault-tolerance
|Support for MicroProfile Fault Tolerance.
|
link:#gal.cdi[cdi] +
link:#gal.microprofile-config[microprofile-config] +

|[[gal.microprofile-health]]microprofile-health
|Support for MicroProfile Health.
|
link:#gal.management[management] +
link:#gal.microprofile-config[microprofile-config] +

|[[gal.microprofile-jwt]]microprofile-jwt
|Support for MicroProfile JWT.
|
link:#gal.ee-security[ee-security] +
link:#gal.microprofile-config[microprofile-config] +

|[[gal.microprofile-openapi]]microprofile-openapi
|Support for MicroProfile OpenAPI.
|
link:#gal.jaxrs[jaxrs] +
link:#gal.microprofile-config[microprofile-config] +

|[[gal.microprofile-platform]]microprofile-platform
|Support for available MicroProfile platform specifications.
|
link:#gal.microprofile-config[microprofile-config] (optional) +
link:#gal.microprofile-fault-tolerance[microprofile-fault-tolerance] (optional) +
link:#gal.microprofile-health[microprofile-health] (optional) +
link:#gal.microprofile-jwt[microprofile-jwt] (optional) +
link:#gal.microprofile-openapi[microprofile-openapi] (optional) +
link:#gal.microprofile-rest-client[microprofile-rest-client] (optional) +

|[[gal.microprofile-rest-client]]microprofile-rest-client
|Support for MicroProfile REST client.
|
link:#gal.microprofile-config[microprofile-config] +

|[[gal.microprofile-reactive-messaging]]microprofile-reactive-messaging
|Support for MicroProfile Reactive Messaging
|
link:#gal.cdi[cdi] +
link:#gal.microprofile-reactive-streams-operators[reactive-streams-operators] +

|[[gal.microprofile-reactive-messaging-amqp]]microprofile-reactive-messaging-amqp
|Support for MicroProfile Reactive Messaging AMQP connector
|
link:#gal.microprofile-reactive-messaging[reactive-messaging] +

|[[gal.microprofile-reactive-messaging-kafka]]microprofile-reactive-messaging-kafka
|Support for MicroProfile Reactive Messaging Kafka connector
|
link:#gal.microprofile-reactive-messaging[reactive-messaging] +

|[[gal.microprofile-reactive-streams-operators]]microprofile-reactive-streams-operators
|Support for MicroProfile Reactive Streams Operators
|
link:#gal.cdi[cdi] +

|[[gal.microprofile-lra-coordinator]]microprofile-lra-coordinator
|Support for MicroProfile LRA Coordinator
|
link:#gal.cdi[cdi] +
link:#gal.jaxrs[jaxrs] +
link:#gal.transactions[transactions] +

|[[gal.microprofile-lra-participant]]microprofile-lra-participant
|Support for MicroProfile LRA Participant
|
link:#gal.cdi[cdi] +
link:#gal.jaxrs[jaxrs] +

|[[gal.microprofile-telemetry]]microprofile-telemetry
|Support for MicroProfile Telemetry
|
link:#gal.cdi[cdi] +
link:#gal.microprofile-config[microprofile-config] +
link:#gal.opentelemetry[opentelemetry]

|[[gal.mod_cluster]]mod_cluster
|Support for mod_cluster subsystem.
|
link:#gal.web-server[web-server] +

|[[gal.mvc-krazo]]mvc-krazo
|Support for Jakarta MVC (_WildFly Preview only unless the  link:https://github.com/wildfly-extras/mvc-krazo-feature-pack/blob/main/README.md[`wildfly-mvc-krazo-feature-pack`] is used_)
|
link:#gal.bean-validation[bean-validation] +
link:#gal.cdi[cdi] +
link:#gal.jaxrs-core[jaxrs-core] +
link:#gal.jsf[jsf] (optional) +

|[[gal.naming]]naming
|Support for JNDI.
|
link:#gal.base-server[base-server] +

|[[gal.observability]]observability
|Support for MicroProfile monitoring features.
|
link:#gal.microprofile-config[microprofile-config] (optional) +
link:#gal.microprofile-health[microprofile-health] (optional) +
link:#gal.microprofile-telemetry[microprofile-telemetry] (optional) +

|[[gal.opentelemetry]]opentelemetry
|Support for OpenTelemetry
|
link:#gal.cdi[cdi] +
|[[gal.pojo]]pojo
| Support for legacy JBoss Microcontainer applications.
|
link:#gal.base-server[base-server] +

|[[gal.remote-activemq]]remote-activemq
|Support for connections to a remote Apache Activemq Artemis Jakarta Messaging broker. +
_Alternative:_ link:#gal.embedded-activemq[embedded-activemq]
|
link:#gal.resource-adapters[messaging-activemq] +

|[[gal.remoting]]remoting
|Support for inbound and outbound JBoss Remoting connections, secured using Elytron.
|
link:#gal.elytron[elytron] +
link:#gal.io[io] +

|[[gal.request-controller]]request-controller
|Support for request management
|
link:#gal.base-server[base-server] +

|[[gal.resource-adapters]]resource-adapters
|Support for deployment of Jakarta Connectors resource adapters.
|
link:#gal.transactions[transactions] +

|[[gal.sar]]sar
|Support for SAR archives to deploy MBeans.
|
link:#gal.base-server[base-server] +
link:#gal.jmx[jmx] +

|[[gal.security-manager]]security-manager
|Support for applying security manager permissions to applications.
|
link:#gal.base-server[base-server] +

|[[gal.servlet]]servlet
|A servlet container.
|
link:#gal.ee[ee-integration] +
link:#gal.naming[naming] +
link:#gal.undertow[undertow] +

|[[gal.transactions]]transactions
| Support for transactions.
|
link:#gal.ee[ee] +
link:#gal.elytron[elytron] +

|[[gal.undertow]]undertow
|Support for the Undertow HTTP server. Provides servlet support but does not provide typical EE integration like resource injection.
Use link:#gal.web-server[web-server] for a servlet container with EE integration.
|
link:#gal.base-server[base-server] +
link:#gal.io[io] +

|[[gal.undertow-https]]undertow-https
|Support for the Undertow HTTPS server secured using the applicationSSC SSLContext.
|
link:#gal.elytron[elytron] +
link:#gal.undertow[undertow] +

|[[gal.undertow-load-balancer]]undertow-load-balancer
|Support for Undertow configured as a load balancer.
|
link:#gal.base-server[base-server] +
link:#gal.io[io] +


|[[gal.web-clustering]]web-clustering
|Support for distributable web applications. Configures a non-local Infinispan-based container web cache for data session handling suitable to clustering environments.
|
link:#gal.transactions[transactions] +
link:#gal.web-server[web-server] +

|[[gal.web-console]]web-console
|Support for loading the HAL web console from the /console context on the HTTP 
management interface. Not required to use a HAL console obtained independently 
and configured to connect to the server.
|
link:#gal.management[management] +

|[[gal.web-passivation]]web-passivation
|Support for distributable web applications. Configures a local Infinispan-based container web cache for data session handling suitable to single node environments.
|
link:#gal.transactions[transactions] +
link:#gal.web-server[web-server] +

|[[gal.web-server]]web-server
|A servlet container.
|
link:#gal.deployment-scanner[deployment-scanner] (optional) +
link:#gal.ee[ee] +
link:#gal.ee[ee-concurrency] (optional) +
link:#gal.naming[naming] +
link:#gal.servlet[servlet] +

|[[gal.webservices]]webservices
|Support for Jakarta XML Web Services
|
link:#gal.ejb-lite[ejb-lite] (optional) +
link:#gal.messaging-activemq[messaging-activemq] (optional) +
link:#gal.web-server[web-server] +

|===

NOTE: References in this document to Java Persistence API (JPA) refer to the Jakarta Persistence unless otherwise noted.
      References in this document to Enterprise JavaBeans (EJB) refer to the Jakarta Enterprise Beans unless otherwise noted.
