以下の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/02/15/213553より取得しました。


WildFly Maven Plugin × WildFly GlowでプロビジョニングするWildFlyに自動検出対象以外のレイヤーを追加する

これは、なにをしたくて書いたもの?

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-metalcloudが指定できます。デフォルトはbare-metalです。

profileはデフォルトでは未指定ですが、haが指定可能です。

WildFly Maven Plugin – wildfly:package

add-onsadd-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に自動検出対象以外のレイヤーを追加する方法を
メモしておきました。

使う機会はほぼないと思いますが、なにかあった時にレイヤーを追加できるように頭の片隅にでもということで。




以上の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/02/15/213553より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14