LoginSignup
2
0

More than 1 year has passed since last update.

Open LibertyのFeatureをプライベートリポジトリからダウンロードする

Posted at

Javaアプリケーションサーバ Open Liberty は、Jakarta EEおよびMicroProfileの機能を使用する際にFeatureと呼ばれるモジュールを使用します。使いたい機能に対応したFeatureのみインストールすることで、比較的小さなアプリケーションサイズになり、起動時間も短くなるメリットがあります。

FeatureはMaven Central Repositoryに保管されたパッケージです。
そのため、企業NWで接続先を制限しているとFeatureをインストールができない状態になる場合があります。

この記事ではMaven Central Repositoryではなく、プライベートリポジトリからFeatureをインストールする方法を記載します。

環境情報

  • JDK ... OpenJDK 17 IBM Semeru Runtime Open Edition
  • Open Liberty ... 22.0.0.12

いきなり結論: 環境変数をセットする

FeatureはOpen Liberty付属のコマンドライン・ユーティリティ featureUtility を使用してインストールします。

いきなり結論ですが、featureUtilityは環境変数 (またはプロパティファイル featureUtility.properties) でプライベートリポジトリの接続先を指定可能です。環境変数を利用する場合は以下のパラメータを指定します。

環境変数名 説明
FEATURE_REPO_URL プライベートリポジトリのURL
FEATURE_REPO_USER プライベートリポジトリのユーザー
FEATURE_REPO_PASSWORD プライベートリポジトリのパスワード

実践

Open LibertyのREST APIアプリケーションのサンプルをベースにプライベートリポジトリからFeatureをインストールしたアプリケーションを作成します。

サンプルアプリケーションは公式ドキュメントのガイドを、JDK 17をターゲットにビルドできるように改変したものを使います。
また、Open Libertyのインストールを簡易にするため、IBM Container Registryで提供される公式コンテナイメージを使用します。

事前準備

事前にプライベートリポジトリを立てて、Featureをこのリポジトリに格納します。

※ Featureの格納方法は当記事では解説しません。

Featureの指定

Featureを server.xml に指定します。
この記事ではサンプルアプリケーションで指定されている以下2つを使用します。

  • Jakarta RESTful Web Services 3.0
  • Jakarta JSON Binding 2.0
<!-- server.xml -->
<server description="Intro REST Guide Liberty server">

  <featureManager>
    <feature>restfulWS-3.0</feature>
    <feature>jsonb-2.0</feature>
  </featureManager>

  <!-- 他の設定は省略 -->
</server>

Featureをインストールする

簡易のためOpen Libertyをコンテナで用意して、アプリケーションをビルドしてみます。

コンテナイメージで用意されたOpen LibertyでFeatureをインストールおよびビルドする際には、featureUtilityのラッパースクリプトfeatures.shを使用します。
以下にラッパースクリプトを使用するサンプルのDockerfileを示します。

FROM icr.io/appcafe/open-liberty:kernel-slim-java17-openj9-ubi

# ここでFeatureを指定したserver.xmlをコピー
COPY --chown=1001:0 /src/main/liberty/config /config

# server.xmlの定義に従ってFeatureをインストール
RUN features.sh

COPY --chown=1001:0 target/*.war /config/apps

RUN configure.sh

コンテナランタイムのビルド環境変数にプライベートリポジトリの接続情報を渡し、Featureをプライベートリポジトリからインストールするコンテナイメージをビルドします。以下のサンプルでは 10.22.33.45:8081 に立てたプライベートリポジトリを指定します。

$ # WARファイルをビルド
$ mvn clean package -DskipTests -B -ntp

$ ls target/*.war
target/guide-rest-intro.war

$ # Dockerfileを配置
$ ls Dockerfile
Dockerfile

$ # Featureのリポジトリにプライベートリポジトリを指定してコンテナイメージをビルド
$ podman build . -t liberty-rest-sample:v1 \
    --env=FEATURE_REPO_URL=http://10.22.33.45:8081/repository/maven-public \
    --env=FEATURE_REPO_USER=admin \
    --env=FEATURE_REPO_PASSWORD=samplepassword

Featureインストール済みのコンテナイメージからアプリケーションを起動すると、指定したFeatureおよび依存するFeatureを使用して起動することがわかります。

$ podman run --rm -p 9080:9080 --name liberty-rest-sample liberty-rest-sample:v1 

Launching defaultServer (...中略...)
[AUDIT   ] CWWKF0012I: The server installed the following features: [cdi-3.0, concurrent-2.0, jndi-1.0, jsonb-2.0, jsonp-2.0, restfulWS-3.0, restfulWSClient-3.0, servlet-5.0].
[AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 9.027 seconds.

参考情報

2
0
0

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
0