WildFly 運用のための覚え書き

もうあまり使うことはないかもしれないが、Java のアプリケーションサーバ WildFly の運用のための覚え書き。

同一物理マシンに複数の WildFly を設置するのは可能か?

レガシーなプロジェクトで、JavaEE ウェブアプリと JakartaEE ウェブアプリが混在するような場合、少なくとも2台のWildFly が必要になる。27 以降の WildFly と 27 より前のバージョンがそれぞれ少なくとも一つは必要。

結論から言うとできる。

ただ、ポートがかち合わないように設定ファイルを変える。
ワイの場合は、各ポート番号に 10000 を足す。

standalone-full.xml
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="ajp" port="${jboss.ajp.port:18009}"/>
        <socket-binding name="http" port="${jboss.http.port:18080}"/>
        <socket-binding name="https" port="${jboss.https.port:18443}"/>
        <socket-binding name="iiop" interface="unsecure" port="13528"/>
        <socket-binding name="iiop-ssl" interface="unsecure" port="13529"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:19990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:19993}"/>
        <socket-binding name="txn-recovery-environment" port="14712"/>
        <socket-binding name="txn-status-manager" port="14713"/>
        <outbound-socket-binding name="mail-smtp">
           <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:10025}"/>
        </outbound-socket-binding>
        <outbound-socket-binding name="messaging-activemq">
            <remote-destination host="${jboss.messaging.connector.host:localhost}" port="${jboss.messaging.connector.port:51616}"/>
        </outbound-socket-binding>
    </socket-binding-group>

ただし、このやり方だと activemq は 71616 となり

A maximum value of 65535 is required

と WildFly に怒られるので、10000 を引く。

こうしておくと以下のように管理画面も同時に表示できる。

めでたしめでたし。

WildFly をサービス化する

JBOSS_HOME の docs 以下のフォルダに各種サンプルファイルがあるので、これをうまく活用する。
Ubuntu の場合は、以下のようにそのまま使える。

sudo mkdir /etc/wildfly
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/wildfly.service
sudo cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/launch.sh

この作業が終わった後、初回起動は

sudo systemctl enable --now wildfly

というコマンドで。

jboss-cli.sh による deploy

なお、サービスが走っている場合のデプロイは jboss-cli.sh を走らせ、そこから

deploy PathTo/hoge.war

で投入できる。

バックグランドで起動させる

Java の慣習でしょうか & を付ける。

standalone.sh -c stanalone-full.xml &

Ctrl+C でメッセージを終了させてもプロセスは終わってない模様。

コマンドラインから停止

バックグランドで走らせた状態では Ctrl+C では停止できないので以下のコマンドを使う。

jboss-cli.sh --connect command=shutdown

 

(適宜修正予定)

WildFly の導入時にすること

X などで「わかっているのだが、覚えるには至っておらず、何度も調べてしまうこと」が度々話題になる。

vi の操作方法とかさ。

ワイの場合は WildFly の初期設定もそのうちの一つ。

一体、何度、調べただろう?

いい加減、あちこち調べるのが嫌になってきたので、忘備録的なまとめ。

管理ユーザーの設定

まずは、管理ユーザーを作成するのがいいだろう。
管理ユーザーなしでも WildFly 自体は起動できるのだが、コンソール画面に入れないので、まず、これをやる。

Linux/Mac などでは bin フォルダ内の add-user.sh を実行。Windows では add-user.bat 。

ほとんどの場合、既存プロジェクトの WildFly のバージョンアップデートに伴う移行だと思うので、管理ユーザー名も同一にしておくと迷わなくてすむ。

ただし、この手の作業が面倒に感じる理由の一つとして、「パスワードの設定方法が変わってしまう」というのもあるだろう。
今回、作業した WildFly27 では、以下のように non-alphanumeric symbol が必要とされた。

The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)

以前のように「12345678」ではダメである。英数字以外の記号を一つ含める必要がある。

他は、y と答えておいて困ることはない。

モジュールのインストール

デバイスドライバなどをインストールする。

PostgreSQL のドライバをインストールする場合には、以下のようにする。
(ドライバはここから取ってくる)

WildFly 自体を起動した状態で jboss-cli.sh を実行

You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /]

というメッセージが現れるので、connect と打ち込む。

その後

module add --name=org.postgresql --resources=(パス)\postgresql-(バージョン).jar --dependencies=javax.api,jakarta.transaction.api
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name="postgresql",driver-module-name="org.postgresql",driver-class-name="org.postgresql.Driver")

とタイプ。

上のように success が返ってくればOKです。

なお dependencies=javax.api, jakarta.transaction.api となっている点に注意。
いわゆる JavaEE -> JakartaEE 移行に伴う名前空間の変更の影響を受けています。

その他

思いつくままに。

コマンドラインでの終了のさせ方

これも何度検索かけただろう?

jboss-cli.sh --connect --command=":shutdown"

だそうです。

 

(適宜情報追加予定)

Jakarta EE 10 時代到来か? WildFly 27, GlassFish 7, Payara 6

WildFly 27

WildFly 27 がリリースされた。

WildFly 27 では、JakartaEE 10 のみの対応となるので、今後は本格的に JakartaEE 10 の時代となりそう。

気になる JakartaEE 9.1 → 10 に伴う仕様の変更は、ざっくりいうと以下の図のような感じ。

CDI 関連が大幅変更。CDI Lite 4.0 (橙色)が新規に追加され、従来の CDI も 4.0 にアップデートされた。
ここらへんはわかりにくいところなので、『CDI と weld の関係』にまとめる予定。

他の仕様もかなりの部分がアップデート(青色)されている。

Servlet が 6.0 になっているのに恐怖を感じるが(笑)、そろそろ移行作業を開始しましょうかね。

GlassFish 7

GlassFish も JakartaEE 10 に対応した GlassFish 7 をリリースしている。

JakartaEE 10 環境、整ってきました。

ただし、

NOTE: The latest milestone version doesn’t provide Admin Console (GUI for administering the server). This will be fixed in the final version of GlassFish 7.

ということなので、現在配布されているバージョン(M8)はウェブアプリを GUI コンソール画面からデプロイすることはできない

実際、起動後 loalhost:4848 にアクセスしても以下の画面から進まない。

どうしても使いたい場合は、github リポジトリからソースを取ってきて自力でビルドするしかないだろう。

ただし、ビルド産物は M7 で、これが本当に JakartaEE 10 に対応しているかどうかは不明。

Payara 6

Payara 6 はコミュニティ版も Jakarta EE 10 に対応しているらしい。

payara は気にはなっていたのだが、触ったのは今回が初めて。

しかし、GlassFish とまるっきり一緒だと思っていたのだが、コンソール画面も微妙にカスタマイズ入ってますね。

ブログの記事なども充実しており、乗り換えてもいいかも。

まとめ

JakartaEE 10 対応のアプリケーションサーバーも出揃ってきた。

特に payara に好印象を持った。

今回は、アプリケーションサーバーの紹介程度になってしまったので、JakartaEE 10 の仕様・使い方に関しては順次別記事にまとめていく予定。

 

 

 

デプロイ不要?! WildFly でも bootable jar が作れるようになったらしい

ワイが勝手に JavaEE(JakartaEE) 勢のフラッグシップと思い込んでいる WildFly であるが、ちょっと前に 26 がリリースされた。

最近、あまりチェックしていなかったのだが、bootable jar が作成できるようになったらしい。

軽めのドキュメントも公開されていた。

ほんまかいな?とサンプルを試してみる。

HelloWorldEndpoint.java
package org.wildfly.plugins.demo.jaxrs;


import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;


@Path("/hello")
public class HelloWorldEndpoint {
    @GET
    @Produces("text/plain")
    public Response doGet() {
        return Response.ok("Hello from WildFly bootable jar!").build();
    }
}


としたとき、pom.xml を以下のように設定する。

pom.xml(抜粋)

   <artifactId>jaxrs</artifactId>
   (略)
   <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-jar-maven-plugin</artifactId>
                <configuration>
                    <feature-pack-location>wildfly@maven(org.jboss.universe:community-universe)#${version.wildfly}</feature-pack-location>
                    <layers>
                        <layer>jaxrs</layer>
                        <layer>management</layer>
                    </layers>
                    <excluded-layers>
                        <layer>deployment-scanner</layer>
                    </excluded-layers>
                    <plugin-options>
                        <jboss-fork-embedded>${plugin.fork.embedded}</jboss-fork-embedded>
                    </plugin-options>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
mvn pacakge

でビルド。

完了したら、

java -jar target/jaxrs-bootable.jar

とタイプ。

すると

といういかにも WildFly なロガー情報が流れる。

ブラウザで http:127.0.0.1:8080/hello アクセスすると

とちゃんと表示されました。

wildfly-jar-maven-plugin やるではないですかーw