WildFly 32 is released!
I’m pleased to announce that the new WildFly and WildFly Preview 32.0.0.Final releases are available for download at https://wildfly.org/downloads.
There’s a lot to talk about this time, so let’s get going!
New and Notable
WildFly Glow 1.0 Final
Ever since the introduction of Galleon several years back, a major WildFly focus has been tooling to improve our users' ability to easily provision an optimal WildFly installation, on-premise and particularly for the cloud. I’m very excited to announce Final availability of a major advance in this area — the set of provisioning tools we call WildFly Glow.
The WildFly Glow tools (a CLI application and a wildfly-maven-plugin integration) analyze your application artifact, determine what WildFly feature-packs and Galleon layers are needed to run your application, and make suggestions about other features (e.g. TLS support) that you may want to include in your optimized WildFly installation. You can take the information WildFly Glow provides and use it in your own provisioning configuration, or you can have WildFly Glow provision a server, bootable jar or Docker image for you. WildFlow Glow also provides a Maven plugin to help you automate provisioning when using Arquillian.
The WildFly Glow documentation gives you a good sense of what WildFly Glow is about. But to really help you understand WildFly Glow’s benefits, I encourage you to read or watch the various posts and videos that the WildFly community has published this year:
Articles
Presentations
Jean Francois Denise presented WildFly Glow during the March WildFly Mini Conference
-
Slides are here.
-
Jean Francois' talk starts at the 2:47:52 mark of the WildFly Mini Conference recording.
Videos
Also, keep an out here or on the WildFly channel on YouTube channel for an upcoming post from Jean Francois on using WildFly Glow to help with automatic connection to a database when deploying on OpenShift.
User Guides
We’ve added a new Guides page to the wildly.org site. Each guide will show the steps to accomplish a specific, focused task, with links to guides showing any prerequisites and to guides for related tasks. This is something WildFly has long needed, and we’re very excited to see it happening! We’re now up to 10 guides in a variety of topic areas. Please have a look and give us your feedback and suggestions for other guides you’d like to see.
Individual Features
There a number of new individual features in WildFly 32, but before getting into the individual items I want to highlight again the capabilities introduced in WildFly 31 to introduce features at different stability levels. Features can be introduced at one of four stability levels — experimental
, preview
, community
or default
— with the ideal outcome being that we promote them in subsequent releases to higher levels. The goal here is to allow users who want to look at features in earlier stages of the development lifecycle to easily do so, without leaving users who are not interested in that in a situation where they may inadvertently use those features.
We introduced this capability in WildFly 31, and added one feature at community
stability, but in WildFly 32 we’ve significantly expanded our use of the concept, and added support in our provisioning tooling for it.
I’ll talk more about feature stability levels below, but first let’s talk about the new features.
Security
-
For outbound requests, we’ve added support for an
SSLContext
that can dynamically delegate to different SSL contexts based on destination’s host and port. This feature is provided at thecommunity
stability level. -
The
elytron-oidc-client
subsystem has added the ability to configure additionalscope
values for OpenID Connect authentication requess. This feature is provided at thepreview
stability level. -
Authentication using credentials updated outside of WildFly will now succeed, and credentials and attributes in the cache will be automatically updated upon such authentication. This feature is provided at the
default
stability level.
Provisioning
-
The WildFly provisioning tooling has been evolved to support the feature stability concept. See below for more on this. This feature is provided at the
community
stability level. -
The WildFly Channels project adds ability to create channels defining component versions used to provision WildFly that can be maintained separately from WildFly’s feature packs. This ability has been used for a while now in component testing and by provisioning projects like the wildfly-maven-plugin and Prospero. WildFly has now begun publishing channel manifests as part of each release to make such use easier. This feature is provided at the
community
stability level. We’ll continue to make further use of WildFly Channels in upcoming WildFly releases. To learn more about Prospero and WildFly Channels, have a look at the following articles.
WildFly development
The following two features are focused on people who are developing either WildFly itself or extensions to it.
-
Subsystem development enhancements previously used in the
wildfly-clustering-common
Maven module have been ported to WildFly Core to make them more broadly usable. -
Utilities to reload a server to a different stability level in the testsuite are now available. This feature is provided at the
community
stability level.
Other Goodies
-
Standard WildFly now supports Jakarta MVC via a new
mvc-krazo
subsystem. This capability was previously introduced in WildFly Preview 31; now it is available in standard WildFly. This feature is provided at thepreview
stability level. -
When you start WildFly, instead of always typing long things like
-c standalone-microprofile-ha.xml
, now you can use short aliases for the standard configuration files. This feature is provided at thecommunity
stability level. -
For all you asciiart fans, when you start WildFly with the
--stability=experimental
flag, now you get a cool boot message. This feature is provided at theexperimental
stability level.
WildFly Preview, EE 11 and SE 17
The 32 release introduces a significant inflection in how we are using WildFly Preview. Beginning with this release we are starting to use WildFly Preview to provide a look at what we’re doing for Jakarta EE 11 support. EE 11 won’t go GA before this summer, and standard WildFly won’t support EE 11 before the WildFly 34 release, at earliest. But when we wrapped up 32 development there were milestone, Release Candidate and Final releases of many EE 11 specs and implementations available, so we decided to provide those in WildFly Preview. This means for a number of EE APIs, WildFly Preview no longer provides an EE 10 compatible implementation.
However, for a number of specifications that are planning changes for EE 11 we are still offering the EE 10 variant. In future releases we’ll shift those to the EE 11 variants.
As a result of this shift to EE 11 APIs, WildFly Preview no longer supports running on Java SE 11. Going forward, if you want to use WildFly Preview you’ll need to use SE 17 or higher. A number of EE 11 APIs no longer produce SE 11 compatible binaries, which means an EE 11 runtime can no longer support SE 11.
Note
|
This removal of support for SE 11 has no impact on standard WildFly. Standard WildFly 32 continues to support running on SE 11. We do, however, encourage users to move to SE 17 or later, as the general Java ecosystem is moving away from SE 11 support, and eventually standard WildFly will as well. |
The following table lists the various Jakarta EE technologies offered by WildFly Preview 32, along with information about which EE platform version the specification relates to. Note that a number of Jakarta specifications are unchanged between EE 10 and EE 11, while other EE technologies that WildFly offers are not part of EE 11.
Jakarta EE Technology | WildFly Preview Version | EE Version |
---|---|---|
Jakarta Activation |
2.1 |
10 & 11 |
Jakarta Annotations |
3.0.0 |
11 |
Jakarta Authentication |
3.0 |
10 |
Jakarta Authorization |
3.0.0-M2 |
11 |
Jakarta Batch |
2.1 |
10 & 11 |
Jakarta Concurrency |
3.1.0-M1 |
11 |
Jakarta Connectors |
2.1 |
10 & 11 |
Jakarta Contexts and Dependency Injection |
4.1.0 |
11 |
Jakarta Debugging Support for Other Languages |
2.0 |
10 & 11 |
Jakarta Dependency Injection |
2.0 |
10 & 11 |
Jakarta Enterprise Beans |
4.0 |
10 & 11 |
Jakarta Enterprise Web Services |
2.0 |
10 1 |
Jakarta Expression Language |
6.0.0 |
11 |
Jakarta Faces |
4.1.0-M1 |
11 |
Jakarta Interceptors |
2.2.0 |
11 |
Jakarta JSON Binding |
3.0 |
10 & 11 |
Jakarta JSON Processing |
2.1 |
10 & 11 |
Jakarta Mail |
2.1 |
10 & 11 |
Jakarta Messaging |
3.1 |
10 & 11 |
Jakarta MVC (preview stability only) |
2.1 |
N/A 2 |
Jakarta Pages |
3.1 |
10 |
Jakarta Persistence |
3.2.0-M2 |
11 |
Jakarta RESTful Web Services |
3.1 |
10 |
Jakarta Security |
4.0.0-M2 |
11 |
Jakarta Servlet |
6.1.0-M2 |
11 |
Jakarta SOAP with Attachments |
3.0 |
10 1 |
Jakarta Standard Tag Library |
3.0 |
10 & 11 |
Jakarta Transactions |
2.0 |
10 & 11 |
Jakarta Validation |
3.1.0-M2 |
11 |
Jakarta WebSocket |
2.2.0-M1 |
11 |
Jakarta XML Binding |
4.0 |
10 1 |
Jakarta XML Web Services |
4.0 |
10 1 |
Notes:
Warning
|
Jakarta EE 11 no longer supports running with a Java SecurityManager enabled. As a result, individual Jakarta specification projects may have removed SecurityManager calls from the API jars WildFly Preview integrates, and the associated implementation artifacts may have done the same. As a result, WildFly Preview should not be run with the SecurityManager enabled. Future releases will prohibit use with the SecurityManager enabled if EE 11 APIs are used. |
Feature Stability Levels
As I noted above, WildFly now provides new features at different stability levels ---- experimental
, preview
, community
or default
.
Out of the box, standard WildFly allows use of features at community
or default
stability, while WildFly Preview allows preview
, community
or default
. If you wish to allow lower stability level features than the out-of-the-box setting, this can be done using the stability
command line parameter:
bin/standalone.sh --stability=experimental
In WildFly 32 we’ve introduced features at all four stability levels. You can identify the stability level of new features by looking at the title of the Jira issue in the "Feature Request" section of the release notes. For features at anything other than default
stability, the issue title will be prefaced by one of [Experimental], [Preview] or [Community].
Tooling Support for Feature Stability Levels
Our Galleon-based provisioning tooling has also had updates related to feature stability levels: we’ve added configuration options to allow you to control the stability level of features in your installation. This can be used to do things like:
-
Prevent the provisioning of lower stability features, so they are not available for use even when the
--stability
server start param is used. -
Enable the inclusion of lower stability features in the configuration files the provisioning tool generates, avoiding the need to use a post-provisioning tool like the WildFly CLI to incorporate them into the configuration.
To limit your installation level to the highest stability features, you would include the following in your maven plugin configuration:
<galleon-options>
<stability-level>default</stability-level>
</galleon-options>
To allow Galleon to include lower stability features in your installation’s generated configuration files, you could do something like:
<galleon-options>
<stability-level>preview</stability-level>
</galleon-options>
Note
|
If one wants to have different values for configuration files and packages (i.e. filesystem resources like JBoss Modules modules), then the |
The latest wildfly-maven-plugin, wildfly-jar-maven-plugin (for bootable jars) and the WildFly Glow and Galleon tools all support these stability level configuration options. I encourage you to try them out.
Supported Specifications
Jakarta EE
Standard WildFly 32 is a compatible implementation of the EE 10 Platform as well as the Web Profile and the Core Profile. WildFly is EE 10 Platform, Web Profile and Core Profile compatible when running on both Java SE 11 and Java SE 17. WildFly is also a compatible EE 10 Core Profile implementation when running on SE 21.
Evidence supporting our certification is available in the WildFly Certifications repository on GitHub:
Specification | Compatibility Evidence |
---|---|
Jakarta EE 10 Full Platform |
|
Jakarta EE 10 Web Profile |
|
Jakarta EE 10 Core Profile |
|
MicroProfile
WildFly supports numerous MicroProfile specifications. Because we no longer support MicroProfile Metrics, WildFly 32 cannot claim to be a compatible implementation of the MicroProfile 6.1 specification. However, WildFly’s MicroProfile support includes implementations of the following specifications in our "full" (e.g. standalone-full.xml
) and "default" (e.g standalone.xml
) configurations as well as our "microprofile" configurations (e.g. standalone-microprofile.xml
):
MicroProfile Technology | WildFly Full/Default Configurations | WildFly MicroProfile Configuration |
---|---|---|
MicroProfile Config 3.1 |
X |
X |
MicroProfile Fault Tolerance 4.0 |
— |
X |
MicroProfile Health 4.0 |
— |
X |
MicroProfile JWT Authentication 2.1 |
X |
X |
MicroProfile LRA 2.0 |
— |
X |
MicroProfile OpenAPI 3.1 |
— |
X |
MicroProfile Reactive Messaging 3.0 |
— |
— |
MicroProfile Reactive Streams Operators 3.0 |
— |
— |
MicroProfile Rest Client 3.0 |
X |
X |
MicroProfile Telemetry 1.1 |
— |
X |
Compatibility evidence for the above specifications that are part of MicroProfile 6.1 can be found in the WildFly Certifications repository on GitHub.
Java SE Support
Recommended SE Versions
I’m pleased to be able to say that our recommendation is that you run WildFly 32 on Java SE 21, as that is the latest LTS JDK release where we have completed the full set of testing we like to do before recommending a particular SE version. WildFly 32 also is heavily tested and runs well on Java 17 and Java 11.
This recommendation to run on SE 21 is a shift from previous releases, where we recommended SE 17. This is because during the WildFly 32 development cycle we completed the qualification exercise that we go through before recommending an LTS SE release.
Our recommendation of SE 21 over earlier LTS releases is solely because as a general principle we recommend being on later LTS releases, not because of any problems with WildFly on SE 17 or SE 11.
One reason to use later SE versions is because it gets you ahead of the curve as WildFly and other projects begin to move on from supporting older SE releases.
In the WildFly 30 release announcement I indicated that WildFly 30 would likely be the last feature release to support SE 11. Obviously, that is not the case as we still support SE 11 in standard WildFly 32. However, as noted above, WildFly Preview no longer supports SE 11. We’re continuing to evaluate our plans around SE 11 support, and I’ll be sure to post here as we make decisions. I do encourage WildFly users to prepare now for any eventual change to move off of SE 11.
While we recommend using an LTS JDK release, I do believe WildFly runs well on JDK 22. By runs well, I mean the main WildFly testsuite runs with no more than a few failures in areas not expected to be commonly used. We want developers who are trying to evaluate what a newer JVM means for their applications to be able to look to WildFly as a useful development platform.
Please note that WildFly runs in classpath mode.
Incompatible Changes
We removed the deprecated Narayana compensations module from WildFly 32. We suggest any users of this functionality investigate WildFly’s support for MicroProfile LRA.
As noted above, WildFly Preview no longer supports running on Java SE 11. Users also should not run WildFly Preview 32 with a Java SecurityManager enabled.
Release Notes
The full WildFly 32 release notes are available in GitHub. Issues fixed in the underlying WildFly Core 24 release are listed in the WildFly Core JIRA.
Please try it out and give us your feedback, in the WildFly google group, Zulip or JIRA.
Meanwhile, we’re busy at work on WildFly 33!
Best regards,
Brian