2. アプリケーション開発手法

本節では、次のケースでのアプリケーション開発について説明します。


2.1. アプリケーションのコンテナ化/マイクロサービス化

2.1.1. コンテナ化

コンテナ化とは、アプリケーションをWebOTX Application Serverの実行基盤とともにコンテナ環境で動作可能な形態(コンテナイメージ)にすること、その際にアプリケーションをコンテナ環境の特性に適合させること、を意味します。

WebOTXでは、コンテナ化のために、コンテナイメージを作成するための機能だけでなく、アプリケーションのコンテナ環境への適合性を検証する支援機能を提供しています。

2.1.2. マイクロサービス化

マイクロサービス化とは、アプリケーションをマイクロサービスアーキテクチャ(従来のモノリシックな構造に対して、変更容易性・スケーラビリティ・耐障害性に優れるサービスを細分化した構造)に基づいた実装とすること、サービスをEclipse MicroProfile仕様が提供する機能を利用した実装とすること、を意味します。

WebOTXでは、マイクロサービス化のために、軽量化したWebOTX Application Serverの実行基盤や、Eclipse MicroProfile仕様に準拠した実装を提供しています。


2.2. Eclipse MicroProfileの利用

WebOTXが対応するEclipse MicroProfileの各機能について簡単に説明します。

詳細については、以下を参照してください。

2.2.1. MicroProfile Config

Java のシステムプロパティ、環境変数、プロパティファイル(META-INF/microprofile-config.properties)に設定された値を、優先度に従ってアプリケーションで取得するためのAPIを提供します。

これにより、アプリケーションでは、どこで設定が行われているかを意識することなく、同じAPIにより値を取得できます。

詳細については、以下を参照してください。

2.2.2. MicroProfile Fault Tolerance

サービスの耐障害性と回復性を実現するための次のような機能を提供します。

機能 概要
Timeout 実行時間を制限します。
Retry エラー発生時にリトライします。
Fallback エラー発生時の後処理を実行します。
Bulkhead 同時実行数を制限します。
CircuitBreaker エラー頻発時の要求受付を抑止します。
Asynchronous 実行を非同期にします。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、サービス異常時の多種多様な制御を実現できます。

詳細については、以下を参照してください。

2.2.3. MicroProfile Health Check

サービスのヘルス状態をエンドポイント(/health)で公開する機能を提供します。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、アプリケーション単位の各種状態をWebOTX全体の状態に統合して公開できます。

詳細については、以下を参照してください。

2.2.4. MicroProfile JWT Authentication

OpenID Providerから返却されたトークンの復号化等の変換を行う機能を提供します。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、認証機能を実現できます。

詳細については、以下を参照してください。

2.2.5. MicroProfile Metrics

マイクロサービスのさまざまなデータを定量化し、定量化したデータを管理しやすいように加工して、メトリクスとしてエンドポイント(/metrics)で公開する機能を提供します。base(共通)、vender(ベンダー固有)、application(アプリケーション固有)の3種類のメトリクスがあり、acceptヘッダーに応じてPrometheus形式かJSON形式のデータとして返却します。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、アプリケーション固有のメトリクスを公開できます。

詳細については、以下を参照してください。

2.2.6. MicroProfile OpenAPI

JAX-RSアプリケーションから、OpenAPI v3 specification準拠のAPIドキュメントを自動生成し、それをエンドポイント(/openapi)で公開する機能を提供します。

これにより、次のようなことが実現できます。

詳細については、以下を参照してください。

2.2.7. MicroProfile OpenTracing

サービスの依存関係や各サービスのレイテンシなどのトレーシングなどができる機能を提供します。分散トレーシングのコンテキストをリクエストヘッダでサービス間で伝達し、その情報をJaegerなどのトレーサーにストアして依存関係やレイテンシなどを可視化・分析で利用します。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、分散トレーシングに必要な処理を実装できます。

詳細については、以下を参照してください。

2.2.8. MicroProfile Rest Client

HTTPを介してRESTfulサービスを呼び出すためのタイプセーフなアプローチを提供します。JAX-RSリソースが定義されたinterfaceを元にそのクライアントを作成し、そのinterfaceのメソッドを呼び出す形となります。

これにより、アプリケーションでは、アノテーションなど簡易な実装だけで、サービスの呼出しを実装できます。

詳細については、以下を参照してください。


2.3. WebOTX Application Serverのコンテナ形態とビルド

オンプレ環境から移行するコンテナ環境の実行基盤として提供するApplication Server製品について説明します。

2.3.1. WebOTX Application Server Express for Container (micro-service profile)

2.3.1.1. 製品の特徴

コンテナ環境下でマイクロサービス化したアプリケーションに最適なマイクロサービスプロファイル版のExpress実行環境を提供します。

他の製品と異なり、javaコマンドで単体起動可能なWebOTX Uber JARという形態の軽量化された実行基盤となっており、モノリシックではない、変更容易性・スケーラビリティ・耐障害性にすぐれたマイクロサービスアーキテクチャに沿うアプリケーションの実行に適しています。

既存のアプリケーションを使用する場合には、WebOTX Developerの [ コンテナ向けアプリケーション検証機能 ] を利用して適合性を確認できます。

2.3.1.2. ビルド方法

マイクロサービスプロファイル版のビルドは、次のような流れとなります。

  1. 開発環境 / WebOTX Developer
    1. アプリケーションの開発
    2. WebOTX Uber JARのビルド
      1. Mavenプロジェクト作成
        • アーキタイプ(ms-uberjar-archetype)を指定
      2. アプリケーションの統合
      3. Application Serverの設定
      4. ビルド
        • マイクロサービスパッケージ(WebOTX Uber JAR、Dockerfile)を出力
  2. コンテナビルド環境
    1. マイクロサービスパッケージ(WebOTX Uber JAR、Dockerfile)を配置
    2. コンテナイメージのビルド (docker/podman)

ビルド手順については、 [ インストールガイド > Linux] のコンテナ向け製品 WebOTX Application Server Express for Container を参照してください。

2.3.2. WebOTX Application Server Express for Container (full profile)

2.3.2.1. 製品の特徴

コンテナ環境下でJava EEの機能を提供するフルプロファイル版のExpress実行環境を提供します。

オンプレからコンテナ環境に移行する場合の受け皿となり、WebOTX Developerを使用して「マイグレーションアシスタント」で変換した設定と「コンテナ向けアプリケーション検証」を利用してコンテナ化したアプリケーションをエクスポートし、それを入力としてスクリプト実行してコンテナイメージを構築します。

新規にコンテナイメージを構築する場合、V10.3と同様の方法(入力なしでスクリプトを実行)に加えて、V10.4からはDocker Hubで公開されるExpress版のベースイメージを利用する方法も可能です。

2.3.2.2. ビルドの流れ

移行の場合、次の流れとなります。

  1. 開発環境 / WebOTX Developer
    1. マイグレーションアシスタントで変換した設定情報/アプリケーションをエクスポート(zip)
  2. コンテナビルド環境
    1. 当該製品(媒体)をマウント
    2. コンテナイメージ生成用ファイル準備スクリプトの実行
      • エクスポートファイル(zip)を引数に指定
    3. コンテナイメージのビルド (docker/podman)

公開イメージを利用する場合、次の流れとなります。

  1. 開発環境 / WebOTX Developer
    1. アプリケーションの開発
  2. コンテナビルド環境
    1. Dockerfileを作成
      • ベースイメージにExpress版を指定
      • 設定、アプリケーションの配備を実行
    2. コンテナイメージのビルド (docker/podman)

ビルド手順については、 [ インストールガイド > Linux] のコンテナ向け製品 WebOTX Application Server Express for Container を参照してください。


2.3.3. WebOTX Application Server Standard for Container

製品の特徴、ビルドの流れについては、Express版と同じです。

2.3.3.1. 製品の特徴
2.3.3.2. ビルドの流れ

ビルド手順については、 [ インストールガイド > Linux] のコンテナ向け製品 WebOTX Application Server Standard for Container を参照してください。


2.4. WebOTX Developerによるコンテナ開発

WebOTX Developerで提供するコンテナ向け開発ツールについて説明します。

2.4.1. マイグレーションアシスタント

マイグレーションアシスタントは、旧バージョンのWebOTXからの移行作業を短時間で容易に行うための機能です。

本ツールは、コンテナ環境への移行もサポートしており、次のような流れで移行します。
オンプレミス環境への移行との主な差異は、★部分となります。

  1. 移行元環境
    1. 設定情報の採取
  2. 開発環境 / WebOTX Developer
    1. マイグレーションプロジェクトの作成
    2. 設定情報のインポート
    3. 設定情報の変換
    4. アプリケーションの変換
      1. 検証
        1. アプリケーションの非互換チェック
        2. (コンテナ環境への移行の場合)コンテナ向けアプリケーション検証 (★)
      2. (変換要の場合)改修
      3. (変換要の場合)マイグレーションプロジェクトとの関連付け
    5. 設定情報のエクスポート (zipファイル)
  3. 移行先
    1. 非コンテナ環境の場合
      1. 移行先環境
        1. 設定情報の反映
    2. コンテナ環境の場合(★)
      1. コンテナビルド環境
        1. コンテナ向け製品(媒体)のマウント
        2. コンテナイメージ生成用ファイル準備スクリプトの実行
          • エクスポートファイル(zip)を引数に指定
        3. コンテナイメージのビルド (docker/podman)

詳細については、 [ 移行 > 移行機能リファレンス > マイグレーションアシスタント ] を参照してください。


2.4.2. コンテナ向けアプリケーション検証

コンテナ向けアプリケーション検証は、Javaアプリケーションのコンテナ向けマイグレーション作業をサポートする機能で、インポートされたプロジェクトソースディレクトリやアプリケーションアーカイブなどを検証し、変更が必要な場所などをHTMLレポートとして出力する機能です。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > コンテナ向けアプリケーション検証 ] を参照してください。

本ツールを利用することで、既存アプリケーションのコンテナ化において、客観的に課題やその対処を把握することができ、最低限の改修で動作できるフルプロファイル版のコンテナ環境を利用するか、さらにマイクロサービスアーキテクチャに則った実装に改修してマイクロサービスプロファイル版のコンテナ環境を利用するかなど、の判断の一歩とできます。

以降に、利用方法やレポート内容について簡単に説明します。

2.4.2.1. 実行方法

2通りの実行方法を提供します。

WebOTX Developerでの方法は [ アプリケーションアーカイブの検証手順 ] を、コマンドでの方法は [ コマンドを使用したコンテナ向けアプリケーション検証 ] を参照してください。

2.4.2.2. 検証対象

実行時に、以下を検証対象として指定できます。

Memo
アーカイブファイルを検証するには、事前にプロパティファイルの設定変更が必要です。
詳細については、[ プロパティファイルの設定変更 ] を参照してください。

2.4.2.3. 検証プロファイル選択

実行時に、WebOTX Application Serverのどのプロファイルに向けた検証とするかを選択します。

マイグレーションの場合、基本的にはJava EEアプリケーションがターゲットとなるため、「フルプロファイル向けの検証」を選択します。さらに、「マイクロプロファイル向けの検証」も行うことにより、マイクロサービス化の可能性も確認できます。

新規作成の場合、Webサービス以外も含むJava EEアプリケーションの開発であれば「フルプロファイル向けの検証」を、Webサービスのみのマイクロサービスの開発であれば「マイクロプロファイル向けの検証」を選択します。

検証の結果、マイクロサービス化に適合する場合は、マイクロサービスに適したSpring BootやEclipse Microprofileといったフレームワークも利用できます。後者は、従来から利用されているJavaEEの資産や技術を利用できるため、段階的なモダナイズには適しています。

2.4.2.4. 検証ルール

選択したプロファイルに応じて、次のような検証ルールでチェックします。

2.4.2.5. レポート内容

HTMLで提供されるレポートでは、アプリケーションごとに、次のような情報を確認できます。

詳細については、 [ コンテナ向けアプリケーション検証レポート ] を参照してください。

特に、「Issues (移行課題)」で指摘された課題、対処、ストーリポイントが、コンテナ化、マイクロサービス化に必要な作業内容、作業量を検討するために有用な情報となります。

例えば、Java RMIの利用したプログラムにおいて、次のような指摘がレポートされます。

2.4.3. マイクロサービスアプリケーション開発環境

Webアプリケーション、Webサービスアプリケーションのプロジェクトにおいて、前述したEclipse MicroProfile仕様に準拠したライブラリを利用し、各機能をアプリケーションで実装できます。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスアプリケーションの開発 ] を参照してください。

2.4.4. WebOTX Uber JAR生成ツール

WebOTX Uber JAR生成ツールは、WebOTXマイクロサービスMavenプラグインとして提供します。
ビルドに必要な以下のものは、Maven Central Repositoryで提供しています。製品媒体にも含まれており、Mavenローカルリポジトリに直接配置することもできます。

WebOTX Uber JARを作成する作業の流れは、以下となります。

  1. Mavenプロジェクト作成
  2. アプリケーションの統合
  3. Application Serverの設定
  4. WebOTX Uber JARのビルド

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 ] を参照してください。

2.5. アプリケーションの開発手順

ここでは、以下の開発手順について説明します。

2.5.1. 既存アプリケーションの移行

ここでは主に、オンプレミス環境からコンテナ環境に既存アプリケーションを移行する際に行う、WebOTX Developerのコンテナ向けアプリケーション検証の作業について説明します。

2.5.1.1. 既存アプリケーションのインポート

例として、[ アプリケーション開発 > EJBアプリケーション > サンプル集 ] の [ EJBのステートフルセッションBean ] で提供されているサンプルプロジェクトのアーカイブファイルを使用します。

WebOTX Developerのメニューで[ファイル]−[インポート]−[既存プロジェクトをワークスペースへ]を選択し、[プロジェクトのインポート]画面で上記アーカイブファイルを選択してインポートし、[ EJBのステートフルセッションBean ]を参照してアプリケーションをビルドしてください。

2.5.1.2. コンテナ向けアプリケーション検証の実行

既存アプリケーションのアーカイブファイル(ear)に対して検証を行います。

WebOTX Developerにおいて、アーカイブファイル(ear)の右クリックメニューで、[コンテナ向けアプリケーション検証]をクリックし、以下の検証種別を選択して「検証開始」を実行します。

検証が終わると、画面にレポート出力先フォルダのパスが表示されます。

Memo
検証種別によるレポートの違いを確認する場合は、レポート出力後にフォルダ名をリネームしてください。

詳細については、 [ コンテナ向けアプリケーション検証機能 > アプリケーションアーカイブの検証手順 ] を参照してください。

2.5.1.3. 検証レポートによるコンテナ化/マイクロサービス化

レポート出力先フォルダ直下のindex.htmlをブラウザで開いて検証レポートを確認します。

本サンプルの場合、検証種別によって、次のようなレポートを確認できます。

フルプロファイル向けの検証レポート

フルプロファイル向け検証レポート

Issues(移行課題)で、Cloud Mandatoryが1件検出されています。画面上でクリックすると、以下の内容を確認できます。

本サンプルの特性(同じマシン内でのWebJSPからのEJB呼び出しであり、リモート呼び出しでの懸念はない)を踏まえると、フルプロファイル版のコンテナ環境であれば改修なしで移行可能と判断できます。

マイクロサービスプロファイル向けの検証レポート

マイクロプロファイル向け検証レポート

Issues(移行課題)で、Cloud Mandatoryが7件検出されています。画面上でクリックすると、すべて同じで、以下の内容を確認できます。

マイクロサービスプロファイル版に移行するためには、EJBアプリケーションをWebサービス化する改修が必須と判断できます。

ここでは、改造が不要なフルプロファイル版への移行を選択したものとします。

2.5.1.4. Eclipse MicroProfileの利用

フルプロファイル版のコンテナ環境の場合も、Eclipse MicroProfileの機能を利用することができます。
必要に応じて実装してください。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスアプリケーションの開発 ] を参照してください。

2.5.1.5. コンテナイメージのビルド

コンテナ化された既存アプリケーションは、マイグレーションアシスタントの作業のなかで、変換された設定とともにアーカイブファイル(zip)としてエクスポートされます。

コンテナ環境への移行とは、コンテナイメージを生成することを意味します。マイクロサービスプロファイル版のコンテナ製品が対応するLinux環境において、アーカイブファイル(zip)を入力として、次のような手順でビルドします。

  1. インストール媒体のマウント
  2. コンテナイメージ生成用ファイル準備スクリプトの実行
    ※アーカイブファイル(zip)を引数指定
    1. 出力先を指定
    2. 使用するベースイメージを選択
    3. パッケージマネージャを指定
    4. JDKを選択
    5. Application ServerのEditionを選択
    6. ライセンスキーを入力
    7. Webサーバを選択
    8. パッチを適用
    9. 運用管理ユーザを指定
    10. コンテナイメージ生成の継続確認
      ※追加構成が必要な場合、中断
    11. コンテナイメージ名を指定
    12. proxyを指定
  3. (コンテナイメージ生成)

追加構成のために中断した場合、出力先に生成されたファイルに対して追加構成を定義した後で、手動でコマンド(docker/podman)を実行してコンテナイメージを生成します。

次のような追加構成ができます。

詳細については、 [ インストールガイド > Linux] の以下を参照してください。

2.5.1.6. コンテナ環境での実行

動作確認のため、コマンド(docker/podman)を実行してコンテナイメージを起動します。

詳細については、 [ 構築・運用 > コンテナ環境の開発から運用まで > テスト手法 > Application Serverコンテナの起動 > コンテナ環境 > コンテナの起動 ] を参照してください。


2.5.2. 新規アプリケーションの開発

WebOTX Developerにおいて、WebOTXマイクロサービスMavenアーキタイプで作成したMavenプロジェクトをベースに、新規アプリケーションを開発する一連の作業手順について説明します。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Debeloperを利用して新規に作成 ] を参照してください。

2.5.2.1. マイクロサービス用プロジェクトを作成

WebOTX Developerのメニューで[ファイル]−[新規]−[その他]−[Maven]−[Maven Project]を選択し、 WebOTXマイクロサービスMavenアーキタイプ(ms-uberjar-archetype)を指定してMavenプロジェクトを生成します。

初回は、「Add Archetype...」ボタンを押下し、以下を指定してMaven Central repositoryから上記Mavenアーキタイプを追加してください。

項目
Archetype Group Id com.nec.webotx
Archetype Artifact Id ms-uberjar-archetype
Archetype Version 11.1
Repository URL

アーキタイプのパラメータ入力画面では、空欄の[Artifact Id]に任意プロジェクト名を入力します。
ここでは、次の値とします。

項目 備考
Group Id com.sample 既定値のまま
Artifact Id sample-app プロジェクト名を指定
Version 1.0-SNAPSHOT 既定値から変更
Package com.sample.sample_app 自動設定値のまま

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Developerを利用して新規に作成 > Mavenプロジェクトの作成 ] を参照してください。

2.5.2.2. アプリケーションの新規開発

プロジェクトには、デフォルトで用意されているサンプルアプリケーションが展開されます。
これをベースにプロジェクト内でアプリケーションを開発するか、別プロジェクトで開発したアプリケーションアーカイブファイル(war)を統合します。

ここでは、前者の例として、Eclipse Microprofileの機能をいくつか実装したサンプルアプリケーションのソースファイルをプロジェクトに統合します。

アプリケーションの統合

下記アーカイブファイルは、ここで構築するWebOTX Uber JARのMavenプロジェクトの最終的なものです。

これを解凍し、下記フォルダを、作成したマイクロサービス用プロジェクトのものと、まるごと置換します。

デフォルトのものとソースフォルダが異なるため、当該プロジェクトの右クリックメニューの[ビルド・パス]−[ビルド・パスの構成]−[ソース]を開き、以下の設定変更を行います。

  1. 既存のsrcフォルダを削除
  2. 以下のフォルダを追加
参照ライブラリの定義

アプリケーションが参照するライブラリを、pom.xmlのdependency定義に追加します。

以下では、OpenTracingとJUnitのライブラリを追加しています。

  <dependencies>
    <dependency>
      <groupId>io.opentracing</groupId>
      <artifactId>opentracing-api</artifactId>
      <version>0.33.0</version>
      <scope>provided</scope>
      </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.7.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.7.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Developerを利用して新規に作成 > pom.xmlの編集 ] を参照してください。

2.5.2.3. Eclipse MicroProfileの利用

必要に応じて、アプリケーションにEclipse MicroProfileの機能を実装します。

統合したサンプルアプリケーションでは、以下の機能を使用しています。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスアプリケーションの開発 ] を参照してください。

2.5.2.4. ビルド

Mavenによるビルドを実行し、アプリケーションを統合したWebOTX Uber JARと、コンテナイメージ生成に必要なDockerfileをマイクロサービスパッケージとして出力します。

mavenプラグインの設定

アプリケーションやApplication Server実行基盤に対する設定は、mavenプラグインのconfigurationに指定します。

次のような設定があります。

そのほか、コンテナイメージの基となるDockerfileに関する設定もあります。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > pom.xmlの設定 > 設定一覧 ] を参照してください。

mavenプラグインの実行

ビルドは、mavenコマンドmvn packageで行います。

当該プロジェクトの右クリックメニューの[実行]−[実行の構成]−[Maven Build]で、下記設定の新規構成を作成して実行します。

タブ 設定項目
Main Goals package

ビルド結果は、WebOTX Developerのコンソールで確認します。

ビルド生成物は、${project}/target/webotx-ms-package配下に以下のものが出力されます。

生成物 ファイル名
WebOTX Uber JAR (アプリケーション名)-(バージョン )-micro.jar
例:sample-app-1.0-SNAPSHOT-micro.jar
Dockerfile Dockerfile

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Developerを利用して新規に作成 > ビルド実行 ] を参照してください。

2.5.2.5. 実行

ビルドしたWebOTX Uber JARは、javaコマンドで単体起動できます。
コマンドプロンプトで起動してCtl+Cで停止する、手動操作が基本的な実行方法となります。

ここでは、WebOTX Developerで実行する2つの方法について説明します。

WebOTX Uber JARの起動時オプション

WebOTX Uber JARは、自身やコンテナイメージの再作成をせずに設定を変更できるように、起動時の引数および環境変数での設定ができます。

例えば、開発マシンで一時的に同じポート番号が使用されているような場合、ビルド時ではなく、実行時の引数で変更できます。

引数 説明 既定値
--http-port HTTPポート番号 8080
--https-port HTTPSポート番号 8443

詳細については、 [ リファレンス > 設定 > マイクロサービスプロファイル ] の以下を参照してください。

外部ツールでの実行

WebOTX Developerから手動でWebOTX Uber JARを単体起動する場合、外部ツールとして実行する方法があります。

起動は、メニューの[実行]−[外部ツール]−[外部ツールの構成]−[プログラム]で、下記設定の新規構成を作成して実行します。

タブ 設定項目
メイン ロケーション javaコマンドのパス
作業ディレクトリ プロジェクトフォルダ
${workspace_loc:/project-name}
引数 プログラムの引数 -jar target/(WebOTX Uber JARのjarファイル名)
例) -jar target/sample-app-1.0-SNAPSHOT-micro.jar
共通 エンコード MS932

起動すると、WebOTX Developerのコンソールビューに、WebOTX Uber JARからの標準出力と標準エラー出力が表示されます。

停止は、コンソールビューの「停止」ボタンを押下します。
この場合、WebOTX Uber JARは強制停止となるため、残存するファイルを手動で削除する必要があります。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Developerを利用して新規に作成 > Uber JARの実行確認 > WebOTX Developerで実行 ] を参照してください。

Mavenでの実行

CIツールでの自動ビルド時にWebOTX Uber JARの動作確認をするような場合に、mavenで実行するためには、Mavenプラグイン(exec-maven-plugin)を利用します。

実行は、同期(デフォルト)/非同期が選択できますが、同期ではmavenに制御が戻らないため、非同期で実行します。

また、そのままmavenが停止すると、非同期に実行したWebOTX Uber JARが残存するため、maven停止に連動してjavaプロセスが停止される設定にします。

pom.xmlに追加するプラグイン定義は以下のとおりです。

定義 意味
async true javaを非同期で実行します。
asyncDestroyOnShutdown true maven停止に連動します。
     <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>exec-uberjar</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>java</executable>
                    <arguments>
                        <argument>-jar</argument>
                        <argument>${project.build.directory}/${artifactId}-${version}-micro.jar</argument>
                        <argument>--basedir</argument>
                        <argument>${project.basedir}/workdir</argument>
                    </arguments>
                    <skip>false</skip>
                    <async>true</async>
                    <asyncDestroyOnShutdown>true</asyncDestroyOnShutdown>
                </configuration>
            </execution>
        </executions>
      </plugin>

非同期実行の場合、次のような留意点があります。

そのため、WebOTX Uber JARの実行に続けて、起動完了を待ち合わせて動作確認をするテストプログラムを連続して実行するような場合に有用です。
その場合、テストプログラムを同期実行するプラグイン(exec-maven-plugin)定義を追加します。

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>exec-tp</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>${project.basedir}test.bat</executable>
                    <arguments>
                    </arguments>
                    <skip>false</skip>
                </configuration>
            </execution>
        </executions>
      </plugin>

定義例では、簡易なテスト手段としてバッチファイル(test.bat)を指定します。
例えば、次のような処理を実装します。

  1. WebOTX Uber JARの起動完了を待ち合わせ
  2. アプリケーションの評価
  3. 停止

以下では、固定で60秒間待ち合わせた後に、サービスを呼び出しています。

@echo off
REM ==============================
REM Wait for starting WebOTX AS
REM ==============================
powershell sleep 60

REM ==============================
REM Access Application Service
REM ==============================
curl -f http://localhost:8080/sample-app-1.0-SNAPSHOT/sample_service_a/service_a?route=A
if %errorlevel% neq 0 (
  exit /b 1
)
exit /b 0

起動すると、Developerのコンソールビューに、mavenの出力とともに、WebOTX Uber JARからの標準出力と標準エラー出力が表示されます。

停止は、mavenの停止に連動して強制的に行われます。
この場合、WebOTX Uber JARは強制停止となるため、残存するファイルを手動で削除する必要があります。

コンソール出力について

WebOTX Uber JARのコンソール出力について説明します。

起動開始時のメッセージ

起動開始時に、WebOTX Uber JARの展開先ディレクトリのパスが出力されます。

展開先ディレクトリ C:\Users\USERNAME\AppData\Local\Temp\webotx-micro-4352678962912490878

手動評価などで、実行中のログファイルを確認する場合は、このディレクトリ配下を確認してください。
また、実行後に残存している場合はこのディレクトリを削除してください。

自動評価で固定化したい場合には、WebOTX Uber JARの起動時引数(-basedir)でディレクトリを指定できます。

起動完了時のメッセージ

デフォルトでは、起動完了を示すメッセージはコンソールに出力されません。

ログファイル(<展開先ディレクトリ>\WebOTX\domains\domain1\logs\server.log)に出力されるメッセージで確認してください。

起動完了時に、バージョン情報と"ready"のメッセージが出力されます。

ログファイルの内容を標準出力に表示してコンソールで確認する方法もあります。

そのほか、Eclipse MicroProfile Health Checkが提供されるヘルスチェック用エンドポイント(/health)の結果で判断できます。 curlコマンドでアクセスし、”UP"と表示されることを確認してください。

> curl http://localhost:8080/health
{"outcome":"UP", "checks":[]}
後処理について

WebOTX Uber JARは、当該動作固有の一時的なディレクトリを作成して、jarファイルに含まれている実行環境を展開して動作しています。 当該ディレクトリが停止後も残存している場合、特にディレクトリを固定化していない場合は、ゴミファイルとして残り続けるため、削除する必要があります。

2.5.2.6. テスト

WebOTX Uber JARに統合したアプリケーションは、以下のURLでサービスを公開しています。

curlコマンドでアクセスし、HTTPステータスコードが200となることを確認してください。

> curl http://localhost:8080/sample-app-1.0-SNAPSHOT/sample_service_a/service_a?route=A
service_a called! result : 200

確認方法としては、次のようなものが考えられます。 必要に応じて、これを手動もしくはMavenプラグインで自動実行します。

サンプルアプリケーションでは、OpenAPIドキュメントを公開用のエンドポイント(/openapi)から取得できます。curlコマンドでアクセスし、ドキュメントを取得できることを確認してください。

> curl http://localhost:8080/openapi
---
openapi: 3.0.1
info:
  title: Generated API
  version: "1.0"
servers:
- url: http://localhost:8080/sample-app-1.0-SNAPSHOT
  description: Default Server.
paths:
  /sample_service_a/service_a:
    get:
      summary: Service A
      description: "Service A calls Service B. The route parameter specifies the target\
        \ service ID (A/B/C) to cause a delay. However, A does not cause a delay."
      parameters:
      - name: route
        in: query
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            text/plain:
              schema:
                type: string
  ・・・・・

サンプルアプリケーションでは、メトリクスを公開用のエンドポイント(/metrics)から取得できます。
アプリケーションのサービスに複数回アクセスした後、curlコマンドでアクセスし、メトリクスを取得できることを確認してください。デフォルトではhttpsプロトコルで公開されています。
以下はPrometheus形式で取得した場合です。

> curl https://localhost:8443/metrics/application --insecure
# HELP application:hello Metrics to show how many times SampleServiceA.serviceA() was called.
# TYPE application:hello counter
application:hello 12.0

以下は、JSON形式で取得した場合です。

> curl https://localhost:8443/metrics/application --insecure -H "Accept: application/json"
{
  "hello" : 12
}
2.5.2.7. デバッグ

WebOTX Uber JARに統合されたアプリケーションのソースコードをデバッグする場合、次の手順で行います。

詳細については、 [ アプリケーション開発 > その他のアプリケーション > マイクロサービスプロファイルを使用したWebOTX Uber JARの作成 > WebOTX Developerを利用して新規に作成 > Uber JARのデバッグ ] を参照してください。

デバッグモードのコンパイル

コンパイル時にデバッグ情報を含めるために、pom.xmlに以下の定義を追加します。

  <properties>
    <maven.compiler.debug>true</maven.compiler.debug>
    <maven.compiler.debuglevel>lines,vars,source</maven.compiler.debuglevel>
  </properties>
デバッグモードでの起動

リモートデバッグを可能にするために、WebOTX Uber JAR起動時のjavaオプションに以下を追加します。ポート番号は任意です。

[JDK8]
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4004

[JDK11]
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:4004

起動すると、WebOTX Developerのコンソールに以下のメッセージが最初に表示されます。

Listening for transport dt_socket at address: 4004

このポート番号を、デバッグ時にアタッチ先として指定します。

そのほかは、実行時と同じです。

WebOTX Uber JARプロセスへのアタッチ

デバッグは、プロジェクトの右クリックメニューの[デバッグ]−[デバッグの構成]−[リモートJavaアプリケーション]で、下記設定の新規構成を作成して実行します。

タブ 設定項目
接続 接続タイプ 接続 (ソケット接続)
接続プロパティ ホスト localhost
ポート 4004

ソースコード上にブレークポイントを設定し、アプリケーションにアクセスすると、デバッグ用のパースペクティブが開かれ、デバッグが可能となります。

停止は、切断ボタンを押下します。