はじめに
前回WildFlyをKubernetes上で動かした。そこで動かした簡単なRESTサービスのwarファイルを作るまでを書き留めておく。

プログラミング
プロジェクトファイルの作成
まずはeclipseでプロジェクトを作ります。Mavenという、Node.jsのapp.jsのようなライブラリの依存関係であったり、プロファイル(開発用、本番用とか)だったりを管理してくれるプロジェクトを作成します。

フィルターにwildfyと入力し、wildfly-jakartaee-webapp-archetype(19.1.0.Final)を選択します。(検証時点でもう19.1.0がアップされていたのには早くて驚いた)

グループID、アーティファクトIDを適当にいれて「完了」ボタンを押します。
グループIDはパッケージを一意に識別する名前でドメインを逆にした名前がよくつけられます。アーティファクトIDは成果物の名前で、今回の場合は、sample.warが出来上がります。

すると、pom.xmlファイルと空のパッケージが作成されます。pom.xml(Project Object Model)を開いてみると、RESTやCDIなど依存関係は既に書かれていることが確認できます。プログラムソースからwarが出来るまでに必要なライブラリの依存関係やコンパイル情報などがこのpom.xmlに詰まっています。

Hello RESTの作成
GETすると”Hello, World”を返すだけのRESTを作成します。作成するファイルは2つ。一つはRESTサービスのトップパスの名前を知らせるためのRestRootクラス、もう一つはGETでアクセスしたときに文字列”Hello,World”を返すHelloクラスです。
@ApplicationPath("/api") // このアノテーションで、RESTサービスへのトップのパス名を知らせます
public class RestRoot extends Application {
}
@Path("/hello")
public class Hello {
@Path("/text")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String asText() {
return "Hello, World";
}
}
コンテキストルートの変更
このままだと、コンテキストルートがsampleになります。つまり、http://localhost/sample/api/hello/text にアクセスしないとHelloは返ってきません。テスト上はこれでもよいのですが、この後Ingress配下にアップすることを考えるとルートにしておきたい。つまり、http://localhost/api/hello/textへアクセスしたときにHelloが返ってくるようにします。
コンテキストルートをルートにします。(ややこしい、表現ですが)
方法は、WEB-INF配下に、以下のファイル(jboss-web.xml)を設置するだけです。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/</context-root>
</jboss-web>
開発サーバで起動
ここまで作成してきたファイルをeclipse上のWildFlyサーバで実行できるようにします。「サーバー」タブのサーバ上で右クリック、「追加および除去」を選択します。

プロジェクトsampleを選択し、「追加」し「完了」ボタンを押します。

これでsampleプロジェクトは、eclipse上のWildFlyサーバと紐づきました。
動作確認
デフォルトで自動的にビルドするようになっているので、サーバを起動すると、コンパイルがはじまり、十数秒後にWildFlyサービスの起動が完了します。

シェルからapiをたたいてあげると、無事、Helloが返ってくるはずです。
# curl -X GET localhost:8080/api/hello/text
Hello, World
warファイルの作成
シェルから以下のmavenコマンドを打つと、warファイルが出来上がります。
# mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building sample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
(略)
[INFO] Building war: /root/eclipse-workspace/sample/target/sample.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------
(略)
これは以下のようにeclipse上に定義して、GUIから実行することも出来ます。

ちなみに、画面上では-Pオプションが書かれていますが、これはpom.xmlファイルの中で予め、本番(production)のときの処理を定義しておくと(例えば指定ファイルを圧縮するとか、コメントを削除するとか)そのようにwarファイルを作成してくれます。
このようにして出来上がったwarファイルを本番のWildFlyの管理コンソールからデプロイしてあげれば、Hello,Worldプログラムが動作します。
今回はkubernetesの勉強を兼ね、このwarファイルを含めたWildFlyイメージをコンテナレジストリに登録して、サービスを起動させていました。