Announcing Thorntail 2.5.0.Final

Thorntail 2.5.0.Final

Keep smiling, because we bring you a fresh new Thorntail release right on the World Emoji Day! :-)

What’s New?

  • MicroProfile 3.0 support

  • MicroProfile JWT improvements

  • New ejb-mdb fraction

MicroProfile 3.0 support

Thorntail now implements MicroProfile 3.0 by including the latest SmallRye artifacts. These specifications have been updated to a new version:

  • Health Check 2.0

  • Metrics 2.0

  • Rest Client 1.3

Health Check 2.0

WARNING: Breaking changes!

The MicroProfile Health Check 2.0 specification includes many changes, some of them breaking. Most importantly:

  • The @Liveness and @Readiness annotations were introduced; @Health is now deprecated.

  • The /health/live and /health/ready endpoints were introduced. The /health endpoint is now a union of all @Health, @Liveness and @Readiness checks.

  • The outcome and state fields in the JSON response format were renamed to status.

See the specification for details.

Metrics 2.0

WARNING: Breaking changes!

The MicroProfile Metrics 2.0 specification includes many changes, some of them breaking. Most importantly:

  • The @Counted annotation no longer includes the monotonic parameter. Previously, the default value of the monotonic parameter was false. Now, the @Counter annotation always behaves as if the monotonic parameter was set to true. If you want the monotonic = false behavior, you need to use the @ConcurrentGauge annotation.

  • Metrics are no longer identified by their String name, but by a MetricID class. The MetricID is a String name and a set of tags.

  • Some of the base metrics (defined by the specification) changed their type from Counter to Gauge.

  • Some of the base metrics and also vendor metrics (provided by Thorntail) were renamed. Notably, names of all accumulating counters now end with total.

  • In the OpenMetrics output format (formerly known as Prometheus format), the metric scope and name are no longer separated by :, but by _.

See the specification for details.

Rest Client 1.3

WARNING: Breaking changes!

The implementation of MicroProfile Rest Client that Thorntail includes used to come from the SmallRye project. This implementation has been moved to RESTEasy. That is actually a breaking change, because all public APIs and SPIs (such as RestClientProxy) that were previously part of the io.smallrye.restclient package are now in the org.jboss.resteasy.microprofile.client package. With this package change, logger categories have naturally also changed.

One notable change in the MicroProfile Rest Client specification is that if the client interface doesn’t include the @Produces/@Consumes annotations, application/json is now used as a default. If you don’t use these annotations in the client interfaces, this might be a breaking change for you.

See the specification for details.

MicroProfile JWT improvements

Quite a lot of improvements were made in the microprofile-jwt fraction. All changes should be backwards compatible, but if you spot a bug, please let us know.

  • The @LoginConfig annotation is no longer required, if the thorntail.microprofile.jwt.realm configuration property is set. If you use the annotation anyway, then make sure its realmName property is set to the same value as the thorntail.microprofile.jwt.realm configuration property.

  • The thorntail.microprofile.jwt.enable configuration property can be set to false to disable the MicroProfile JWT authentication mechanism. Default value of this configuration property is true.

  • The thorntail.microprofile.jwt.token.signer-pub-key-location should be used for specifying the external key assets. Previously, you could add a file: or classpath: prefix to the thorntail.microprofile.jwt.token.signer-pub-key configuration property, or use thorntail.microprofile.jwt.token.jwks-uri to refer to an external JWK Set. These two possibilities are now deprecated.

  • The thorntail.microprofile.jwt.path.groups configuration property can be used to select an arbitrary claim inside a JWT token to function as the groups claim expected by MicroProfile JWT. This is useful if no groups claim is present in the JWT token, but some other claim contains the groups information. The custom claim value must be an array of strings, unless it is a standard scope claim. Syntax of this option is: path/to/claim.

  • The configuration property can be used to provide a default value for the groups claim if the JWT token has no groups information at all.

  • The configuration property can be used to inline the roles configuration in the YAML configuration.

There’s also one improvement in the keycloak-microprofile-jwt fraction:

  • The Keycloak adapter configuration from the Thorntail YAML configuration is now recognized. You no longer have to include a keycloak.json file to be able to use this fraction.

And finally, some configuration properties that were only available in the old and deprecated thorntail.microprofile.jwtauth namespace are now also available in the thorntail.microprofile.jwt namespace. The old namespace is still available, but you are encouraged to migrate to the new one.

New ejb-mdb fraction

New fraction ejb-mdb was added that supports deploying Message-Driven Beans, but not all of messaging. With this fraction, you can’t create a messaging server, but you can connect to an existing external messaging server, if you provide the correct resource adapter.

Due to how WildFly works internally, this fraction actually brings in the entire messaging-activemq subsystem. Therefore, this ejb-mdb fraction is mutually exclusive with the messaging fraction. You can only use one of them, not both.


WARNING: Breaking changes!

If you used the wildfly-swarm.useUberJar system property to make sure the Thorntail Maven plugin runs in an uberjar mode, as opposed to classpath mode, you now have to migrate to the thorntail.useUberJar system property. The old wildfly-swarm.useUberJar system property is no longer recognized.


Release notes for 2.5.0.Final are available here.


  • [THORN-1616] Split the 'messaging' fragment into two parts: client and server (Done)

  • [THORN-2358] add microprofile.jwt aliases to configurables that only use microprofile.jwtauth (Done)

  • [THORN-2368] Introduce the property for microprofile-jwt (Done)

  • [THORN-2376] the fraction plugin should be able to force a version number of an <artifact> in module.xml (Done)

  • [THORN-2400] Make keycloak-microprofile-jwt fraction recognize the Keycloak adapter configuration in YAML (Done)

  • [THORN-2408] Introduce Thorntail properties for controlling default JWT groups and headers (Done)

  • [THORN-2427] Verify that Keycloak tokens can be handled directly with microprofile-jwt (Done)

  • [THORN-2433] Make setting MpJwt LoginConfig realmName optional if the realm is set in YAML (Done)

  • [THORN-2434] Inconsistent approach for pointing to the key locations between smallrye-jwt and microprofile-jwt (Done)

  • [THORN-2436] Introduce the jwt.enabled property and make LoginConfig optional (Done)

Component Upgrade

  • [THORN-2252] Metrics 2.0 (Done)

  • [THORN-2359] update to latest micro versions of MicroProfile specifications (Done)

  • [THORN-2377] upgrade to fraction plugin 95 (Done)

  • [THORN-2386] Update to smallrye-jwt 1.1.3 (Done)

  • [THORN-2402] update to latest SmallRye Fault Tolerance with OpenTracing propagation (Done)

  • [THORN-2405] Upgrade to nosql config-api to 1.6.3 and wildfly-nosql 1.0.2.Final (Done)

  • [THORN-2407] bump all Config APIs to 1.7 (Done)

  • [THORN-2409] bump SmallRye Fault Tolerance to 2.0.5 (Done)

  • [THORN-2410] update Jaeger client to 0.34.0 (Done)

  • [THORN-2411] RestClient 1.3 (Done)

  • [THORN-2412] Health Check 2.0 (Done)

  • [THORN-2424] Update to smallrye-jwt-1.1-2.0.0 (Done)

  • [THORN-2426] update to latest SmallRye releases of other MP specs (Done)

  • [THORN-2439] update CRUD examples to PostgreSQL 10 (Done)

  • [THORN-2440] update to MicroProfile Fault Tolerance 2.0.1 (Done)

  • [THORN-2442] unify Asm version (Done)

  • [THORN-2443] update to RESTEasy 3.8.1 (Done)

  • [THORN-2444] Update to smallrye-jwt-1.1-2.0.1 (Done)



  • [THORN-2310] Cannot build thorntail-examples/gradle-examples (Done)

  • [THORN-2343] thorntail-maven-plugin as of version 2.3.0.Final tries to resolve wrong dependencies and fails (Done)

  • [THORN-2360] Can’t add mysql autodetected driver (Done)

  • [THORN-2361] CircutiBreaker metrics counts even exceptions not included in failOn (Done)

  • [THORN-2364] wrong thorntail.batch prefix in the Batch fraction docs, should be thorntail.batch-jberet (Done)

  • [THORN-2366] documentation still tells users to define "xa-datasource-name" for datasources (Done)

  • [THORN-2367] some documentation parts still use the swarm. prefix instead of thorntail. (Done)

  • [THORN-2373] wrong thorntail.web-services prefix in the Web Services fraction docs, should be thorntail.webservices (Done)

  • [THORN-2375] IllegalArgumentException when javaVmArguments from arquilian.xml file contains \n or not all parameters are in the form of -par=value (Done)

  • [THORN-2385] MP OpenTracing: nested spans aren’t reported (Done)

  • [THORN-2388] MP Open-tracing doesn’t work with the MP rest client. (Done)

  • [THORN-2390] MP JWT JsonWebToken is injected only once in ApplicationScoped endpoints (Done)

  • [THORN-2391] Unable to build thorntail-examples with different value for version.thorntail (Done)

  • [THORN-2393] Thorntail-runner version 2.4.0.Final JAX-RS application class not found (Done)

  • [THORN-2398] wrong DB2 JDBC driver autoconfiguration (Done)

  • [THORN-2401] wrong fraction names in reference documentation of NoSQL fractions (Done)

  • [THORN-2413] thorntail.https.port default port is 8443 instead 8483 (Done)

  • [THORN-2414] Thorntail Topology openshift fraction doesn’t work on OpenShift 4.1 (Done)

  • [THORN-2417] the MP RestClient part of MP OpenTracing TCK isn’t executed with Thorntail (Done)

  • [THORN-2419] Thorntail-maven-plugin: using config useUberJar with value false doesn’t work (Done)

  • [THORN-2423] MP JWT module needs a module dependency on Weld for proxying (Done)

  • [THORN-2425] Null Pointer Exception is thrown with custom claims (Done)

  • [THORN-2432] the example "thorntail-examples / security / keycloak /" does not work (Done)

  • [THORN-2435] OpenAPI: query parameter "format" value (Done)

  • [THORN-2437] thorntail-maven-plugin multistart ignores jvmArguments (Done)


  • [THORN-2328] AMQ Booster (Done)

  • [THORN-2357] update Thorntail community boosters to 2.4.0.Final (Done)

  • [THORN-2372] move Runner to the unsupported profile (Done)

  • [THORN-2389] Move CDI producers from microprofile-jwt to smallrye-jwt (Done)

  • [THORN-2392] Add a test for the istio-tracing example (Done)

  • [THORN-2396] investigate why some fractions don’t have module.conf (Done)

  • [THORN-2399] move all version-related Maven properties to the root POM (Done)

  • [THORN-2403] Add MP JWT tests to check the default group and the Cookie header (Done)

  • [THORN-2416] Remove Undertow MpJwtPrincipalHandler (Done)

Breaking changes


Per usual, we tend to hang out on in #thorntail.

All bug and feature tracking is kept in JIRA.

Documentation for this release is also available.

Thank you, Contributors!

We appreciate all of our contributors since the last release:


  • Sergey Beryozkin

  • Doychin Bondzhev

  • Filipe Castilho

  • Ken Finnigan

  • Dylan Koby

  • Scott Marlow

  • Stefan Sitani

  • Michal Szynkiewicz

  • Ladislav Thon

  • Miroslav ZaĆ„ko


  • Sergey Beryozkin

  • Steven Hawkins

  • Tomas Hofman

  • Sven Ruppert

  • Ladislav Thon

  • Christoph Tornau

  • Dmitry Trifonov