これは、なにをしたくて書いたもの?
WildFly Maven PluginとWildFly Glowを使うと、アプリケーションアーティファクトを解析して必要なfeature-packや
Galleonレイヤーを自動で含めてくれます。
WildFlyのプロビジョニングをWildFly Glow × WildFly Maven Pluginで試す - CLOVER🍀
なのですが、ここで選択されたなかったGalleonレイヤーやアドオンでも提供されていないレイヤーを追加する時の
方法をメモしておきます。
たぶん、使うことはほとんどないと思いますが。
環境
今回の環境はこちら。
$ java --version openjdk 21.0.6 2025-01-21 OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1) OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing) $ mvn --version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: $HOME/.sdkman/candidates/maven/current Java version: 21.0.6, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64 Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "6.8.0-53-generic", arch: "amd64", family: "unix"
サンプルアプリケーションを作る
簡単なJakarta RESTful Web Services(JAX-RS)を使ったサンプルアプリケーションを作成します。
WildFlyがプロビジョニングできればいいので、中身はこだわりません。
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.littlewings</groupId> <artifactId>wildfly-maven-plugin-provisioning-add-layer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.release>21</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.bom</groupId> <artifactId>wildfly-ee-with-tools</artifactId> <version>35.0.1.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>5.1.2.Final</version> <executions> <execution> <id>package</id> <goals> <goal>package</goal> </goals> </execution> </executions> <configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.1.Final</version> </discover-provisioning-info> </configuration> </plugin> </plugins> </build> </project>
JAX-RSの有効化。
src/main/java/org/littlewings/wildfly/galleon/RestApplication.java
package org.littlewings.wildfly.galleon; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/") public class RestApplication extends Application { }
JAX-RSリソースクラス。
src/main/java/org/littlewings/wildfly/galleon/HelloResource.java
package org.littlewings.wildfly.galleon; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; @Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String message() { return "Hello World"; } }
プロビジョニング。
$ mvn package
この時に選択されるfeature-packは、ee-core-profile-serverとjaxrsの2つです。
[INFO] --- wildfly:5.1.2.Final:package (package) @ wildfly-maven-plugin-provisioning-add-layer --- [INFO] Glow is scanning... [INFO] Glow scanning DONE. [INFO] context: bare-metal [INFO] enabled profile: none [INFO] galleon discovery [INFO] - feature-packs org.wildfly:wildfly-galleon-pack:35.0.1.Final - layers ee-core-profile-server jaxrs [INFO] Some suggestions have been found. You could enable suggestions with the <suggest>true</suggest> option.
WildFly Glowを使っていると、このようにアプリケーションが使っている機能から必要なfeature-packを検出してくれるの
ですが、ここで検出されるfeature-packでは不足している場合にどうすればいいのかというのが今回のテーマです。
こういう時はcontextやprofile、add-onsを使って解決するのだと思いますが、それでも足りない場合があるかもしれません。
どんな時?
こういうケースはそうそう多くはないと思うのですが、たとえばmailを使う時などですね。
これはドキュメントに例として挙がっています。
WildFly Maven Plugin – wildfly:package
こんな感じですね。
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.1.Final</version> <layers-for-jndi> <layer>mail</layer> </layers-for-jndi> </discover-provisioning-info> </configuration>
これでプロビジョニングすると
$ mvn package
レイヤーにmailが追加されます。
[INFO] galleon discovery [INFO] - feature-packs org.wildfly:wildfly-galleon-pack:35.0.1.Final - layers ee-core-profile-server jaxrs mail
そしてlayers-for-jndiといかにもJNDIに関するものだけが指定できそうな名前ですが、実は任意のレイヤーを指定できます。
たとえばmicroprofile-openapiレイヤーを指定。
<layers-for-jndi> <layer>microprofile-openapi</layer> </layers-for-jndi>
プロビジョニング時にmicroprofile-openapiレイヤーが追加されます。
[INFO] galleon discovery [INFO] - feature-packs org.wildfly:wildfly-galleon-pack:35.0.1.Final - layers ee-core-profile-server microprofile-openapi [INFO] enabled add-ons [INFO] - openapi : Support for MicroProfile OpenAPI.
もっとも、この場合はopenapiをアドオンとして追加すればよいのですが(そういうサジェストが出ています)。
layers-for-jndiを使ったレイヤーの追加は、一応回避方法としては知っておいた方がいいかもしれません。
discover-provisioning-infoを使った場合、layersとは両立できなくなるからです。たとえば以下のように指定すると
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.1.Final</version> </discover-provisioning-info> <layers> <layer>mail</layer> </layers> </configuration>
WildFly Glowを使った場合は、layersは空でなければならないと怒られます。
[ERROR] Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:5.1.2.Final:package (package) on project wildfly-maven-plugin-provisioning-add-layer: layers must be empty when enabling glow -> [Help 1]
指定できるレイヤーはこちらですね。
WildFly Maven Plugin / Packaging your application for the cloud / WildFly Layers
contextとprofileとadd-on
contextにはbare-metalとcloudが指定できます。デフォルトはbare-metalです。
profileはデフォルトでは未指定ですが、haが指定可能です。
WildFly Maven Plugin – wildfly:package
add-onsのadd-onに指定できるのは、<suggest>true</suggest>を追加して確認するとよいでしょう。
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.1.Final</version> <suggest>true</suggest> </discover-provisioning-info> </configuration>
プロビジョニング時に、現時点で指定可能なアドオンの一覧が表示されます。
[INFO] suggestions
[INFO] * you could enable the following add-ons:
[INFO] - clustering add-ons:
- infinispan : Brings in infinispan caches.
- jgroups-aws : Brings in JBoss Modules modules required to configure the 'aws.S3_PING' discovery protocol.
- mod_cluster : Support for mod_cluster integration.
- jaxrs add-ons:
- openapi : Support for MicroProfile OpenAPI.
- lra add-ons:
- lra-coordinator : Support for MicroProfile LRA Coordinator.
- management add-ons:
- hal-web-console : Management Web console. Make sure to add an initial user.
- jdr : Support for the JBoss Diagnostic Reporting (JDR).
- wildfly-cli : Server command line tools: jboss-cli, add-user, elytron-tool.
- observability add-ons:
- health : Support for runtime health checks.
- metrics : Support for base metrics from the WildFly Management Model and JVM MBeans.
- micrometer : Support for Micrometer.
- rpc add-ons:
- grpc : Support for gRPC.
- iiop : Support for IIOP.
- security add-ons:
- ssl : Support for the Undertow HTTPS listener.
- web add-ons:
- load-balancer : Support for Undertow configured as a load balancer.
おわりに
WildFly Maven Plugin × WildFly GlowでプロビジョニングするWildFlyに自動検出対象以外のレイヤーを追加する方法を
メモしておきました。
使う機会はほぼないと思いますが、なにかあった時にレイヤーを追加できるように頭の片隅にでもということで。