2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tomcatからwildflyに乗り換えて数年経過

Posted at

はじめに

tomcatからwildflyにのりかえて数年経過しました。
バージョンアップを試みました。

バージョンアップ前: Wildfly29 (2023/08/26)
バージョンアップ後: Wildfly35 (2025/02/06)
Javaのバージョン 17

数年たって、忘れかけているので、自分用にメモを残します。

Widlflyで動くWebアプリを作成する場合は、
これ以外にMavenがインストールされている必要があります。
(インストール手順は省略します)
私は主にMacで開発していますが、Windowsでも参考にはなると思います。

開発時に参考になる電子BOOK

Jakarta EE チュートリアル。著者はあつしさんです。

この電子BOOKでは、画面は JSFで書かれています。
JSFに抵抗がない方は、この入門書が良いと思います
JSFは多少難しいです。(私はJSFを、ほとんど使っていません)

downloadするもの

wildflyのダウンロードサイトから

wildfly 35.0.1の DistributionとQuick Startをダウンロードします

Wildfly_down.png

Quick Start には、サンプルアプリケーションが多数含まれています。

Distribution を展開する

Wildflyはzipファイルを展開するだけで、ほぼ利用可能になります。
多少のカスタマイズ(設定変更)は必要ですが。

Widflyには1つのサーバで動かす standaloneモードと、複数のサーバで動かす domainモードがあります。
私はdomainモードを使った事はありません。
いつもstandaloneモードを利用しています。

カスタマイズの際に、よく使うディレクトリやファイルを以下に示します。

warの配備場所

standalone\deployments
ここに開発して出来た warファイルを配備します。

bin

bin/standalone.sh (Mac or Linux)
bin/standalone.bat (windows)

サーバーを起動する際のコマンドです。

設定ファイル

standalone/configuration/standalone.xml
設定ファイルです。

standalone.xmlのちょっとした説明

Standalone.xmlの中を 127.0.0.1で検索すると、3箇所ほど見つかると思います。

    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>

ここを 127.0.0.1を 0.0.0.0に書き換えると、どこからでもアクセスできるようになります。
zipファイルを展開した直後のWildflyでは、127.0.0.1しかアクセスできないので、
自分のPC内の、ブラウザーからしかアクセスできません。
本番サーバーのように、他のPCからブラウザーでアクセスしたい場合は、0.0.0.0に書き換えた方が良いでしょう

最後の方に以下のような記述があります。

        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>

Tomcatと同様に8080ポートを使いますので、http://127.0.0.1:8080/
となります。

http://127.0.0.1:9990/ は管理者画面にアクセスする際に使います。

Quick Start

Quick Start Source Code(サンプル)のコンパイル方法。
Helloworldのディレクトリで、mvn packageを実行します。
Targetのディレクトリに helloworld.warが出来ます。
これを上記の standalone\deploymentsに入れてstandalone.shでサーバーを起動すれば、Helloworldが動きます。

サーバ設定のより詳しい情報

Dexall公式テックブログという所に、詳しい説明がありました。

どのWildflyのバージョンについて書かれているのかは、不明です。

私は、これらのページに書かれている事の20%程度ぐらいしか理解していません。

私の作っているアプリはチューニングが必要な程のアクセス数はないので、Dexall公式テックブログに書いてあるような事はしていませんが、安定して動いています。

管理者画面で使うユーザIDについて

http://127.0.0.1:9990/ は管理者画面と書きましたが、管理者画面にログインするために、IDとパスワードを追加する必要があります。

こちらは少々手順が長いので、別記事にしています。

アプリ開発で使うpom.xmlについて

上に紹介しました、あつしさんの記事では、Chapter 05 「アプリの雛形をダウンロード」に手順が書かれています。

Chapter 03に「Wildflyの他、Payara, GlassFishを使っても良い」と書かれています。

つまり「アプリの雛形をダウンロード」から始めると、どのJakartaEEサーバーでも動くアプリが作れるという事です。

一方、私は Payara, GlassFish を全く使った事がなく、Wildflyで満足しているので、のりかえる気もありません。
そのため、上で紹介した、Wildfly の Quick Startのhelloworldから始めたいと思いました。

しかしpom.xmlの修正は、なかなかに難しかったので、以下にメモを残しておきます。
(以下長文になる事を、ご了承ください)

警告
これ以降に書いている事は
wildfly-35.0.1.Final-quickstartsについて書いている事に注意してください。
それ以外のバージョンの場合、行番号や書き方が変わっている場合があります

84行目から86行目あたりに着目します

    <build>
        <!-- Set the name of the WAR, used as the context root when the app is deployed. -->
        <finalName>${project.artifactId}</finalName>

このbuildの中にあるfileNameタグに指定された名前で、warファイルが作成されます。
これはこのファイルの先頭の方に定義されています。

    <artifactId>helloworld</artifactId>
    <version>35.0.1.Final</version>
    <packaging>war</packaging>
    <name>Quickstart: helloworld</name>
    <description>Helloworld</description>

31行目のartifactIDはwarファイルの名前になるので、ご自分のアプリのwarファイルの名前にしてください。
次の2行は変更する必要はありません。
その次のname および、descriptionタグはご自分のアプリのプロジェクト名と、説明文に変更してください。

依存関係の追加

68行目から82行目のdependenciesの中には、自分が使いたいライブラリを追加してください。

私の場合ですと mybatis, mariadbのjdbcドライバ, slf4j, googleのgsonを追加しました。

書き忘れましたが、Quick Startのhelloworldの 親ディレクトリにあるpom.xmlも必要です。

この状態で、一旦完成です。

こ自分の作りたいアプリのソースコード(JavaやJSPなど)を追加して
mvn package を実行するとwarファイルができると思います。

ここで、問題点が2つありました。

1つめは CheckStyleのエラーが出てwarファイルが作れない事です。
私はあまり厳密なCheckStyle が好きでないので、外してしまいました。

方法は52行目の後ろあたりに以下を入れる事です。

        <checkstyle.skip>true</checkstyle.skip>

もう1つの問題は、build時になぜか gitへのアクセスがある点です。

image.png

私は、社内サーバーでソースを管理しているので、社外のgitにアクセスして欲しくありません。

これを禁止する方法は ChatGPTに聞いても、わかりませんでした。
試行錯誤してたどりついた解決方法を、以下に示します。

原因は131から149行目にある pluginsの指定にありました。
このプラグインを指定してしまうと、CheckStyleのタスクと、buildnumber-maven-pluginによるgitサーバーへのアクセスが動作する様子です。

これ以降の作業では、上記のpluginを無効にして、通常のに戻す、親ディレクトリにあるpom.xmlへの参照をやめる、変更に伴うエラーを修正していきます。

1 親ディレクトリの pom.xml参照をやめます

21行目から30行目にあるparentタグを削除します。

これをすると、 mvn packageをした際にgroupIdがないとエラーになります。
そのため artifactIdの上あたりにgroupIDのタグを追加します。
タグの中に入れるのはご自分のアプリのグループIDです。

2 propertiesの中に以下の指定をします。

    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

3 pluginの変更

fileNameの下にある pluginManagementのタグを開始から終了まで全部削除してください。

その代わりとして以下を入れます。

    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
      </plugin>
    </plugins>

この変更により、CheckStyleのタスクと、buildnumber-maven-pluginによるgitサーバーへのアクセス動作がなくなります。

最後に、この状態で mvn packageをすると、エラーが出ると思います。

元々のhelloworldのpom.xmlの行番号で、98行目から211行目のprofilesのあたりです。
このあたりは、私は使う予定がないので、全部消してしまいました。

これで、mvn packageを実行すると、エラーが発生せず、warファイルが作成できるようになります。

以上です。

長文を読んで頂きまして、ありがとうございました。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?