Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

設定ガイド

Red Hat JBoss Enterprise Application Platform 7.0

Red Hat JBoss Enterprise Application Platform 7.0 向け

Red Hat Customer Content Services

概要

本書は、Red Hat JBoss Enterprise Application Platform 7.0 の設定に関する管理者向けの実用ガイドです。

第1章 概要

本書は、JBoss EAP の設定や維持に必要な設定タスクと、JBoss EAP でアプリケーションやその他のサービスを稼働するために必要な設定タスクの多くを取り上げることを目的としています。本ガイドを使用して JBoss EAP を設定する前に、最新バージョンの JBoss EAP がダウンロードされ、インストールされていることを確認してください。インストールの手順は、インストールガイドを参照してください。

重要

ホストマシンによって JBoss EAP をインストールする場所が異なるため、本ガイドではインストール場所を EAP_HOME と示しています。管理タスクを行う際には、 EAP_HOME を実際の JBoss EAP のインストール場所に置き換えてください。

第2章 JBoss EAP の開始および停止

2.1. JBoss EAP の開始

JBoss EAP は、スタンドアロンサーバーと管理対象ドメインの 2 つの操作モードの 1 つで実行され、Red Hat Enterprise Linux、Windows Server、Oracle Solaris および Hewlett-Packard HP-UX でサポートされます。

JBoss EAP を起動するコマンドは、基盤のプラットフォームと選択する操作モードによって異なります。

JBoss EAP をスタンドアロンサーバーとして起動

$ EAP_HOME/bin/standalone.sh
注記

Windows Server の場合は EAP_HOME\bin\standalone.bat スクリプトを使用します。

この起動スクリプトは、EAP_HOME/bin/standalone.conf ファイル (Windows Server の場合は standalone.conf.bat) を使用して、JVM オプションなどのデフォルト設定の一部を設定します。このファイルの設定はカスタマイズすることができます。

JBoss EAP はデフォルトで standalone.xml 設定ファイルを使用しますが、別の設定ファイルを使用して起動することもできます。利用できるスタンドアロン設定ファイルとそれらの使用方法については、スタンドアロンサーバー設定ファイル の項を参照してください。

使用できる起動スクリプトの引数の完全リストとそれら引数の目的については、--help 引数を使用するか、サーバーランタイム引数を参照してください。

管理対象ドメインでの JBoss EAP の起動

ドメイン内のサーバーグループのサーバーを起動する前にドメインコントローラーを起動する必要があります。このスクリプトを使用して最初にドメインコントローラーを起動した後、関連するホストコントローラーに対して使用します。

$ EAP_HOME/bin/domain.sh
注記

Windows Server の場合は、EAP_HOME\bin\domain.bat スクリプトを使用します。

この起動スクリプトは、 EAP_HOME/bin/domain.conf ファイル (Windows Server の場合は domain.conf.bat) を使用して、JVM オプションなどのデフォルト設定の一部を設定します。このファイルの設定はカスタマイズすることができます。

JBoss EAP はデフォルトで host.xml ホスト設定ファイルを使用しますが、別の設定ファイルを使用して起動することもできます。利用できる管理対象ドメイン設定ファイルとそれらの使用方法については、管理対象ドメイン設定ファイル の項を参照してください。

管理対象ドメインを設定するとき、追加の引数を起動スクリプトに渡す必要があります。使用できる起動スクリプトの引数の完全リストとそれら引数の目的については、--help 引数を使用するか、サーバーランタイム引数 の項を参照してください。

2.2. JBoss EAP の停止

JBoss EAP の停止方法は、開始した方法によって異なります。

JBoss EAP の対話的なインスタンスの停止

JBoss EAP を起動したターミナルで Ctrl+C を押します。

JBoss EAP のバックグラウンドインスタンスの停止

管理 CLI を使用して、稼働中のインスタンスへ接続し、サーバーをシャットダウンします。

  1. 管理 CLI を起動します。

    $ EAP_HOME/bin/jboss-cli.sh --connect
  2. shutdown コマンドを実行します。

    shutdown
注記

管理対象ドメインで実行している場合、shutdown コマンドに --host 引数を使用してシャットダウンする、ホスト名を指定する必要があります。

2.3. JBoss EAP の管理専用モードでの実行

JBoss EAP は管理専用モードで起動することができます。管理専用モードでは、JBoss EAP は管理リクエストを実行および許可できますが、その他のランタイムサービスを起動したりエンドユーザーリクエストを許可したりすることはできません。管理専用モードはスタンドアロンサーバーと管理対象ドメインの両方で利用できます。管理対象ドメインの場合、ドメインコントローラーが管理専用モードで起動されると、スレーブホストコントローラーからの受信接続を許可しません。

JBoss EAP インスタンスを管理専用モードで起動するには、JBoss EAP インスタンスの起動時に --admin-only ランタイムスイッチを使用します。

注記

ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーの実行を仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は JBoss EAP Management CLI Guide を参照してください。

JBoss EAP の管理専用モードでの起動

$ EAP_HOME/bin/standalone.sh --admin-only

JBoss EAP が管理専用モードで実行されていることを確認

JBoss EAP インスタンスが管理専用モードで実行されているかを確認するには、以下を実行します。

注記

ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーの実行を仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は JBoss EAP Management CLI Guide を参照してください。

:read-attribute(name=running-mode)

JBoss EAP インスタンスが管理専用モードで実行されていると、結果は次のようになります。

{
  "outcome" => "success",
  "result" => "ADMIN_ONLY"
}

管理専用モードで実行されていない場合、結果は次のようになります。

{
  "outcome" => "success",
  "result" => "NORMAL"
}

管理 CLI からの別モードでの再起動

異なるランタイムスイッチを使用して JBoss EAP インスタンスを停止および起動するだけでなく、管理 CLI を使用してサーバーをリロードして異なるモードで起動することもできます。JBoss EAP インスタンスをリロードして管理専用モードで起動するには以下を実行します。

注記

ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーの実行を仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は JBoss EAP Management CLI Guide を参照してください。

reload --admin-only=true

JBoss EAP インスタンスをリロードして通常モードで起動するには以下を実行します。

reload --admin-only=false
注記

現在の実行モードではなく、最初の実行モードをチェックするには、コマンド /core-service=server-environment:read-attribute(name=initial-running-mode) を実行します。このコマンドは :read-attribute(name=running-mode) とは異なり、JBoss EAP が起動されたときの実行モードを表示するため、現在の実行モードは表示されません。

2.4. JBoss EAP の正常な中断およびシャットダウン

JBoss EAP は正常に中断およびシャットダウンできます。これにより、新しいリクエストを許可せずにアクティブなリクエストを正常に完了できます。タイムアウト値は、中断またはシャットダウン操作がアクティブなリクエストの完了まで待機する期間を指定します。サーバーが中断しても管理リクエストは処理されます。

正常なシャットダウンは、リクエストがサーバーに入るエントリーポイントを中心にサーバー全体のレベルで調整されます。以下のサブシステムが正常なシャットダウンをサポートします。

Undertow
undertow サブシステムはすべてのリクエストが終了するまで待機します。
mod_cluster
modcluster サブシステムは PRE_SUSPEND フェーズでサーバーが中断することをロードバランサーに通知します。
EJB
ejb3 サブシステムはすべてのリモート EJB リクエストおよび MDB メッセージ配信が終了するまで待機します。MDB への配信は PRE_SUSPEND フェーズで停止します。EJB タイマーは中断され、サーバーが再開したときにタイマーがアクティベートされます。
EE Concurrency

サーバーはすべてのアクティブなジョブが終了するまで待機します。キューに置かれたジョブはすべてスキップされます。現在、EE Concurrency には永続性がないため、キューに置かれスキップされたジョブは失われます。

サーバーが中断状態である間、スケジュールされたタスクはスケジュールどおりの時間に実行されますが、java.lang.IllegalStateException が発生します。サーバーが再開されると、スケジュールされたタスクは通常どおり実行され、ほとんどの場合でタスクのスケジュールを変更する必要はありません。

Batch
サーバーはタイムアウト期間内の実行中のジョブをすべて停止し、スケジュール済みのジョブをすべて延期します。
注記

現在、正常なシャットダウンはインバウンドのリモート分散トランザクションや新しいインバウンド JMS メッセージを拒否しません。インフライトアクティビティーによってスケジュールされた EE バッチジョブおよび EE 同時実行タスクは、現在実行の継続が許可されます。しかし、タイムアウトウィンドウを渡す EE 同時実行タスクが提出されると、実行時にエラーが発生します。

リクエストは request-controller サブシステムによって追跡されます。このサブシステムがないと、中断および再開機能が制限され、リクエストの完了を待たずにサーバーが中断またはシャットダウンします。しかし、この機能が必要ない場合は、request-controller サブシステムを削除してパフォーマンスを若干向上することができます。

2.4.1. サーバーの中断

JBoss EAP 7 には、サーバーの操作を正常に中断する suspend モードが導入されました。このモードでは、アクティブなリクエストがすべて正常に完了されますが、新しいリクエストは許可されません。サーバーが中断されたら、シャットダウンすることができます。さらに、元の実行状態に戻ったり、中断状態のままメンテナンスを実行することができます。

注記

管理インターフェースのサーバー中断による影響はありません。

管理コンソールまたは管理 CLI を使用するとサーバーを中断および再開できます。

サーバーの中断状態のチェック

以下の管理 CLI コマンドを使用するとサーバーの中断状態を表示できます。結果の値は、RUNNINGPRE_SUSPENDSUSPENDING、または SUSPENDED のいずれかになります。

  • スタンドアロンサーバーの中断状態をチェックします。

    :read-attribute(name=suspend-state)
  • 管理対象ドメインのサーバーの中断状態をチェックします。

    /host=master/server=server-one:read-attribute(name=suspend-state)
中断

アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定し、以下の管理 CLI コマンドを使用してサーバーを中断します。デフォルト値は 0 で、即座に中断します。-1 を値として指定すると、サーバーはすべてのアクティブなリクエストが完了するまで無期限に待機します。

以下の各例は、リクエストが完了するまで最大 60 秒待機した後、中断します。

  • スタンドアロンサーバーを中断します。

    :suspend(timeout=60)
  • 管理対象ドメインのすべてのサーバーを中断します。

    :suspend-servers(timeout=60)
  • 管理対象ドメインの単一のサーバーを中断します。

    /host=master/server-config=server-one:suspend(timeout=60)
  • サーバーグループのすべてのサーバーを中断します。

    /server-group=main-server-group:suspend-servers(timeout=60)
再開

resume コマンドを適切なレベル (サーバー、サーバーグループ、ドメイン全体) で使用すると、サーバーが正常な実行状態に戻り、新しいリクエストを許可できるようになります。

:resume

2.4.2. サーバーの正常なシャットダウン

サーバーの停止時に適切なタイムアウト値を指定すると、サーバーは正常にシャットダウンされます。コマンドを実行するとサーバーが中断され、すべてのリクエストが完了するまで最大で指定のタイムアウトの期間待機し、その後シャットダウンします。

以下の管理 CLI コマンドを使用してサーバーを正常にシャットダウンします。アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定します。デフォルト値は 0 で、即座にサーバーをシャットダウンします。-1 を値として指定すると、すべてのアクティブなリクエストが完了するまで無期限に待機した後、シャットダウンします。

以下の各例は、リクエストが完了するまで最大 60 秒待機した後、シャットダウンします。

  • スタンドアロンサーバーを正常にシャットダウンします。

    :shutdown(timeout=60)
  • 管理対象ドメインのすべてのサーバーを停止します。

    :stop-servers(timeout=60)
  • 管理対象ドメインの単一のサーバーを停止します。

    /host=master/server-config=server-one:stop(timeout=60)
  • サーバーグループのすべてのサーバーを正常に停止します。

    /server-group=main-server-group:stop-servers(timeout=60)

2.5. JBoss EAP の起動および停止 (RPM インストール)

RPM インストールの場合、JBoss EAP の起動と停止が ZIP またはインストーラーインストールの場合とは異なります。

2.5.1. JBoss EAP の起動 (RPM インストール)

RPM インストールの JBoss EAP を起動するコマンドは、開始する操作モード (スタンドアロンサーバーまたは管理対象ドメイン) や実行している Red Hat Enterprise Linux のバージョンによって異なります。

JBoss EAP をスタンドアロンサーバーとして起動 (RPM インストール)
  • Red Hat Enterprise Linux 6 の場合

    $ service eap7-standalone start
  • Red Hat Enterprise Linux 7 の場合

    $ systemctl start eap7-standalone.service

これにより、standalone.xml 設定ファイルをデフォルトで使用して JBoss EAP が起動されます。JBoss EAP を別の スタンドアロンサーバー設定ファイル で起動するには、RPM サービス設定ファイルにプロパティーを設定します。詳細は RPM サービスプロパティーの設定の項を参照してください。

管理対象ドメインでの JBoss EAP の起動 (RPM インストール)
  • Red Hat Enterprise Linux 6 の場合

    $ service eap7-domain start
  • Red Hat Enterprise Linux 7 の場合

    $ systemctl start eap7-domain.service

これにより、host.xml 設定ファイルをデフォルトで使用して JBoss EAP が起動されます。JBoss EAP を別の 管理対象ドメイン設定ファイル で起動するには、RPM サービス設定ファイルにプロパティーを設定します。詳細は RPM サービスプロパティーの設定の項を参照してください。

RPM サービスプロパティーの設定

本項では、RPM サービスプロパティーと JBoss EAP インストールのその他の起動オプションを設定する方法について説明します。変更を行う前に設定ファイルをバックアップすることが推奨されます。

RPM インストールで利用可能な起動オプションの完全リストは、 RPM サービス設定プロパティーの項を参照してください。

  • サーバー設定ファイルを指定します。

    スタンドアロンサーバーを起動する場合、デフォルトで standalone.xml ファイルが使用されます。管理対象ドメインで実行する場合、デフォルトで host.xml ファイルが使用されます。他の設定ファイルを使用して JBoss EAP を起動するには、適切な RPM 設定ファイル (例: eap7-standalone.conf) に WILDFLY_SERVER_CONFIG プロパティーを設定します。

    WILDFLY_SERVER_CONFIG=standalone-full.xml
  • 特定の IP アドレスにバインドします。

    デフォルトでは、JBoss EAP RPM インストールは 0.0.0.0 にバインドします。JBoss EAP を特定の IP アドレスにバインドするには、適切な RPM 設定ファイル (例: eap7-standalone.conf) に WILDFLY_BIND プロパティーを設定します。

    WILDFLY_BIND=192.168.0.1
    注記

    管理インターフェースを特定の IPアドレスにバインドする場合は、次の例のように JBoss EAP 起動設定ファイルに設定を追加します。

  • JVM オプションまたは Java プロパティーを設定します。

    JBoss EAP の起動スクリプトに渡す JVM オプションまたは Java プロパティーを指定するには、起動設定ファイルを編集します。スタンドアロンサーバーの場合、このファイルは EAP_HOME/bin/standalone.conf になります。管理対象ドメインの場合、このファイルは EAP_HOME/bin/domain.conf になります。以下の例は、ヒープサイズを設定し、JBoss EAP 管理インターフェースを指定の IP アドレスにバインドします。

    JAVA_OPTS="$JAVA_OPTS -Xms2048m -Xmx2048m"
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=192.168.0.1"
    注記

    場合によっては、標準の jboss.bind.address プロパティーを使用せずに WILDFLY_BIND プロパティーを使用して JBoss EAP バインドアドレスを設定する必要があります。

注記

同じ名前のプロパティーが RPM サービス設定ファイル (例: /etc/sysconfig/eap7-standalone) と JBoss EAP 起動設定ファイル (例: EAP_HOME/bin/standalone.conf) にある場合、JBoss EAP 起動設定ファイルのプロパティーの値が優先されます。このようなプロパティーの 1 つが JAVA_HOME です。

2.5.2. JBoss EAP の停止 (RPM インストール)

RPM インストールの JBoss EAP を停止するコマンドは、開始された操作モード (スタンドアロンサーバーまたは管理対象ドメイン) や実行している Red Hat Enterprise Linux のバージョンによって異なります。

JBoss EAP をスタンドアロンサーバーとして停止 (RPM インストール)
  • Red Hat Enterprise Linux 6 の場合

    $ service eap7-standalone stop
  • Red Hat Enterprise Linux 7 の場合

    $ systemctl stop eap7-standalone.service
管理対象ドメインでの JBoss EAP の停止 (RPM インストール)
  • Red Hat Enterprise Linux 6 の場合

    $ service eap7-domain stop
  • Red Hat Enterprise Linux 7 の場合

    $ systemctl stop eap7-domain.service

RPM インストールで利用可能な起動オプションの完全リストは、RPM サービス設定ファイルの項を参照してください。

2.6. PowerShell スクリプト

PowerShell スクリプトは技術プレビューとしてのみ使用でき、サポートされません。JBoss EAP は Windows Server 2008 R2 Enterprisex86_64 および Windows Server 2012 R2 Standard x86_64 でサポートされるため、PowerShell スクリプトはバージョン 2 以降で正確に動作するように設計されています。

  • デフォルトでは、Windows Server 2008 R2 Enterprisex86_64 は PowerShell バージョン 2 を使用します。これよりも新しいバージョンをインストールすることもできます。
  • デフォルトでは、Windows Server 2012 R2 Standard x86_64 は PowerShell バージョン 4 を使用します。これよりも新しいバージョンをインストールすることもできます。

PowerShell スクリプトのパスは EAP_HOME/bin で、Windows でモダンなスクリプト言語を使用したいときにこのスクリプトを使用できます。

注記

スクリプトの引数は、以下のように引用符で囲む必要があります。

PS C:\Users\Administrator\7.0.0.ER2\jboss-eap-7.0\bin> .\standalone.ps1 "-c=standalone-full.xml"

第3章 JBoss EAP の管理

JBoss EAP は簡単な設定を使用し、スタンドアロンサーバーまたは管理対象ドメインごとに 1 つの設定ファイルを使用します。スタンドアロンサーバーのデフォルト設定は EAP_HOME/standalone/configuration/standalone.xml ファイルに保存され、管理対象ドメインのデフォルト設定は EAP_HOME/domain/configuration/domain.xml ファイルに保存されます。また、ホストコントローラーのデフォルト設定は EAP_HOME/domain/configuration/host.xml ファイルに保存されます。

JBoss EAP はコマンドラインの管理 CLI または Web ベースの管理コンソールを使用して設定できます。これらの管理インターフェースを使用して加えられた変更は自動的に永続化され、XML 設定ファイルは管理 API によって上書きされます。XML 設定ファイルの手作業による編集は推奨されません。

3.1. サブシステム、拡張、およびプロファイル

JBoss EAP では、設定される機能の内容がサブシステムによって異なります。たとえば、アプリケーションおよびサーバーロギングが logging サブシステムに設定されます。

サブシステムは特定の拡張機能の設定オプションを提供します。拡張 はサーバーのコア機能を拡張するモジュールです。拡張はデプロイメントが必要になるとロードされ、必要がなくなるとアンロードされます。

サーバーの要求を満たすために設定される プロファイルは、複数のサブシステムで構成されます。スタンドアロンサーバーには名前のないプロファイルが 1 つあります。管理対象ドメインでは、ドメインのサーバーグループによって使用されるプロファイルを複数定義できます。

使用できるサブシステムの詳細は JBoss EAP サブシステムの概要を参照してください。

管理コンソールまたは管理 CLI の使用

JBoss EAP インスタンスの設定更新には管理コンソールと管理 CLI の両方を使用でき、サポートされます。どちらを使用するかはユーザーの好みによります。グラフィカルな Web ベースのインターフェースを好むユーザーは管理コンソールを使用し、コマンドラインインターフェースを好むユーザーは管理 CLI を使用するとよいでしょう。

3.2. 管理ユーザー

デフォルトの JBoss EAP 設定はローカル認証を提供するため、ユーザーは認証の必要なくローカルホスト上で管理 CLI にアクセスできます。

しかし、リモートで管理 CLI にアクセスする場合や管理コンソールを使用する場合 (トラフィックの送信元がローカルホストであってもリモートアクセスとして見なされます) は、管理ユーザーを追加する必要があります。管理ユーザーを追加せずに管理コンソールへアクセスしようとすると、エラーメッセージが出力されます。

グラフィカルインストーラーを使用して JBoss EAP がインストールされた場合は、インストールプロセス中に管理ユーザーが作成されます。

本ガイドでは、add-user スクリプトを使用した JBoss EAP の簡単なユーザー管理について説明します。このスクリプトは、既定の認証のプロパティーファイルに新規ユーザーを追加するユーティリティーです。LDAP やロールベースアクセス制御 (RBAC) などの高度な認証や承認のオプションについては、Security ArchitectureCore Management Authentication を参照してください。

3.2.1. 管理ユーザーの追加

  1. add-user ユーティリティースクリプトを実行し、プロンプトに従います。

    $ EAP_HOME/bin/add-user.sh
    注記

    Windows Server の場合は EAP_HOME\bin\add-user.bat スクリプトを使用します。

  2. ENTER を押して、デフォルトのオプション a を選択し、管理ユーザーを追加します。

    このユーザーは ManagementRealm に追加され、管理コンソールまたはコマンドラインベース管理 CLI を使用して監理操作を実行することを許可されます。別のオプション (b) を選択すると、アプリケーションに使用される ApplicationRealm にユーザーが追加され、特定のパーミッションは提供されません。

  3. ユーザー名とパスワードを入力します。入力後、パスワードを確認するよう指示されます。

    デフォルトでは、弱いパスワードは許可されますが、警告が表示されます。このデフォルト動作の変更に関する詳細は、Add-User ユーティリティーのパスワード制限を参照してください。

  4. ユーザーが属するグループのコンマ区切りリストを入力します。ユーザーがグループに属さないようにする場合は ENTER を押して空白のままにします。
  5. 情報を確認し、正しければ yes を入力します。
  6. このユーザーがリモート JBoss EAP サーバーインスタンスを表すかどうかを決定します。基本的な管理ユーザーの場合は no を入力します。

    ManagementRealm への追加が必要になることがあるユーザータイプの 1 つが、JBoss EAP の別のインスタンスを表すユーザーで、メンバーとしてクラスターに参加することを承認できる必要があります。この場合は、プロンプトで yes を選択すると、異なる設定ファイルに追加する必要がある、ユーザーのパスワードを表すハッシュ化された秘密の値が提供されます。

パラメーターを add-user スクリプトに渡すと、非対話的にユーザーを作成できます。ログや履歴ファイルにパスワードが表示されるため、この方法は共有システムでは推奨されません。詳細は Add-User ユーティリティーを非対話的に実行を参照してください。

3.2.2. Add-User ユーティリティーを非対話的に実行

コマンドラインで引数を渡すと add-user スクリプトを非対話的に実行することができます。最低でも、ユーザー名とパスワードを提供する必要があります。

警告

ログや履歴ファイルにパスワードが表示されるため、この方法は共有システムでは推奨されません。

複数のグループに属するユーザーの作成

以下のコマンドは、guest および mgmtgroup グループの管理ユーザー (mgmtuser1) を追加します。

$ EAP_HOME/bin/add-user.sh -u 'mgmtuser1' -p 'password1!' -g 'guest,mgmtgroup'
代替プロパティーファイルの指定

デフォルトでは、add-user スクリプトを使用して作成されたユーザーおよびグループ情報は、サーバー設定ディレクトリーにあるプロパティーファイルに保存されます。

ユーザー情報は以下のプロパティーファイルに保存されます。

  • EAP_HOME/standalone/configuration/mgmt-users.properties
  • EAP_HOME/domain/configuration/mgmt-users.properties

グループ情報は以下のプロパティーファイルに保存されます。

  • EAP_HOME/standalone/configuration/mgmt-groups.properties
  • EAP_HOME/domain/configuration/mgmt-groups.properties

これらのデフォルトディレクトリーとプロパティーファイル名は上書きできます。以下のコマンドは、ユーザープロパティーファイルの名前と場所を指定して、新しいユーザーを追加します。

$ EAP_HOME/bin/add-user.sh -u 'mgmtuser2' -p 'password1!' -sc '/path/to/standaloneconfig/' -dc '/path/to/domainconfig/' -up 'newname.properties'

このコマンドを実行すると、新しいユーザーは /path/to/standaloneconfig/newname.properties および /path/to/domainconfig/newname.properties にあるユーザープロパティーファイルに追加されます。これらのファイルは存在している必要があり、存在しない場合はエラーが出力されます。

使用できる add-user の引数の完全リストとそれら引数の目的については、--help 引数を使用するか、Add-User ユーティリティー引数の項を参照してください。

3.2.3. Add-User ユーティリティーのパスワード制限

add-user ユーティリティースクリプトのパスワード制限は、EAP_HOME/bin/add-user.properties ファイルを使用して設定できます。

デフォルトでは、弱いパスワードは許可されますが、警告が表示されます。指定の最低要件を満たさないパスワードを拒否するには、password.restriction プロパティーを REJECT に設定します。

EAP_HOME/bin/add-user.properties ファイルで設定できる追加のパスワード要件は次のとおりです。

  • 最小文字数
  • アルファベットの最小文字数
  • 数字の最小文字数
  • シンボルの最大文字数
  • 禁止されたパスワードのリスト (admin など)
  • ユーザー名と一致するパスワードを許可するかどうか

3.3. 管理インターフェース

3.3.1. 管理 CLI

管理コマンドラインインターフェース (CLI) は、JBoss EAP のコマンドライン管理ツールです。

管理 CLI を使用して、サーバーの起動および停止、アプリケーションのデプロイおよびアンデプロイ、システムの設定、他の管理タスクの実行を行います。操作はバッチモードで実行でき、複数のタスクをグループとして実行できます。

lscdpwd など、多くの共通するターミナルコマンドを使用できます。管理 CLI はタブ補完をサポートします。

コマンドと操作、構文、およびバッチモードでの実行を含む、管理 CLI の使用に関する詳細は、JBoss EAP Management CLI Guide を参照してください。

管理 CLI の起動
$ EAP_HOME/bin/jboss-cli.sh
注記

Windows Server の場合は EAP_HOME\bin\jboss-cli.bat スクリプトを使用します。

稼働中のサーバーへの接続
connect

上記の代わりに、管理 CLI を起動し、EAP_HOME/bin/jboss-cli.sh --connect コマンドを使用すると 1 度に接続できます。

ヘルプの表示

以下のコマンドを実行してヘルプを表示します。

help

以下のコマンドを実行して、特定コマンドのヘルプを表示します。

deploy --help
管理 CLI の終了
quit
システム設定の表示

以下のコマンドは read-attribute 操作を使用して、データソースの例が有効になっているかどうかを表示します。

/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
{
    "outcome" => "success",
    "result" => true
}

管理対象ドメインで実行している場合、コマンドの前に /profile=PROFILE_NAME を付けて更新するプロファイルを指定する必要があります。

/profile=default/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
システム設定の更新

以下のコマンドは write-attribute 操作を使用して、データソースの例を無効にします。

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
サーバーの起動

管理対象ドメインで実行している場合、管理 CLI を使用してサーバーを起動および停止することもできます。

/host=HOST_NAME/server-config=server-one:start

3.3.2. 管理コンソール

管理コンソールは JBoss EAP の Web ベースの管理ツールです。

管理コンソールを使用して、サーバーの開始および停止、アプリケーションのデプロイおよびアンデプロイ、システム設定の調整、サーバー設定の変更の永続化を行います。管理コンソールは管理タスクも実行でき、現在のユーザーが変更を行った後にサーバーインスタンスの再起動またはリロードが必要な場合はライブ通知も行います。

管理対象ドメインでは、同じドメイン内のサーバーインスタンスやサーバーグループをドメインコントローラーの管理コンソールから一元的に管理できます。

デフォルトの管理ポートを使用してローカルホストで稼働している JBoss EAP インスタンスの場合、Web ブラウザーを使用して http://localhost:9990/console/App.html で管理コンソールにアクセスできます。管理コンソールにアクセスできるパーミッションを持つユーザーで認証する必要があります。

管理コンソールでは、JBoss EAP スタンドアロンサーバーまたは管理対象ドメインを操作および管理するために以下のタブが提供されます。

Home (ホーム)
一般的な設定および管理タスクを行う方法を学ぶことができます。ツアーに参加して JBoss EAP 管理コンソールについてよく理解してください。
Deployments (デプロイメント)
デプロイメントを追加、削除、および有効化します。管理対象ドメインでは、デプロイメントをサーバーグループに割り当てます。
Configuration (設定)
Web サービス、メッセージング、高可用性などの機能を提供する利用可能なサブシステムを設定します。管理対象ドメインでは、異なるサブシステム設定が含まれるプロファイルを管理します。
Runtime (ランタイム)
サーバーの状態、JVM 使用率、サーバーログなどのランタイム情報を表示します。管理対象ドメインではホスト、サーバーグループ、およびサーバーを管理します。
Access Control (アクセス制御)
ロールベースアクセス制御を使用するときにユーザーとグループにロールを割り当てます。
Patching (パッチ)
JBoss EAP インスタンスにパッチを適用します。
注記

更新された管理コンソールについて説明するツアーに参加するには、管理コンソールのホームページにある Take a Tour リンクをクリックします。

フォームフィールドの詳細を表示するには、Need Help? リンクをクリックします。

実行した設定アクションのメッセージ履歴を表示するには、管理コンソールの右上にある Messages リンクをクリックします。

3.3.2.1. 管理コンソールの有効化/無効化

管理コンソールを有効または無効にするには、/core-service=management/management-interface=http-interface リソースの console-enabled ブール値属性を設定します。ドメインモードのマスターホストの場合は、/host=master/core-service=management/management-interface=http-interface になります。

たとえば、有効にする場合は以下を設定します。

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=true)

無効にする場合は以下を設定します。

/core-service=management/management-interface=http-interface:write-attribute(name=console-enabled,value=false)

3.3.2.2. 管理コンソールの言語の変更

管理リソースの言語はデフォルトの英語に設定されています。以下の言語の 1 つを選択することもできます。

  • ドイツ語 (de)
  • 簡体中国語 (zh-Hans)
  • ブラジルポルトガル語 (pt-BR)
  • フランス語 (fr)
  • スペイン語 (es)
  • 日本語 (ja)
管理コンソールの言語の変更方法
  1. 管理コンソールにログインします。
  2. 管理コンソールの右下隅にある Settings をクリックします。
  3. Locale 選択ボックスから必要な言語を選択します。
  4. Save を選択します。確認ボックスに、アプリケーションのリロードが必要であると表示されます。
  5. Confirm をクリックします。選択したロケールを使用するために Web ブラウザーが自動的に更新されます。

3.4. 設定データ

3.4.1. スタンドアロンサーバー設定ファイル

スタンドアロン設定ファイルは EAP_HOME/standalone/configuration/ ディレクトリーにあります。事前定義された 4 つのプロファイル (defaulthafull、および full-ha) ごとに個別のファイルがあります。

表3.1 スタンドアロン設定ファイル

設定ファイル目的

standalone.xml

このスタンドアロン設定ファイルは、スタンドアロンサーバーを起動したときに使用されるデフォルト設定です。このファイルには、サブシステム、ネットワーキング、デプロイメント、ソケットバインディング、およびその他の設定詳細など、サーバーに関するすべての情報が含まれます。メッセージングや高可用性に必要なサブシステムは提供しません。

standalone-ha.xml

このスタンドアロン設定ファイルには、デフォルトのサブシステムすべてが含まれ、高可用性の modcluster および jgroups サブシステムを追加します。メッセージングに必要なサブシステムは提供しません。

standalone-full.xml

このスタンドアロン設定ファイルには、デフォルトのサブシステムすべてが含まれ、messaging-activemq および iiop-openjdk サブシステムを追加します。高可用性に必要なサブシステムは提供しません。

standalone-full-ha.xml

このスタンドアロン設定ファイルには、メッセージングおよび高可用性を含むすべてのサブシステムのサポートが含まれます。

デフォルトでは、スタンドアロンサーバーとして JBoss EAP を起動すると standalone.xml ファイルが使用されます。他の設定で JBoss EAP を起動するには --server-config 引数を使用します。以下に例を示します。

$ EAP_HOME/bin/standalone.sh --server-config=standalone-full.xml

3.4.2. 管理対象ドメイン設定ファイル

管理対象ドメイン設定ファイルは EAP_HOME/domain/configuration/ ディレクトリーにあります。

表3.2 管理対象ドメイン設定ファイル

設定ファイル目的

domain.xml

これは管理対象ドメインのメインの設定ファイルです。ドメインマスターのみがこのファイルを読み取ります。このファイルには、すべてのプロファイルの設定が含まれます (defaulthafullfull-ha)。

host.xml

このファイルには、管理対象ドメインの物理ホスト固有の設定情報が含まれています (ネットワークインターフェース、ソケットバインディング、ホスト名、その他のホスト固有の詳細など)。host.xml ファイルには、host-master.xml および host-slave.xml (詳細は下記参照) の両方の機能がすべて含まれています。

host-master.xml

このファイルには、サーバーをマスタードメインコントローラーとして実行するために必要な設定情報のみが含まれています。

host-slave.xml

このファイルには、サーバーを管理対象ドメインのホストコントローラーとして実行するために必要な設定情報のみが含まれています。

デフォルトでは、JBoss EAP を管理対象ドメインで起動すると host.xml ファイルが使用されます。他の設定で JBoss EAP を起動するには --host-config 引数を使用します。以下に例を示します。

$ EAP_HOME/bin/domain.sh --host-config=host-master.xml

3.4.3. 設定データのバックアップ

JBoss EAP のサーバー設定を後で復元するため、以下の場所にあるものはバックアップしておく必要があります。

  • EAP_HOME/standalone/configuration/

    • ディレクトリー全体をバックアップして、スタンドアロンサーバーのユーザーデータ、サーバー設定、およびロギング設定を保存します。
  • EAP_HOME/domain/configuration/

    • ディレクトリー全体をバックアップして、管理対象ドメインのユーザーおよびプロファイルデータ、ドメインおよびホスト設定、およびロギング設定を保存します。
  • EAP_HOME/modules/

    • カスタムモジュールをバックアップします。
  • EAP_HOME/welcome-content/

    • カスタムのウェルカムコンテンツをバックアップします。
  • EAP_HOME/bin/

    • カスタムスクリプトまたは起動設定ファイルをバックアップします。

3.4.4. 設定ファイルのスナップショット

サーバーの保守や管理をしやすくするため、JBoss EAP は起動時に元の設定ファイルにタイムスタンプを付けたものを作成します。管理操作によってその他の設定変更が行われると、元のファイルが自動的にバックアップされ、インスタンスの作業用コピーが参照およびロールバック用に保持されます。さらに、現在のサーバー設定の現時点のコピーである設定スナップショットを撮ることができます。これらのスナップショットは管理者によって保存およびロードされます。

以下の例では、standalone.xml ファイルが使用されますが、同じプロセスが domain.xml および host.xml にも適用されます。

スナップショットの作成

管理 CLI を使用して、現在の設定のスナップショットを作成します。

:take-snapshot
{
    "outcome" => "success",
    "result" => "EAP_HOME/standalone/configuration/standalone_xml_history/snapshot/20151022-133109702standalone.xml"
}
スナップショットのリスト

管理 CLI を使用して、作成したすべてのスナップショットをリストします。

:list-snapshots
{
    "outcome" => "success",
    "result" => {
        "directory" => "EAP_HOME/standalone/configuration/standalone_xml_history/snapshot",
        "names" => [
            "20151022-133109702standalone.xml",
            "20151022-132715958standalone.xml"
        ]
    }
}
スナップショットの削除

管理 CLI を使用して、スナップショットを削除します。

:delete-snapshot(name=20151022-133109702standalone.xml)
スナップショットを用いたサーバーの起動

スナップショットまたは自動保存された設定を使用してサーバーを起動できます。

  1. EAP_HOME/standalone/configuration/standalone_xml_history ディレクトリーへ移動し、ロードするスナップショットまたは保存された設定ファイルを確認します。
  2. サーバーを起動し、選択した設定ファイルを示します。設定ディレクトリー EAP_HOME/standalone/configuration/ からの相対パスを渡します。

    $ EAP_HOME/bin/standalone.sh --server-config=standalone_xml_history/snapshot/20151022-133109702standalone.xml
注記

管理対象ドメインで実行している場合は、代わりに --host-config 引数を使用し、設定ファイルを指定します。

3.4.5. 設定変更の確認

JBoss EAP 7 には、稼働中のシステムに加えられた設定変更を追跡する機能があります。この機能を使用すると、管理者は他の許可されたユーザーが追加した設定変更の履歴を確認することができます。

重要

変更はメモリーに保存され、サーバーを再起動すると永続化されません。この機能は 管理監査ログ の代替機能ではありません。

設定変更の追跡を有効にするには、以下の管理 CLI コマンドを使用します。max-history 属性を使用すると、保存するエントリーの数を指定できます。

/core-service=management/service=configuration-changes:add(max-history=10)

最近行われた設定変更のリストを表示するには、以下の管理 CLI コマンドを使用します。

/core-service=management/service=configuration-changes:list-changes

このコマンドは、各設定変更とその変更日、結果、および操作の詳細を一覧で表示します。たとえば、以下の list-changes コマンドの出力は、変更日が新しい順に設定変更を表示しています。

{
    "outcome" => "success",
    "result" => [
        {
            "operation-date" => "2016-02-12T18:37:00.354Z",
            "access-mechanism" => "NATIVE",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "address" => [],
                "operation" => "reload",
                "operation-headers" => {
                    "caller-type" => "user",
                    "access-mechanism" => "NATIVE"
                }
            }]
        },
        {
            "operation-date" => "2016-02-12T18:34:16.859Z",
            "access-mechanism" => "NATIVE",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "address" => [
                    ("subsystem" => "datasources"),
                    ("data-source" => "ExampleDS")
                ],
                "operation" => "write-attribute",
                "name" => "enabled",
                "value" => false,
                "operation-headers" => {
                    "caller-type" => "user",
                    "access-mechanism" => "NATIVE"
                }
            }]
        },
        {
            "operation-date" => "2016-02-12T18:24:11.670Z",
            "access-mechanism" => "HTTP",
            "remote-address" => "127.0.0.1/127.0.0.1",
            "outcome" => "success",
            "operations" => [{
                "operation" => "remove",
                "address" => [
                    ("subsystem" => "messaging-activemq"),
                    ("server" => "default"),
                    ("jms-queue" => "ExpiryQueue")
                ],
                "operation-headers" => {"access-mechanism" => "HTTP"}
            }]
        }
    ]
}

この例は、設定に影響した以下 3 つの操作の詳細を表しています。

  • 管理 CLI から行ったサーバーのリロード。
  • 管理 CLI から行った ExampleDS データソースの無効化。
  • 管理コンソールから行った ExpiryQueue キューの削除。

3.4.6. プロパティーの置換

JBoss EAP では、式を使用して設定のリテラル値の代わりに置換可能なプロパティーを定義できます。式の形式は ${PARAMETER:DEFAULT_VALUE} になります。指定のパラメーターが設定されると、パラメーターの値が使用されます。設定されない場合は、デフォルト値が使用されます。

式の解決でサポートされるリソースはシステムプロパティー、環境変数、および vault になります。デプロイメントの場合のみ、デプロイメントアーカイブの META-INF/jboss.properties ファイルにリストされたプロパティーをソースとすることができます。サブデプロイメントをサポートするデプロイメントタイプでは、プロパティーファイルが EAR などの外部のデプロイメントにある場合は解決がすべてのサブデプロイメントに対してスコープ指定されます。プロパティーファイルがサブデプロイメントにある場合は、解決はそのサブデプロイメントのみに対してスコープ指定されます。

以下の例では、jboss.bind.address パラメーターが設定されていなければ、standalone.xml 設定ファイルによって public インターフェースの inet-address127.0.0.1 に設定されます。

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

以下のコマンドを使用して、EAP をスタンドアロンサーバーとして起動するときに jboss.bind.address パラメータを設定できます。

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS
ネストされた式

式はネストすることができるため、固定値の代わりにさらに高度な式を使用できます。ネストされた式の書式は、通常の式の場合と同様ですが、ある式が別の式に組み込まれます。例を以下に示します。

${SYSTEM_VALUE_1${SYSTEM_VALUE_2}}

ネストされた式は、再帰的に評価されるため、最初に 内部の式が評価され、次に 外部の式が評価されます。式が別の式へ解決する場合は式も再帰的になることがあり、その後解決されます。ネストされた式は式が許可された場所ならどこでも許可されます (ただし、管理 CLI コマンドを除く)。

ネストされた式が使用される例としては、データソース定義で使用されるパスワードがマスクされている場合などがあります。データソースの設定には以下のような行がある場合があります。

<password>${VAULT::ds_ExampleDS::password::1}</password>

この場合、ネストされた式を使用すると、ds_ExampleDS の値をシステムプロパティー (datasource_name) に置き換えることができます。上記の行の代わりに以下の行をデータソースの設定に使用できます。

<password>${VAULT::${datasource_name}::password::1}</password>

JBoss EAP は、最初に式 ${datasource_name} を評価し、次にこれを外側の大きい式に入力して、結果となる式を評価します。この設定の利点は、データソースの名前が固定された設定から抽象化されることです。

記述子ベースのプロパティー置換

データソース接続パラメーターなどのアプリケーションの設定は、通常は開発デプロイメント、テストデプロイメント、および本番環境によって異なります。Java EE 仕様にはこれらの設定を外部化するメソッドが含まれていないため、このような違いはビルドシステムスクリプトで対応することがあります。JBoss EAP では、記述子ベースのプロパティー置換を使用して設定を外部的に管理できます。

記述子ベースのプロパティー置換は、記述子を基にプロパティーを置き換えるため、アプリケーションやビルドチェーンから環境に関する仮定を除外できます。環境固有の設定は、アノテーションやビルドシステムスクリプトでなく、デプロイメント記述子に指定できます。設定はファイルに指定したり、パラメーターとしてコマンドラインで提供したりできます。

ee サブシステムには、プロパティー置換が適用されたかどうかを制御する複数のフラグがあります。

JBoss 固有の記述子置換は jboss-descriptor-property-replacement フラグによって制御され、デフォルトで有効になっています。有効になっていると、以下のデプロイメント記述子でプロパティーを置換できます。

  • jboss-ejb3.xml
  • jboss-app.xml
  • jboss-web.xml
  • *-jms.xml
  • *-ds.xml

以下の管理 CLI コマンドを使用すると、JBoss 固有の記述子でプロパティー置換を有効または無効にできます。

/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)

Java EE の記述子置換は spec-descriptor-property-replacement フラグによって制御され、デフォルトで無効になっています。有効にすると、以下のデプロイメント記述子でプロパティーを置換できます。

  • ejb-jar.xml
  • persistence.xml
  • application.xml
  • web.xml

以下の管理 CLI コマンドを使用すると、Java EE の記述子でプロパティー置換を有効または無効にできます。

/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)

3.5. ファイルシステムパス

JBoss EAP はファイルシステムパスに論理名を使用します。他の設定は論理名を使用してパスを参照できます。そのため、各インスタンスに完全パスを使用する必要がなく、特定のホスト設定が汎用論理名に解決することができます。

たとえば、デフォルトの logging サブシステム設定は jboss.server.log.dir をサーバーログディレクトリーの論理名として宣言します。

例: サーバーログディレクトリーの相対パスの例

<file relative-to="jboss.server.log.dir" path="server.log"/>

JBoss EAP では、複数の標準的なパスが自動的に提供されるため、ユーザーが設定ファイルでこれらのパスを設定する必要はありません。

表3.3 標準的なパス

プロパティー説明

java.ext.dirs

Java Development Kit 拡張ディレクトリーのパス。

java.home

Java インストールディレクトリー。

jboss.controller.temp.dir

スタンドアロンサーバーおよび管理対象ドメインの共通のエイリアス。ディレクトリーは一時ファイルのストレージとして使用されます。管理対象ドメインの jboss.domain.temp.dir と スタンドアロンサーバーの jboss.server.temp.dir と同等です。

jboss.domain.base.dir

ドメインコンテンツのベースディレクトリー。

jboss.domain.config.dir

ドメイン設定が含まれるディレクトリー。

jboss.domain.data.dir

ドメインが永続データファイルの格納に使用するディレクトリー。

jboss.domain.log.dir

ドメインが永続ログファイルの格納に使用するディレクトリー。

jboss.domain.temp.dir

ドメインが一時ファイルの格納に使用するディレクトリー。

jboss.domain.deployment.dir

ドメインがデプロイ済みコンテンツの格納に使用するディレクトリー。

jboss.domain.servers.dir

ドメインが管理対象ドメインインスタンスの出力を格納するために使用するディレクトリー。

jboss.home.dir

JBoss EAP ディストリビューションのルートディレクトリー。

jboss.server.base.dir

スタンドアロンサーバーコンテンツのベースディレクトリー。

jboss.server.config.dir

スタンドアロンサーバー設定が含まれるディレクトリー。

jboss.server.data.dir

スタンドアロンサーバーが永続データファイルの格納に使用するディレクトリー。

jboss.server.log.dir

スタンドアロンサーバーがログファイルの格納に使用するディレクトリー。

jboss.server.temp.dir

スタンドアロンサーバーが一時ファイルの格納に使用するディレクトリー。

jboss.server.deploy.dir

スタンドアロンサーバーがデプロイ済みコンテンツを格納するために使用するディレクトリー。

user.dir

ユーザーのカレントワーキングディレクトリー。

user.home

ユーザーのホームディレクトリー。

標準パスの上書き または カスタムパスの追加 を行うことができます。

3.5.1. 標準パスの上書き

jboss.server.* または jboss.domain.* で始まる標準パスのデフォルトの場所を上書きできます。これには 2 つの方法があります。

  • サーバーの起動時にコマンドライン引数を渡します。以下に例を示します。

    $ EAP_HOME/bin/standalone.sh -Djboss.server.log.dir=/var/log
  • サーバー設定ファイル (standalone.conf または domain.conf) の JAVA_OPTS 変数を編集します。以下に例を示します。

    JAVA_OPTS="$JAVA_OPTS -Djboss.server.log.dir=/var/log"
管理対象ドメインの標準パスの上書き

この例の目的は、 /opt/jboss_eap/domain_data ディレクトリーにドメインファイルを格納し、各トップレベルディレクトリーにカスタム名を付けることです。デフォルトのディレクトリーグルーピングである by-server が使用されます。

  • ログファイルは all_logs サブディレクトリーに格納します。
  • データファイルは all_data サブディレクトリーに格納します。
  • 一時ファイルは all_temp サブディレクトリーに格納します。
  • サーバーのファイルは all_servers サブディレクトリーに格納します。

この設定を行うには、JBoss EAP の起動時に複数のシステムプロパティーを上書きします。

$ EAP_HOME/bin/domain.sh -Djboss.domain.temp.dir=/opt/jboss_eap/domain_data/all_temp -Djboss.domain.log.dir=/opt/jboss_eap/domain_data/all_logs -Djboss.domain.data.dir=/opt/jboss_eap/domain_data/all_data -Djboss.domain.servers.dir=/opt/jboss_eap/domain_data/all_servers

この結果、パス構造は次のようになります。

/opt/jboss_eap/domain_data/
               ├── all_data
               ├── all_logs
               ├── all_servers
               │   ├── server-one
               │   │   ├── data
               │   │   ├── log
               │   │   └── tmp
               │   └── server-two
               │       ├── data
               │       ├── log
               │       └── tmp
               └── all_temp

3.5.2. カスタムパスの追加

管理 CLI または管理コンソールを使用してカスタムのファイルシステムパスを追加できます。

  • 管理 CLI の場合、以下の管理 CLI コマンドを使用して新しいパスを追加できます。

    /path=my.custom.path:add(path=/my/custom/path)
  • 管理コンソールでファイルシステムパスを設定するには Configuration タブで Paths を選択してパスを追加、編集、および削除します。

このカスタムパスを設定で使用できます。たとえば、以下のログハンドラーは相対パスにカスタムパスを使用します。

<subsystem xmlns="urn:jboss:domain:logging:3.0">
  ...
  <periodic-rotating-file-handler name="FILE" autoflush="true">
    <formatter>
      <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="my.custom.path" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
  </periodic-rotating-file-handler>
  ...
</subsystem>

3.5.3. ディレクトリーのグループ化

管理対象ドメインでは、各サーバーのファイルは EAP_HOME/domain ディレクトリーに格納されます。ホストコントローラーの directory-grouping 属性を使用すると、サーバーのサブディレクトリーの編成を指定できます。ディレクトリーはサーバーまたはタイプを基にしてグループ化できます。デフォルトではディレクトリーはサーバーを基にしてグループ化されます。

サーバーを基にしたディレクトリーのグループ化

デフォルトでは、ディレクトリーはサーバーを基にしてグループ化されます。管理作業がサーバー中心である場合はこの設定が推奨されます。たとえば、サーバーインスタンスごとにバックアップやログファイルの処理を設定することができます。

ZIP インストールで JBoss EAP がインストールされた場合、デフォルトのディレクトリー構造 (サーバーによるグループ化) は次のようになります。

EAP_HOME/domain
         └─ servers
            ├── server-one
            │   ├── data
            │   ├── tmp
            │   └── log
            └── server-two
                ├── data
                ├── tmp
                └── log

サーバーを基にしてドメインディレクトリーをグループ化するには、以下の管理 CLI コマンドを入力します。

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-server)

このコマンドにより、ホストコントローラーの host.xml 設定ファイルが更新されます。

<servers directory-grouping="by-server">
  <server name="server-one" group="main-server-group"/>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
</servers>
タイプを基にしたディレクトリーのグループ化

サーバーを基にディレクトリーをグループ化する代わりに、ファイルタイプを基にしてグループ化することもできます。管理作業がファイルタイプ中心である場合は、この設定が推奨されます。たとえば、data ファイルのみを簡単にバックアップすることができます。

ZIP インストールで JBoss EAP がインストールされ、ドメインのファイルがタイプを基にグループ化された場合、ディレクトリー構造は次のようになります。

EAP_HOME/domain
         ├── data
         │   └── servers
         │       ├── server-one
         │       └── server-two
         ├── log
         │   └── servers
         │       ├── server-one
         │       └── server-two
         └── tmp
             └── servers
                 ├── server-one
                 └── server-two

タイプを基にしてドメインディレクトリーをグループ化するには、以下の管理 CLI コマンドを入力します。

/host=HOST_NAME:write-attribute(name=directory-grouping,value=by-type)

このコマンドにより、ホストコントローラーの host.xml 設定ファイルが更新されます。

<servers directory-grouping="by-type">
  <server name="server-one" group="main-server-group"/>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
</servers>

3.6. システムプロパティー

Java システムプロパティーを使用すると、JBoss EAP の多くのオプションや、アプリケーションサーバー内で使用する名前と値のペアを設定することができます。

システムプロパティーを使用して JBoss EAP 設定のデフォルトの値を上書きできます。たとえば、以下のパブリックインターフェースバインドアドレスの XML 設定は、jboss.bind.address システムプロパティーによる設定が可能で、このシステムプロパティーが提供されないとデフォルトで 127.0.0.1 が使用されることを表しています。

<inet-address value="${jboss.bind.address:127.0.0.1}"/>

JBoss EAP でシステムプロパティーを設定する方法は複数あり、以下の方法が含まれます。

JBoss EAP の管理対象ドメインを使用する場合、ドメイン全体、特定のサーバーグループ、特定のホストとそのすべてのサーバーインスタンス、または 1 つのサーバーインスタンスにシステムプロパティーを適用できます。他の多くの JBoss EAP ドメイン設定と同様に、より具体的なレベルで設定されたシステムプロパティーはより抽象的なものを上書きします。詳細は ドメイン管理の章を参照してください。

起動スクリプトにシステムプロパティーを渡す

JBoss EAP 起動スクリプトにシステムプロパティーを渡すには -D 引数を使用します。以下に例を示します。

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=192.168.1.2

このシステムプロパティーの設定方法は、JBoss EAP が起動する前に JBoss EAP のオプションを設定する必要がある場合に便利です。

管理 CLI を使用したシステムプロパティーの設定

管理 CLI で以下の構文を使用すると、システムプロパティーを設定できます。

/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)

例を以下に示します。

/system-property=jboss.bind.address:add(value=192.168.1.2)

管理 CLI を使用してシステムプロパティーを設定する場合、一部の JBoss EAP オプション (上記の例の jboss.bind.address など) を有効にするにはサーバーの再起動が必要です。

管理対象ドメインの場合、上記の例はドメイン全体のシステムプロパティーを設定しますが、ドメイン設定のより具体的なレベルでシステムプロパティーを設定または上書きすることもできます。

管理コンソールを使用したシステムプロパティーの設定

  • スタンドアロン JBoss EAP サーバーでは、管理コンソールの Configuration タブでシステムプロパティーを設定できます。System Properties を選択し、View ボタンをクリックします。
  • 管理対象ドメインの場合

    • ドメインレベルのシステムプロパティーは Configuration タブで設定できます。System Properties を選択し、View ボタンをクリックします。
    • サーバーグループおよびサーバーレベルのシステムプロパティーは Runtime タブで設定できます。設定するサーバーグループまたはサーバーを選択し、サーバーグループまたはサーバー名の横にある View ボタンをクリックした後、System Properties タブを選択します。
    • ホストレベルのシステムプロパティーは Runtime タブで設定できます。設定するホストを選択し、ホスト名の横にあるドロップダウンメニューで Properties を選択します。

JAVA_OPTS を使用したシステムプロパティーの設定

システムプロパティーは JAVA_OPTS 環境変数を使用して設定することもできます。JAVA_OPTS を編集する方法は多くありますが、JBoss EAP では JBoss EAP のプロセスで使用される JAVA_OPTS を設定する設定ファイルが提供されます。

スタンドアロンサーバーの場合、このファイルは EAP_HOME/bin/standalone.conf になります。管理対象ドメインの場合は、EAP_HOME/bin/domain.conf になります。Microsoft Windows システムではこれらのファイルに .bat 拡張子が付きます。

適切な設定ファイルで JAVA_OPTS にシステムプロパティー定義を追加します。以下は、Red Hat Enterprise Linux システムでバインドアドレスを設定する例になります。

  • standalone.conf では、JAVA_OPTS システムプロパティー定義をファイルの最後に追加します。例を以下に示します。

    ...
    # Set the bind address
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=192.168.1.2"
  • domain.conf では、プロセスコントローラーの JAVA_OPTS 設定の前に JAVA_OPTS を設定する必要があります。例を以下に示します。

    ...
    # Set the bind address
    JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=192.168.1.2"
    
    # The ProcessController process uses its own set of java options
    if [ "x$PROCESS_CONTROLLER_JAVA_OPTS" = "x" ]; then
    ...

3.7. 管理監査ロギング

管理コンソール、管理 CLI、または管理 API を使用するカスタムアプリケーションを使用して実行されたすべての操作をログに記録する、管理インターフェースの監査ロギングを有効にできます。監査ログエントリーは JSON 形式で保存されます。監査ロギングはデフォルトでは無効になっています。

監査ロギングを設定して ファイル または syslog サーバー へ出力できます。

注記

JBoss EAP には認証されたセッションがないため、ログインおよびログアウトイベントは監査できません。その代わりに、ユーザーから操作を受信すると監査メッセージがログに記録されます。

スタンドアロンサーバーの監査ロギング

監査ロギングはデフォルトでは無効になっていますが、デフォルトの監査ロギング設定はファイルに書き込みします。

<audit-log>
    <formatters>
        <json-formatter name="json-formatter"/>
    </formatters>
    <handlers>
        <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
    </handlers>
    <logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="file"/>
        </handlers>
    </logger>
</audit-log>

この設定は、以下の管理 CLI コマンドを使用して読み取ることができます。

/core-service=management/access=audit:read-resource(recursive=true)

スタンドアロンサーバーの監査ロギングを有効にする場合は、監査ロギングの有効化を参照してください。

管理対象ドメインの監査ロギング

監査ロギングはデフォルトでは無効になっていますが、デフォルトの監査ロギング設定は各ホストおよび各サーバーに対してファイルを書き込みします。

<audit-log>
    <formatters>
        <json-formatter name="json-formatter"/>
    </formatters>
    <handlers>
        <file-handler name="host-file" formatter="json-formatter" relative-to="jboss.domain.data.dir" path="audit-log.log"/>
        <file-handler name="server-file" formatter="json-formatter" relative-to="jboss.server.data.dir" path="audit-log.log"/>
    </handlers>
    <logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="host-file"/>
        </handlers>
    </logger>
    <server-logger log-boot="true" log-read-only="false" enabled="false">
        <handlers>
            <handler name="server-file"/>
        </handlers>
    </server-logger>
</audit-log>

この設定は、以下の管理 CLI コマンドを使用して読み取ることができます。

/host=HOST_NAME/core-service=management/access=audit:read-resource(recursive=true)

管理対象ドメインの監査ロギングを有効にする場合は、監査ロギングの有効化を参照してください。

3.7.1. 管理監査ロギングの有効化

監査ロギングはデフォルトでは無効になっていますが、JBoss EAP には監査ロギングのファイルハンドラーが事前設定されています。監査ロギングを有効にする管理 CLI コマンドは、スタンドアロンサーバーとして実行しているかまたは管理対象ドメインで実行しているかによって異なります。ファイルハンドラーの属性は 管理監査ロギング属性 を参照してください。

syslog 監査ロギングを設定する場合は syslog サーバーへの管理監査ロギングの設定 を参照してください。

スタンドアロンサーバー監査ロギングの有効化

監査ロギングは以下のコマンドを使用して有効にできます。

/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)

デフォルトでは、このコマンドによって監査ログが EAP_HOME/standalone/data/audit-log.log に書き込まれます。

管理対象ドメイン監査ロギングの有効化

管理対象ドメインのデフォルトの監査ログ設定は、各ホストおよび各サーバーに対して監査ログを書き込むよう事前設定されています。

各ホストの監査ロギングは以下のコマンドを使用して有効にできます。

/host=HOST_NAME/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)

デフォルトでは、このコマンドによって監査ログが EAP_HOME/standalone/data/audit-log.log に書き込まれます。

各サーバーの監査ロギングは以下のコマンドを使用して有効にできます。

/host=HOST_NAME/core-service=management/access=audit/server-logger=audit-log:write-attribute(name=enabled,value=true)

デフォルトでは、このコマンドによって監査ログが EAP_HOME/domain/servers/SERVER_NAME/data/audit-log.log に書き込まれます。

3.7.2. syslog サーバーへの管理監査ロギングの送信

syslog ハンドラーは、監査ログエントリーが syslog サーバーに送信されるときのパラメーター (syslog サーバーのホスト名および syslog サーバーがリッスンするポート) を指定します。監査ロギングを syslog サーバーへ送信すると、ローカルファイルまたはローカル syslog サーバーへロギングする場合よりも、セキュリティーオプションが多くなります。複数の syslog ハンドラーを同時に定義およびアクティブ化することができます。

デフォルトでは、監査ロギングが有効である場合にファイルへ出力するよう事前設定されています。以下の手順に従って、syslog サーバーへの監査ロギングを設定および有効化します。syslog ハンドラーの属性については 管理監査ロギング属性を参照してください。

  1. syslog ハンドラーを追加します。

    syslog サーバーのホストとポートを指定して syslog ハンドラーを作成します。管理対象ドメインでは、/core-service コマンドの前に /host=HOST_NAME を追加する必要があります。

    batch
    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME:add(formatter=json-formatter)
    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME/protocol=udp:add(host=HOST_NAME,port=PORT)
    run-batch
    注記

    渡すパラメーターは指定されたプロトコルによって異なります。

    TLS を使用して syslog サーバーとセキュアに通信するようハンドラーを設定するには、認証を設定する必要もあります。以下に例を示します。

    /core-service=management/access=audit/syslog-handler=SYSLOG_HANDLER_NAME/protocol=tls/authentication=truststore:add(keystore-path=PATH_TO_TRUSTSTORE,keystore-password=TRUSTSTORE_PASSWORD)
  2. syslog ハンドラーへの参照を追加します。

    管理対象ドメインでは、このコマンドの前に /host=HOST_NAME を追加する必要があります。

    /core-service=management/access=audit/logger=audit-log/handler=SYSLOG_HANDLER_NAME:add
  3. 監査ロギングを有効にします。

    管理監査ロギングの有効化 を参照して監査ロギングを有効にします。

重要

オペレーティングシステムでロギングが有効になっていないと、JBoss EAP で syslog サーバーへの監査ロギングを有効にしても動作しません。

Red Hat Enterprise Linux の rsyslog 設定の詳細は、https://access.redhat.com/documentation/ja/red-hat-enterprise-linux/ にてシステム管理者のガイドRsyslog の基本設定の項を参照してください。

3.7.3. 監査ログエントリーの読み取り

ファイルに出力される監査ログエントリーは、テキストビューアーで参照することをお勧めします。syslog サーバーに出力される監査ログエントリーは syslog ビューアーアプリケーションで参照することをお勧めします

注記

ログファイルの参照にテキストエディターを使用することは推奨されません。これは、追加のログエントリーがログファイルに書き込まれなくなることがあるためです。

監査ログエントリーは JSON 形式で保存されます。各ログエントリーは最初にオプションのタイムスタンプ、次に以下の表のフィールドが示されます。

表3.4 管理監査ログフィールド

フィールド名説明

access

以下のいずれかの値を使用できます。

  • NATIVE - 操作がネイティブ管理インターフェースから実行されます。
  • HTTP - 操作がドメイン HTTP インターフェースから実行されます。
  • JMX - 操作が jmx サブシステムから実行されます。

booting

起動プロセス中に操作が実行された場合は、値が true になります。サーバーの起動後に操作が実行された場合は false になります。

domainUUID

ドメインコントローラーからサーバー、スレーブホストコントローラー、およびスレーブホストコントローラーサーバーへ伝播されるすべての操作をリンクする ID。

ops

実行される操作。JSON へシリアライズ化された操作のリストになります。起動時は、XML の解析で生じたすべての操作がリストされます。起動後は、通常 1 つのエントリーがリストされます。

r/o

操作によって管理モデルが変更されない場合は、値が true になります。変更される場合は false になります。

remote-address

この操作を実行するクライアントのアドレス。

success

操作に成功した場合は値が true になります。ロールバックされた場合は false になります。

type

管理操作であることを示す core、または jmx サブシステムからであることを示す jmx を値として指定できます。

user

認証されたユーザーのユーザー名。稼働しているサーバーと同じマシンの管理 CLI を使用して操作を行った場合は、特別な $local ユーザーが使用されます。

version

JBoss EAP インスタンスのバージョン番号。

第4章 ネットワークおよびポート設定

4.1. インターフェース

JBoss EAP は設定全体で名前付きインターフェースを参照します。これにより、使用ごとにインターフェースの完全な詳細を必要とせず、論理名を使用して個々のインターフェース宣言を参照できます。

また、複数のマシンでネットワークインターフェースの詳細が異なる場合に管理対象ドメインの設定が容易になります。各サーバーインスタンスは、論理名グループに対応できます。

standalone.xmldomain.xml、および host.xml ファイルにはインターフェース宣言が含まれます。使用されるデフォルトの設定に応じて、複数の事前設定されたインターフェース名があります。management インターフェースは、HTTP 管理エンドポイントを含む、管理レイヤーが必要なすべてのコンポーネントおよびサービスに使用できます。public インターフェースは、アプリケーション関連のネットワーク通信すべてに使用できます。unsecure インターフェースは、標準設定の IIOP ソケットに使用されます。private インターフェースは、標準設定の JGroups ソケットに使用されます。

4.1.1. デフォルトインターフェース設定

<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>
  <interface name="private">
    <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>
  </interface>
  <interface name="unsecure">
    <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
  </interface>
</interfaces>

デフォルトでは、JBoss EAP はこれらのインターフェースを 127.0.0.1 にバインドしますが、適切なプロパティーを設定すると起動時に値を上書きできます。たとえば、以下のコマンドで JBoss EAP をスタンドアロンサーバーとして起動するときに public インターフェースの inet-address を設定できます。

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS

この代わりに、サーバー起動のコマンドラインで -b スイッチを使用することができます。サーバー起動オプションの詳細は、サーバーランタイム引数を参照してください。

重要

JBoss EAP が使用するデフォルトのネットワークインターフェースまたはポートを変更する場合、変更したインターフェースまたはポートを使用するスクリプトを変更する必要があることに注意してください。これには JBoss EAP サービススクリプトが含まれます。また、管理コンソールまたは CLI にアクセスするときに適切なインターフェースとポートを指定するようにしてください。

4.1.2. インターフェースの設定

ネットワークインターフェースは、物理インターフェースの論理名および選択基準を指定して宣言されます。選択基準はワイルドカードアドレスを参照したり、一致が有効となるためにインターフェースまたはアドレスで必要となる 1 つ以上の特徴のセットを指定したりできます。使用できるすべてのインターフェース選択基準は インターフェース属性を参照してください。

インターフェースは管理コンソールまたは管理 CLI を使用して設定できます。以下にインターフェースの追加および更新の例をいくつか示します。最初に管理 CLI コマンドを示し、その後に対応する設定 XML を示します。

NIC 値があるインターフェースの追加

NIC 値が eth0 であるインターフェースを新たに追加します。

/interface=external:add(nic=eth0)
<interface name="external">
   <nic name="eth0"/>
</interface>
複数の条件値があるインターフェースの追加

稼働時に適切なサブネットのすべてのインターフェースまたはアドレスと一致し、マルチキャストをサポートする、ポイントツーポイントでないインターフェースを新たに追加します。

/interface=default:add(subnet-match=192.168.0.0/16,up=true,multicast=true,not={point-to-point=true})
<interface name="default">
   <subnet-match value="192.168.0.0/16"/>
   <up/>
   <multicast/>
   <not>
      <point-to-point/>
   </not>
</interface>
インターフェース属性の更新

public インターフェースのデフォルトの inet-address 値を更新し、jboss.bind.address プロパティーによってこの値が起動時に設定されるようにします。

/interface=public:write-attribute(name=inet-address,value="${jboss.bind.address:192.168.0.0}")
<interface name="public">
    <inet-address value="${jboss.bind.address:192.168.0.0}"/>
</interface>
管理対象ドメインでインターフェースをサーバーに追加
/host=master/server-config=SERVER_NAME/interface=INTERFACE_NAME:add(inet-address=127.0.0.1)
<servers>
   <server name="SERVER_NAME" group="main-server-group">
      <interfaces>
         <interface name="INTERFACE_NAME">
            <inet-address value="127.0.0.1"/>
         </interface>
      </interfaces>
   </server>
</servers>

4.2. ソケットバインディング

ソケットバインディングとソケットバインディンググループを使用することにより、ネットワークポートと、JBoss EAP の設定で必要なネットワーキングインターフェースとの関係を定義できます。ソケットバインディングはソケットの名前付き設定です。ソケットバインディンググループは、ある論理名でグループ化されたソケットバインディング宣言のコレクションです。

これにより、使用ごとにソケット設定の完全な詳細を必要とせずに、設定の他のセクションが論理名でソケットバインディングを参照できるようになります。

これらの名前付き設定の宣言は standalone.xml および domain.xml 設定ファイルにあります。スタンドアロンサーバーにはソケットバインディンググループが 1 つのみ含まれますが、管理対象ドメインには複数のグループを含むことができます。管理対象ドメインで各サーバーグループのソケットバインディンググループを作成するか、複数のサーバーグループ間でソケットバインディンググループを共有することができます。

デフォルトで JBoss EAP によって使用されるポートは、使用されるソケットバインディンググループと、個々のデプロイメントの要件に応じて異なります。

4.2.1. 管理ポート

JBoss EAP 7 では、管理ポートが集約されました。JBoss EAP 7 は、管理 CLI によって使用されるネイティブ管理と、Web ベース管理コンソールによって使用される HTTP 管理の両方に 9990 ポートを使用します。JBoss EAP 6 でネイティブ管理ポートとして使用されていた 9999 ポートは使用されなくなりましたが、必要な場合は有効にできます。

管理コンソールに対して HTTPS を有効にすると、デフォルトではポート 9993 が使用されます。

4.2.2. デフォルトのソケットバインディング

JBoss EAP には、事前設定された 4 つのプロファイル (defaulthafull、および full-ha) のソケットバインディンググループが含まれています。

デフォルトのポートや説明などのデフォルトのソケットバインディングに関する詳細情報は、デフォルトのソケットバインディングを参照してください。

重要

JBoss EAP が使用するデフォルトのネットワークインターフェースまたはポートを変更する場合、変更したインターフェースまたはポートを使用するスクリプトを変更する必要があることに注意してください。これには JBoss EAP サービススクリプトが含まれます。また、管理コンソールまたは CLI にアクセスするときに適切なインターフェースとポートを指定するようにしてください。

スタンドアロンサーバー

スタンドアロンサーバーとして実行されている場合、設定ファイルごとに 1 つのソケットバインディンググループのみが定義されます。各スタンドアロン設定ファイル (standalone.xmlstandalone-ha.xmlstandalone-full.xml、および standalone-full-ha.xml) は、対応するプロファイルによって使用される技術のソケットバインディングを定義します。

たとえば、デフォルトのスタンドアロン設定ファイル (standalone.xml) は以下のソケットバインディングを指定します。

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <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}"/>
    <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="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="localhost" port="25"/>
    </outbound-socket-binding>
</socket-binding-group>
管理対象ドメイン

管理対象ドメインで実行されている場合、すべてのソケットバインディンググループは domain.xml ファイルで定義されます。事前定義されたソケットバインディンググループは 4 つあります。

  • standard-sockets
  • ha-sockets
  • full-sockets
  • full-ha-sockets

各ソケットバインディンググループは、対応するプロファイルによって使用される技術のソケットバインディングを指定します。たとえば、full-ha-sockets ソケットバインディンググループは、高可用性のために full-ha プロファイルによって使用される複数の jgroups ソケットバインディングを定義します。

<socket-binding-groups>
    <socket-binding-group name="standard-sockets" default-interface="public">
        <!-- Needed for server groups using the 'default' profile  -->
        <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="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>
    <socket-binding-group name="ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'ha' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full-ha' profile  -->
        <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="iiop" interface="unsecure" port="3528"/>
        <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/>
        <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
        <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
        <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
        <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
        <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
        <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>
</socket-binding-groups>
注記

管理インターフェースのソケット設定は、ドメインコントローラーの host.xml ファイルに定義されます。

4.2.3. ソケットバインディングの設定

ソケットバインディングを設定するとき、port および interface 属性や、multicast-address および multicast-port などのマルチキャスト設定を設定できます。使用できるソケットバインディング属性すべての詳細は、ソケットバインディング属性を参照してください。

ソケットバインディングは管理コンソールまたは管理 CLI を使用して設定できます。以下の手順では、ソケットバインディンググループの追加、ソケットバインディングの追加、および管理 CLI を使用したソケットバインディングの設定を行います。

  1. 新しいソケットバインディンググループを追加します。これは、スタンドアロンサーバーとして実行している場合は追加できないことに注意してください。

    /socket-binding-group=new-sockets:add(default-interface=public)
  2. ソケットバインディングを追加します。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:add(port=1234)
  3. ソケットバインディンググループによって設定されるデフォルト以外のインターフェースを使用するよう、ソケットバインディングを変更します。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:write-attribute(name=interface,value=unsecure)

以下の例は、上記の手順の完了後に XML 設定がどのようになるかを示しています。

<socket-binding-groups>
    ...
    <socket-binding-group name="new-sockets" default-interface="public">
        <socket-binding name="new-socket-binding" interface="unsecure" port="1234"/>
    </socket-binding-group>
</socket-binding-groups>

4.2.4. ポートオフセット

ポートオフセットとは、該当するサーバーのソケットバインディンググループに指定されたすべてのポート値に追加される数値のオフセットのことです。これにより、同じホストの別のサーバーとの競合を防ぐため、サーバーはソケットバインディンググループに定義されたポート値とオフセットを継承できるようになります。たとえば、ソケットバインディンググループの HTTP ポートが 8080 で、サーバーが 100 をポートオフセットとして使用する場合、HTTP ポートは 8180 になります。

管理 CLI を使用して管理対象ドメインのサーバーにポートオフセットとして 250 を設定する例を以下に示します。

/host=master/server-config=server-two/:write-attribute(name=socket-binding-port-offset,value=250)

ポートオフセットは、管理対象ドメインのサーバーと、同じホストで複数のスタンドアロンサーバーを実行する場合に使用できます。

jboss.socket.binding.port-offset プロパティーを使用してスタンドアロンサーバーを起動するときにポートオフセットを渡すことができます。

$ EAP_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100

4.3. IPv6 アドレス

デフォルトでは、JBoss EAP は IPv4 アドレスを使用して実行するように設定されます。以下の手順では、IPv6 アドレスを使用して実行するよう JBoss EAP を設定する方法を示します。

IPv6 アドレスの JVM スタックの設定

IPv6 アドレスを優先するように、起動設定を更新します。

  1. 起動設定ファイルを開きます。

    • スタンドアロンサーバーとして実行している場合は、EAP_HOME/bin/standalone.conf ファイル (Windows Server の場合は standalone.conf.bat) を編集します。
    • 管理対象ドメインで実行している場合は、EAP_HOME/bin/domain.conf ファイル (Windows Server の場合は domain.conf.bat) を編集します。
  2. java.net.preferIPv4Stack プロパティーを false に設定します。

    -Djava.net.preferIPv4Stack=false
  3. java.net.preferIPv6Addresses プロパティーを追加し、true に設定します。

    -Djava.net.preferIPv6Addresses=true

以下の例は、上記の変更を行った後に起動設定ファイルの JVM オプションがどのようになるかを示しています。

# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1303m -Xmx1303m -Djava.net.preferIPv4Stack=false"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv6Addresses=true"
else

IPv6 アドレスのインターフェース宣言の更新

設定のデフォルトのインターフェース値は、IPv6 アドレスに変更できます。たとえば、以下の管理 CLI コマンドは management インターフェースを IPv6 ループバックアドレス (::1) に設定します。

/interface=management:write-attribute(name=inet-address,value="${jboss.bind.address.management:[::1]}")

以下の例は、上記のコマンド実行後に XML 設定がどのようになるかを示しています。

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

第5章 JBoss EAP のセキュリティー

JBoss EAP は、独自のインターフェースおよびサービスのセキュリティーを設定できる機能と、JBoss EAP で実行されるアプリケーションのセキュリティーを提供します。

  • 一般的なセキュリティー概念と JBoss EAP 固有のセキュリティー概念については、Security Architecture を参照してください。
  • JBoss EAP 自体をセキュアにするための情報は、How to Configure Server Security を参照してください。
  • JBoss EAP にデプロイされたアプリケーションをセキュアにするための情報は、How to Configure Identity Management を参照してください。
  • Kerberos を使用して JBoss EAP のシングルサインオンを設定するための情報は How to Set Up SSO with Kerberos を参照してください。
  • SAML v2 を使用して JBoss EAP のシングルサインオンを設定するための情報は How To Set Up SSO with SAML v2 を参照してください。

第6章 JBoss EAP クラスローディング

JBoss EAP は、デプロイされたアプリケーションのクラスパスを制御するためにモジュール形式のクラスロードシステムを使用します。このシステムは、階層クラスローダーの従来のシステムよりも、柔軟性があり、より詳細に制御できます。開発者は、アプリケーションで利用可能なクラスに対して粒度の細かい制御を行い、アプリケーションサーバーで提供されるクラスを無視して独自のクラスを使用するようデプロイメントを設定できます。

モジュール形式のクラスローダーにより、すべての Java クラスはモジュールと呼ばれる論理グループに分けられます。各モジュールは、独自のクラスパスに追加されたモジュールからクラスを取得するために、他のモジュールの依存関係を定義できます。デプロイされた各 JAR および WAR ファイルはモジュールとして扱われるため、開発者はモジュール設定をアプリケーションに追加してアプリケーションのクラスパスの内容を制御できます。

6.1. モジュール

モジュールは、クラスローディングおよび依存関係管理に使用されるクラスの論理グループです。JBoss EAP は、静的モジュールと動的モジュールの 2 つの種類のモジュールを識別します。この 2 つの種類のモジュールの主な違いは、パッケージ化方法です。

静的モジュール

静的モジュールは、アプリケーションサーバーの EAP_HOME/modules/ ディレクトリーで定義されます。各モジュールは EAP_HOME/modules/com/mysql/ のようにサブディレクトリーとして存在します。各モジュールには、module.xml 設定ファイルとすべての必要な JAR ファイルが含まれるスロットサブディレクトリー (デフォルトでは main) が含まれます。アプリケーションサーバーにより提供される API は、Java EE API と他の API を含む静的モジュールとして提供されます。

MySQL JDBC ドライバー module.xml ファイルの例

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

モジュール名 (com.mysql) は、モジュールのディレクトリー構造 (スロット名 (main) を除く) に一致する必要があります。

カスタム静的モジュールの作成は、同じサードパーティーライブラリーを使用する同じサーバー上に多くのアプリケーションがデプロイされる場合に役立ちます。これらのライブラリーを各アプリケーションとバンドルする代わりに、管理者はこれらのライブラリーが含まれるモジュールを作成およびインストールできます。アプリケーションは、カスタム静的モジュールで明示的な依存関係を宣言できます。

JBoss EAP ディストリビューションで提供されるモジュールは、EAP_HOME/modules ディレクトリー内の system ディレクトリーにあります。このため、サードパーティーによって提供されるモジュールから分離されます。また、JBoss EAP 上で使用する、Red Hat により提供されるすべての製品によって、system ディレクトリー内にモジュールがインストールされます。

各モジュールに 1 つのディレクトリーを使用して、カスタムモジュールが EAP_HOME/modules ディレクトリーにインストールされるようにする必要があります。こうすると、同梱されたバージョンではなく、system ディレクトリーに存在するカスタムバージョンのモジュールがロードされるようになります。これにより、ユーザー提供のモジュールがシステムモジュールよりも優先されます。

JBOSS_MODULEPATH 環境変数を使用して JBoss EAP がモジュールを検索する場所を変更する場合は、指定された場所の 1 つで system サブディレクトリー構造を探します。system 構造は、JBOSS_MODULEPATH で指定された場所のどこかに存在する必要があります。

動的モジュール

動的モジュールは、各 JAR または WAR デプロイメント (または、EAR 内のサブデプロイメント) に対してアプリケーションサーバーによって作成およびロードされます。動的モジュールの名前は、デプロイされたアーカイブの名前から派生されます。デプロイメントはモジュールとしてロードされるため、依存関係を設定し、他のデプロイメントで依存関係として使用することが可能です。

モジュールは必要な場合にのみロードされます。通常、モジュールは、明示的または暗黙的な依存関係があるアプリケーションがデプロイされる場合にのみロードされます。

6.2. モジュールの依存性

モジュール依存関係は、あるモジュールに他の 1 つまたは複数のモジュールのクラスが必要になるという宣言です。JBoss EAP がモジュールをロードするときに、モジュール形式のクラスローダーがモジュールの依存関係を解析し、各依存関係のクラスをクラスパスに追加します。指定の依存関係が見つからない場合、モジュールはロードできません。

注記

モジュールとモジュール形式のクラスロードシステムに関する完全な詳細については、モジュールを参照してください。

デプロイされたアプリケーション (JAR や WAR など) は動的モジュールとしてロードされ、依存関係を利用して JBoss EAP によって提供される API にアクセスします。

依存関係には明示的暗黙的の 2 つのタイプがあります。

明示的な依存関係
明示的な依存関係は開発者が設定ファイルで宣言します。静的モジュールでは、依存関係を module.xml ファイルに宣言できます。動的モジュールでは、デプロイメントの MANIFEST.MF または jboss-deployment-structure.xml デプロイメント記述子に依存関係を宣言できます。
暗黙的な依存関係

暗黙的な依存関係は、デプロイメントで特定の状態やメタデータが見つかったときに自動的に追加されます。JBoss EAP に同梱される Java EE 7 API は、デプロイメントで暗黙的な依存関係が検出されたときに追加されるモジュールの例になります。

jboss-deployment-structure.xml デプロイメント記述子ファイルを使用して、特定の暗黙的な依存関係を除外するようデプロイメントを設定することも可能です。これは、JBoss EAP が暗黙的な依存関係として追加しようとする特定バージョンのライブラリーをアプリケーションがバンドルする場合に役に立つことがあります。

オプションの依存関係

明示的な依存関係は、オプションとして指定できます。オプションの依存関係をロードできなくても、モジュールのロードは失敗しません。ただし、依存関係は後で使用できるようになっても、モジュールのクラスパスには追加されません。依存関係はモジュールがロードされるときに利用可能である必要があります。

依存関係のエクスポート

モジュールのクラスパスには独自のクラスとその直接の依存関係のクラスのみが含まれます。モジュールは 1 つの依存関係の依存関係クラスにはアクセスできませんが、暗黙的な依存関係のエクスポートを指定できます。エクスポートされた依存関係は、エクスポートするモジュールに依存するモジュールへ提供されます。

たとえば、モジュール A はモジュール B に依存し、モジュール B はモジュール C に依存します。モジュール A はモジュール B のクラスにアクセスでき、モジュール B はモジュール C のクラスにアクセスできます。モジュール Aは以下のいずれかの条件を満たさない限り、モジュール C のクラスにアクセスできません。

  • モジュール A が、モジュール C に対する明示的な依存関係を宣言する
  • モジュール B がモジュール C の依存関係をエクスポートする

グローバルモジュール

グローバルモジュールは、JBoss EAP が各アプリケーションへの依存関係として提供するモジュールです。このモジュールをグローバルモジュールの JBoss EAP のリストへ追加すると、モジュールをグローバルモジュールにすることができます。モジュールへの変更は必要ありません。

詳細は グローバルモジュールの定義の項を参照してください。

6.3. カスタムモジュールの作成

カスタムの静的モジュールを追加して、JBoss EAP で実行しているデプロイメントがリソースを利用できるようにすることができます。モジュールは 手動 で作成するか、管理 CLI を使用して作成することができます。

モジュールの作成後、アプリケーションがリソースを使用できるようにするにはモジュールを依存関係として追加する必要があります。

カスタムモジュールの手動作成

カスタムモジュールを手動で作成するには、以下の手順に従います。

  1. EAP_HOME/modules/ ディレクトリーに適切なディレクトリー構造を作成します。

    例: MySQL JDBC ドライバーディレクトリー構造の作成

    $ cd EAP_HOME/modules/
    $ mkdir -p com/mysql/main

  2. JAR ファイルまたはその他必要なリソースを main/ サブディレクトリーにコピーします。

    例: MySQL JDBC ドライバー JAR のコピー

    $ cp /path/to/mysql-connector-java-5.1.36-bin.jar EAP_HOME/modules/com/mysql/main/

  3. module.xml ファイルを main/ サブディレクトリーに作成し、そのファイルの適切なリソースおよび依存関係を指定します。

    例: MySQL JDBC ドライバー module.xml ファイル

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="com.mysql">
      <resources>
        <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
      </resources>
      <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
      </dependencies>
    </module>

管理 CLI を使用したカスタムモジュールの作成

module add 管理 CLI コマンドを使用してカスタムモジュールを作成するには、以下の手順に従います。

注記

module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  1. JBoss EAP サーバーを起動します。
  2. 管理 CLI を起動しますが、稼働しているインスタンスへの接続に --connect または -c 引数を使用しないでください。

    $ EAP_HOME/bin/jboss-cli.sh
  3. module add 管理 CLI コマンドを使用して新しいコアモジュールを追加します。

    module add --name=MODULE_NAME --resources=PATH_TO_RESOURCE --dependencies=DEPENDENCIES

module --help を実行すると、このコマンドを使用したモジュールの追加および削除の詳細を表示できます。

モジュールを依存関係として追加

アプリケーションがこのモジュールのリソースにアクセスできるようにするには、モジュールを依存関係として追加する必要があります。

たとえば、以下の手順は複数のプロパティーファイルが含まれる JAR ファイルをモジュールとして追加し、グローバルモジュールを定義して、アプリケーションがこれらのプロパティーをロードできるようにします。

  1. JAR ファイルをコアモジュールとして追加します。

    module add --name=myprops --resources=/path/to/properties.jar
  2. すべてのデプロイメントが使用できるようにするため、このモジュールをグローバルモジュールとして定義します。

    /subsystem=ee:write-attribute(name=global-modules,value=[{name=myprops}]
  3. アプリケーションは、JAR 内に含まれるプロパティーファイルの 1 つからプロパティーを読み出すことができます。

    Thread.currentThread().getContextClassLoader().getResource("my.properties");

6.4. グローバルモジュールの定義

モジュールを依存関係としてすべてのデプロイメントに追加する、グローバルモジュールのリストを定義できます。

注記

グローバルモジュールとして設定されるモジュールの名前を知っている必要があります。デプロイメントのモジュールの命名慣例については、動的モジュールの命名の項を参照してください。

以下の管理 CLI コマンドを使用してグローバルモジュールのリストを定義します。

/subsystem=ee:write-attribute(name=global-modules,value=[{name=MODULE_NAME_1},{name=MODULE_NAME_2}]

管理コンソールを使用してグローバルモジュールを追加および削除することもできます。Configuration タブから EE サブシステムに移動し、Global Modules セクションを選択します。

6.5. サブデプロイメント分離の設定

エンタープライズアーカイブ (EAR) の各サブデプロイメントは、独自のクラスローダーを持つ動的モジュールです。サブデプロイメントは、EAR/lib のクラスへのアクセスを提供する親モジュールの暗黙的な依存関係を常に持ちます。デフォルトでは、サブデプロイメントはその EAR 内にある他のサブデプロイメントのリソースにアクセスできます。

サブデプロイメントが他のサブデプロイメントに属するクラスにアクセスできないようにするには、JBoss EAP で厳格なサブデプロイメント分離を有効にします。この設定はすべてのデプロイメントに影響します。

すべてのデプロイメントを対象とするサブデプロイメントモジュール分離の有効化

サブデプロイメント分離は ee サブシステムから管理コンソールまたは管理 CLI を使用して有効または無効にできます。デフォルトでは、サブデプロイメント分離は false に設定され、サブデプロイメントは EAR 内にある他のサブデプロイメントのリソースにアクセスできます。

以下の管理 CLI を使用して EAR サブデプロイメント分離を有効にします。

/subsystem=ee:write-attribute(name=ear-subdeployments-isolated,value=true)

EAR のサブデプロイメントは他のサブデプロイメントからリソースにアクセスできなくなります。

6.6. 外部 JBoss EAP モジュールディレクトリーの定義

JBoss EAP モジュールのデフォルトのディレクトリーは EAP_HOME/modules です。JBOSS_MODULEPATH 変数を使用すると JBoss EAP モジュールの他のディレクトリーを指定できます。以下の手順に従って、JBoss EAP 起動設定ファイルでこの変数を設定します。

注記

JBOSS_MODULEPATH を JBoss EAP 起動設定ファイルで設定する代わりに、環境変数として設定することもできます。

  1. 起動設定ファイルを編集します。

    • スタンドアロンサーバーとして実行している場合は、EAP_HOME/bin/standalone.conf ファイル (Windows Server の場合は standalone.conf.bat) を編集します。
    • 管理対象ドメインで実行している場合は、EAP_HOME/bin/domain.conf ファイル (Windows Server の場合は domain.conf.bat) を編集します。
  2. JBOSS_MODULEPATH 変数を設定します。例を以下に示します。

    JBOSS_MODULEPATH="/path/to/modules/directory/"

    ディレクトリーのリストを指定するには、ディレクトリーのリストをコロン (:) で区切ります。

    注記

    Windows Server の場合、次の構文を使用して JBOSS_MODULEPATH 変数を設定します。

    set "JBOSS_MODULEPATH /path/to/modules/directory/"

    ディレクトリーのリストを指定するには、ディレクトリーのリストをセミコロン (;) で区切ります。

6.7. 動的モジュールの命名規則

JBoss EAP では、すべてのデプロイメントが、以下の規則に従って名前が付けられたモジュールとしてロードされます。

  • WAR および JAR ファイルのデプロイメントは次の形式で名前が付けられます。

    deployment.DEPLOYMENT_NAME

    たとえば、inventory.warstore.jar のモジュール名はそれぞれ deployment.inventory.wardeployment.store.jar になります。

  • エンタープライズアーカイブ (EAR) 内のサブデプロイメントは次の形式で名前が付けられます。

    deployment.EAR_NAME.SUBDEPLOYMENT_NAME

    たとえば、エンタープライズアーカイブ accounts.ear 内にある reports.war のサブデプロイメントのモジュール名は deployment.accounts.ear.reports.war になります。

第7章 アプリケーションのデプロイ

JBoss EAP には、管理者向けと開発者向けのアプリケーションデプロイメントおよび設定オプションが多くあります。管理者は、管理コンソールのグラフィカルインターフェースや管理 CLI のコマンドラインインターフェースを使用して本番環境のアプリケーションデプロイメントを管理できます。開発者は、設定可能なファイルシステムのデプロイメントスキャナーHTTP API、Red Hat JBoss Developer Studio などの IDE、および Maven などを含む、多くのテストオプションをアプリケーションのデプロイメントで使用できます。

アプリケーションをデプロイするときにデプロイメント記述子の検証を有効にするには、org.jboss.metadata.parser.validate システムプロパティーを true に設定します。これには、以下の方法の 1 つを使用します。

  • サーバー起動時

    $ EAP_HOME/bin/standalone.sh -Dorg.jboss.metadata.parser.validate=true
  • 以下の管理 CLI コマンドでサーバー設定に追加

    /system-property=org.jboss.metadata.parser.validate:add(value=true)

7.1. 管理 CLI を使用したアプリケーションのデプロイ

管理 CLI を使用してアプリケーションをデプロイすると、単一のコマンドラインインターフェースでデプロイメントスクリプトを作成および実行できます。このスクリプト機能を使用して、特定のアプリケーションデプロイメントおよび管理シナリオを設定できます。スタンドアロンサーバーとして稼働している場合は単一サーバーのデプロイメント状態を管理でき、管理対象ドメインで稼働している場合はサーバーのネットワーク全体のデプロイメントを管理できます。

7.1.1. アプリケーションのスタンドアロンサーバーへのデプロイ

アプリケーションのデプロイ

管理 CLI で deploy コマンドを使用し、アプリケーションデプロイメントへのパスを指定します。

deploy /path/to/test-application.war

正常にデプロイされると、管理 CLI には何も出力されませんが、サーバーログにデプロイメントメッセージが記録されます。

WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war")
WFLYUT0021: Registered web context: /test-application
WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")

アプリケーションが正常にデプロイされます。

アプリケーションのアンデプロイ

管理 CLI で undeploy コマンドを使用し、デプロイメント名を指定します。

  • アプリケーションをアンデプロイし、デプロイメントの内容を削除します。

    undeploy test-application.war
  • リポジトリーからデプロイメントの内容を削除せずにアプリケーションをアンデプロイします。

    undeploy test-application.war --keep-content

    これは、管理コンソールからデプロイメントを無効にすることと同じです。

正常にアンデプロイされると、管理 CLI には何も出力されませんが、サーバーログにアンデプロイメントメッセージが記録されます。

WFLYUT0022: Unregistered web context: /test-application
WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 62ms
WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")

アプリケーションが正常にアンデプロイされます。

デプロイメントの一覧表示

管理 CLI で deploy -l コマンドを使用し、すべてのデプロイメントを一覧表示します。

deploy -l

出力には、ランタイム名や有効であるかどうかなど、各デプロイメントの詳細が表示されます。

NAME                    RUNTIME-NAME            ENABLED STATUS
test-application.war    test-application.war    true    OK
jboss-helloworld.war    jboss-helloworld.war    true    OK

7.1.2. 管理対象ドメインでのアプリケーションのデプロイ

アプリケーションのデプロイ

管理 CLI で deploy コマンドを使用し、アプリケーションデプロイメントへのパスを指定します。また、アプリケーションをデプロイするサーバーグループを指定する必要があります。

  • すべてのサーバーグループにアプリケーションをデプロイする場合

    deploy /path/to/test-application.war --all-server-groups
  • 特定のサーバーグループにアプリケーションをデプロイする場合

    deploy /path/to/test-application.war --server-groups=main-server-group,other-server-group

正常にデプロイされると、管理 CLI には何も出力されませんが、サーバーログに各サーバーのデプロイメントメッセージが記録されます。

[Server:server-one] WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war")
[Server:server-one] WFLYUT0021: Registered web context: /test-application
[Server:server-one] WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")

アプリケーションが管理対象ドメインの適切なサーバーグループに正常にデプロイされます。

アプリケーションのアンデプロイ

管理 CLI で undeploy コマンドを使用し、デプロイメント名を指定します。また、アプリケーションをアンデプロイするサーバーグループを指定する必要があります。

  • すべてのサーバーグループからアプリケーションをアンデプロイします。

    undeploy test-application.war --all-relevant-server-groups
  • 特定のサーバーグループからアプリケーションをアンデプロイします。そのデプロイメントの他のサーバーグループに対してデプロイメントの内容をリポジトリーに保持する必要があるため、--keep-content パラメーターが必要になります。

    undeploy test-application.war --server-groups=other-server-group --keep-content

    これは、管理コンソールからデプロイメントを無効にすることと同じです。

正常にアンデプロイされると、管理 CLI には何も出力されませんが、サーバーログに各サーバーのアンデプロイメントメッセージが記録されます。

[Server:server-one] WFLYUT0022: Unregistered web context: /test-application
[Server:server-one] WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 74ms
[Server:server-one] WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")

アプリケーションが正常にアンデプロイされます。

デプロイメントの一覧表示

管理 CLI で deploy -l コマンドを使用し、すべてのデプロイメントを一覧表示します。

deploy -l

出力には各デプロイメントとそのランタイム名が表示されます。

NAME                    RUNTIME-NAME
test-application.war    test-application.war
jboss-helloworld.war    jboss-helloworld.war

7.2. 管理コンソールを使用したアプリケーションのデプロイ

管理コンソールを使用してアプリケーションをデプロイすると、使用が簡単なグラフィカルインターフェースを利用することができます。サーバーまたはサーバーグループにデプロイされたアプリケーションを一目で確認できるほか、必要に応じてアプリケーションを有効または無効にしたり、アプリケーションをコンテンツリポジトリーから削除したりすることができます。

7.2.1. アプリケーションのスタンドアロンサーバーへのデプロイ

JBoss EAP 管理コンソールの Deployments タブからデプロイメントを表示および管理できます。

アプリケーションのデプロイ

追加ボタンをクリックし、新規 Deployment ウィザードを使用してアプリケーションをデプロイします。新規デプロイメントのアップロード または 未管理のデプロイメント作成 を選択してアプリケーションをデプロイできます。デプロイメントはデフォルトで有効になっています。

  • 新規デプロイメントのアップロード

    サーバーのコンテンツリポジトリーにコピーされ、JBoss EAP によって管理されるアプリケーションをアップロードします。

  • 未管理のデプロイメント作成

    デプロイメントの場所を指定します。このデプロイメントはサーバーのコンテンツリポジトリーにはコピーされず、JBoss EAP によって管理されません。展開形式のデプロイメントは未管理としてのみサポートされることに注意してください。

アプリケーションのアンデプロイ

デプロイメントを選択し、削除オプションを選択してアプリケーションをアンデプロイします。これにより、デプロイメントがアンデプロイされ、コンテンツリポジトリーから削除されます。

アプリケーションの無効化

デプロイメントを選択し、無効オプションを選択してアプリケーションを無効にします。これにより、デプロイメントがアンデプロイされますが、コンテンツリポジトリーから削除されません。

アプリケーションの置換

デプロイメントを選択し、置換オプションを選択します。元のバージョンと同じ名前を持つ新しいバージョンのデプロイメントを選択し、Finish をクリックします。これにより、元のバージョンのデプロイメントがアンデプロイおよび削除され、新しいバージョンがデプロイされます。

7.2.2. 管理対象ドメインでのアプリケーションのデプロイ

JBoss EAP 管理コンソールの Deployments タブではデプロイメントを表示および管理できます。

  • Content Repository

    管理されるデプロイメントと管理されないデプロイメントはすべて Content Repository セクションで表示されます。ここで、デプロイメントを追加したり、デプロイメントをサーバーグループに割り当てることができます。

  • 未割り当てのコンテンツ

    サーバーグループに割り当てられていないデプロイメントは未割り当てのコンテンツ セクションにリストされます。ここで、デプロイメントをサーバーグループに追加したり、削除したりすることができます。

  • Server Groups

    1 つまたは複数のサーバーグループに割り当てられたデプロイメントは Server Groups セクションにリストされます。ここで、デプロイメントを直接サーバーグループに追加したり、有効にしたりすることができます。

アプリケーションのデプロイ
  1. Content Repository追加ボタンをクリックします。
  2. 新規デプロイメントのアップロード または 未管理のデプロイメント作成 を選択し、アプリケーションをデプロイします。
  3. プロンプトに従ってアプリケーションをデプロイします。

    デプロイメントを有効にするには、デプロイメントをサーバーグループに割り当てる必要があります。

また、Server Groups でデプロイメントを追加すると、デプロイメントの追加、サーバーグループへの割り当て、および有効化を同時に行うことができます。

アプリケーションのサーバーグループへの割り当て
  1. 未割り当てのコンテンツ でデプロイメントを選択し、割り当てボタンをクリックします。
  2. このデプロイメントを割り当てるサーバーグループを 1 つ以上選択します。
  3. 選択したサーバーグループのデプロイメントを有効にするオプションを任意で選択することもできます。
アプリケーションのサーバーグループ割り当ての解除
  1. Server Groups で適切なサーバーグループを選択します。
  2. サーバーグループの割り当てを解除するデプロイメントを選択し、 割り当ての解除 をクリックします。

また、Content Repository でデプロイメントの 割り当ての解除 を選択すると、複数のサーバーグループへの割り当てを同時に解除することができます。

アプリケーションのアンデプロイ
  1. それでもデプロイメントがサーバーグループに割り当てられている場合は、デプロイメントの割り当てを解除します。
  2. Content Repository でデプロイメントを選択し、削除 を選択します。

これにより、デプロイメントがアンデプロイされ、コンテンツリポジトリーから削除されます。

アプリケーションの無効化
  1. Server Groups で適切なサーバーグループを選択します。
  2. 無効にするデプロイメントを選択し、無効 を選択します。

これにより、デプロイメントがアンデプロイされますが、コンテンツリポジトリーから削除されません。

アプリケーションの置換
  1. Content Repository からデプロイメントを選択し、置換ボタンをクリックします。
  2. 元のバージョンと同じ名前を持つ新しいバージョンのデプロイメントを選択し、完了 をクリックします。

これにより、元のバージョンのデプロイメントがアンデプロイおよび削除され、新しいバージョンがデプロイされます。

7.3. デプロイメントスキャナーを使用したアプリケーションのデプロイ

デプロイメントスキャナーは、デプロイするアプリケーションのデプロイメントディレクトリーを監視します。デフォルトでは、デプロイメントスキャナーは 5 秒ごとに EAP_HOME/standalone/deployments/ をスキャンし、変更を確認します。デプロイメントの状態を示し、アンデプロイや再デプロイなどのデプロイメントに対するアクションをトリガーするため、マーカーファイルが使用されます。

本番環境では、アプリケーションのデプロイメントに管理コンソールまたは管理 CLI の使用が推奨されますが、デプロイメントスキャナーは開発者の便宜を図るために提供されます。これにより、ペースの早い開発サイクルに適した方法でアプリケーションを構築およびテストできます。デプロイメントスキャナーは、他のデプロイメント方法と併用しないでください。

デプロイメントスキャナーは JBoss EAP をスタンドアロンサーバーとして実行している場合のみ利用できます。

7.3.1. アプリケーションのスタンドアロンサーバーへのデプロイ

デプロイメントスキャナーを設定して XML 、zip 形式、および展開形式のコンテンツの自動デプロイメントを有効または無効にすることができます。自動デプロイメントが無効の場合、マーカーファイルを手作業で作成してデプロイメントのアクションをトリガーする必要があります。利用できるマーカーファイルタイプやそれらの目的に関する詳細は、デプロイメントスキャナーのマーカーファイルの項を参照してください。

デフォルトでは、XML および zip 形式のコンテンツの自動デプロイメントは有効になっています。各コンテンツタイプの自動デプロイメントの設定に関する詳細は デプロイメントスキャナーの設定を参照してください。

警告

デプロイメントスキャナーを使用したデプロイメントは開発者の便宜を図るために提供され、本番環境での使用は推奨されません。デプロイメントスキャナーは他のデプロイメント方法と併用しないでください。

アプリケーションのデプロイ

コンテンツをデプロイメントフォルダーにコピーします。

$ cp /path/to/test-application.war EAP_HOME/standalone/deployments/

自動デプロイメントが有効の場合、このファイルは自動的に選択され、デプロイされます。さらに、.deployed マーカーファイルが作成されます。自動デプロイメントが無効の場合、.dodeploy マーカーファイルを手作業で追加し、デプロイメントをトリガーする必要があります。

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
アプリケーションのアンデプロイ

.deployed マーカーファイルを削除して、アンデプロイメントをトリガーします。

$ rm EAP_HOME/standalone/deployments/test-application.war.deployed

自動デプロイメントが有効な場合、アンデプロイメントをトリガーする test-application.war ファイルを削除することもできます。これは、展開形式のデプロイメントには適用されないことに注意してください。

アプリケーションの再デプロイ

.dodeploy マーカーファイルを作成し、再デプロイを開始します。

$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy

7.3.2. デプロイメントスキャナーの設定

デプロイメントスキャナーは管理コンソールまたは管理 CLI を使用して設定できます。スキャンの間隔、デプロイメントフォルダーの場所、特定のアプリケーションファイルタイプの自動デプロイメントなど、デプロイメントスキャナーの動作を設定できます。また、デプロイメントスキャナーを完全に無効にすることもできます。

利用できるデプロイメントスキャナー属性の詳細は、 デプロイメントスキャナー属性 の項を参照してください。

以下の管理 CLI コマンドを使用してデフォルトのデプロイメントスキャナーを設定します。

デプロイメントスキャナーの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-enabled,value=false)

default デプロイメントスキャナーが無効になります。

スキャン間隔の変更
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-interval,value=10000)

スキャンの間隔が 5000 ミリ秒 (5 秒) から 10000 ミリ秒 (10 秒) に変更されます。

デプロイメントフォルダーの変更
/subsystem=deployment-scanner/scanner=default:write-attribute(name=path,value=/path/to/deployments)

デプロイメントフォルダーの場所がデフォルトの EAP_HOME/standalone/deployments から /path/to/deployments に変更されます。

relative-to 属性が指定されていない場合、path の値は絶対パスになります。relative-to 属性が指定されている場合は相対パスになります。

展開形式のコンテンツの自動デプロイメントの有効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-exploded,value=true)

デフォルトで無効になっている展開形式のコンテンツの自動デプロイメントを有効にします。

zip 形式のコンテンツの自動デプロイメントの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-zipped,value=false)

デフォルトで有効になっている zip 形式のコンテンツの自動デプロイメントを無効にします。

XML コンテンツの自動デプロイメントの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-xml,value=false)

デフォルトで有効になっている XML コンテンツの自動デプロイメントを無効にします。

7.3.3. カスタムデプロイメントスキャナーの定義

新しいデプロイメントスキャナーを追加するには、管理 CLI を使用するか、管理コンソールの Configuration タブから Deployment Scanners サブシステムに移動します。デプロイメントを確認するためにスキャンする新しいディレクトリーを定義します。デフォルトのデプロイメントスキャナーは EAP_HOME/standalone/deployments を監視します。既存のデプロイメントスキャナーの設定に関する詳細は デプロイメントスキャナーの設定 を参照してください。

以下の管理 CLI コマンドは、EAP_HOME/standalone/new_deployment_dir を 5 秒ごとにチェックしてデプロイメントを確認する新しいデプロイメントスキャナーを追加します。

/subsystem=deployment-scanner/scanner=new-scanner:add(path=new_deployment_dir,relative-to=jboss.server.base.dir,scan-interval=5000)
注記

指定のディレクトリーがすでに存在しないと、このコマンドに失敗し、エラーが発生します。

新しいデプロイメントスキャナーが定義され、デプロイメントを確認するために指定のディレクトリーが監視されます。

7.4. Maven を使用したアプリケーションのデプロイ

Apache Maven を使用してアプリケーションをデプロイすると、JBoss EAP へのデプロイメントを簡単に既存の開発ワークフローに取り入れることができます。

アプリケーションをアプリケーションサーバーにデプロイおよびアンデプロイする簡単な操作を提供する WildFly Maven Plugin を使用すると、Maven を使用してアプリケーションを JBoss EAP にデプロイできます。

7.4.1. アプリケーションのスタンドアロンサーバーへのデプロイ

以下の手順では、Maven を使用して JBoss EAP の helloworld クイックスタートをスタンドアロンサーバーにデプロイおよびアンデプロイする方法を示します。

JBoss EAP クイックスタートの詳細は、JBoss EAP スタートガイドクイックスタートサンプルの使用 を参照してください。

アプリケーションのデプロイ

Maven pom.xml ファイルで WildFly Maven Plugin を初期化します。これは、JBoss EAP クイックスタートの pom.xml ファイルで設定されているはずです。

<plugin>
  <groupId>org.wildfly.plugins</groupId>
  <artifactId>wildfly-maven-plugin</artifactId>
  <version>${version.wildfly.maven.plugin}</version>
</plugin>

helloworld クイックスタートディレクトリーで以下の Maven コマンドを実行します。

$ mvn clean install wildfly:deploy

デプロイする Maven コマンドの実行後、ターミナルウインドウにはデプロイメントの成功を表す以下の出力が表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.981 s
[INFO] Finished at: 2015-12-23T15:06:13-05:00
[INFO] Final Memory: 21M/231M
[INFO] ------------------------------------------------------------------------

アクティブなサーバーインスタンスのサーバーログでデプロイメントの成功を確認することもできます。

WFLYSRV0027: Starting deployment of "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")
WFLYUT0021: Registered web context: /jboss-helloworld
WFLYSRV0010: Deployed "jboss-helloworld.war" (runtime-name : "jboss-helloworld.war")
アプリケーションのアンデプロイ

helloworld クイックスタートディレクトリーで以下の Maven コマンドを実行します。

$ mvn wildfly:undeploy

アンデプロイする Maven コマンドの実行後、ターミナルウインドウにはアンデプロイメントの成功を表す以下の出力が表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.237 s
[INFO] Finished at: 2015-12-23T15:09:10-05:00
[INFO] Final Memory: 10M/183M
[INFO] ------------------------------------------------------------------------

アクティブなサーバーインスタンスのサーバーログでアンデプロイメントの成功を確認することもできます。

WFLYUT0022: Unregistered web context: /jboss-helloworld
WFLYSRV0028: Stopped deployment jboss-helloworld.war (runtime-name: jboss-helloworld.war) in 27ms
WFLYSRV0009: Undeployed "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")

7.4.2. 管理対象ドメインでのアプリケーションのデプロイ

以下の手順では、Maven を使用して管理対象ドメインで JBoss EAP の helloworld クイックスタートをデプロイおよびアンデプロイする方法を示します。

JBoss EAP クイックスタートの詳細は、JBoss EAP スタートガイドクイックスタートサンプルの使用 を参照してください。

アプリケーションのデプロイ

管理対象ドメインでアプリケーションをデプロイする場合、アプリケーションをデプロイするサーバーグループを指定する必要があります。これは、Maven の pom.xml ファイルで設定されます。

pom.xml の以下の設定は WildFly Maven Plugin を初期化し、main-server-group をアプリケーションがデプロイされるサーバーグループとして指定します。

<plugin>
  <groupId>org.wildfly.plugins</groupId>
  <artifactId>wildfly-maven-plugin</artifactId>
  <version>${version.wildfly.maven.plugin}</version>
  <configuration>
    <domain>
      <server-groups>
        <server-group>main-server-group</server-group>
      </server-groups>
    </domain>
  </configuration>
</plugin>

helloworld クイックスタートディレクトリーで以下の Maven コマンドを実行します。

$ mvn clean install wildfly:deploy

デプロイする Maven コマンドの実行後、ターミナルウインドウにはデプロイメントの成功を表す以下の出力が表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.005 s
[INFO] Finished at: 2016-09-02T14:36:17-04:00
[INFO] Final Memory: 21M/226M
[INFO] ------------------------------------------------------------------------

アクティブなサーバーインスタンスのサーバーログでデプロイメントの成功を確認することもできます。

WFLYSRV0027: Starting deployment of "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")
WFLYUT0021: Registered web context: /jboss-helloworld
WFLYSRV0010: Deployed "jboss-helloworld.war" (runtime-name : "jboss-helloworld.war")
アプリケーションのアンデプロイ

helloworld クイックスタートディレクトリーで以下の Maven コマンドを実行します。

$ mvn wildfly:undeploy

アンデプロイする Maven コマンドの実行後、ターミナルウインドウにはアンデプロイメントの成功を表す以下の出力が表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.750 s
[INFO] Finished at: 2016-09-02T14:45:10-04:00
[INFO] Final Memory: 10M/184M
[INFO] ------------------------------------------------------------------------

アクティブなサーバーインスタンスのサーバーログでアンデプロイメントの成功を確認することもできます。

WFLYUT0022: Unregistered web context: /jboss-helloworld
WFLYSRV0028: Stopped deployment jboss-helloworld.war (runtime-name: jboss-helloworld.war) in 106ms
WFLYSRV0009: Undeployed "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")

7.5. HTTP API を使用したアプリケーションのデプロイ

HTTP API を使用してアプリケーションを JBoss EAP にデプロイするには、curl コマンドを使用します。

アプリケーションのデプロイ

$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "test-application.war"}, "content" : [{"url" : "file:/path/to/test-application.war"}]},{"operation" : "deploy", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}' -u USER:PASSWORD

アプリケーションのアンデプロイ

$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "undeploy", "address" : {"deployment" : "test-application.war"}},{"operation" : "remove", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}' -u USER:PASSWORD

JSON リクエストをプログラムで生成する方法の詳細は、この Red Hat ナレッジベースの記事を参照してください。

7.6. デプロイメントの動作のカスタマイズ

7.6.1. デプロイメントコンテンツのカスタムディレクトリーの定義

JBoss EAP では、デプロイされたコンテンツを格納する場所をカスタマイズし、定義できます。

スタンドアロンサーバーでのカスタムディレクトリーの定義

デフォルトでは、スタンドアロンサーバーのデプロイされたコンテンツは EAP_HOME/standalone/data/content ディレクトリーに格納されます。この場所を変更するには、サーバーの起動時に -Djboss.server.deploy.dir 引数を渡します。

$ EAP_HOME/bin/standalone.sh -Djboss.server.deploy.dir=/path/to/new_deployed_content

選択する場所は JBoss EAP インスタンスすべてで一意になる必要があります。

注記

jboss.server.deploy.dir プロパティーは、管理コンソールまたは管理 CLI を使用してデプロイされたコンテンツの格納に使用されるディレクトリーを指定します。デプロイメントスキャナーによって監視されるカスタムデプロイメントディレクトリーを定義する場合は、デプロイメントスキャナーの設定を参照してください。

管理対象ドメインでのカスタムディレクトリーの定義

デフォルトでは、管理対象ドメインのデプロイされたコンテンツは EAP_HOME/domain/data/content ディレクトリーに格納されます。この場所を変更するには、ドメインの起動時に -Djboss.domain.deployment.dir 引数を渡します。

$ EAP_HOME/bin/domain.sh -Djboss.domain.deployment.dir=/path/to/new_deployed_content

選択する場所は JBoss EAP インスタンスすべてで一意になる必要があります。

7.6.2. デプロイメント順序の制御

JBoss EAP では、サーバー起動時にアプリケーションがデプロイされる順序を細かく制御できます。複数の EAR ファイルに存在するアプリケーションのデプロイメント順序を徹底することができ、再起動後の順序を永続化することもできます。

jboss-all.xml デプロイメント記述子を使用してトップレベルのデプロイメント間で依存関係を宣言できます。

たとえば、 最初にデプロイされた framework.ear に依存する app.ear がある場合、以下のように app.ear/META-INF/jboss-all.xml ファイルを作成できます。

<jboss umlns="urn:jboss:1.0">
  <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0">
    <dependency name="framework.ear" />
  </jboss-deployment-dependencies>
</jboss>

これにより、app.ear の前に framework.ear がデプロイされます。

7.6.3. デプロイメントコンテンツのオーバーライド

デプロイメントオーバーレイ を使用すると、デプロイメントアーカイブの内容を物理的に変更せずに既存デプロイメントにコンテンツをオーバーレイすることができます。これにより、アーカイブを再構築せずに実行時にデプロイメント記述子、JAR ファイル、クラス、 JSP ページ、およびその他のファイルをオーバーライドできます。

これは、異なる設定が必要な異なる環境にデプロイメントを適応する必要がある場合に便利です。たとえば、アプリケーションのライフサイクルに従って開発からテスト、ステージ、および実稼働とデプロイメントを移動する場合、目的の環境に応じてデプロイメント記述子の交換、アプリケーションのブランディングを変更するための静的 Web リソースの変更、JAR ライブラリーの別バージョンへの置き換えなどを行う可能性があります。また、方針やセキュリティーの制限によりアーカイブを変更できない、設定変更が必要なインストールにも便利な機能です。

デプロイメントオーバーレイを定義する場合、デプロイメントアーカイブのファイルを置き換える、ファイルシステム上のファイルを定義します。さらに、デプロイメントオーバーレイの影響を受けるデプロイメントを指定する必要もあります。変更を有効にするには、影響を受けるデプロイメントを再デプロイする必要があります。

deployment-overlay add 管理 CLI コマンドを使用してデプロイメントオーバーレイを追加します。

deployment-overlay add --name=new-deployment-overlay --content=WEB-INF/web.xml=/path/to/other/web.xml --deployments=test-application.war --redeploy-affected
注記

管理対象ドメインでは、--server-groups を使用して該当するサーバーグループを指定するか、--all-server-groups を使用してすべてのサーバーグループを指定します。

作成後、既存のオーバーレイへのコンテンツの追加、オーバーレイのデプロイメントへのリンク、またはオーバーレイの削除を行うことができます。使用方法の詳細を表示するには deployment-overlay --help を実行してください。

パラメーター

name
デプロイメントオーバーレイの名前。
content
ファイルシステム上のファイルをアーカイブの置き換えるファイルにマップするカンマ区切りリスト。各エントリーの形式は ARCHIVE_PATH=FILESYSTEM_PATH です。
deployments
このオーバーレイがリンクされるデプロイメントのカンマ区切りリスト。
redeploy-affected
影響を受けるデプロイメントをすべて再デプロイします。

7.6.4. 操作ヘッダーの指定

管理 CLI を使用してアプリケーションをデプロイする場合、操作ヘッダーを指定するとデプロイメント操作実行の特定の側面を制御することができます。--headers 引数を使用すると以下の操作ヘッダーを deploy コマンドに渡すことができます。

  • allow-resource-service-restart - 操作の変更を有効にするために再起動が必要なランタイムサービスを再起動するかどうか。デフォルトは false です。
  • blocking-timeout - 完了プロセスのいずれかの時点で操作がブロックする最大期間 (秒単位)。この期間を超えると操作がロールバックされます。デフォルトは 300 秒です。
  • rollback-on-runtime-failure - 変更をランタイムサービスに適用できなかった場合に永続設定の変更を元に戻すかどうか。デフォルトは true です。
  • rollout - 管理対象ドメインデプロイメントのロールアウト計画。ロールアウト計画の使用 の項を参照してください。

例を以下に示します。

deploy /path/to/deployment.war --headers={allow-resource-service-restart=true}

セミコロン(;) を使用して複数の操作ヘッダーを区切ります。

7.6.5. ロールアウト計画の使用

ロールアウト計画

管理対象ドメインでは、ドメインまたはホストレベルのリソースで目的となる操作は複数のサーバーに影響する可能性があります。このような操作には、サーバーに適用される操作の順序を説明するロールアウト計画や、一部のサーバーで実行に失敗した場合に操作を元に戻すかどうかを指示するポリシーなどが含まれます。指定されたロールアウト計画がない場合、デフォルトのロールアウト計画 が使用されます。

以下は 5 台のサーバーが関係するロールアウト計画の例になります。操作は順次 (in-series) または同時 (concurrent-groups) にサーバーグループへ適用することができます。構文の詳細は ロールアウト計画の構文 を参照してください。

{"my-rollout-plan" => {"rollout-plan" => {
    "in-series" => [
        {"concurrent-groups" => {
            "group-A" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-B" => undefined
        }},
        {"server-group" => {"group-C" => {
            "rolling-to-servers" => "false",
            "max-failed-servers" => "1"
        }}},
        {"concurrent-groups" => {
            "group-D" => {
                "max-failure-percentage" => "20",
                "rolling-to-servers" => "true"
            },
            "group-E" => undefined
        }}
    ],
    "rollback-across-groups" => "true"
}}}

上記の例を見ると、3 つの段階を経てドメインのサーバーに操作が適用されることが分かります。あるサーバーグループのポリシーによってサーバーグループ全体で操作のロールバックが引き起こされると、他のサーバーグループもすべてロールバックされます。

  1. サーバーグループ group-Agroup-B には同時に操作が適用されます。 group-A のサーバーには操作が順次適用され、group-B のすべてのサーバーは操作を同時に処理します。group-A で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-B で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
  2. group-Agroup-B のすべてのサーバーが完了すると、group-C のサーバーに操作が適用されます。これらのサーバーは操作を同時に処理します。group-C では操作を適用できなかったサーバーが 2 台以上あると、グループ全体でロールバックが実行されます。
  3. group-C のすべてのサーバーが完了すると、操作が group-Dgroup-E に同時に適用されます。group-D のサーバーには操作が順次適用され、group-E のすべてのサーバーは操作を同時に処理します。 group-D で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-E で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
ロールアウト計画の構文

ロールアウト計画は以下のいずれかの方法で指定できます。

上記の方法で最初に使用するコマンドは異なりますが、どちらも rollout 操作ヘッダーを使用してロールアウト計画を定義します。以下の構文を使用します。

rollout (id=PLAN_NAME | SERVER_GROUP_LIST) [rollback-across-groups]
  • PLAN_NAME は、rollout-plan コマンドを使用して保存されたロールアウト計画の名前です。
  • SERVER_GROUP_LIST はサーバーグループのリストです。各サーバーグループで操作を順次実行する場合はコンマ (,) を使用して複数のサーバーグループを区切ります。各サーバーグループで同時に操作を実行する場合はキャレット (^) を区切り文字として使用します。

    • 各サーバーグループでは、以下のポリシーをかっこで囲んで設定します。複数のポリシーはコンマで区切ります。

      • rolling-to-servers: ブール値。true に設定すると、操作はグループの各サーバーに順次適用されます。false に設定した場合、または指定がない場合は、操作はグループのサーバーに同時に適用されます。
      • max-failed-servers: 整数値。グループにおける操作の適用に失敗したサーバーの最大数で、失敗したサーバーの台数がこの値を超えるとグループのすべてのサーバーが元に戻されます。指定がない場合のデフォルト値は 0 で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。
      • max-failure-percentage: 0 から 100 までの整数値。グループにおける操作の適用に失敗したサーバー合計数の最大率 (パーセント) で、失敗したサーバーの率がこの値を超えるとグループのすべてのサーバーが元に戻されます。指定がない場合のデフォルト値は 0 で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。

        注記

        max-failed-serversmax-failure-percentage の両方がゼロ以外の値に設定された場合、max-failure-percentage が優先されます。

  • rollback-across-groups: ブール値。1 つのサーバーグループのサーバーすべてで操作をロールバックする必要があると、すべてのサーバーグループでロールバックの実行を引き起こすかどうかを指定します。デフォルトは false です。
ロールアウト計画を使用したデプロイ

ロールアウト計画の完全詳細を直接 deploy コマンドに提供するには、rollout 設定を headers 引数に渡します。形式の詳細は、ロールアウト計画の構文 を参照してください。

以下の管理 CLI コマンドは、順次のデプロイメントに rolling-to-servers=true を指定するデプロイメント計画を使用して、アプリケーションを main-server-group サーバーグループにデプロイします。

deploy /path/to/test-application.war --server-groups=main-server-group --headers={rollout main-server-group(rolling-to-servers=true)}
保存されたロールアウト計画を使用したデプロイ

ロールアウト計画は複雑になることがあるため、ロールアウト計画の詳細を保存するオプションがあります。これにより、毎回ロールアウト計画の完全詳細を必要とせずに、ロールアウト計画を使用するときにロールアウト計画の名前を参照することができます。

  1. rollout-plan 管理 CLI コマンドを使用してロールアウト計画を保存します。形式の詳細は ロールアウト計画の構文 を参照してください。

    rollout-plan add --name=my-rollout-plan --content={rollout main-server-group(rolling-to-servers=false,max-failed-servers=1),other-server-group(rolling-to-servers=true,max-failure-percentage=20) rollback-across-groups=true}

    これにより、以下のデプロイメント計画が作成されます。

    "rollout-plan" => {
        "in-series" => [
            {"server-group" => {"main-server-group" => {
                "rolling-to-servers" => false,
                "max-failed-servers" => 1
            }}},
            {"server-group" => {"other-server-group" => {
                "rolling-to-servers" => true,
                "max-failure-percentage" => 20
            }}}
        ],
        "rollback-across-groups" => true
    }
  2. アプリケーションのデプロイ時に保存されたロールアウト計画名を指定します。

    以下の管理 CLI コマンドは、保存されたロールアウト計画 my-rollout-plan を使用してすべてのサーバーグループにアプリケーションをデプロイします。

    deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
保存されたロールアウト計画の削除

削除するロールアウト計画の名前を指定して rollout-plan 管理 CLI コマンドを使用すると、保存されたロールアウト計画を削除できます。

rollout-plan remove --name=my-rollout-plan
デフォルトのロールアウト計画

複数のサーバーに影響する操作はすべてロールアウト計画を使用して実行されます。操作リクエストにロールアウト計画が指定されていない場合は、デフォルトのロールアウト計画が生成されます。計画には以下の特徴があります。

  • ハイレベルなフェーズは 1 つのみです。操作に影響するすべてのサーバーグループには同時に操作が適用されます。
  • 各サーバーグループ内では、操作がすべてのサーバーに同時に適用されます。
  • サーバーグループのいずれかのサーバーに操作を適用できないと、グループ全体でロールバックが実行されます。
  • あるサーバーグループに操作を適用できないと、他のすべてのサーバーグループでロールバックが実行されます。

第8章 ドメイン管理

本項では、管理対象ドメインの操作モードに固有する概念や設定について説明します。

管理対象ドメインのセキュア化については、JBoss EAP How to Configure Server SecuritySecuring a Managed Domain の項を参照してください。

8.1. 管理対象ドメイン

管理対象ドメインの操作モードを使用すると、単一の制御ポイントから複数の JBoss EAP インスタンスを管理できます。

一元管理された複数の JBoss EAP サーバーは、ドメインのメンバーと呼ばれます。ドメインの JBoss EAP インスタンスは共通の管理ポリシーを共有します。

各ドメインは 1 つのドメインコントローラー、1 つ以上のホストコントローラー、およびホスト毎に 0 個以上のサーバーグループによって構成されます。

A managed domain.

ドメインコントローラーは、ドメインが制御される中心点であり、各サーバーはドメインの管理ポリシーに従って設定されます。ドメインコントローラーはホストコントローラーでもあります。

ホストコントローラーはドメインコントローラーと対話して、ホスト上で実行されているアプリケーションサーバーインスタンスのライフサイクルを制御し、ドメインコントローラーがこれらのインスタンスを管理できるようにします。各ホストに複数のサーバーグループが含まれるようにすることが可能です。

サーバーグループは、JBoss EAP がインストールされているサーバーインスタンスの集まりで、すべてが 1 つとして管理および設定されます。ドメインコントローラーはサーバーグループにデプロイされたアプリケーションとその設定を管理します。そのため、サーバーグループの各サーバーは同じ設定とデプロイメントを共有します。

ホストコントローラーは特定の物理 (または仮想) ホストに割り当てられます。異なる設定を使用する場合は、同じハードウェア上で複数のホストコントローラーを実行でき、ポートとその他のリソースが競合しないようにします。1 つのドメインコントローラー、1 つのホストコントローラー、および複数のサーバーを、同じ物理システムの同じ JBoss EAP インスタンス内で実行することができます。

8.1.1. ドメインコントローラー

ドメインコントローラーは、ドメインの集中管理点として動作する JBoss EAP サーバーインスタンスです。1 つのホストコントローラーインスタンスがドメインコントローラーとして動作するよう設定されます。

ドメインコントローラーの主な役割は次のとおりです。

  • ドメインの集中管理ポリシーを維持する。
  • すべてのホストコントローラーが現在のコンテンツを認識するようにする。
  • 実行中のすべての JBoss EAP サーバーインスタンスがこのポリシーに従って設定されるよう、ホストコントローラーをサポートする。

デフォルトでは、集中管理ポリシーは EAP_HOME/domain/configuration/domain.xml ファイルに格納されます。このファイルは、ドメインコントローラーとして実行するよう設定されたホストコントローラーのこのディレクトリーに必要です。

domain.xml ファイルには、ドメインのサーバーに適用できるプロファイル設定が含まれています。プロファイルには、そのプロファイルで使用できるさまざまなサブシステムの詳細設定が含まれています。ドメイン設定には、ソケットグループの定義とサーバーグループの定義も含まれます。

注記

JBoss EAP 7 ドメインコントローラーは、JBoss EAP 6.2 以上を実行している JBoss EAP 6 ホストおよびサーバーを管理できます。

詳細は 管理対象ドメインの起動およびドメインコントローラーの設定の項を参照してください。

8.1.2. ホストコントローラー

ホストコントローラーの主な役割はサーバーを管理することです。ドメイン管理タスクを委譲し、ホスト上で実行される個別のアプリケーションサーバープロセスを開始および停止します。

ホストコントローラーはドメインコントローラーと対話し、サーバーとドメインコントローラー間の通信を管理できるようにします。ドメインの複数のホストコントローラーは 1 つのドメインコントローラーのみと対話できます。そのため、単一のドメインモード上で実行されるホストコントローラーおよびサーバーインスタンスはすべて単一のドメインコントローラーを持ち、同じドメインに属する必要があります。

デフォルトでは、各ホストコントローラーは EAP_HOME/domain/configuration/host.xml ファイルから設定を読み取ります。このファイルは、ホストのファイルシステム上にある未展開の JBoss EAP インストールファイルに存在します。host.xml ファイルには、特定のホストに固有する以下の設定情報が含まれています。

  • このインストールから実行されるサーバーインスタンスの名前。
  • ローカルの物理インストールに固有する設定。たとえば、domain.xml に宣言された名前付きインターフェースの定義は host.xml にある実際のマシン固有の IP アドレスへマップできます。さらに、domain.xml の抽象パス名を host.xml のファイルシステムパスへマップできます。
  • 次の設定のいずれか。

    • ホストコントローラーがドメインコントローラーへ通知して、ホストコントローラー自体を登録し、ドメイン設定へアクセスする方法。
    • リモートドメインコントローラーの検索および通知方法。
    • ホストコントローラーがドメインコントローラーとして動作するかどうか。

詳細は 管理対象ドメインの起動およびホストコントローラーの設定の項を参照してください。

8.1.3. プロセスコントローラー

プロセスコントローラーは小型のライトウェイトなプロセスで、ホストコントローラープロセスを起動し、そのライフサイクルを監視します。ホストコントローラーがクラッシュすると、プロセスコントローラーによって再起動されます。さらに、ホストコントローラーの指示に従ってサーバープロセスを開始しますが、クラッシュしたサーバープロセスは自動的に再起動しません。

プロセスコントローラーのログは EAP_HOME/domain/log/process-controller.log ファイルに記録されます。プロセスコントローラーの JVM オプションは、PROCESS_CONTROLLER_JAVA_OPTS 変数を使用して EAP_HOME/bin/domain.conf ファイルに設定します。

8.1.4. サーバーグループ

サーバーグループとは、1 つのグループとして管理および設定される複数のサーバーインスタンスのことです。管理対象ドメインでは、各アプリケーションサーバーインスタンスは唯一のメンバーである場合でも 1 つのサーバーグループに属します。グループのサーバーインスタンスは同じプロファイル設定とデプロイされた内容を共有します。

ドメインコントローラーとホストコントローラーは、ドメインにある各サーバーグループのすべてのインスタンスに標準設定を強制します。

ドメインは複数のサーバーグループで構成されます。異なるサーバーグループを異なるプロファイルやデプロイメントで設定できます。たとえば、ドメインは異なるサービスを提供する異なるサーバー層で設定できます。

異なるサーバーグループが同じプロファイルやデプロイメントを持つこともできます。これにより、最初のサーバーグループでアプリケーションがアップグレードされた後に 2 つ目のサーバーグループでアプリケーションがアップデートされるアプリケーションのローリングアップグレードが可能になり、サービスの完全停止を防ぎます。

詳細は、サーバーグループの設定の項を参照してください。

8.1.5. サーバー

サーバーはアプリケーションサーバーインスタンスを表します。管理対象ドメインでは、すべてのサーバーインスタンスがサーバーグループのメンバーになります。ホストコントローラーは各サーバーインスタンスを独自の JVM プロセスで起動します。

詳細は サーバーの設定の項を参照してください。

8.3. 管理対象ドメインの起動

8.3.1. 管理対象ドメインの起動

ドメインおよびホストコントローラーは、JBoss EAP に同梱される domain.sh または domain.bat スクリプトを使用して起動できます。使用できる起動スクリプトの引数の完全リストとそれら引数の目的については、--help 引数を使用するか、サーバーランタイム引数を参照してください。

ドメイン内のサーバーグループのスレーブサーバーを起動する前にドメインコントローラーを起動する必要があります。最初にドメインコントローラーを起動した後、ドメイン内の関連する他のホストコントローラーを起動します。

ドメインコントローラーの起動

専用のドメインコントローラー向けに事前設定された host-master.xml 設定ファイルを使用してドメインコントローラーを起動します。

$ EAP_HOME/bin/domain.sh --host-config=host-master.xml

ドメインの設定に応じて、ホストコントローラーの接続を可能にするために設定を追加する必要があります。また、以下のドメイン設定例を参照してください。

ホストコントローラーの起動

スレーブホストコントローラー向けに事前設定された host-slave.xml 設定ファイルを使用してホストコントローラーを起動します。

$ EAP_HOME/bin/domain.sh  --host-config=host-slave.xml

ドメインの設定に応じて、ドメインコントローラーへ接続し、ドメインコントローラーとの競合を回避するために設定を追加する必要があります。また、以下のドメイン設定例を参照してください。

8.3.2. ドメインコントローラーの設定

ドメインコントローラーとして動作するホストの設定

<domain-controller> 宣言に <local/> 要素が含まれると、そのホストがドメインコントローラーとして指名されます。

<domain-controller>
  <local/>
</domain-controller>

ドメインコントローラーとして動作するホストは、ドメインの他のホストがアクセスできる管理インターフェースを公開する必要があります。HTTP(S) 管理インターフェースを公開する必要はありませんが、管理コンソールへのアクセスを可能にするため、HTTP(S) 管理インターフェースを公開することが推奨されます。

<management-interfaces>
  <native-interface security-realm="ManagementRealm">
    <socket interface="management" port="${jboss.management.native.port:9999}"/>
  </native-interface>
  <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true">
    <socket interface="management" port="${jboss.management.http.port:9990}"/>
  </http-interface>
</management-interfaces>

EAP_HOME/domain/configuration/host-master.xml ファイルには、ドメインコントローラーとして動作するための設定が事前設定されています。

8.3.3. ホストコントローラーの設定

ドメインコントローラーへの接続

ホストコントローラー自体をドメインに登録するため、ホストコントローラーがドメインコントローラーに接続する方法を指定する必要があります。これは <domain-controller> 要素に設定されます。

<domain-controller>
  <remote security-realm="ManagementRealm">
    <discovery-options>
      <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}"/>
    </discovery-options>
  </remote>
</domain-controller>

EAP_HOME/domain/configuration/host-slave.xml ファイルには、ドメインコントローラーに接続するための設定が事前設定されています。ホストコントローラーの起動時に jboss.domain.master.address プロパティーを提供する必要があります。

$ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=IP_ADDRESS

ドメインコントローラーの検出に関する詳細は、 ドメインコントローラーの検出およびフェイルオーバーの項を参照してください。

ドメインの設定によっては、認証を提供して、ホストコントローラーがドメインコントローラーによって認証されるようにする必要がある場合があります。管理ユーザーと秘密の値の生成や、その値を用いたホストコントローラー設定の更新に関する詳細は、2 台のマシンで管理対象ドメインを設定を参照してください。

8.3.3.1. ホスト名の設定

管理対象ドメインで実行されている各ホストには一意な名前を付ける必要があります。管理を容易にし、複数のホストで同じホスト設定ファイルを使用できるようにするために、以下の優先順位を用いてホスト名が決定されます。

  1. 設定されている場合、host.xml 設定ファイルのホスト要素名属性。
  2. jboss.host.name システムプロパティーの値。
  3. jboss.qualified.host.name システムプロパティーの最後のピリオド (.) の後に続く値。最後のピリオド (.) がない場合は全体の値。
  4. POSIX ベースのオペレーティングシステムでは、HOSTNAME 環境変数のピリオド (.) の後に続く値。Microsoft Windows では COMPUTERNAME 環境変数のピリオド (.) の後に続く値。最後のピリオドがない場合は、全体の値。

関連する host.xml 設定ファイルの上部にある host 要素に設定されたホストコントローラーの名前。例は次のとおり。

<host xmlns="urn:jboss:domain:4.0" name="host1">

以下の手順に従って、管理 CLI を使用してホスト名を更新します。

  1. JBoss EAP ホストコントローラーを起動します。

    $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
  2. 管理 CLI を起動し、ドメインコントローラーに接続します。

    $ EAP_HOME/bin/jboss-cli.sh --connect --controller=DOMAIN_CONTROLLER_IP_ADDRESS
  3. 以下のコマンドを実行して新しいホスト名を設定します。

    /host=EXISTING_HOST_NAME:write-attribute(name=name,value=NEW_HOST_NAME)

    これにより、host-slave.xml ファイルのホスト名属性が以下のように変更されます。

    <host name="NEW_HOST_NAME" xmlns="urn:jboss:domain:4.0">
  4. 変更を反映するためにホストコントローラーをリロードします。

    reload --host=EXISTING_HOST_NAME

ホストコントローラーの名前が設定ファイルに設定されていない場合は、起動時にホスト名を渡すこともできます。

$ EAP_HOME/bin/domain.sh --host-config=host-slave.xml  -Djboss.host.name=HOST_NAME

8.3.4. ドメインコントローラーの検出およびフェイルオーバー

管理対象ドメインの設定時、ドメインコントローラーに接続するために必要な情報を使用して各ホストコントローラーを設定する必要があります。JBoss EAP では、ドメインコントローラーを検索する複数のオプションを使用して各ホストコントローラーを設定できます。ホストコントローラーは、適切なオプションが見つかるまでオプションのリストを繰り返し処理します。

これにより、バックアップドメインコントローラーのコンタクト情報を用いてホストコントローラーを事前設定できます。プライマリードメインコントローラーに問題がある場合は、バックアップホストコントローラーをマスターに昇格でき、昇格後にホストコントローラーを新しいマスターへ自動的にフェイルオーバーできます。

以下は、ドメインコントローラー検索の複数のオプションを持つホストコントローラーを設定する方法の例になります。

例: 複数のドメインコントローラーオプションを持つホストコントローラー

<domain-controller>
  <remote security-realm="ManagementRealm">
    <discovery-options>
      <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="172.16.81.100" port="${jboss.domain.master.port:9999}"/>
      <static-discovery name="backup" protocol="${jboss.domain.master.protocol:remote}" host="172.16.81.101" port="${jboss.domain.master.port:9999}"/>
    </discovery-options>
  </remote>
</domain-controller>

静的検出オプションには、以下の必須属性が含まれます。

name
このドメインコントローラー検出オプションの名前。
host
リモートドメインコントローラーのホスト名。
port
リモートドメインコントローラーのポート。

上記の例では、最初の検出オプションが指定されることが予想されます。2 つ目のオプションはフフェイルオーバーの状況で使用される可能性があります。

プライマリードメインコントローラーで問題が発生した場合、--backup オプションで開始されたホストコントローラーをドメインコントローラーに昇格することができます。

注記

--backup オプションでホストコントローラーを開始すると、コントローラーによってドメイン設定のローカルコピーが維持されます。この設定は、ホストコントローラーがドメインコントローラーとして動作するよう再設定された場合に使用されます。

ホストコントローラーをドメインコントローラーに昇格
  1. 元のドメインコントローラーが停止した状態であることを確認します。
  2. 管理 CLI を使用して、新しいドメインコントローラーとなるホストコントローラーへ接続します。
  3. 以下のコマンドを実行してホストコントローラーを設定し、新しいドメインコントローラーとして動作するようにします。

    /host=HOST_NAME:write-local-domain-controller
  4. 以下のコマンドを実行し、ホストコントローラーをリロードします。

    reload --host=HOST_NAME

このホストコントローラーがドメインコントローラーとして動作するようになります。

8.4. サーバーの管理

8.4.1. サーバーグループの設定

以下はサーバーグループ定義の例になります。

<server-group name="main-server-group" profile="full">
  <jvm name="default">
    <heap size="64m" max-size="512m"/>
  </jvm>
  <socket-binding-group ref="full-sockets"/>
  <deployments>
    <deployment name="test-application.war" runtime-name="test-application.war"/>
    <deployment name="jboss-helloworld.war" runtime-name="jboss-helloworld.war" enabled="false"/>
  </deployments>
</server-group>

サーバーグループの設定は、管理 CLI を使用するか、管理コンソールの Runtime タブから行います。

サーバーグループの追加

以下の管理 CLI コマンドを実行すると、サーバーグループを追加できます。

/server-group=SERVER_GROUP_NAME:add(profile=PROFILE_NAME,socket-binding-group=SOCKET_BINDING_GROUP_NAME)
サーバーグループの更新

以下の管理 CLI コマンドを実行すると、サーバーグループ属性を更新できます。

/server-group=SERVER_GROUP_NAME:write-attribute(name=ATTRIBUTE_NAME,value=VALUE)
サーバーグループの削除

以下の管理 CLI コマンドを実行すると、サーバーグループを削除できます。

/server-group=SERVER_GROUP_NAME:remove
サーバーグループ属性

サーバーグループには次の属性が必要です。

  • name: サーバーグループの名前。
  • profile: サーバーグループプロファイル名。
  • socket-binding-group: グループのサーバーに使用されるデフォルトのソケットバインディンググループ。サーバーごとに上書きできます。

サーバーグループに含まれる任意の属性は次のとおりです。

  • management-subsystem-endpoint: remoting サブシステムからエンドポイントを使用してサーバーグループに属するサーバーを再びホストコントローラーに接続するには true に設定します (これには、remoting サブシステムが存在する必要があります)。
  • socket-binding-default-interface: このサーバーのソケットバインディンググループのデフォルトインターフェース。
  • socket-binding-port-offset: ソケットバインディンググループによって提供されたポート値に追加するデフォルトのオフセット。
  • deployments: グループのサーバーにデプロイするデプロイメントコンテンツ。
  • jvm: グループの全サーバーに対するデフォルトの JVM 設定。ホストコントローラーはこれらの設定を host.xml の他の設定とマージし、サーバーの JVM を開始するために使用される設定を作成します。
  • deployment-overlays: 定義されたデプロイメントオーバーレイと、このサーバーグループのデプロイメントとの間をリンクします。
  • system-properties: グループのサーバーに設定するシステムプロパティー。

8.4.2. サーバーの設定

デフォルトの host.xml 設定ファイルは 3 つのサーバーを定義します。

<servers>
  <server name="server-one" group="main-server-group">
  </server>
  <server name="server-two" group="main-server-group" auto-start="true">
    <socket-bindings port-offset="150"/>
  </server>
  <server name="server-three" group="other-server-group" auto-start="false">
    <socket-bindings port-offset="250"/>
  </server>
</servers>

server-one という名前のサーバーインスタンスは main-server-group に関連付けられ、そのサーバーグループによって指定されるサブシステム設定とソケットバインディングを継承します。server-two という名前のサーバーインスタンスも main-server-group に関連付けられていますが、server-one によって使用されるポートの値と競合しないようにソケットバインディングの port-offset の値も定義します。server-three という名前のサーバーインスタンスは other-server-group に関連付けられ、そのグループの設定を使用します。また、 port-offset の値も定義し、ホストコントローラーの起動時にこのサーバーが起動しないように auto-startfalse に設定します。

サーバーの設定は、管理 CLI を使用するか、管理コンソールの Runtime タブから行います。

サーバーの追加

以下の管理 CLI コマンドを実行すると、サーバーを追加できます。

/host=HOST_NAME/server-config=SERVER_NAME:add(group=SERVER_GROUP_NAME)
サーバーの更新

以下の管理 CLI コマンドを実行すると、サーバー属性を更新できます。

/host=HOST_NAME/server-config=SERVER_NAME:write-attribute(name=ATTRIBUTE_NAME,value=VALUE)
サーバーの削除

以下の管理 CLI コマンドを実行すると、サーバーを削除できます。

/host=HOST_NAME/server-config=SERVER_NAME:remove
サーバー属性

サーバーには以下の属性が必要です。

  • name: サーバーの名前。
  • group: ドメインモデルからのサーバーグループの名前。

サーバーには以下の任意の属性が含まれます。

  • auto-start: ホストコントローラーの起動時にこのサーバーが起動されるかどうか。
  • socket-binding-group: このサーバーが属するソケットバインディンググループ。
  • socket-binding-port-offset: このサーバーのソケットバイディンググループによって提供されたポート値に追加されるオフセット。
  • update-auto-start-with-server-status: サーバーの状態で auto-start 属性を更新します。
  • interface: サーバーで使用できる完全に指定された名前付きのネットワークインターフェースのリスト。
  • jvm: このサーバーの JVM 設定。宣言されていない場合、設定は親のサーバーグループまたはホストから継承されます。
  • path: 名前付きのファイルシステムパスのリスト。
  • system-property: このサーバーに設定するシステムプロパティーのリスト。

8.4.3. サーバーの起動と停止

管理コンソールから起動、停止、リロードなどの操作をサーバーで実行するには、Runtime タブに移動して適切なホストまたはサーバーグループを選択します。

管理 CLI を使用してこれらの操作を実行する場合は以下のコマンドを参照してください。

サーバーの起動

特定のホストで 1 台のサーバーを起動できます。

/host=HOST_NAME/server-config=SERVER_NAME:start

指定のサーバーグループのサーバーをすべて起動できます。

/server-group=SERVER_GROUP_NAME:start-servers
サーバーの停止

特定のホストで 1 台のサーバーを停止できます。

/host=HOST_NAME/server-config=SERVER_NAME:stop

指定のサーバーグループのサーバーをすべて停止できます。

/server-group=SERVER_GROUP_NAME:stop-servers
サーバーのリロード

特定のホストで 1 台のサーバーをリロードできます。

/host=HOST_NAME/server-config=SERVER_NAME:reload

指定のサーバーグループのサーバーをすべてリロードできます。

/server-group=SERVER_GROUP_NAME:reload-servers

8.5. 管理対象ドメインの設定

8.5.1. 1 台のマシンで管理対象ドメインを設定

jboss.domain.base.dir プロパティーを使用すると 1台のマシンで複数のホストコントローラーを実行できます。

  1. ドメインコントローラーの EAP_HOME/domain ディレクトリーをコピーします。

    $ cp -r EAP_HOME/domain /path/to/domain1
  2. ホストコントローラーの EAP_HOME/domain ディレクトリーをコピーします。

    $ cp -r EAP_HOME/domain /path/to/host1
  3. /path/to/domain1 を使用してドメインコントローラーを起動します。

    $ EAP_HOME/bin/domain.sh --host-config=host-master.xml -Djboss.domain.base.dir=/path/to/domain1
  4. /path/to/host1 を使用してホストコントローラーを起動します。

    $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Djboss.domain.base.dir=/path/to/host1 -Djboss.domain.master.address=IP_ADDRESS -Djboss.management.native.port=PORT
    注記

    ホストコントローラーの起動時に、jboss.domain.master.address プロパティーを使用してドメインコントローラーのアドレスを指定する必要があります。

    さらに、このホストコントローラーはドメインコントローラーと同じマシンで実行されているため、ドメインコントローラーの管理インターフェースと競合しないように管理インターフェースを変更する必要があります。このコマンドは jboss.management.native.port プロパティーを設定します。

このように起動された各インスタンスは、ベースインストールディレクトリー (例: EAP_HOME/modules/) のその他のリソースを共有しますが、jboss.domain.base.dir によって指定されたディレクトリーからドメイン設定を使用します。

8.5.2. 2 台のマシンで管理対象ドメインを設定

注記

この例の実行には、ファイアウォールの設定が必要になることがあります。

1 台がドメインコントローラーでもう 1 台がホストである 2 台のマシンで管理対象ドメインを作成できます。詳細は、ドメインコントローラーを参照してください。

  • IP1 = ドメインコントローラーの IP アドレス (マシン 1)
  • IP2 = ホストの IP アドレス (マシン 2)
2 台のマシンで管理対象ドメインを作成
  1. マシン 1 での作業

    1. ホストがドメインコントローラーによって認証されるよう、管理ユーザーを追加します。

      add-user.sh スクリプトを使用してホストコントローラー (HOST_NAME) の管理ユーザーを追加します。最後の質問で yes を指定し、提供される秘密の値 (<secret value="SECRET_VALUE" />) を書き留めておきます。この秘密の値はホストコントローラーの設定で使用します。

    2. ドメインコントローラーを起動します。

      専用のドメインコントローラー用に事前設定された host-master.xml 設定ファイルを指定します。さらに、jboss.bind.address.management プロパティーを設定し、ドメインコントローラーが他のマシンにも表示されるようにします。

      $ EAP_HOME/bin/domain.sh --host-config=host-master.xml -Djboss.bind.address.management=IP1
  2. マシン 2 での作業

    1. ユーザークレデンシャルでホスト設定を更新します。

      EAP_HOME/domain/configuration/host-slave.xml を編集し、ホスト名 (HOST_NAME) と秘密の値 (SECRET_VALUE) を設定します。

      <host xmlns="urn:jboss:domain:1.6" name="HOST_NAME">
        <management>
          <security-realms>
            <security-realm name="ManagementRealm">
              <server-identities>
                <secret value="SECRET_VALUE" />
              </server-identities>
              ...
    2. ホストコントローラーを起動します。

      スレーブホストコントローラー用に事前設定された host-slave.xml 設定ファイルを指定します。さらに、jboss.domain.master.address プロパティーを設定してドメインコントローラーに接続し、jboss.bind.address プロパティーを設定してホストコントローラーバインドアドレスを設定します。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml  -Djboss.domain.master.address=IP1  -Djboss.bind.address=IP2

起動時に --controller パラメーターを使用してドメインコントローラーアドレスを指定し、管理 CLI からドメインを管理できるようになります。

$ EAP_HOME/bin/jboss-cli.sh --connect --controller=IP1

また、http://IP1:9990 で管理コンソールからドメインを管理することもできます。

8.6. JBoss EAP プロファイルの管理

8.6.1. プロファイル

JBoss EAP は、プロファイルを使用してサーバーが使用できるサブシステムを整理します。プロファイルは、利用可能なサブシステムと各サブシステムの特定の設定で構成されます。プロファイルのサブシステムの数が多いと、サーバーの機能が多くなります。プロファイルのサブシステムが集中的で数が少ないと、機能が少なくなりますが、フットプリントも少なくなります。

JBoss EAP には、ほとんどのユースケースに対応する、事前定義されたプロファイルが 4 つ含まれています。

default
loggingsecuritydatasourcesinfinispanwebserviceseeejb3transactions など、一般的に使用されるサブシステムが含まれます。
ha
default プロファイルで提供されるサブシステムと、高可用性向けの jgroups および modcluster サブシステムが含まれます。
full
default プロファイルで提供されるサブシステムと、 messaging-activemq および iiop-openjdk サブシステムが含まれます。
full-ha
full プロファイルで提供されるサブシステムと、高可用性向けの jgroups および modcluster サブシステムが含まれます。
注記

JBoss EAP は、既存プロファイルの設定からサブシステムを削除して、エクステンションを無効にしたり、ドライバーやその他のサービスを手作業でアンロードしたりする機能を提供しますが、ほとんどの場合でこれは必要ありません。JBoss EAP は必要時にサブシステムを動的にロードするため、サーバーまたはアプリケーションがサブシステムを使用しないと、そのサブシステムはロードされません。

既存のプロファイルが必要な機能を提供しない場合、JBoss EAP はカスタムプロファイルを定義する機能も提供します。

8.6.2. プロファイルのクローン

JBoss EAP では、既存のプロファイルをクローンして管理対象ドメインで新しいプロファイルを作成することができます。クローンした既存プロファイルの設定およびサブシステムのコピーが作成されます。

管理 CLI を使用してプロファイルをクローンするには、クローンするプロファイルに clone 操作を実行します。

/profile=full-ha:clone(to-profile=cloned-profile)

管理コンソールからプロファイルをクローンするには、クローンするプロファイルを選択し、Clone をクリックします。

8.6.3. 階層的なプロファイルの作成

管理対象ドメインでは、プロファイルの階層を作成できます。これにより、他のプロファイルが継承できる共通のエクステンションが含まれるベースプロファイルを作成できます。

管理対象ドメインは domain.xml の複数のプロファイルを定義します。複数のプロファイルが特定のサブシステムで同じ設定を使用する場合、複数のプロファイルで設定せずに、1 つのプロファイルで設定を行うことができます。親プロファイルの値はオーバーライドできません。

管理 CLI を使用して list-add 操作を実行し、含めるプロファイルを指定すると、プロファイルに階層の別のプロファイルを含めることができます。

/profile=new-profile:list-add(name=includes, value=PROFILE_NAME)

第9章 JVM の設定

Java Virtual Machine (JVM) の設定は、スタンドアロンの JBoss EAP サーバーと管理対象ドメインの JBoss EAP サーバーでは異なります。

スタンドアロン JBoss EAP サーバーインスタンスでは、起動時にサーバー起動プロセスが JVM 設定を JBoss EAP サーバーに渡します。これは、JBoss EAP を起動する前にコマンドラインから宣言できます。また、管理コンソールの System Properties 画面を使用して宣言することもできます。

管理対象ドメインでは、JVM の設定は host.xml および domain.xml 設定ファイルで宣言され、ホスト、サーバーグループ、またはサーバーレベルで設定できます。

注記

システムプロパティーは、起動中に JBoss EAP モジュール (ロギングマネージャーなど) が使用する JAVA_OPTS で設定する必要があります。

9.1. スタンドアロンサーバーの JVM 設定

スタンドアロン JBoss EAP サーバーインスタンスの JVM 設定は、サーバーの起動前に JAVA_OPTS 環境変数を設定すると、起動時に宣言できます。

Linux で JAVA_OPTS 環境変数を設定する例は次のとおりです。

$ export JAVA_OPTS="-Xmx1024M"

Microsoft Windows 環境でも同じ設定を使用できます。

set JAVA_OPTS="Xmx1024M"

この代わりに、JVM へ渡すオプションの例が含まれる EAP_HOME/bin フォルダーの standalone.conf ファイルに JVM 設定を追加することもできます。

警告

JAVA_OPTS 環境変数を設定すると、standalone.conf からのデフォルト値がオーバーライドされるため、JBoss EAP の起動に問題が発生する可能性があります。

9.2. 管理対象ドメインの JVM 設定

JBoss EAP 管理対象ドメインでは、複数のレベルで JVM の設定を定義できます。特定ホストのカスタム JVM 設定を定義し、それらの設定をサーバーグループまたは個別のサーバーインスタンスに適用できます。

デフォルトでは、サーバーグループおよび各サーバーは親から JVM 設定を継承しますが、各レベルで JVM 設定をオーバーライドすることもできます。

注記

domain.conf の JVM 設定は JBoss EAP ホストコントローラーの Java プロセスに適用されます。ホストコントローラーによって制御される個別の JBoss EAP サーバーインスタンスには適用されません。

9.2.1. ホストコントローラーの JVM 設定の定義

ホストコントローラーの JVM 設定を定義し、これらの設定をサーバーグループまたは各サーバーに適用することができます。JBoss EAP には default の JVM 設定が含まれますが、以下の管理 CLI コマンドを実行すると、カスタム JVM 設定およびオプションがある production_jvm という名前の JVM 設定が新たに作成されます。

/host=HOST_NAME/jvm=production_jvm:add(
    heap-size=2048m,
    max-heap-size=2048m,
    max-permgen-size=512m,
    stack-size=1024k,
    jvm-options=["-XX:-UseParallelGC"]
)

また、JBoss EAP 管理コンソールで JVM 設定を作成および編集するには、Runtime タブを選択してから Hosts を選択し、編集するホストの JVM をクリックします。

これらの設定は host.xml<jvm> タグ内に保存されます。

9.2.2. JVM 設定のサーバーグループへの適用

サーバーグループの作成時に、グループのすべてのサーバーが使用する JVM 設定を指定できます。以下の管理 CLI コマンドを実行すると、前の例で示された production_jvm JVM 設定を使用する groupA という名前のサーバーグループが作成されます。

/server-group=groupA:add(profile=default, socket-binding-group=standard-sockets)
/server-group=groupA/jvm=production_jvm:add()

サーバーグループのすべてのサーバーは、production_jvm から JVM 設定を継承します。

サーバーグループレベルで特定の JVM 設定をオーバーライドすることもできます。たとえば、異なるヒープサイズを設定するには、以下のコマンドを使用します。

/server-group=groupA/jvm=production_jvm:write-attribute(name=heap-size,value="1024m")

上記コマンドの実行後、サーバーグループ groupAproduction_jvm から JVM 設定を継承しますが、ヒープサイズの値は 1024m にオーバーライドされます。

また、Runtime タブを選択してから Server Groups を選択し、変更するサーバーグループの View をクリックすると、JBoss EAP 管理コンソールでサーバーグループの JVM 設定を編集できます。

サーバーグループの設定は domain.xml に保存されます。

9.2.3. JVM 設定の個別のサーバーへの適用

デフォルトでは、個別の JBoss EAP サーバーインスタンスは属するサーバーグループの JVM 設定を継承します。しかし、継承した設定をホストコントローラーからの別の JVM 設定定義でオーバーライドしたり、特定の JVM 設定をオーバーライドすることもできます。

たとえば、以下のコマンドは 前の例で示したサーバーグループの JVM 定義をオーバーライドし、server-one の JVM 設定を default の JVM 定義に設定します。

/host=HOST_NAME/server-config=server-one/jvm=default:add()

また、サーバーグループと同様に、サーバーレベルで特定の JVM 設定をオーバーライドすることもできます。たとえば、別のヒープサイズを設定するには、以下のコマンドを使用できます。

/host=HOST_NAME/server-config=server-one/jvm=default:write-attribute(name=heap-size,value="1024m")

また、Runtime タブを選択してから Hosts を選択し、関連するホストを指定すると、JBoss EAP 管理コンソールでサーバーの JVM 設定を編集できます。サーバーを編集するには、サーバーを選択し、View をクリックします。

各サーバーのこれらの設定は host.xml に保存されます。

9.3. JVM 状態の表示

ヒープおよびスレッドの使用状況など、スタンドアロンまたは管理対象ドメインサーバーの JVM リソースの状態は管理コンソールから表示できます。統計はリアルタイムでは表示されませんが、Refresh Results をクリックすると JVM リソースの最新の概要を表示できます。

スタンドアロン JBoss EAP サーバーの JVM の状態を表示するには、以下を行います。

  • Runtime タブを選択した後、Standalone Server を選択します。Monitor の列で JVM を選択し、View をクリックします。

管理対象ドメインでの JBoss EAP サーバーの JVM の状態を表示するには、以下を行います。

  • Runtime タブを選択した後、表示するサーバーグループとサーバーを選択します。Monitor 列で JVM を選択し、 View をクリックします。

以下のヒープ使用情報が表示されます。

Max
メモリー管理に使用できるメモリーの最大量。
Used
使用されたメモリーの量。
Committed
JVM が使用するために確保されたメモリー量。

JVM のアップタイムやスレッドの使用状況などの他の情報も表示されます。

9.4. 32 または 64 ビット JVM アーキテクチャーの指定

Hewlett-Packard HP-UX や Solaris などの一部の環境では、32 ビットまたは 64 ビット JVM の実行を指定するために -d32 または -d64 スイッチが使用されます。指定がない場合はデフォルトで 32 ビットが使用されます。

スタンドアロンサーバーでの 64 ビットアーキテクチャーの指定

  1. EAP_HOME/bin/standalone.conf を開きます。
  2. 以下の行を追加して、-d64 オプションを JAVA_OPTS に追加します。
JAVA_OPTS="$JAVA_OPTS -d64"

管理対象ドメインでの 64 ビットアーキテクチャーの指定

管理対象ドメインを実行している場合、サーバーインスタンスの他にホストとプロセスコントローラーの 64 ビット環境を指定できます。

  1. 64 ビット JVM で実行するよう、ホストおよびプロセスコントローラーを設定します。

    1. EAP_HOME/bin/domain.conf を開きます。
    2. 以下の行を追加して、-d64 オプションを JAVA_OPTS に追加します。必ず PROCESS_CONTROLLER_JAVA_OPTS および HOST_CONTROLLER_JAVA_OPTS の設定部分の前に挿入してください。

      JAVA_OPTS="$JAVA_OPTS -d64"

      domain.conf の JVM オプションの例

      #
      # Specify options to pass to the Java VM.
      #
      if [ "x$JAVA_OPTS" = "x" ]; then
        JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.policy-permissions=true"
        JAVA_OPTS="$JAVA_OPTS -d64"
      else
        echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
      fi

  2. 64 ビット JVM で実行するよう、サーバーインスタンスを設定します。

    適切な JVM 設定で -d64 を JVM オプションとして追加します。以下のコマンドは、 default の JVM 設定に追加されたことを表示します。

    /host=HOST_NAME/jvm=default:add-jvm-option(jvm-option="-d64")

第10章 Mail サブシステム

10.1. Mail サブシステムの設定

mail サブシステムを使用すると、JBoss EAP でメールセッションを設定でき、JNDI を使用してこれらのセッションをアプリケーションにインジェクトできます。また、Java EE 7 の @MailSessionDefinition および @MailSessionDefinitions アノテーションを使用する設定もサポートします。

アプリケーションで使用する SMTP サーバーの設定

  1. 以下の CLI コマンドを使用して SMTP サーバーとアウトバウンドソケットバインディングを設定します。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp:add(host=localhost, port=25)
    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp, username=user, password=pass, tls=true)
  2. アプリケーション内で設定されたメールセッションを呼び出します。

    @Resource(lookup="java:jboss/mail/MySession")
    private Session session;

10.2. カスタムトランスポートの設定

POP3 や IMAP などの標準のメールサーバーを使用している場合、メールサーバーには定義できる属性のセットがあります。これらの属性の一部は必須です。最も重要な属性はアウトバウンドメールソケットバインディングの参照である outbound-socket-binding-ref で、ホストアドレスとポート番号で定義されます。

outbound-socket-binding-ref の定義は、負荷分散の目的でホスト設定に複数のホストを使用するユーザーにとっては最も効率的なソリューションではない場合があります。標準の JavaMail は負荷分散のために複数のホストを使用するホスト設定をサポートしません。そのため、複数のホストを使用するこの設定を持つユーザーはカスタムメールトランスポートを実装する必要があります。 カスタムメールトランスポートは outbound-socket-binding-ref を必要とせず、カスタムのホストプロパティー形式を許可します。

カスタムのメールトランスポートは管理 CLI から設定できます。

  1. 新しいメールセッションを追加し、JNDI 名を指定します。

    /subsystem=mail/mail-session=mySession:add(jndi-name=java:jboss/mail/MySession)
  2. アウトバウンドソケットバインディングを追加し、ホストとポートを指定します。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-smtp-binding:add(host=localhost, port=25)
  3. SMTP サーバーを追加し、アウトバウンドソケットバインディング、ユーザー名、およびパスワードを指定します。

    /subsystem=mail/mail-session=mySession/server=smtp:add(outbound-socket-binding-ref=my-smtp-binding, username=user, password=pass, tls=true)
注記

同様の手順で POP3 または IMAP サーバーを設定できます。

POP3 サーバー

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-pop3-binding:add(host=localhost, port=110)
/subsystem=mail/mail-session=mySession/server=pop3:add(outbound-socket-binding-ref=my-pop3-binding, username=user, password=pass)

IMAP サーバー

/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=my-imap-binding:add(host=localhost, port=143)
/subsystem=mail/mail-session=mySession/server=imap:add(outbound-socket-binding-ref=my-imap-binding, username=user, password=pass)

カスタムサーバーを使用するには、アウトバウンドソケットバインディングを指定せずにカスタムメールサーバーを作成します。カスタムメールサーバーのプロパティー定義でホスト情報を指定できます。例を以下に示します。

/subsystem=mail/mail-session=mySession/custom=myCustomServer:add(username=user,password=pass, properties={"host" => "myhost", "my-property" =>"value"})

カスタムプロトコルを定義する場合、ピリオド (.) が含まれるプロパティー名は完全修飾名と見なされ、直接渡されます。my-property など、他の形式は mail.server-name.my-property という形式に変換されます。

以下の XML は、カスタムサーバーが含まれるメール設定の例になります。

<subsystem xmlns="urn:jboss:domain:mail:2.0">
   <mail-session name="default" jndi-name="java:jboss/mail/Default">
        <smtp-server outbound-socket-binding-ref="mail-smtp"/>
   </mail-session>
    <mail-session name="myMail" from="user.name@domain.org" jndi-name="java:/Mail">
        <smtp-server password="password" username="user" tls="true" outbound-socket-binding-ref="mail-smtp"/>
        <pop3-server outbound-socket-binding-ref="mail-pop3"/>
        <imap-server password="password" username="nobody" outbound-socket-binding-ref="mail-imap"/>
    </mail-session>
    <mail-session name="custom" jndi-name="java:jboss/mail/Custom" debug="true">
        <custom-server name="smtp" password="password" username="username">
            <property name="host" value="mail.example.com"/>
        </custom-server>
    </mail-session>
    <mail-session name="custom2" jndi-name="java:jboss/mail/Custom2" debug="true">
        <custom-server name="pop3" outbound-socket-binding-ref="mail-pop3">
            <property name="custom-prop" value="some-custom-prop-value"/>
        </custom-server>
    </mail-session>
</subsystem>

第11章 Web サービスの設定

JBoss EAP では、管理コンソールまたは管理 CLI を使用して webservices システム経由でデプロイされた Web サービスの動作を設定できます。パブリッシュされたエンドポイントアドレスやハンドラーチェーンを設定できます。また、Web サービスのランタイム統計収集を有効にすることもできます。

詳細は、JBoss EAP Developing Web Services ApplicationsConfiguring the Web Services Subsystem を参照してください。

第12章 JBoss EAP を用いたロギング

JBoss EAP は、EAP での内部使用とデプロイされたアプリケーションによる使用の両方で設定可能なロギング機能を提供します。logging サブシステムは JBoss LogManager を基盤とし、JBoss Logging だけでなくサードパーティーアプリケーションのロギングフレームワークを複数サポートします。

12.1. サーバーロギング

12.1.1. サーバーロギング

デフォルトでは、すべての JBoss EAP ログエントリーは server.log ファイルに書き込みされます。このファイルの場所は操作するモードによって異なります。

  • スタンドアロンサーバーの場合: EAP_HOME/standalone/log/server.log
  • 管理対象ドメインの場合: EAP_HOME/domain/servers/SERVER_NAME/log/server.log

このファイルはサーバーログとも呼ばれます。詳細は ルートロガー を参照してください。

12.1.2. 起動時のロギング

起動中に JBoss EAP は Java 環境と各サービスの起動に関する情報をログに記録します。このログは、トラブルシューティングに役に立ちます。デフォルトでは、すべてのログエントリーがサーバーログに書き込まれます。

起動時のロギング設定は logging.properties 設定ファイルに指定されます。この設定ファイルは JBoss EAP の logging サブシステムが起動し、引き継ぐまでアクティブになります。このファイルの場所は操作するモードによって異なります。

  • スタンドアロンサーバーの場合: EAP_HOME/standalone/configuration/logging.properties
  • 管理対象ドメインの場合:

    ドメインコントローラーおよびサーバーごとに 1 つの logging.properties ファイルがあります。

    • ドメインコントローラー: EAP_HOME/domain/configuration/logging.properties
    • サーバー: EAP_HOME/domain/servers/SERVER_NAME/data/logging.properties
警告

logging.propertiesファイルは、直接編集する必要があるユースケース以外では直接編集しないことが推奨されます。直接編集する前に、Red Hat カスタマーポータルでサポートケースを作成することが推奨されます。

logging.propertiesファイルに手動で行った変更は起動時に上書きされます。

12.1.2.1. 起動エラーの表示

JBoss EAP をトラブルシューティングする場合、最初に行うべきことの 1 つは、起動時に発生したエラーをチェックすることです。提供された情報を使用して原因を診断し、解決します。起動時のエラーをトラブルシューティングする際にサポートが必要な場合はサポートケースを作成してください。

起動時のエラーを表示する方法は 2 つあり、どちらも利点があります。1 つは server.log ファイルを確認する方法で、もう 1 つは read-boot-errors管理 CLI コマンドを使用してブートエラーを確認する方法になります。

サーバーログファイルの確認

server.log ファイルを開いて起動中に発生したエラーを確認します。

この方法では、各エラーメッセージおよび関連するメッセージを確認でき、エラーが発生した理由の詳細を知ることができます。また、エラーメッセージをプレーンテキスト形式で表示することもできます。

  1. ファイルビューアーで server.log を開きます。
  2. ファイルの最後に移動します。
  3. 最後の起動シーケンスの開始を示す WFLYSRV0049 メッセージ ID を後方検索します。
  4. ログのその位置から ERROR を前方検索します。各検索一致箇所には、エラーの説明が示され、関連するモジュールがリストされます。

以下は、server.log ログファイルのエラー説明の例です。

2016-03-16 14:32:01,627 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
        at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
        ...
管理 CLI からのブートエラーの読み取り

サーバーが起動しても起動中にエラーが報告された場合、read-boot-errors 管理 CLI コマンドを使用してエラーを確認できます。

この方法では、サーバーのファイルシステムにアクセスする必要がありません。したがって、エラーを監視する担当者がファイルシステムアクセスを持ってない場合に役に立ちます。これは CLI コマンドであるため、スクリプトで使用できます。たとえば、複数の JBoss EAP インスタンスを起動し、起動時に発生したエラーをチェックするスクリプトを記述できます。

次の管理 CLI コマンドを実行します。

/core-service=management:read-boot-errors

起動中に発生したすべてのエラーがリストされます。

{
    "outcome" => "success",
    "result" => [
        {
            "failed-operation" => {
                "operation" => "add",
                "address" => [
                    ("subsystem" => "undertow"),
                    ("server" => "default-server"),
                    ("http-listener" => "default")
                ]
            },
            "failure-description" => "{\"WFLYCTL0080: Failed services\" => {\"jboss.undertow.listener.default\" => \"org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use\"}}",
            "failed-services" => {"jboss.undertow.listener.default" => "org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use"}
        }
        ...
    ]
}

12.1.3. ガベッジコレクションのロギング

ガベッジコレクションロギングは、すべてのガベッジコレクションのアクティビティーをプレーンテキストのログファイルに記録します。これらのログファイルは診断を行うのに便利です。ガベッジコレクションロギングは、IBM の Java Development Kit を除くすべてのサポート対象設定の JBoss EAP スタンドアロンサーバーではデフォルトで有効になっています。

ガベッジコレクションログのデフォルトの場所は EAP_HOME/standalone/log/gc.log.DIGIT.current です。ガベッジコレクションのログは 3 MB ずつに制限され、最大 5 つのファイルがローテーションされます。

トラブルシューティングに便利で、オーバーヘッドは最低限であるため、ガベッジコレクションのロギングを有効にすることが強く推奨されます。しかし、スタンドアロンサーバーのガベッジコレクションのロギングを無効にする場合は、サーバーを起動する前に GC_LOG 変数を false に設定します。

$ export GC_LOG=false
$ EAP_HOME/bin/standalone.sh

12.1.4. デフォルトのログファイルの場所

以下のログファイルは、デフォルトのロギング設定に対して作成されます。デフォルトの設定では、周期的なログハンドラーを使用してサーバーログファイルが書き込まれます。

表12.1 スタンドアロンサーバーのデフォルトログファイル

ログファイル説明

EAP_HOME/standalone/log/server.log

サーバー起動メッセージを含むサーバーログメッセージが含まれます。

EAP_HOME/standalone/log/gc.log.DIGIT.current

ガベッジコレクションの詳細が含まれます。

表12.2 管理対象ドメイン用のデフォルトログファイル

ログファイル説明

EAP_HOME/domain/log/host-controller.log

ホストコントローラーの起動に関連するログメッセージが含まれます。

EAP_HOME/domain/log/process-controller.log

プロセスコントローラーの起動に関連するログメッセージが含まれます。

EAP_HOME/domain/servers/SERVER_NAME/log/server.log

サーバー起動メッセージを含む、名前付きサーバーのログメッセージが含まれます。

12.2. ログファイルの表示

サーバーやアプリケーションログの確認は、診断エラー、パフォーマンスの問題、およびその他の問題に対応するために重要です。サーバーのファイルシステムで直接ログを表示したいユーザーもいますが、直接ファイルシステムにアクセスできないユーザーやグラフィカルインターフェースを使用したいユーザーは JBoss EAP の管理コンソールからログを表示することができます。また、管理 CLI を使用してログを表示することもできます。

管理インターフェースの 1 つからログにアクセスするには、サーバーの jboss.server.log.dir プロパティーによって指定されたディレクトリーに存在し、File、Periodic rotating、Size rotating、または Periodic Size Rotating ログハンドラーとして定義される必要があります。RBAC ロール割り当ても考慮されるため、管理コンソールまたは管理 CLI にログインしたユーザーはアクセス権限を持つログのみ表示できます。

管理コンソールからのログの表示

管理コンソールから直接ログを表示できます。

  • Runtime タブを選択します。
  • Standalone Server を選択します。管理対象ドメインで実行している場合は適切なサーバーを選択します。
  • Log Files を選択し、View をクリックします。

リストからログファイルを選択すると、管理コンソールで直接ログの内容を表示および検索できます。ログファイルをローカルファイルシステムへダウンロードすることもできます。

警告

管理コンソールのログビューアーは、100MB 以上のログファイルなどの非常に大きなログファイルを表示するテキストエディターの代わりとして使用するものではありません。15MB を超えるログファイルを開こうとすると、確認を求められます。管理コンソールで非常に大きなファイルを開くと、ブラウザーがクラッシュする可能性があるため、大きなログファイルは常にローカルにダウンロードし、テキストエディターで開くようにしてください。

管理 CLI からのログの表示

read-log-file コマンドを使用すると管理 CLI からログファイルの内容を取得できます。デフォルトでは、指定されたログファイルの最後の 10 行が表示されます。

/subsystem=logging/log-file=LOG_FILE_NAME:read-log-file
注記

管理ドメインの場合では、このコマンドの前に /host=HOST_NAME/server=SERVER_NAME を追加します。

以下のパラメーターを使用するとログの出力をカスタマイズできます。

encoding
ファイルの読み取りに使用される文字エンコーディング。
lines
ファイルから読み取る行数。-1 はログの行すべてを取得します。デフォルトは 10 です。
skip
読み取る前にスキップする行数。デフォルトは 0 です。
tail
ファイルの最後から読み取るかどうか。デフォルトは true です。

たとえば、以下の管理 CLI コマンドは server.log ログファイルの最初の 5 行を読み取ります。

/subsystem=logging/log-file=server.log:read-log-file(lines=5,tail=false)

このコマンドを実行すると以下が出力されます。

{
    "outcome" => "success",
    "result" => [
        "2016-03-24 08:49:26,612 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final-redhat-1",
        "2016-03-24 08:49:26,788 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final-redhat-1",
        "2016-03-24 08:49:26,863 INFO  [org.jboss.as] (MSC service thread 1-7) WFLYSRV0049: JBoss EAP 7.0.0.GA (WildFly Core 2.0.13.Final-redhat-1) starting",
        "2016-03-24 08:49:27,973 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0039: Creating http management service using socket-binding (management-http)",
        "2016-03-24 08:49:27,994 INFO  [org.xnio] (MSC service thread 1-1) XNIO version 3.3.4.Final-redhat-1"
    ]
}

12.3. Logging サブシステム

JBoss EAP の logging サブシステムは ログカテゴリー および ログハンドラー のシステムを使用して設定されます。ログカテゴリーはキャプチャーするメッセージを定義します。ログハンドラーは、ディスクへの書き込みやコンソールへの送信など、これらのメッセージの対応方法を定義します。

ロギングプロファイル は、一意な名前が付けられたロギング設定の作成や、他のロギング設定に関係しないアプリケーションへの割り当てを可能にします。ロギングプロファイルの設定は、メインの logging サブシステムとほぼ同じです。

12.3.1. ルートロガー

JBoss EAP のルートロガーは、ログカテゴリーによってキャプチャーされないサーバーへ送信されたすべてのログメッセージ (指定のログレベル以上) をキャプチャーします。

デフォルトでは、ルートロガーはコンソールおよび周期ログハンドラーを使用するように設定されます。周期ログハンドラーは、server.log ファイルへ書き込むよう設定されます。このファイルはサーバーログとも呼ばれます。

詳細は ルートロガーの設定を参照してください。

12.3.2. ログカテゴリー

ログカテゴリーは、キャプチャーするログメッセージのセットと、メッセージを処理する 1 つ以上のログハンドラーを定義します。

キャプチャーするログメッセージは、指定された元の Java パッケージとログレベルによって定義されます。そのパッケージのクラスおよびそのログレベル以上のメッセージがログカテゴリーによってキャプチャーされ、指定のログハンドラーに送信されます。

注記

通常、ログカテゴリーは Java パッケージとクラス名ですが、Logger.getLogger(LOGGER_NAME) メソッドによって指定された他の名前を使用できます。

ログカテゴリーは、独自のハンドラーの代わりにルートロガーのログハンドラーを任意で使用することができます。

詳細は ログカテゴリーの設定 を参照してください。

12.3.3. ログハンドラー

ログハンドラーはキャプチャーしたメッセージの記録方法を定義します。使用できるログハンドラーの種類は consolefileperiodicsizeperiodic sizesyslogcustom、および async です。

注記

ログハンドラーは、アクティブにするために少なくとも 1 つのロガーに追加する必要があります。

ログハンドラーの種類
Console
Console ログハンドラーは、ログメッセージをホストオペレーティングシステムの標準出力 (stdout) または標準エラー (stderr) ストリームに書き込みます。これらのメッセージは、JBoss EAP がコマンドラインプロンプトから実行された場合に表示されます。オペレーティングシステムで標準出力または標準エラーストリームをキャプチャーするように設定されていない限り、Console ログハンドラーからのメッセージは保存されません。
File
File ログハンドラーは、ログメッセージを指定のファイルに書き込みます。
Periodic
Periodic ログハンドラーは、指定した時間が経過するまで、ログメッセージを指定ファイルに書き込みます。その時間が経過した後、指定のタイムスタンプが追記されてファイルの名前が変更され、 ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。
Size
Size ログハンドラーは、指定したファイルが指定したサイズに達するまで、そのファイルにログメッセージを書き込みます。ファイルが指定したサイズに達すると、数値の接尾辞が付いて名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。各サイズログハンドラーは、この方式で保管されるファイルの最大数を指定する必要があります。
Periodic Size

Periodic Size ログハンドラーは、ファイルが指定のサイズに達するまで、または指定の期間が経過するまで、ログメッセージを名前の付いたファイルに書き込みます。その後、ファイルの名前が変更され、ハンドラーは元の名前で新規作成されたログファイルに書き込みを継続します。

これは Periodic と Size ログハンドラーの組み合わせで、組み合わされた属性をサポートします。

Syslog
syslog ハンドラーは、リモートのロギングサーバーへメッセージを送信するために使用できます。これにより、複数のアプリケーションが同じサーバーにログメッセージを送信でき、そのサーバーですべてのログメッセージを解析できます。
Custom
カスタムログハンドラーにより、実装された新たなタイプのログハンドラーを設定することができます。カスタムハンドラーは、java.util.logging.Handler を拡張する Java クラスとして実装し、モジュール内に格納する必要があります。Log4J アペンダーをカスタムログハンドラーとして使用することもできます。
Async
Async ログハンドラーは、 単一または複数のログハンドラーを対象とする非同期動作を提供するラッパーログハンドラーです。Async ログハンドラーは、待ち時間が長かったり、ネットワークファイルシステムへのログファイルの書き込みなどにパフォーマンス上の問題があるログハンドラーに対して有用です。

各ログハンドラーの設定に関する詳細は、ログハンドラーの設定 の項を参照してください。

12.3.4. ログレベル

ログレベルとは、ログメッセージの性質と重大度を示す列挙値です。特定のログメッセージのレベルは、そのメッセージを送信するために選択したロギングフレームワークの適切なメソッドを使用して開発者が指定できます。

JBoss EAP は、サポートされるアプリケーションロギングフレームワークによって使用されるすべてのログレベルをサポートします。最も一般的に使用されるログレベルは、ログレベルの低い順に TRACEDEBUGINFOWARNERROR および FATAL となります。

ログレベルはログカテゴリとログハンドラーによって使用され、それらが担当するメッセージを限定します。各ログレベルには、他のログレベルに対して相対的な順番を示す数値が割り当てられています。ログカテゴリーとハンドラーにはログレベルが割り当てられ、そのレベル以上のログメッセージのみを処理します。たとえば、WARN レベルのログハンドラーは、WARNERROR、および FATAL のレベルのメッセージのみを記録します。

サポート対象のログレベル
ログのレベル説明

ALL

Integer.MIN_VALUE

すべてのログメッセージを提供します。

FINEST

300

-

FINER

400

-

TRACE

400

TRACE レベルのログメッセージは、実行中のアプリケーションの状態に関する詳細な情報を提供し、デバッグ時のみキャプチャーされます。

DEBUG

500

DEBUG レベルのログメッセージは、個々の要求またはアプリケーションアクティビティーの進捗状況を示し、通常はデバッグ時のみキャプチャーされます。

FINE

500

-

CONFIG

700

-

INFO

800

INFO レベルのログメッセージはアプリケーションの全体的な進捗状況を示します。多くの場合、アプリケーションの起動、シャットダウン、およびその他の主要なライフサイクルイベントに使用されます。

WARN

900

WARN レベルのログメッセージはエラーではないが、理想的とは見なされない状況を示します。WARN ログメッセージは将来エラーが発生する可能性のある状況を示すことがあります。

WARNING

900

-

ERROR

1000

ERROR レベルのログメッセージは、現在のアクティビティーや要求の完了を妨げる可能性があるが、アプリケーションの実行を妨げない発生済みエラーを示します。

SEVERE

1000

-

FATAL

1100

FATAL レベルのログメッセージは重大なサービス障害やアプリケーションのシャットダウンを引き起こしたり、JBoss EAP のシャットダウンを引き起こしたりする可能性があるイベントを示します。

OFF

Integer.MAX_VALUE

ログメッセージを表示しません。

注記

ALL は、最低ログレベルであり、すべてのログレベルのメッセージを含みます。ロギングの量は最も多くなります。

FATAL は、最大ログレベルであり、そのレベルのメッセージのみを含みます。ロギングの量は最も少なくなります。

12.3.5. ログフォーマッター

ログフォーマッターは、そのハンドラーからのログメッセージの表示を定義します。java.util.logging.Formatter クラスを基にした構文を使用する文字列です。

たとえば、デフォルトの設定はサーバーログへのロギングメッセージのログフォーマッター文字列として %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n を使用します。これにより、以下のようなログメッセージが作成されます。

2016-03-18 15:49:32,075 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

ログフォーマッターの設定に関する詳細は 名前付きパターンフォーマッターの設定 または カスタムログフォーマッターの設定を参照してください。

ログフォーマッター文字列で使用される構文は以下の表を参照してください。

ログフォーマッター構文
記号説明

%c

ロギングイベントのカテゴリー。

%p

ログエントリーのレベル (INFO、DEBUG など)

%P

ログエントリーのローカライズレベル。

%d

現在の日付/時間 (yyyy-MM-dd HH:mm:ss,SSS 形式)。

%r

相対時間 (ログ初期化以降のミリ秒単位の時間)。

%z

日付 (%d) の前に指定する必要があるタイムゾーン。例: %z{GMT}%d{HH:mm:ss,SSS}

%k

ログリソースキー (ログメッセージのローカリゼーションに使用)。

%m

ログメッセージ (例外トレースを含む)。

%s

単純なログメッセージ (例外トレースなし)。

%e

例外スタックトレース (拡張モジュール情報なし)。

%E

例外スタックトレース (拡張モジュール情報あり)。

%t

現在のスレッドの名前。

%n

改行文字。

%C

ログメソッドを呼び出すコードのクラス (低速)。

%F

ログメソッドを呼び出すクラスのファイル名 (低速)。

%l

ログメソッドを呼び出すコードのソースロケーション (低速)。

%L

ログメソッドを呼び出すコードの行番号 (低速)。

%M

ログメソッドを呼び出すコードのメソッド (低速)。

%x

ネスト化診断コンテキスト。

%X

メッセージ診断コンテキスト。

%%

リテラルパーセント (%) 記号 (エスケープ)。

12.3.6. フィルター式

フィルター式は filter-spec 属性を使用して設定され、さまざまな基準に基いてログメッセージを記録するために使用されます。フィルターチェックは、常に未フォーマットの raw メッセージに対して行われます。ロガーまたはハンドラーのフィルターを含めることができますが、ハンドラーに配置されたフィルターよりもロガーフィルターが優先されます。

注記

ルートロガーに対して指定された filter-spec は他のロガーによって継承されません。ハンドラーごとに filter-spec を指定する必要があります。

表12.3 ロギングのフィルター式

フィルター式説明

accept

すべてのログメッセージを許可します。

deny

すべてのログメッセージを拒否します。

not[filter expression]

単一のフィルター式の逆の値を返します。以下に例を示します。

not(match("WFLY"))

all[filter expression]

フィルター式のカンマ区切りリストから連結された値を返します。以下に例を示します。

all(match("WFLY"),match("WELD"))

any[filter expression]

フィルター式のカンマ区切りリストから 1 つの値を返します。以下に例を示します。

any(match("WFLY"),match("WELD"))

levelChange[level]

指定のレベルでログレコードを更新します。以下の例を示します。

levelChange(WARN)

levels[levels]

レベルのカンマ区切りリストにあるレベルの 1 つでログメッセージをフィルターします。以下に例を示します。

levels(DEBUG,INFO,WARN,ERROR)

levelRange[minLevel,maxLevel]

指定されたレベル範囲内でログメッセージをフィルターします。[ および ] は、含まれるレベルを示すために使用されます。 ( および ) は除外されるレベルを示すために使用されます。以下に例を示します。

  • levelRange[INFO,ERROR]

    • 最小レベルは INFO 以上で、最大レベルは ERROR 以下でなければなりません。
  • levelRange[DEBUG,ERROR)

    • 最小レベルは DEBUG 以上で、最大レベルは ERROR 未満でなければなりません。

match["pattern"]

提供される正規表現を使用してログメッセージをフィルターします。以下に例を示します。

match("WFLY\d+")

substitute["pattern","replacement value"]

最初にパターン (最初の引数) と一致した値を代替テキスト (2 番目の引数) に置き換えるフィルター。以下に例を示します。

substitute("WFLY","EAP")

substituteAll["pattern","replacement value"]

パターン (最初の引数) と一致したすべての値を代替テキスト (2 番目の引数) に置き換えるフィルター。以下に例を示します。

substituteAll("WFLY","EAP")

注記

管理 CLI を使用してフィルター式を設定する場合、値が文字列として正しく処理されるよう、フィルターテキストのコンマと引用符を必ずエスケープしてください。コンマと引用符の前にバックスラッシュ (\) を付け、式全体を引用符で囲む必要があります。以下は substituteAll("WFLY","YLFW") を適切にエスケープした例になります。

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")

12.3.7. 暗黙的なロギングの依存関係

JBoss EAP の logging サブシステムはデフォルトで暗黙的なロギング API 依存関係をデプロイメントに追加します。add-logging-api-dependencies 属性を使用すると、この暗黙的な依存関係をデプロイメントに追加するかどうかを制御できます。この属性はデフォルトでは true に設定されています。

管理 CLI を使用して add-logging-api-dependencies 属性を false に設定すると、暗黙的なロギング API 依存関係がデプロイメントに追加されないようになります。

/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)

logging サブシステムの暗黙的な依存関係については、JBoss EAP 開発ガイド暗黙的なモジュール依存関係 の項を参照してください。

12.4. ログカテゴリーの設定

ここでは、管理 CLI を使用したログカテゴリーの設定方法を説明します。管理コンソールを使用してログカテゴリーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択し、 Log Categories タブを選択します。

ログカテゴリーを設定するために実行する主なタスクは次のとおりです。

重要

ロギングプロファイルにログカテゴリーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

ログカテゴリーの追加

ログカテゴリー名は、元の Java パッケージによって定義されます。ログレベルなどのその他の設定に準拠する限り、そのパッケージのクラスからのメッセージはキャプチャーされます。

/subsystem=logging/logger=LOG_CATEGORY:add

ログカテゴリーの設定

必要性に応じて、以下のログカテゴリー属性を 1 つ以上設定する必要がある場合があります。利用できるログカテゴリー属性の完全リストと説明は、 ログカテゴリーの属性を参照してください。

  • ログレベルを設定します。

    ログカテゴリーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=level,value=LEVEL)
  • このカテゴリーがルートロガーのログハンドラーを使用するかどうかを設定します。

    デフォルトでは、ログカテゴリーは独自のハンドラーと、ルートロガーのハンドラーを使用します。ログカテゴリーが割り当てられたハンドラーのみを使用する必要がある場合は use-parent-handlers 属性を false に設定します。

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=use-parent-handlers,value=USE_PARENT_HANDLERS)
  • フィルター式を設定します。

    ログカテゴリーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を"not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

ハンドラーの割り当て

ログハンドラーをログカテゴリーに割り当てます。

/subsystem=logging/logger=LOG_CATEGORY:add-handler(name=LOG_HANDLER_NAME)

ログカテゴリーの削除

ログカテゴリーは remove 操作で削除できます。

/subsystem=logging/logger=LOG_CATEGORY:remove

12.5. ログハンドラーの設定

ログハンドラーはキャプチャーされたログメッセージが記録される方法を定義します。以下の項を参照して必要なログハンドラーのタイプを設定してください。

12.5.1. Console ログハンドラーの設定

ここでは、管理 CLI を使用した Console ログハンドラーの設定方法を説明します。管理コンソールを使用して Console ログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Console を選択します。

Console ログハンドラーを設定するために実行する主なタスクは次のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Console ログハンドラーの追加
/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:add
Console ログハンドラーの設定

必要性に応じて、以下の Console ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Console ログハンドラー属性の完全リストと説明は、Console ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • ターゲットを設定します。

    ハンドラーのターゲットを設定します。値は System.outSystem.errconsole のいずれかになります。デフォルト System.out です。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=target,value=TARGET)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • 自動フラッシュを設定します。

    毎回書き込みの後に自動的にフラッシュするかどうかを設定します。デフォルトの値は true です。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

Console ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Console ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=CONSOLE_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Console ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=CONSOLE_HANDLER_NAME)
Console ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:remove

12.5.2. File ログハンドラーの設定

ここでは、管理 CLI を使用した File ログハンドラーの設定方法を説明します。管理コンソールを使用して File ログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから File を選択します。

File ログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

File ログハンドラーの追加

File ログハンドラーを追加する場合、 path および relative-to 属性で構成される file 属性を使用してファイルパスを指定する必要があります。path 属性を使用して名前を含むログのファイルパスを設定します (例: my-log.log)。オプションで relative-to 属性を使用すると path が名前付きのパスと相対的になるよう設定できます (例: jboss.server.log.dir)。

/subsystem=logging/file-handler=FILE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
File ログハンドラーの設定

必要性に応じて、以下の File ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる File ログハンドラー属性の完全リストと説明は、File ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 追加動作を設定します。

    デフォルトでは、サーバーが再起動されたときに JBoss EAP はログメッセージを同じファイルに追加します。サーバーの再起動時にファイルを上書きする場合は append 属性を false に設定します。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • 自動フラッシュを設定します。

    毎回書き込みの後に自動的にフラッシュするかどうかを設定します。デフォルトの値は true です。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

File ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは File ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=FILE_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに File ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=FILE_HANDLER_NAME)
File ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/file-handler=FILE_HANDLER_NAME:remove

12.5.3. Periodic Rotating ログハンドラーの設定

ここでは、管理 CLI を使用した Periodic Rotating ログハンドラーの設定方法を説明します。管理コンソールを使用して Periodic ログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Periodic を選択します。

周期ログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Periodic ログハンドラーの追加

Periodic ログハンドラーを追加する場合、 path および relative-to 属性で構成される file 属性を使用してファイルパスを指定する必要があります。path 属性を使用して名前を含むログのファイルパスを設定します (例: my-log.log)。オプションで relative-to 属性を使用すると path が名前付きのパスと相対的になるよう設定できます (例: jboss.server.log.dir)。

また、suffix 属性を使用してローテーションしたログの接尾辞を設定する必要もあります。これは、 .yyyy-MM-dd-HH のように java.text.SimpleDateFormat が認識できる形式でなければなりません。ローテーションの周期はこの接尾辞を基に自動的に算出されます。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
Periodic ログハンドラーの設定

必要性に応じて、以下の Periodic ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Periodic ログハンドラー属性の完全リストと説明は、Periodic ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 追加動作を設定します。

    デフォルトでは、サーバーが再起動されたときに JBoss EAP はログメッセージを同じファイルに追加します。サーバーの再起動時にファイルを上書きする場合は append 属性を false に設定します。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • 自動フラッシュを設定します。

    毎回書き込みの後に自動的にフラッシュするかどうかを設定します。デフォルトの値は true です。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

Periodic ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Periodic ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Periodic ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_HANDLER_NAME)
Periodic ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:remove

12.5.4. Size Rotating ログハンドラーの設定

ここでは、管理 CLI を使用した Size Rotating ログハンドラーの設定方法を説明します。管理コンソールを使用して Size ログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Size を選択します。

Size ログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Size ログハンドラーの追加

Size ログハンドラーを追加する場合、 path および relative-to 属性で構成される file 属性を使用してファイルパスを指定する必要があります。path 属性を使用して名前を含むログのファイルパスを設定します (例: my-log.log)。オプションで relative-to 属性を使用すると path が名前付きのパスと相対的になるよう設定できます (例: jboss.server.log.dir)。

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
Size ログハンドラーの設定

必要性に応じて、以下の Size ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Size ログハンドラー属性の完全リストと説明は、Size ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • ローテーションされるログの接尾辞を設定します。

    接尾辞の文字列を設定します。これは .yyyy-MM-dd-HH のように java.text.SimpleDateFormat が認識できる形式でなければなりません。ローテーションの周期はこの接尾辞を基に自動的に算出されます。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=suffix, value=SUFFIX)
  • ローテーションサイズを設定します。

    ファイルの最大サイズを設定します。この値を超えるとファイルがローテーションされます。デフォルトは 2 メガバイトを意味する 2m です。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 保持するバックアップログの最大数の設定

    保持するバックアップの数を設定します。デフォルトは 1 です。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 起動時にログをローテーションするかどうかを設定します。

    デフォルトでは、サーバーの再起動時に新しいログファイルは作成されません。サーバーの再起動時にログをローテーションするには、true に設定します。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 追加動作を設定します。

    デフォルトでは、サーバーが再起動されたときに JBoss EAP はログメッセージを同じファイルに追加します。サーバーの再起動時にファイルを上書きする場合は append 属性を false に設定します。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • 自動フラッシュを設定します。

    毎回書き込みの後に自動的にフラッシュするかどうかを設定します。デフォルトの値は true です。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

Size ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Size ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=SIZE_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Size ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=SIZE_HANDLER_NAME)
Size ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:remove

12.5.5. Periodic Size Rotating ログハンドラーの設定

ここでは、管理 CLI を使用した Periodic Size ログハンドラーの設定方法を説明します。管理コンソールを使用して Periodic Size ログハンドラーを設定することもできます。管理コンソールを使用する場合は Logging サブシステムに移動し、Handler タブを選択して、左側のメニューから Periodic Size を選択します。

Periodic Size ログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Periodic Size ログハンドラーの追加

Periodic Size ログハンドラーを追加する場合、 path および relative-to 属性で構成される file 属性を使用してファイルパスを指定する必要があります。path 属性を使用して名前を含むログのファイルパスを設定します (例: my-log.log)。オプションで relative-to 属性を使用すると path が名前付きのパスと相対的になるよう設定できます (例: jboss.server.log.dir)。

また、suffix 属性を使用してローテーションしたログの接尾辞を設定する必要もあります。これは、 .yyyy-MM-dd-HH のように java.text.SimpleDateFormat が認識できる形式でなければなりません。ローテーションの周期はこの接尾辞を基に自動的に算出されます。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
Periodic Size ログハンドラーの設定

必要性に応じて、以下の Periodic Size ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Periodic Size ログハンドラー属性の完全リストと説明は、Periodic Size ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • ローテーションサイズを設定します。

    ファイルの最大サイズを設定します。この値を超えるとファイルがローテーションされます。デフォルトは 2 メガバイトを意味する 2m です。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 保持するバックアップログの最大数の設定

    保持するバックアップの数を設定します。デフォルトは 1 です。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 起動時にログをローテーションするかどうかを設定します。

    デフォルトでは、サーバーの再起動時に新しいログファイルは作成されません。サーバーの再起動時にログをローテーションするには、true に設定します。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 追加動作を設定します。

    デフォルトでは、サーバーが再起動されたときに JBoss EAP はログメッセージを同じファイルに追加します。サーバーの再起動時にファイルを上書きする場合は append 属性を false に設定します。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • 自動フラッシュを設定します。

    毎回書き込みの後に自動的にフラッシュするかどうかを設定します。デフォルトの値は true です。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

Periodic Size ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Periodic Size ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Periodic Size ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)
Periodic Size ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:remove

12.5.6. Syslog ハンドラーの設定

ここでは、Syslog プロトコル (RFC-3164 または RFC-5424) をサポートするリモートロギングサーバーへのメッセージの送信に使用される、管理 CLI を使用した Syslog ハンドラーの設定方法を説明します。管理コンソールを使用して Syslog ハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Syslog を選択します。

Syslog ハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Syslog ハンドラーの追加
/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:add
Syslog ハンドラーの設定

必要性に応じて、以下の Syslog ハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Syslog ハンドラー属性の完全リストと説明は、Syslog ハンドラー属性を参照してください。

  • ハンドラーのログレベルを設定します。デフォルトのレベルは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • ログに記録するアプリケーションの名前を設定します。デフォルトの名前は java です。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=app-name,value=APP_NAME)
  • Syslog サーバーのアドレスを設定します。デフォルトのアドレスは localhost です。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=server-address,value=SERVER_ADDRESS)
  • syslog サーバーのポートを設定します。デフォルトのポートは 514 です。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=port,value=PORT)
  • RFC 仕様の定義どおりに syslog 形式を設定します。デフォルトの形式は RFC5424 です。

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=syslog-format,value=SYSLOG_FORMAT)
Syslog ハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Syslog ハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=SYSLOG_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Syslog ハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=SYSLOG_HANDLER_NAME)
Syslog ハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:remove

12.5.7. カスタムログハンドラーの設定

ここでは、管理 CLI を使用したカスタムログハンドラーの設定方法を説明します。管理コンソールを使用してカスタムログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Custom を選択します。

カスタムログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

カスタムログハンドラーの追加

カスタムログハンドラーを追加する場合、ハンドラーの Java クラスとハンドラーが含まれる JBoss EAP モジュールを指定する必要があります。クラスは java.util.logging.Handler を拡張する必要があります。

注記

すでに、カスタムロガーが含まれるモジュールが作成 されている必要があります。作成されていないと、このコマンドの実行に失敗します。

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:add(class=CLASS_NAME,module=MODULE_NAME)
カスタムログハンドラーの設定

必要性に応じて、以下のカスタムログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できるカスタムログハンドラー属性の完全リストと説明は、カスタムログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • プロパティーを設定します。

    ログハンドラーに必要なプロパティーを設定します。setter メソッドを使用してプロパティーにアクセスできなければなりません。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  • エンコーディングを設定します。

    ハンドラーのエンコーディングを設定します (例: utf-8)。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • ログフォーマッターを設定します。

    ハンドラーのフォーマッター文字列を設定します。たとえば、デフォルトのフォーマット文字列は %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n です。必ず FORMAT の値を引用符で囲んでください。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注記

    保存されたフォーマッター を参照する場合は named-formatter 属性を使用します。

  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

カスタムログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは、カスタムログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=CUSTOM_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーにカスタムログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=CUSTOM_HANDLER_NAME)
カスタムログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーまたは Async ログハンドラーに割り当てられている場合は削除できません。

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:remove

12.5.8. Async ログハンドラーの設定

ここでは、管理 CLI を使用した Async ログハンドラーの設定方法を説明します。管理コンソールを使用して Async ログハンドラーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Handler タブを選択して、左側のメニューから Async を選択します。

Async ログハンドラーを設定するために実行する主なタスクは以下のとおりです。

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

Async ログハンドラーの追加

Async ログハンドラーを追加するときにキューの長さを指定する必要があります。これは、キューに保持できるログリクエストの最大数のことです。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add(queue-length=QUEUE_LENGTH)
サブハンドラーの追加

1 つ以上のハンドラーを Async ログハンドラーのサブハンドラーとして追加できます。ハンドラーが設定に存在しないと、このコマンドの実行に失敗するため注意してください。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add-handler(name=HANDLER_NAME)
Async ログハンドラーの設定

必要性に応じて、以下の Async ログハンドラー属性を 1 つ以上設定する必要がある場合があります。利用できる Async ログハンドラー属性の完全リストと説明は、Async ログハンドラー属性を参照してください。

  • ログレベルを設定します。

    ハンドラーの適切なログレベルを設定します。デフォルトは ALL です。利用できるオプションは、ログレベルを参照してください。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • オーバーフローアクションを設定します。

    オーバーフローが発生したときに行うアクションを設定します。デフォルトの値は BLOCK で、キューが満杯になるとスレッドがブロックされます。この値を DISCARD に変更すると、キューが満杯になったときにログメッセージが破棄されます。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=overflow-action,value=OVERFLOW_ACTION)
  • フィルター式を設定します。

    ハンドラーのログメッセージをフィルターするために式を設定します。必ずコンマと引用符はエスケープし、引用符で囲むようにしてください。たとえば、以下の置換可能な FILTER_EXPRESSION 変数では、not(match("WFLY")) のフィルター式を "not(match(\"WFLY\"))" に置き換える必要があります。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    利用可能なフィルター式の詳細は フィルター式 の項を参照してください。

Async ログハンドラーのロガーへの割り当て

ログハンドラーをアクティブにするには、ロガーに割り当てる必要があります。

以下の管理 CLI コマンドは Async ログハンドラーをルートロガーに割り当てます。

/subsystem=logging/root-logger=ROOT:add-handler(name=ASYNC_HANDLER_NAME)

以下の管理 CLI コマンドは、名前が CATEGORY によって指定されるロガーに Async ログハンドラーを割り当てます。

/subsystem=logging/logger=CATEGORY:add-handler(name=ASYNC_HANDLER_NAME)
Async ログハンドラーの削除

ログハンドラーは remove 操作で削除できます。ログハンドラーが現在ロガーに割り当てられている場合は削除できません。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:remove

12.6. ルートロガーの設定

ルートロガーは、ログカテゴリーによってキャプチャーされないサーバーへ送信されたすべてのログメッセージ (指定のログレベル以上) をキャプチャーします。

ここでは、管理 CLI を使用したルートロガーの設定方法を説明します。管理コンソールを使用してルートロガーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択し、 Root Logger タブを選択します。

ルートロガーの設定

重要

ロギングプロファイルにログハンドラーを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

  1. ログハンドラーをルートロガーへ割り当てます。

    ログハンドラーを追加します。

    /subsystem=logging/root-logger=ROOT:add-handler(name=LOG_HANDLER_NAME)

    ログハンドラーの削除

    /subsystem=logging/root-logger=ROOT:remove-handler(name=LOG_HANDLER_NAME)
  2. ログレベルを設定します。

    /subsystem=logging/root-logger=ROOT:write-attribute(name=level,value=LEVEL)

使用できるルートロガー属性とその説明の完全リストは、 ルートロガー属性 を参照してください。

12.7. ログフォーマッターの設定

ログフォーマッターはそのハンドラーからログメッセージの表示を定義します。 名前付きパターンフォーマッターまたはカスタムログフォーマッターを設定できます。

12.7.1. 名前付きパターンフォーマッターの設定

ログハンドラーすべてで使用できる名前付きパターンフォーマッターを作成して、ログメッセージをフォーマットすることができます。

ここでは、管理 CLI を使用したログフォーマッターの設定方法を説明します。管理コンソールを使用してログフォーマッターを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Formatter タブを選択して、左側のメニューから Pattern を選択します。

重要

ロギングプロファイルにログフォーマッターを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

名前付きフォーマッターの作成

フォーマッターを定義するとき、ログメッセージのフォーマットに使用するパターン文字列を指定します。パターン構文の詳細は、ログフォーマッターを参照してください。

/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:add(pattern=PATTERN_STRING)

また、カラーマップを定義してログレベルごとに色を割り当てることもできます。形式は LEVEL:COLOR のカンマ区切りリストです。

  • 有効なレベル: finestfinerfineconfigtracedebuginfowarningwarnerrorfatalsevere
  • 有効な色: blackgreenredyellowbluemagentacyanwhitebrightblackbrightredbrightgreenbrightbluebrightyellowbrightmagentabrightcyanbrightwhite
/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:write-attribute(name=color-map,value="LEVEL:COLOR,LEVEL:COLOR")
名前付きフォーマッターのログハンドラーへの割り当て

以下の管理 CLI コマンドは、Periodic Rotating ファイルハンドラーによって使用されるパターンフォーマッターを割り当てます。

/subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter,value=PATTERN_FORMATTER_NAME)

12.7.2. カスタムログフォーマッターの設定

ログハンドラーすべてで使用できるカスタムログフォーマッターを作成して、ログメッセージをフォーマットすることができます。

ここでは、管理 CLI を使用したカスタムログフォーマッターの設定方法を説明します。管理コンソールを使用してログフォーマッターを設定することもできます。管理コンソールを使用する場合は Configuration タブで Logging サブシステムを選択します。Formatter タブを選択して、左側のメニューから Custom を選択します。

カスタムログフォーマッターの設定
重要

ロギングプロファイルにログフォーマッターを設定する場合、 コマンドの最初は /subsystem=logging/ ではなく /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ になります。

さらに、管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

  1. カスタムログフォーマッターを追加します。

    カスタムログフォーマッターを追加する場合、フォーマッターの Java クラスとフォーマッターが含まれる JBoss EAP モジュールを指定する必要があります。クラスは java.util.logging.Formatter を拡張する必要があります。

    注記

    すでに、カスタムフォーマッターが含まれるモジュールが作成されている必要があります。作成されていないと、このコマンドの実行に失敗します。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:add(class=CLASS_NAME, module=MODULE_NAME)
  2. ログフォーマッターに必要なプロパティーを設定します。

    setter メソッドを使用してプロパティーにアクセスできなければなりません。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  3. カスタムフォーマッターをログハンドラーに割り当てます。

    以下の管理 CLI コマンドは、Periodic Rotating ファイルハンドラーによって使用されるカスタムフォーマッターを割り当てます。

    /subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter, value=CUSTOM_FORMATTER_NAME)
カスタム XML フォーマッターの例

以下の例は、カスタム XML フォーマッターを設定します。 org.jboss.logmanager モジュールに提供される java.util.logging.XMLFormatter クラスを使用し、Console ログハンドラーに割り当てます。

/subsystem=logging/custom-formatter=custom-xml-formatter:add(class=java.util.logging.XMLFormatter, module=org.jboss.logmanager)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=custom-xml-formatter)

このフォーマッターを使用するログメッセージは以下のようにフォーマットされます。

<record>
  <date>2016-03-23T12:58:13</date>
  <millis>1458752293091</millis>
  <sequence>93963</sequence>
  <logger>org.jboss.as</logger>
  <level>INFO</level>
  <class>org.jboss.as.server.BootstrapListener</class>
  <method>logAdminConsole</method>
  <thread>22</thread>
  <message>WFLYSRV0051: Admin console listening on http://%s:%d</message>
  <param>127.0.0.1</param>
  <param>9990</param>
</record>

12.8. アプリケーションのロギング

アプリケーションのロギングは、JBoss EAP の logging サブシステムを使用するか、デプロイメントごとに設定できます。

ログメッセージの取得に JBoss EAP ログカテゴリーおよびハンドラーを使用する方法は Logging サブシステム を参照してください。

サポートされるアプリケーションロギングフレームワークやデプロイメントごとのロギング設定など、アプリケーションロギングの詳細は JBoss EAP 開発ガイドロギングの章を参照してください。

12.8.1. デプロイメントごとのロギング

デプロイメントごとのロギングを使用すると、開発者はアプリケーションのロギング設定を事前に設定できます。アプリケーションがデプロイされると、定義された設定に従ってロギングが開始されます。この設定によって作成されたログファイルにはアプリケーションの動作に関する情報のみが含まれます。

注記

デプロイメントごとのロギング設定が行われない場合、すべてのアプリケーションとサーバーには logging サブシステムの設定が使用されます。

この方法では、システム全体のロギングを使用する利点と欠点があります。利点は、JBoss EAP インスタンスの管理者がサーバーロギング以外のロギングを設定する必要がないことです。欠点は、デプロイメントごとのロギング設定はサーバーの起動時に読み取り専用であるため、実行時に変更できないことです。

アプリケーションでデプロイメントごとのロギングを使用する手順については、JBoss EAP 開発ガイドデプロイメントごとのロギングをアプリケーションに追加を参照してください。

12.8.1.1. デプロイメントごとのロギングの無効化

以下の方法の 1 つを使用するとデプロイメントごとのロギングを無効にできます。

  • use-deployment-logging-config 属性を false に設定します。

    use-deployment-logging-config 属性は、デプロイメントがデプロイメントごとにロギングに対してスキャンされるかどうかを制御します。デフォルトは true です。デプロイメントごとのロギングを無効にするにはこの属性を false に設定します。

    /subsystem=logging:write-attribute(name=use-deployment-logging-config,value=false)
  • jboss-deployment-structure.xml ファイルを使用して logging サブシステムを除外します。

    手順については、JBoss EAP 開発ガイドサブシステムをデプロイメントから除外を参照してください。

12.8.2. ロギングプロファイル

ロギングプロファイルは、デプロイされたアプリケーションに割り当てることができる独立したロギング設定のセットです。通常の logging サブシステム同様にロギングプロファイルはハンドラー、カテゴリー、およびルートロガーを定義できますが、他のプロファイルや主要な logging サブシステムを参照できません。設定が容易である点でロギングプロファイルは logging サブシステムと似ています。

ロギングプロファイルを使用すると、管理者は他のロギング設定に影響を与えずに 1 つ以上のアプリケーションに固有なロギング設定を作成することができます。各プロファイルはサーバー設定で定義されるため、影響を受けるアプリケーションを再デプロイせずに、ロギング設定を変更できます。ただし、ロギングプロファイルは管理コンソールを使用して設定できません。

各ロギングプロファイルには以下の項目を設定できます。

  • 一意な名前 (必須)
  • 任意の数のログハンドラー
  • 任意の数のログカテゴリー
  • 最大 1 つのルートロガー

アプリケーションでは Logging-Profile 属性を使用して、MANIFEST.MF ファイルで使用するロギングプロファイルを指定できます。

12.8.2.1. ロギングプロファイルの設定

ロギングプロファイルは、ログハンドラー、カテゴリー、およびルートロガーで設定できます。ロギングプロファイルはメインの logging サブシステムとほぼ同じ構文を使用します。メインの logging サブシステムとロギングプロファイルの設定には 2 つの違いがあります。

  • ロート設定パスは /subsystem=logging/logging-profile=NAME です。
  • ロギングプロファイルに他のロギングプロファイルを追加できません。
ロギングプロファイルの作成および設定

以下の手順は、管理 CLI を使用してロギングプロファイルを作成し、ファイルハンドラーとロガーカテゴリーを設定します。

  1. ロギングプロファイルを作成します。

    /subsystem=logging/logging-profile=PROFILE_NAME:add
  2. ファイルハンドラーを作成します。

    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:add(file={path=>"LOG_NAME.log", "relative-to"=>"jboss.server.log.dir"})
    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:write-attribute(name="level", value="DEBUG")
  3. ロガーカテゴリーを作成します。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add(level=TRACE)
  4. ファイルハンドラーをカテゴリーに割り当てます。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add-handler(name="FILE_HANDLER_NAME")

この後、アプリケーションによって使用されるロギングプロファイルを MANIFEST.MF ファイルに設定できます。詳細は、JBoss EAP 開発ガイドアプリケーションでのロギングプロファイルの指定を参照してください。

12.8.2.2. ロギングプロファイル設定の例

この例は、ロギングプロファイルとそれを使用するアプリケーションの設定を表しています。管理 CLI コマンド、結果となる XML、およびアプリケーションの MANIFEST.MF が示されています。

ロギングプロファイルの例には次のような特徴があります。

  • 名前は accounts-app-profile です。
  • ログカテゴリーは com.company.accounts.ejbs です。
  • ログレベルは TRACE です。
  • ログハンドラーは、ejb-trace.log ファイルを使用するファイルハンドラーです。

管理 CLI セッション

/subsystem=logging/logging-profile=accounts-app-profile:add

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:add(file={path=>"ejb-trace.log", "relative-to"=>"jboss.server.log.dir"})

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:write-attribute(name="level", value="DEBUG")

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add(level=TRACE)

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add-handler(name="ejb-trace-file")

XML 設定

<logging-profiles>
   <logging-profile name="accounts-app-profile">
      <file-handler name="ejb-trace-file">
         <level name="DEBUG"/>
         <file relative-to="jboss.server.log.dir" path="ejb-trace.log"/>
      </file-handler>
      <logger category="com.company.accounts.ejbs">
         <level name="TRACE"/>
         <handlers>
            <handler name="ejb-trace-file"/>
         </handlers>
      </logger>
   </logging-profile>
</logging-profiles>

アプリケーションの MANIFEST.MF ファイル

Manifest-Version: 1.0
Logging-Profile: accounts-app-profile

12.8.3. デプロイメントロギング設定の表示

以下の管理 CLI コマンドを使用して特定のデプロイメントのロギング設定に関する情報を取得します。

/deployment=DEPLOYMENT_NAME/subsystem=logging/configuration=CONFIG:read-resource

デプロイメントのロギング configuration の値には、以下の 3 つの値の 1 つを指定します。

  • デプロイメントが logging サブシステムを使用する場合は default を指定します。これにより、logging サブシステムの設定が出力されます。
  • デプロイメントが logging サブシステムに定義されている ロギングプロファイルを使用する場合は profile-PROFILE_NAME を指定します。これにより、ロギングプロファイルの設定が出力されます。
  • 使用される設定ファイルへのパス (例: myear.ear/META-INF/logging.properties) を指定します。

たとえば、以下の管理 CLI コマンドは、特定のデプロイメントによって使用される MYPROFILE ロギングプロファイルの設定を表示します。

/deployment=mydeployment.war/subsystem=logging/configuration=profile-MYPROFILE:read-resource(recursive=true,include-runtime=true)

以下の情報が出力されます。

{
    "outcome" => "success",
    "result" => {
        "error-manager" => undefined,
        "filter" => undefined,
        "formatter" => {
            "MYFORMATTER" => {
                "class-name" => "org.jboss.logmanager.formatters.PatternFormatter",
                "module" => undefined,
                "properties" => {"pattern" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"}
            }
        },
        "handler" => {
            "MYPERIODIC" => {
                "class-name" => "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler",
                "encoding" => undefined,
                "error-manager" => undefined,
                "filter" => undefined,
                "formatter" => "MYFORMATTER",
                "handlers" => [],
                "level" => "ALL",
                "module" => undefined,
                "properties" => {
                    "append" => "true",
                    "autoFlush" => "true",
                    "enabled" => "true",
                    "suffix" => ".yyyy-MM-dd",
                    "fileName" => "EAP_HOME/standalone/log/deployment.log"
                }
            }
        },
        "logger" => {"MYCATEGORY" => {
            "filter" => undefined,
            "handlers" => [],
            "level" => "DEBUG",
            "use-parent-handlers" => true
        }},
        "pojo" => undefined
    }
}

また、再帰的な read-resource 操作を使用して、ロギング設定やデプロイメントに関する他の情報を取得することができます。

/deployment=DEPLOYMENT_NAME/subsystem=logging:read-resource(include-runtime=true, recursive=true)

第13章 データソース管理

13.1. JBoss EAP データソース

JDBC

JDBC API は、Java アプリケーションがデータベースにアクセスする方法を定義する基準です。アプリケーションは JDBC ドライバーを参照するデータソースを設定します。その後、データベースではなくドライバーに対してアプリケーションを記述できます。ドライバーはコードをデータベース言語に変換します。そのため、適切なドライバーがインストールされていればアプリケーションをサポートされるデータベースで使用できます。

詳細は JDBC 4.0 specification を参照してください。

サポートされているデータベース

JBoss EAP 7 によってサポートされる JDBC 対応データベースのリストは、JBoss EAP 7 でサポートされる構成を参照してください。

データソースタイプ

リソースの一般的なタイプには、データソースXA データソースの 2 つのタイプがあります。

非 XA データソース
トランザクションを使用しないアプリケーション、または単一のデータベースでトランザクションを使用するアプリケーションに使用されます。
XA データソース
複数のデータベースまたはある XA トランザクションの一部として他の XA リソースを使用するアプリケーションによって使用されます。XA データソースを使用すると追加のオーバーヘッドが発生します。

JBoss EAP 管理インターフェースを使用してデータソースを作成するときに、使用するデータソースのタイプを指定します。

ExampleDS データソース

JBoss EAP には、データソースの定義方法を実証するために提供されるデータソース設定例 (ExampleDS) が含まれています。このデータソースは、 H2 データベースを使用します。H2 データベースはライトウェイトなリレーショナルデータベース管理システムで、アプリケーションを迅速に構築できる開発者向けの機能を提供します。

警告

ExampleDS データソースと H2 データベースは本番環境で使用しないでください。これは、アプリケーションのテストおよび構築に必要なすべての標準をサポートする非常に小さい自己完結型のデータソースであり、本番稼働用として堅牢またはスケーラブルではありません。

13.2. JDBC ドライバー

JBoss EAP でアプリケーションが使用するデータソースを定義する前に、最初に適切な JDBC ドライバーをインストールする必要があります。

13.2.1. コアモジュールとしての JDBC ドライバーのインストール

以下の手順に従うと、管理 CLI を使用して JDBC ドライバーをコアモジュールとしてインストールすることができます。

  1. JDBC ドライバーをダウンロードします。

    データベースのベンダーから適切な JDBC ドライバーをダウンロードします。一般的なデータベースの JDBC ドライバーをダウンロードできる場所については、JDBC ドライバーのダウンロードできる場所を参照してください。

    JDBC ドライバーの JAR ファイルが ZIP または TAR アーカイブ内に含まれている場合は、必ずそのアーカイブを展開してください。

  2. JBoss EAP サーバーを起動します。
  3. 管理 CLI を起動しますが、稼働しているインスタンスへの接続に --connect または -c 引数を使用しないでください。

    $ EAP_HOME/bin/jboss-cli.sh
  4. module add 管理 CLI コマンドを使用して新しいコアモジュールを追加します。

    module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES

    たとえば、以下のコマンドは MySQL JDBC ドライバーモジュールを追加します。

    module add --name=com.mysql --resources=/path/to/mysql-connector-java-5.1.36-bin.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

    module --help を実行すると、このコマンドを使用したモジュールの追加および削除の詳細を表示できます。

  5. connect 管理 CLI コマンドを使用して稼働中のインスタンスに接続します。

    connect
  6. JDBC ドライバーを登録します。管理対象ドメインを実行している場合は、コマンドの前に /profile=PROFILE_NAME を付けてください。

    /subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
    注記

    driver-class-name パラメーターは、JDBC ドライバー jar が /META-INF/services/java.sql.Driver ファイルで複数の jar を定義する場合のみ必要です。

    たとえば、MySQL 5.1.36 JDBC ドライバー JAR の /META-INF/services/java.sql.Driver ファイルは、以下の 2 つのクラスを定義します。

    • com.mysql.jdbc.Driver
    • com.mysql.fabric.jdbc.FabricMySQLDriver

    この場合、 driver-class-name=com.mysql.jdbc.Driver で渡します。

    たとえば、以下のコマンドは MySQL JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)

アプリケーションのデータソースが JDBC ドライバーを参照できる状態になります。

13.2.2. JDBC ドライバーの JAR デプロイメントとしてのインストール

管理 CLI または管理コンソールを使用して JDBC ドライバーを JAR デプロイメントとしてインストールできます。JDBC 4 に対応するドライバーは、自動的に認識され、デプロイメント時に JDBC ドライバーとしてインストールされます。

以下の手順は、管理 CLI を使用した JDBC ドライバーのインストール方法になります。

注記

JDBC ドライバーをコアモジュールとしてインストールする方法が推奨されます。

  1. JDBC ドライバーをダウンロードします。

    データベースのベンダーから適切な JDBC ドライバーをダウンロードします。一般的なデータベースの JDBC ドライバーをダウンロードできる場所については、JDBC ドライバーのダウンロードできる場所を参照してください。

    JDBC ドライバーの JAR ファイルが ZIP または TAR アーカイブ内に含まれている場合は、必ずそのアーカイブを展開してください。

  2. JDBC ドライバーが JDBC 4 に対応していない場合は、JDBC ドライバー JAR を JDBC 4 対応に更新の手順を参照してください。
  3. JAR を JBoss EAP にデプロイします。

    deploy PATH_TO_JDBC_JAR
    注記

    管理対象ドメインでは、適切なサーバーグループを指定します。

    たとえば、以下のコマンドは MySQL JDBC ドライバーをデプロイします。

    deploy /path/to/mysql-connector-java-5.1.36-bin.jar

    JBoss EAP サーバーログにメッセージが表示され、データソースを定義するときに使用されるデプロイされたドライバーの名前が表示されます。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1

アプリケーションのデータソースが JDBC ドライバーを参照できる状態になります。

JDBC ドライバー JAR を JDBC 4 対応に更新

JDBC ドライバー JAR が JDBC 4 に対応していない場合、以下の手順に従ってデプロイ可能にすることができます。

  1. 空の一時ディレクトリーを作成します。
  2. META-INF サブディレクトリーを作成します。
  3. META-INF/services サブディレクトリーを作成します。
  4. META-INF/services/java.sql.Driver ファイルを作成し、JDBC ドライバーの完全修飾クラス名を示す 1 行を追加します。

    たとえば、MySQL JDBC ドライバーでは以下の行を追加します。

    com.mysql.jdbc.Driver
  5. JAR コマンドラインツールを使用して、この新しいファイルを JAR に追加します。

    jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver

13.2.3. JDBC ドライバーをダウンロードできる場所

下表は、JBoss EAP で使用される一般的なデータベースの JDBC ドライバーをダウンロードできる場所を示しています。

注記

これらのリンク先は他社の Web サイトであるため、Red Hat は管理しておらず、積極的に監視も行っていません。ご使用のデータベースの最新ドライバーについては、データベースベンダーのドキュメントおよび Web サイトを確認してください。

表13.1 JDBC ドライバーをダウンロードできる場所

ベンダーダウンロード場所

MySQL

http://www.mysql.com/products/connector/

PostgreSQL

http://jdbc.postgresql.org/

Oracle

http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

IBM

http://www-306.ibm.com/software/data/db2/java/

Sybase

jConnect JDBC ドライバーは、SAP ASE インストールの SDK の一部です。現在、このドライバーのみをダウンロードできるサイトはありません。

Microsoft

http://msdn.microsoft.com/data/jdbc/

13.2.4. ベンダー固有クラスへのアクセス

場合によっては、アプリケーションが JDBC API の一部ではないベンダー固有の機能を使用する必要があることがあります。このような場合、そのアプリケーションで依存関係を宣言してベンダー固有の API にアクセスすることができます。

警告

これは、高度な手順であり、JDBC API に含まれない機能を必要とするアプリケーションのみこれを実装します。

重要

このプロセスは、再認証メカニズムを使用し、ベンダー固有のクラスにアクセスする場合に必要です。

MANIFEST.MF ファイルまたは jboss-deployment-structure.xml ファイルを使用するとアプリケーションの依存関係を定義できます。

JDBC ドライバーをコアモジュールとしてインストールしていない場合は、コアモジュールとしての JDBC ドライバーのインストールを参照してインストールしてください。

MANIFEST.MF ファイルの使用
  1. アプリケーションの META-INF/MANIFEST.MF ファイルを編集します。
  2. Dependencies 行を追加し、モジュール名を指定します。

    たとえば、以下の行は com.mysql モジュールを依存関係として宣言します。

    Dependencies: com.mysql
jboss-deployment-structure.xml ファイルの使用
  1. アプリケーションの META-INF/ または WEB-INF/ フォルダーで jboss-deployment-structure.xml というファイルを作成します。
  2. dependencies 要素を使用してモジュールを指定します。

    たとえば、以下の jboss-deployment-structure.xml ファイル例は com.mysql モジュールを依存関係として宣言します。

    <jboss-deployment-structure>
      <deployment>
        <dependencies>
          <module name="com.mysql"/>
        </dependencies>
      </deployment>
    </jboss-deployment-structure>

以下のコード例は MySQL API にアクセスします。

import java.sql.Connection;
import org.jboss.jca.adapters.jdbc.WrappedConnection;

...

Connection c = ds.getConnection();
WrappedConnection wc = (WrappedConnection)c;
com.mysql.jdbc.Connection mc = wc.getUnderlyingConnection();
重要

接続は IronJacamar コンテナーによって制御されるため、ベンダー固有の API ガイドラインに従ってください。

13.3. データソースの作成

データソースは管理コンソールまたは管理 CLI を使用して作成できます。

JBoss EAP 7 では、enabled 属性などのデータソース属性値を式で使用することができます。設定で式を使用する場合の詳細は、プロパティーの置換の項を参照してください。

13.3.1. 非 XA データソースの作成

非 XA データソースは data-source add 管理 CLI コマンドを使用して定義できます。管理コンソールを使用して非 XA データソースを定義することもできます。管理コンソールを使用する場合は ConfigurationSubsystemsDatasourcesNon-XA と選択し、追加 をクリックして Datasource の作成ウィザードを開きます。

以下の手順で、管理 CLI を使用した非 XA データソースの定義方法を説明します。

  1. JDBC ドライバーをコアモジュールとしてインストールおよび登録していない場合は、コアモジュールとしての JDBC ドライバーのインストールを参照してインストールと登録を行ってください。
  2. 適切な引数の値を指定し、data-source add コマンドを使用してデータソースを定義します。

    data-source add --name=DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME  --connection-url=CONNECTION_URL
    注記

    管理対象ドメインでは、--profile=PROFILE_NAME 引数を指定する必要があります。

    これらのパラメーター値については、以下のデータソースパラメーターの項を参照してください。

詳細な例は、サポート対象データベースのデータソース設定例を参照してください。

データソースのパラメーター
jndi-name
データソースの JNDI 名は、java:jboss/datasources/ExampleDS のように java:/ または java:jboss/ で始まる必要があります。
driver-name

ドライバー名の値は、JDBC ドライバーがコアモジュールまたは JAR デプロイメントとしてインストールされたかによって異なります。

  1. コアモジュールでは、ドライバー名の値は登録時に指定した JDBC ドライバーの名前になります。
  2. JAR デプロイメントでは、/META-INF/services/java.sql.Driver ファイルに 1 つのクラスのみがある場合はドライバー名が JAR の名前になります。複数のクラスがリストされている場合は値が JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION (例: mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1) になります。

    また、JDBC JAR がデプロイされると JBoss EAP サーバーログにドライバー名がリストされます。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1
connection-url
サポートされるデータベースの接続 URL 形式の詳細は、 データソース接続 URL のリストを参照してください。

利用可能なすべてのデータソースパラメーターの完全リストは、 データソースパラメーターの項を参照してください。

13.3.2. XA データソースの作成

XA データソースは xa-data-source add 管理 CLI コマンドを使用して定義できます。管理コンソールを使用して XA データソースを定義することもできます。管理コンソールを使用する場合は ConfigurationSubsystemsDatasourcesXA と選択し、追加 をクリックして XA Datasource の作成ウィザードを開きます。

以下の手順で、管理 CLI を使用した XA データソースの定義方法を説明します。

注記

管理対象ドメインでは、使用するプロファイルを指定する必要があります。管理 CLI コマンドの形式に応じて、コマンドの前に /profile=PROFILE_NAME を付けるか、 --profile=PROFILE_NAME 引数に渡します。

  1. JDBC ドライバーをコアモジュールとしてインストールおよび登録していない場合は、コアモジュールとしての JDBC ドライバーのインストールを参照してインストールと登録を行ってください。
  2. 適切な引数の値を指定し、xa-data-source add コマンドを使用してデータソースを定義します。

    xa-data-source add --name=XA_DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME --xa-datasource-class=XA_DATASOURCE_CLASS --xa-datasource-properties={"ServerName"=>"HOSTNAME","DatabaseName"=>"DATABASE_NAME"}

    これらのパラメーター値については、以下のデータソースパラメーターの項を参照してください。

  3. XA データソースプロパティー を設定します。

    XA データソースを定義するときに最低でも 1 つの XA データソースプロパティーが必要になります。XA データソースプロパティーがないと、前のステップでデータソースを追加するときにエラーが発生します。XA データソースを定義するときに設定しなかったプロパティーは後で個別に設定することができます。

    1. サーバー名を設定します。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=ServerName:add(value=HOSTNAME)
    2. データベース名を設定します。

      /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=DatabaseName:add(value=DATABASE_NAME)

詳細な例は、サポート対象データベースのデータソース設定例を参照してください。

データソースのパラメーター
jndi-name
データソースの JNDI 名は、java:jboss/datasources/ExampleDS のように java:/ または java:jboss/ で始まる必要があります。
driver-name

ドライバー名の値は、JDBC ドライバーがコアモジュールまたは JAR デプロイメントとしてインストールされたかによって異なります。

  1. コアモジュールでは、ドライバー名の値は登録時に指定した JDBC ドライバーの名前になります。
  2. JAR デプロイメントでは、/META-INF/services/java.sql.Driver ファイルに 1 つのクラスのみがある場合はドライバー名が JAR の名前になります。複数のクラスがリストされている場合は値が JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION (例: mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1) になります。

    また、JDBC JAR がデプロイされると JBoss EAP サーバーログにドライバー名がリストされます。

    WFLYJCA0018: Started Driver service with driver-name = mysql-connector-java-5.1.36-bin.jar_com.mysql.jdbc.Driver_5_1
xa-datasource-class
JDBC ドライバーの javax.sql.XADataSource クラスの実装に対する XA データソースクラスを指定します。
xa-datasource-properties
XA データソースを定義するときに最低でも 1 つの XA データソースプロパティーが必要になります。XA データソースプロパティーがないと、追加するときにエラーが発生します。XA データソースの定義後にプロパティーを追加することもできます。

利用可能なすべてのデータソースパラメーターの完全リストは、 データソースパラメーターの項を参照してください。

13.4. データソースの編集

データソースは、管理コンソールまたは管理 CLI を使用して設定できます。

JBoss EAP 7 では、enabled 属性などのデータソース属性値を式で使用することができます。設定で式を使用する場合の詳細は、プロパティーの置換の項を参照してください。

13.4.1. 非 XA データソースの編集

非 XA データソースは data-source 管理 CLI コマンドを使用して更新できます。また、管理コンソールの datasources サブシステムからデータソース属性を更新することもできます。

注記

非 XA データソースは JTA トランザクションと統合できます。データソースを JTA と統合する場合、必ず jta パラメーターを true に設定してください。

データソースの設定は、以下の管理 CLI コマンドを使用して更新できます。

data-source --name=DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
注記

管理対象ドメインでは、--profile=PROFILE_NAME 引数を指定する必要があります。

変更を反映するのにサーバーのリロードが必要になる場合があります。

13.4.2. XA データソースの編集

XA データソースは xa-data-source 管理 CLI コマンドを使用して更新できます。また、管理コンソールの datasources サブシステムからデータソース属性を更新することもできます。

  • XA データソースの設定は、以下の管理 CLI コマンドを使用して更新できます。

    xa-data-source --name=XA_DATASOURCE_NAME --ATTRIBUTE_NAME=ATTRIBUTE_VALUE
    注記

    管理対象ドメインでは、--profile=PROFILE_NAME 引数を指定する必要があります。

  • 以下の管理 CLI コマンドを使用すると XA データソースプロパティーを追加できます。

    /subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=PROPERTY:add(value=VALUE)
    注記

    管理対象ドメインでは、このコマンドの前に /profile=PROFILE_NAME を追加する必要があります。

変更を反映するのにサーバーのリロードが必要になる場合があります。

13.5. データソースの削除

データソースは管理コンソールまたは管理 CLI を使用して削除できます。

13.5.1. 非 XA データソースの削除

非 XA データソースは data-source remove 管理 CLI コマンドを使用して削除できます。管理コンソールの datasources サブシステムからデータソースを削除することもできます。

data-source remove --name=DATASOURCE_NAME
注記

管理対象ドメインでは、--profile=PROFILE_NAME 引数を指定する必要があります。

データソースの削除後にサーバーのリロードが必要になります。

13.5.2. XA データソースの削除

XA データソースは xa-data-source remove 管理 CLI コマンドを使用して削除できます。管理コンソールの datasources サブシステムから XA データソースを削除することもできます。

xa-data-source remove --name=XA_DATASOURCE_NAME
注記

管理対象ドメインでは、--profile=PROFILE_NAME 引数を指定する必要があります。

XA データソースの削除後にサーバーのリロードが必要になります。

13.6. データソース接続のテスト

データソースが JBoss EAP に追加されたら、接続をテストして正しく設定されたことを検証できます。データソースの接続は管理 CLI コマンドを使用してテストするか、datasources サブシステムの Test Connection ボタンを使用して管理コンソールからテストします。

以下の管理 CLI コマンドを実行すると、データソースの接続をテストできます。

/subsystem=datasources/data-source=DATASOURCE_NAME:test-connection-in-pool
注記

管理対象ドメインでは、このコマンドの前に /host=HOSTNAME/server=SERVER_NAME を追加する必要があります。

13.7. XA データソースのリカバリー

XA データソースは、XA グローバルトランザクションに参加できるデータソースです。XA グローバルトランザクションはトランザクションマネージャーによって調整され、1 つのトランザクションで複数のリソースにまたがる可能性があります。参加者の 1 つが変更のコミットに失敗した場合、他の参加者がトランザクションをアボートし、トランザクション発生前の状態にリストアします。これにより、一貫性を保持し、データの損失や破損を防ぎます。

XA リカバリーは、リソースやトランザクションの参加者がクラッシュしたり利用できない状態になっても、トランザクションの影響を受けるすべてのリソースが更新またはロールバックされるようにするプロセスです。XA リカバリーはユーザーが関与せずに行われます。

各 XA リソースにはその設定に関連するリカバリーモジュールが必要になります。リカバリーモジュールは、リカバリーの実行中に実行されるコードです。JBoss EAP は JDBC XA リソースのリカバリーモジュールを自動的に登録します。カスタムのリカバリーコードを実装する場合は XA データソースでカスタムモジュールを登録できます。リカバリーモジュールは com.arjuna.ats.jta.recovery.XAResourceRecovery クラスを拡張する必要があります。

13.7.1. XA リカバリーの設定

ほとんどの JDBC では、リカバリーモジュールがリソースに自動的に関連付けられます。この場合は、リカバリーモジュールがリソースに接続してリカバリーを実行することを許可するオプションのみを設定する必要があります。

以下の表は、XA リカバリーに固有する XA データソースパラメーターを表しています。これらの設定属性はデータソースの作成中または作成後に設定でき、管理コンソールまたは管理 CLI を使用して設定できます。XA データソースの設定については、 XA データソースの編集を参照してください。

表13.2 XA リカバリーのデータソースパラメーター

属性説明

recovery-username

リカバリーでリソースに接続するために使用するユーザー名。指定しないと、データソースのセキュリティー設定が使用されます。

recovery-password

リカバリーでリソースに接続するために使用するパスワード。指定しないと、データソースのセキュリティー設定が使用されます。

recovery-security-domain

リカバリーでリソースに接続するために使用するセキュリティードメイン。

recovery-plugin-class-name

カスタムのリカバリーモジュールを使用する必要がある場合は、この属性をモジュールの完全修飾クラス名に設定します。モジュールはクラス com.arjuna.ats.jta.recovery.XAResourceRecovery を拡張する必要があります。

recovery-plugin-properties

プロパティーを設定する必要があるカスタムのリカバリーモジュールを使用する場合は、この属性をプロパティーに対するコンマ区切りの KEY=VALUE ペアのリストに設定します。

XA リカバリーの無効化

複数の XA データソースが同じ物理データベースに接続する場合、通常 XA リカバリーは XA データソースの 1 つのみに設定する必要があります。

以下の管理 CLI コマンドを使用して XA データソースのリカバリーを無効にします。

/subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME:write-attribute(name=no-recovery,value=true)

13.7.2. ベンダー固有の XA リカバリー

ベンダー固有の設定

一部のデータベースは、JBoss EAP トランザクションマネージャーによって管理される XA トランザクションに対応するために特定の設定が必要になります。詳細な最新情報については、データベースベンダーの資料を参照してください。

MySQL
特別な設定は必要ありません。詳細は MySQL のドキュメントを参照してください。
PostgreSQL および Postgres Plus Advanced Server
PostgreSQL による XA トランザクションの処理を可能にするには、max_prepared_transactions 設定パラメーターを 0よりも大きい値または max_connections 以上の値に変更します。
Oracle

必ず Oracle ユーザー (USER) がリカバリーに必要なテーブルにアクセスできるようにしてください。

GRANT SELECT ON sys.dba_pending_transactions TO USER;
GRANT SELECT ON sys.pending_trans$ TO USER;
GRANT SELECT ON sys.dba_2pc_pending TO USER;
GRANT EXECUTE ON sys.dbms_xa TO USER;

Oracle ユーザーに適切なパーミッションがないと、以下のようなエラーが表示される可能性があります。

WARN  [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery  got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR
Microsoft SQL Server
詳細は、http://msdn.microsoft.com/en-us/library/aa342335.aspx を含む Microsoft SQL Server のドキュメントを参照してください。
IBM DB2
特別な設定は必要ありません。詳細は IBM DB2 のドキュメントを参照してください。
Sybase

Sybase は、XA トランザクションがデータベース上で有効であることを想定します。XA トランザクションはデータベース設定が正しくないと動作しません。enable xact coordination パラメーター は、Adaptive Server トランザクションコーディネーションサービスを有効または無効にします。このパラメーターを有効にすると、リモート Adaptive Server データのアップデートが、確実に元のトラザクションでコミットまたはロールバックされるようになります。

トラザクションコーディネーションを有効にするには、以下を使用します。

sp_configure 'enable xact coordination', 1
MariaDB
特別な設定は必要ありません。詳細は MariaDB のドキュメントを参照してください。
既知の問題

ここで取り上げる既知の問題は、JBoss EAP 7 でサポートされる特定のデータベースおよび JDBC ドライバーバージョンの XA トランザクションの処理に関する問題になります。サポートされるデータベースの最新情報は、JBoss Enterprise Application Platform (EAP) 7 でサポートされる構成を参照してください。

MySQL
MySQL は XA トランザクションを完全に処理できません。クライアントと MySQL の接続が切断されると、トランザクションに関する情報がすべて失われます。詳細は MySQL bug を参照してください。この問題は MuSQL 5.7 で修正されました。
PostgreSQL および Postgres Plus Advanced Server

2 フェーズコミット (2PC) のコミットフェーズ中にネットワークの障害が発生すると、JDBC ドライバーによって XAER_RMERR XAException エラーコードが返されます。このエラーは、トランザクションマネージャーでリカバリー不可能な重大なイベントが発生したことを示しますが、トランザクションはデータベース側で in-doubt 状態を維持し、ネットワーク接続の回復後に簡単に修正できます。適切な戻りコードは XAER_RMFAIL または XAER_RETRY になります。誤ったエラーコードにより、トランザクションが JBoss EAP 側で Heuristic 状態のままになり、データベースでロックが保持されるため、手動の介入が必要になります。詳細は PostgreSQL のバグを参照してください。

1 フェーズコミットの最適化が使用されたときに接続の障害が発生した場合、JDBC ドライバーは XAER_RMERR を返しますが、適切な戻りコードは XAER_RMFAIL になります。そのため、1 フェーズコミット中にデータベースがデータをコミットし、同時に接続が切断されると、クライアントにはトラザクションがロールバックされたと伝えられるため、データの不整合が発生する場合があります。

Postgres Plus JDBC ドライバーは、Postgres Plus Server に存在するすべての準備済みトランザクションの XID を返すため、XID が属するデータベースを判断する方法がありません。JBoss EAP で複数のデータソースを同じデータベースに定義すると、in-doubt トランザクションリカバリーが誤ったアカウントで実行される可能性があります。この場合、リカバリーに失敗します。

Oracle

一部のユーザークレデンシャルで設定されたデータソースを使用してリカバリーマネージャーがリカバリーを呼び出すと、JDBC ドライバーはデータベースインスタンスのすべてのユーザーに属する XID を返します。JDBC ドライバーは他のユーザーに属する XID をリカバリーしようとするため、例外 ORA-24774: cannot switch to specified transaction が発生します。

この問題を回避するには、リカバリーデータソース設定でクレデンシャルが使用されるユーザーに FORCE ANY TRANSACTION 権限を付与します。特権の設定に関する詳細は http://docs.oracle.com/database/121/ADMIN/ds_txnman.htm#ADMIN12259 を参照してください。

Microsoft SQL Server

2 フェーズコミット (2PC) のコミットフェーズ中にネットワークの障害が発生すると、JDBC ドライバーによって XAER_RMERR XAException エラーコードが返されます。このエラーは、トランザクションマネージャーでリカバリー不可能な重大なイベントが発生したことを示しますが、トランザクションはデータベース側で in-doubt 状態を維持し、ネットワーク接続の回復後に簡単に修正できます。適切な戻りコードは XAER_RMFAIL または XAER_RETRY になります。誤ったエラーコードにより、トランザクションが JBoss EAP 側で Heuristic 状態のままになり、データベースでロックが保持されるため、手動の介入が必要になります。詳細は Microsoft SQL Server の問題レポートを参照してください。

1 フェーズコミットの最適化が使用されたときに接続の障害が発生した場合、JDBC ドライバーは XAER_RMERR を返しますが、適切な戻りコードは XAER_RMFAIL になります。そのため、1 フェーズコミット中にデータベースがデータをコミットし、同時に接続が切断されると、クライアントにはトラザクションがロールバックされたと伝えられるため、データの不整合が発生する場合があります。

IBM DB2
1 フェーズコミット中に接続の障害が発生した場合、JDBC ドライバーは XAER_RMERR を返しますが、適切な戻りコードは XAER_RMFAIL です。そのため、1 フェーズコミット中にデータベースがデータをコミットし、同時に接続が切断されると、クライアントにはトラザクションがロールバックされたと伝えられるため、データの不整合が発生する場合があります。
Sybase

2 フェーズコミット (2PC) のコミットフェーズ中にネットワークの障害が発生すると、JDBC ドライバーによって XAER_RMERR XAException エラーコードが返されます。このエラーは、トランザクションマネージャーでリカバリー不可能な重大なイベントが発生したことを示しますが、トランザクションはデータベース側で in-doubt 状態を維持し、ネットワーク接続の回復後に簡単に修正できます。適切な戻りコードは XAER_RMFAIL または XAER_RETRY になります。誤ったエラーコードにより、トランザクションが JBoss EAP 側で Heuristic 状態のままになり、データベースでロックが保持されるため、手動の介入が必要になります。

1 フェーズコミットの最適化が使用されたときに接続の障害が発生した場合、JDBC ドライバーは XAER_RMERR を返しますが、適切な戻りコードは XAER_RMFAIL になります。そのため、1 フェーズコミット中にデータベースがデータをコミットし、同時に接続が切断されると、クライアントにはトラザクションがロールバックされたと伝えられるため、データの不整合が発生する場合があります。

MariaDB
MariaDB は XA トランザクションを完全に処理できません。クライアントと MariaDB の接続が切断されると、トランザクションに関する情報がすべて失われます。

13.8. データベース接続の検証

データベースのメンテナンス、ネットワークの問題、またはその他の障害により、JBoss EAP からデータベースへの接続が失われることがあります。このような状況から回復するために、データソースのデータベース接続検証を有効にすることができます。

データベース接続検証を設定するには、検証タイミングメソッド (検証が実行されるタイミング)、検証メカニズム (検証の実行方法)、および例外ソーター (例外の対処方法) を指定します。

  1. 検証タイミングメソッドを 1 つ選択します。

    validate-on-match

    validate-on-match オプションが true に設定されている場合は、データ接続が、次の手順で指定された検証メカニズムを使用して接続プールからチェックアウトされるたびに検証されます。

    接続が有効でない場合は、警告がログに書き込まれ、プール内の次の接続が取得されます。このプロセスは、有効な接続が見つかるまで続行します。プール内の各接続を繰り返し処理しない場合は、use-fast-fail オプションを使用できます。有効な接続がプールにない場合は、新しい接続が作成されます。接続の作成に失敗すると、例外が要求元アプリケーションに返されます。

    この設定により、最も早いリカバリーが実現されますが、データベースへの負荷が最も大きくなります。ただし、これは、パフォーマンスを気にする必要がない場合は最も安全な方法です。

    background-validation

    background-validation オプションを true に設定すると、使用前にバックグラウンドスレッドで接続が周期的に検証されます。検証の頻度は background-validation-millis プロパティーによって指定されます。background-validation-millisのデフォルト値は 0 で、無効になっています。

    以下を考慮して background-validation-millis プロパティーの値を決定してください。

    • この値は idle-timeout-minutes 設定とは違う値に設定してください。
    • 値が小さいほどプールの検証頻度が高くなり、より迅速に無効な接続がプールから削除されます。
    • 値が小さいほど使用されるデータベースリソースが多くなります。値が大きいほど接続検証チェックの頻度が低くなりますが、無効な接続が検出されない期間が長くなります。
    注記

    これらのオプションは相互排他的です。validate-on-matchtrue に設定された場合は、background-validationfalseに設定する必要があります。 background-validation が true に設定された場合は validate-on-matchfalse に設定する必要があります。

  2. 検証メカニズムを 1 つ選択します。

    valid-connection-checker-class-name

    検証メカニズムとして valid-connection-checker-class-name を使用することが推奨されます。これは、使用中のデータベースの接続を検証するために使用される接続チェッカークラスを指定します。JBoss EAP は以下の接続チェッカーを提供します。

    • org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLReplicationValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.novendor.JDBC4ValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    • org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker
    check-valid-connection-sql

    check-valid-connection-sql を使用して、接続の検証に使用する SQL ステートメントを提供します。

    以下は、Oracle の接続を検証するために使用する SQL ステートメントの例になります。

    select 1 from dual

    以下は、MySQL または PostgreSQL の接続を検証するために使用する SQL ステートメントの例になります。

    select 1
  3. 例外ソータークラス名を設定します。

    例外が致命的とマークされた場合、接続はトランザクションに参加していてもすぐに閉じられます。致命的な接続例外を適切に検出およびクリーンアップするには、例外ソータークラスオプションを使用します。データソースタイプに適切な JBoss EAP 例外ソーターを選択します。

    • org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.informix.InformixExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.novendor.NullExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
    • org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter

13.9. データソースセキュリティー

データソースセキュリティーは、データソース接続のパスワードを暗号化したり分かりにくくすることを言います。これらのパスワードはプレーンテキストで設定ファイルに保存できますが、セキュリティーリスクが高くなります。

データソースセキュリティーのソリューションには、セキュリティードメインまたはパスワード vault のいずれかを使用することが推奨されます。以下にそれぞれの例を示します。

セキュリティードメインを使用したデータソースのセキュア化

データソースのセキュリティードメインが定義されます。

 <security-domain name="DsRealm" cache-type="default">
  <authentication>
    <login-module code="ConfiguredIdentity" flag="required">
      <module-option name="userName" value="sa"/>
      <module-option name="principal" value="sa"/>
      <module-option name="password" value="sa"/>
    </login-module>
  </authentication>
</security-domain>
注記

セキュリティードメインが複数のデータソースと使用される場合は、セキュリティードメインでキャッシュを無効にする必要があります。キャッシュを無効にするには、 cache-type 属性の値を none に設定するか、この属性を削除します。キャッシュが必要な場合は、各データソースに個別のセキュリティードメインを使用する必要があります。

DsRealm セキュリティードメインはデータソース設定によって参照されます。

<datasources>
  <datasource jndi-name="java:jboss/datasources/securityDs"
    pool-name="securityDs">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
      <driver>h2</driver>
      <new-connection-sql>select current_user()</new-connection-sql>
      <security>
        <security-domain>DsRealm</security-domain>
      </security>
    </datasource>
</datasources>

セキュリティードメインの使用に関する詳細は、How to Configure Identity Management を参照してください。

パスワード Vault を使用したデータソースのセキュア化

<security>
  <user-name>admin</user-name>
  <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>

パスワード Vault の使用に関する詳細は How To Configure Server Security を参照してください。

13.10. データソースの統計

定義したデータソースのコアプールおよび JDBC ランタイム統計を表示できます。利用可能な統計の詳細リストは、データソース統計を参照してください。

データソース統計の有効化

デフォルトでは、データソース統計は有効になっていません。以下の管理 CLI コマンドは、ExampleDS データソースの統計の取得を有効にします。

注記

管理対象ドメインでは、これらのコマンドの前に /profile=PROFILE_NAME を追加してください。

/subsystem=datasources/data-source=ExampleDS/statistics=pool:write-attribute(name=statistics-enabled,value=true)
/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:write-attribute(name=statistics-enabled,value=true)

データソース統計の表示

データソース統計はすべて管理 CLI から取得できます。これらの統計のサブセットは管理コンソールの Runtime タブで確認できます。

以下の管理 CLI コマンドは、ExampleDS データソースのコアプールの統計を取得します。

注記

管理対象ドメインでは、これらのコマンドの前に /host=HOST_NAME/server=SERVER_NAME を追加します。

/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => 1,
        "AvailableCount" => 20,
        "AverageBlockingTime" => 0L,
        "AverageCreationTime" => 122L,
        "AverageGetTime" => 128L,
        "AveragePoolTime" => 0L,
        "AverageUsageTime" => 0L,
        "BlockingFailureCount" => 0,
        "CreatedCount" => 1,
        "DestroyedCount" => 0,
        "IdleCount" => 1,
        ...
}

以下の管理 CLI コマンドは、ExampleDS データソースの JDBC の統計を取得します。

/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "PreparedStatementCacheAccessCount" => 0L,
        "PreparedStatementCacheAddCount" => 0L,
        "PreparedStatementCacheCurrentSize" => 0,
        "PreparedStatementCacheDeleteCount" => 0L,
        "PreparedStatementCacheHitCount" => 0L,
        "PreparedStatementCacheMissCount" => 0L,
        "statistics-enabled" => true
    }
}
注記

統計はラインタイム情報であるため、必ず include-runtime=true 引数を指定してください。

13.11. キャパシティーポリシー

JBoss EAP は、データソースを含む JCA デプロイメントのキャパシティーポリシーの定義をサポートします。キャパシティーポリシーは、プールの物理接続の作成方法 (キャパシティーのインクリメント) および破棄方法 (キャパシティーのデクリメント) を定義します。デフォルトのポリシーは、キャパシティーのインクリメントではリクエストごとに 1 つの接続を作成し、キャパシティーのデクリメントではアイドル状態のタイムアウトがスケジュールされたときにタイムアウトするとすべての接続が破棄されるよう設定されます。

キャパシティーポリシーを設定するには、キャパシティーインクリメンタークラスやキャパシティーデクリメンタークラスを指定する必要があります。

コマンド例

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-incrementer-class, value="org.jboss.jca.core.connectionmanager.pool.capacity.SizeIncrementer")

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-decrementer-class, value="org.jboss.jca.core.connectionmanager.pool.capacity.SizeDecrementer")

指定のキャパシティーインクリメンターまたはデクリメンタークラスにプロパティーを設定することもできます。

コマンド例

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-incrementer-properties.size, value=2)

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=capacity-decrementer-properties.size, value=2)

MaxPoolSize インクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.MaxPoolSizeIncrementer

MaxPoolSize インクリメンターポリシーは、リクエストごとにプールを最大サイズまでインクリメントします。このポリシーは、常時利用できる接続を最大数維持したい場合に便利です。

Size インクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.SizeIncrementer

Size インクリメンターポリシーは、リクエストごとにプールを指定の接続数インクリメントします。このポリシーは、次のリクエストにも接続が必要であることを予想する場合に追加の接続数でインクリメントしたい場合に便利です。

表13.3 Size ポリシープロパティー

名前説明

Size

作成される接続数

注記

これは、 size の値が 1 のデフォルトインクリメントポリシーです。

Watermark インクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkIncrementer

Watermark インクリメンターポリシーは、リクエストごとにプールを指定の接続数までインクリメントします。このポリシーは、常時プールに指定数の接続を維持したい場合に便利です。

表13.4 Watermark ポリシープロパティー

名前説明

Watermark

接続数のウォーターマークレベル

MinPoolSize デクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.MinPoolSizeDecrementer

MinPoolSize デクリメンターポリシーは、リクエストごとにのプールを最小サイズまでデクリメントします。このポリシーは、各アイドルタイムアウトリクエストの後に接続の数を制限したい場合に便利です。プールは先入れ先出し (FIFO) で操作します。

Size デクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.SizeDecrementer

Size デクリメンターポリシーは、アイドルタイムアウトリクエストごとにプールを指定の接続数デクリメントします。

表13.5 Size ポリシープロパティー

名前説明

Size

破棄されるべき接続の数

このポリシーは、プールの使用度が徐々に減少することが予想されるためアイドルタイムアウトリクエストごとの追加接続数をデクリメントしたい場合に便利です。

プールは先入れ先出し (FIFO) で操作します。

TimedOut デクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.TimedOutDecrementer

TimedOut デクリメンターポリシーは、アイドルタイムアウトリクエストごとにタイムアウトした接続をすべてプールから削除します。プールは先入れ後出し (FILO) で操作します。

注記

このポリシーはデフォルトのデクリメントポリシーです。

TimedOut/FIFO デクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.TimedOutFIFODecrementer

TimedOutFIFO デクリメンターポリシーは、アイドルタイムアウトリクエストごとにタイムアウトした接続をすべてプールから削除します。プールは先入れ先出し (FIFO) で操作します。

Watermark デクリメンターポリシー

クラス名: org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkDecrementer

Watermark デクリメンターポリシーは、アイドルタイムアウトリクエストごとにプールを指定の接続数までデクリメントします。このポリシーは、常時プールに指定数の接続を維持したい場合に便利です。プールは先入れ先出し (FIFO) で操作します。

表13.6 Watermark ポリシープロパティー

名前説明

Watermark

接続数のウォーターマークレベル

13.12. エンリストメントトレース

XAResource インスタンスのエンリストメント中に発生するエラーを特定できるようにするため、エンリストメントトレースが記録されます。パフォーマンスオーバーヘッドが生じるため、状況によってはエンリストメントトレースを無効にした方がよい場合があります。

データソースのエンリストメントトレースの記録を無効にするには、管理 CLI を使用して enlistment-trace 属性を false に設定します。

非 XA データソースのエンリストメントトレースを無効にします。

data-source --name=DATASOURCE_NAME --enlistment-trace=false

XA データソースのエンリストメントトレースを無効にします。

xa-data-source --name=XA_DATASOURCE_NAME --enlistment-trace=false
警告

エンリストメントトレースを無効にすると、トランザクションエンリストメント中にエラーを追跡するのが難しくなります。

13.13. データソース設定例

13.13.1. MySQL データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる MySQL データソースの設定例になります。

MySQL データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS">
    <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
    <driver>mysql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MySQL JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. MySQL JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.mysql --resources=/path/to/mysql-connector-java-5.1.36-bin.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. MySQL JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)
  3. MySQL データソースを追加します。

    data-source add --name=MySqlDS --jndi-name=java:jboss/MySqlDS --driver-name=mysql --connection-url=jdbc:mysql://localhost:3306/jbossdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

13.13.2. MySQL XA データソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる MySQL XA データソースの設定例になります。

MySQL XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/MySqlXADS" pool-name="MySqlXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mysqldb
    </xa-datasource-property>
    <driver>mysql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="mysql" module="com.mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MySQL JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.36-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. MySQL JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.mysql --resources=/path/to/mysql-connector-java-5.1.36-bin.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. MySQL JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)
  3. MySQL XA データソースを追加します。

    xa-data-source add --name=MySqlXADS --jndi-name=java:jboss/MySqlXADS --driver-name=mysql --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mysqldb"}

13.13.3. PostgreSQL データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる PostgreSQL データソースの設定例になります。

PostgreSQL データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS">
    <connection-url>jdbc:postgresql://localhost:5432/postgresdb</connection-url>
    <driver>postgresql</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="postgresql" module="com.postgresql">
        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
PostgreSQL JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-9.3-1102.jdbc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. PostgreSQL JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.postgresql --resources=/path/to/postgresql-9.3-1102.jdbc4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. PostgreSQL JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
  3. PostgreSQL データソースを追加します。

    data-source add --name=PostgresDS --jndi-name=java:jboss/PostgresDS --driver-name=postgresql --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter

13.13.4. PostgreSQL XA データソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる PostgreSQL XA データソースの設定例になります。

PostgreSQL XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/PostgresXADS" pool-name="PostgresXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      5432
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      postgresdb
    </xa-datasource-property>
    <driver>postgresql</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="postgresql" module="com.postgresql">
      <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
PostgreSQL JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.postgresql">
  <resources>
    <resource-root path="postgresql-9.3-1102.jdbc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. PostgreSQL JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.postgresql --resources=/path/to/postgresql-9.3-1102.jdbc4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. PostgreSQL JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
  3. PostgreSQL XA データソースを追加します。

    xa-data-source add --name=PostgresXADS --jndi-name=java:jboss/PostgresXADS --driver-name=postgresql --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","PortNumber"=>"5432","DatabaseName"=>"postgresdb"}

13.13.5. Oracle データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる Oracle データソースの設定例になります。

Oracle データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/OracleDS" pool-name="OracleDS">
    <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
    <driver>oracle</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
        <validate-on-match>true</validate-on-match>
        <background-validation>false</background-validation>
        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="oracle" module="com.oracle">
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Oracle JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Oracle JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.oracle --resources=/path/to/misc/jdbc_drivers/oracle/ojdbc7.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Oracle JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name=com.oracle,driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource)
  3. Oracle データソースを追加します。

    data-source add --name=OracleDS --jndi-name=java:jboss/OracleDS --driver-name=oracle --connection-url=jdbc:oracle:thin:@localhost:1521:XE --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker

13.13.6. Oracle XA データソースの例

重要

Oracle XA データソースにアクセスするユーザーは、以下の設定を適用しないと XA リカバリーが適切に操作しません。値 user は、JBoss EAP から Oracle に接続するために定義されたユーザーです。

  • GRANT SELECT ON sys.dba_pending_transactions TO user;
  • GRANT SELECT ON sys.pending_trans$ TO user;
  • GRANT SELECT ON sys.dba_2pc_pending TO user;
  • GRANT EXECUTE ON sys.dbms_xa TO user;

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる Oracle XA データソースの設定例になります。

Oracle XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/OracleXADS" pool-name="OracleXADS">
    <xa-datasource-property name="URL">
      jdbc:oracle:thin:@oracleHostName:1521:orcl
    </xa-datasource-property>
    <driver>oracle</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="oracle" module="com.oracle">
      <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Oracle JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Oracle JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.oracle --resources=/path/to/misc/jdbc_drivers/oracle/ojdbc7.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Oracle JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name=com.oracle,driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource)
  3. Oracle XA データソースを追加します。

    xa-data-source add --name=OracleXADS --jndi-name=java:jboss/OracleXADS --driver-name=oracle --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker --same-rm-override=false --xa-datasource-properties={"URL"=>"jdbc:oracle:thin:@oracleHostName:1521:orcl"}

13.13.7. Microsoft SQL Server データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる Microsoft SQL Server データソースの設定例になります。

Microsoft SQL Server データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/MSSQLDS" pool-name="MSSQLDS">
    <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
    <driver>sqlserver</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="sqlserver" module="com.microsoft">
      <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Microsoft SQL Server の JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc41.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Microsoft SQL Server の JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.microsoft --resources=/path/to/sqljdbc41.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Microsoft SQL Server の JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft,driver-xa-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource)
  3. Microsoft SQL Server データソースを追加します。

    data-source add --name=MSSQLDS --jndi-name=java:jboss/MSSQLDS --driver-name=sqlserver --connection-url=jdbc:sqlserver://localhost:1433;DatabaseName=MyDatabase --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter

13.13.8. Microsoft SQL Server XA データソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる Microsoft SQL Server XA データソースの設定例になります。

Microsoft SQL Server XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/MSSQLXADS" pool-name="MSSQLXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mssqldb
    </xa-datasource-property>
    <xa-datasource-property name="SelectMethod">
      cursor
    </xa-datasource-property>
    <driver>sqlserver</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="sqlserver" module="com.microsoft">
      <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Microsoft SQL Server の JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.microsoft">
  <resources>
    <resource-root path="sqljdbc41.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Microsoft SQL Server の JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.microsoft --resources=/path/to/sqljdbc41.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Microsoft SQL Server の JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft,driver-xa-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource)
  3. Microsoft SQL Server XA データソースを追加します。

    xa-data-source add --name=MSSQLXADS --jndi-name=java:jboss/MSSQLXADS --driver-name=sqlserver --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter --same-rm-override=false --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mssqldb","SelectMethod"=>"cursor"}

13.13.9. IBM DB2 データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる IBM DB2 データソースの設定例になります。

IBM DB2 データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/DB2DS" pool-name="DB2DS">
    <connection-url>jdbc:db2://localhost:50000/ibmdb2db</connection-url>
    <driver>ibmdb2</driver>
    <pool>
      <min-pool-size>0</min-pool-size>
      <max-pool-size>50</max-pool-size>
    </pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="ibmdb2" module="com.ibm">
        <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
IBM DB2 の JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. IBM DB2 の JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. IBM DB2 の JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=ibmdb2:add(driver-name=ibmdb2,driver-module-name=com.ibm,driver-xa-datasource-class-name=com.ibm.db2.jcc.DB2XADataSource)
  3. IBM DB2 データソースを追加します。

    data-source add --name=DB2DS --jndi-name=java:jboss/DB2DS --driver-name=ibmdb2 --connection-url=jdbc:db2://localhost:50000/ibmdb2db --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker --min-pool-size=0 --max-pool-size=50

13.13.10. IBM DB2 XA のデータソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる IBM DB2 XA データソースの設定例になります。

IBM DB2 XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/DB2XADS" pool-name="DB2XADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      ibmdb2db
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      50000
    </xa-datasource-property>
    <xa-datasource-property name="DriverType">
      4
    </xa-datasource-property>
    <driver>ibmdb2</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <recovery>
      <recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin">
        <config-property name="EnableIsValid">
          false
        </config-property>
        <config-property name="IsValidOverride">
          false
        </config-property>
        <config-property name="EnableClose">
          false
        </config-property>
      </recover-plugin>
    </recovery>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="ibmdb2" module="com.ibm">
        <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
IBM DB2 の JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.ibm">
  <resources>
    <resource-root path="db2jcc4.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. IBM DB2 の JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.ibm --resources=/path/to/db2jcc4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. IBM DB2 の JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=ibmdb2:add(driver-name=ibmdb2,driver-module-name=com.ibm,driver-xa-datasource-class-name=com.ibm.db2.jcc.DB2XADataSource)
  3. IBM DB2 XA データソースを追加します。

    xa-data-source add --name=DB2XADS --jndi-name=java:jboss/DB2XADS --driver-name=ibmdb2 --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter --stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker --same-rm-override=false --recovery-plugin-class-name=org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin --recovery-plugin-properties={"EnableIsValid"=>"false","IsValidOverride"=>"false","EnableClose"=>"false"} --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"ibmdb2db","PortNumber"=>"50000","DriverType"=>"4"}

13.13.11. Sybase データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる Sybase データソースの設定例になります。

Sybase データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/SybaseDB" pool-name="SybaseDB">
    <connection-url>jdbc:sybase:Tds:localhost:5000/DATABASE?JCONNECT_VERSION=6</connection-url>
    <driver>sybase</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="sybase" module="com.sybase">
      <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Sybase JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.sybase">
    <resources>
      <resource-root path="jconn4.jar"/>
    </resources>
    <dependencies>
      <module name="javax.api"/>
      <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Sybase JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Sybase JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=sybase:add(driver-name=sybase,driver-module-name=com.sybase,driver-xa-datasource-class-name=com.sybase.jdbc4.jdbc.SybXADataSource)
  3. Sybase データソースを追加します。

    data-source add --name=SybaseDB --jndi-name=java:jboss/SybaseDB --driver-name=sybase --connection-url=jdbc:sybase:Tds:localhost:5000/DATABASE?JCONNECT_VERSION=6 --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter

13.13.12. Sybase XA データソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる Sybase XA データソースの設定例になります。

Sybase XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/SybaseXADS" pool-name="SybaseXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mydatabase
    </xa-datasource-property>
    <xa-datasource-property name="PortNumber">
      4100
    </xa-datasource-property>
    <xa-datasource-property name="NetworkProtocol">
      Tds
    </xa-datasource-property>
    <driver>sybase</driver>
    <xa-pool>
      <is-same-rm-override>false</is-same-rm-override>
    </xa-pool>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="sybase" module="com.sybase">
      <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
Sybase JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.sybase">
    <resources>
      <resource-root path="jconn4.jar"/>
    </resources>
    <dependencies>
      <module name="javax.api"/>
      <module name="javax.transaction.api"/>
    </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. Sybase JDBC ドライバーをコアモジュールとして追加します。

    module add --name=com.sybase --resources=/path/to/jconn4.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. Sybase JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=sybase:add(driver-name=sybase,driver-module-name=com.sybase,driver-xa-datasource-class-name=com.sybase.jdbc4.jdbc.SybXADataSource)
  3. Sybase XA データソースを追加します。

    xa-data-source add --name=SybaseXADS --jndi-name=java:jboss/SybaseXADS --driver-name=sybase --user-name=admin --password=admin --validate-on-match=true --background-validation=false --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter --same-rm-override=false --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mydatabase","PortNumber"=>"4100","NetworkProtocol"=>"Tds"}

13.13.13. MariaDB データソースの例

以下は、接続情報、基本のセキュリティー、およびバリデーションオプションが含まれる MariaDB データソースの設定例になります。

MariaDB データソースの設定例
<datasources>
  <datasource jndi-name="java:jboss/MariaDBDS" pool-name="MariaDBDS">
    <connection-url>jdbc:mariadb://localhost:3306/jbossdb</connection-url>
    <driver>mariadb</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </datasource>
  <drivers>
    <driver name="mariadb" module="org.mariadb">
      <driver-class>org.mariadb.jdbc.Driver</driver-class>
      <xa-datasource-class>org.mariadb.jdbc.MySQLDataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MariaDB JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-1.2.3.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. MariaDB JDBC ドライバーをコアモジュールとして追加します。

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-1.2.3.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. MariaDB JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=mariadb:add(driver-name=mariadb,driver-module-name=org.mariadb,driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource, driver-class-name=org.mariadb.jdbc.Driver)
  3. MariaDB データソースを追加します。

    data-source add --name=MariaDBDS --jndi-name=java:jboss/MariaDBDS --driver-name=mariadb --connection-url=jdbc:mariadb://localhost:3306/jbossdb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

13.13.14. MariaDB XA データソースの例

以下は、XA データソースプロパティー、基本のセキュリティー、およびバリデーションオプションが含まれる MariaDB XA データソースの設定例になります。

MariaDB XA データソースの設定例
<datasources>
  <xa-datasource jndi-name="java:jboss/MariaDBXADS" pool-name="MariaDBXADS">
    <xa-datasource-property name="ServerName">
      localhost
    </xa-datasource-property>
    <xa-datasource-property name="DatabaseName">
      mariadbdb
    </xa-datasource-property>
    <driver>mariadb</driver>
    <security>
      <user-name>admin</user-name>
      <password>admin</password>
    </security>
    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
      <validate-on-match>true</validate-on-match>
      <background-validation>false</background-validation>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
  </xa-datasource>
  <drivers>
    <driver name="mariadb" module="org.mariadb">
      <driver-class>org.mariadb.jdbc.Driver</driver-class>
      <xa-datasource-class>org.mariadb.jdbc.MySQLDataSource</xa-datasource-class>
    </driver>
  </drivers>
</datasources>
MariaDB JDBC ドライバー module.xml ファイルの例
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-1.2.3.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>
管理 CLI コマンドの例

以下の管理 CLI コマンドを使用すると、この設定例を実現できます。

  1. MariaDB JDBC ドライバーをコアモジュールとして追加します。

    module add --name=org.mariadb --resources=/path/to/mariadb-java-client-1.2.3.jar --dependencies=javax.api,javax.transaction.api
    注記

    module 管理 CLI コマンドを使用したモジュールの追加および削除は、技術プレビューとしてのみ提供されています。本番環境では、モジュールを手動 で追加および削除する必要があります。

  2. MariaDB JDBC ドライバーを登録します。

    /subsystem=datasources/jdbc-driver=mariadb:add(driver-name=mariadb,driver-module-name=org.mariadb,driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource, driver-class-name=org.mariadb.jdbc.Driver)
  3. MariaDB XA データソースを追加します。

    xa-data-source add --name=MariaDBXADS --jndi-name=java:jboss/MariaDBXADS --driver-name=mariadb --user-name=admin --password=admin --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter --xa-datasource-properties={"ServerName"=>"localhost","DatabaseName"=>"mariadbdb"}

第14章 トランザクションの設定

14.1. Transactions サブシステムの設定

14.1.1. トランザクションマネージャーの設定

トランザクションマネージャーは、Web ベースの管理コンソールまたはコマンドライン管理 CLI を使用して設定できます。

管理コンソールを使用したトランザクションマネージャーの設定

以下の手順は、Web ベースの管理コンソールを使用してトランザクションマネージャーを設定する方法を示しています。

  1. 画面上部の Configuration タブを選択します。
  2. JBoss EAP を管理対象ドメインとして実行している場合は、変更する任意のプロファイルを選択します。
  3. Subsystem リストから、Transactions を選択し、View をクリックします。
  4. 編集する設定に応じたタブ (リカバリーオプションの場合の Recovery など) で Edit をクリックします。
  5. 必要な変更を行い、Save をクリックして変更を保存します。
  6. ヘルプ をクリックしてヘルプテキストを表示します。
管理 CLI を使用したトランザクションマネージャーの設定

管理 CLI で一連のコマンドを使用してトランザクションマネージャーを設定できます。これらのコマンドはすべて /subsystem=transactions (スタンドアロンサーバー向け) または /profile=default/subsystem=transactions/ (管理対象ドメインの default プロファイル向け) で始まります。

トランザクションマネージャーのすべての設定オプションの詳細なリストについては、トランザクションマネージャーの設定オプションを参照してください。

14.1.2. JTA を使用するようデータソースを設定

ここでは、データソースで Java Transaction API (JTA) を有効にする方法を説明します。

前提条件
  • データベースが Java Transaction API をサポートする必要があります。不明な場合は、データベースのドキュメントを参照してください。
  • 非 XA データソース を作成します。

    注記

    XA データソース はすでにデフォルトで JTA が有効になっています。

Java Transaction API を使用するようデータソースを設定
  1. 以下の管理 CLI コマンドを使用して jta 属性を true に設定します。

    /subsystem=datasources/data-source=DATASOURCE_NAME:write-attribute(name=jta,value=true)
    注記

    管理対象ドメインでは、このコマンドの前に /profile=PROFILE_NAME を追加します。

  2. 変更を反映するためにサーバーをリロードします。

    reload

データソースが JTA を使用するように設定されます。

14.1.3. トランザクションログメッセージ

トランザクションロガーに DEBUG ログレベルを使用することにより、ログファイルを読み取り可能な状態に保ちつつトランザクションを追跡できます。詳細なデバッグの場合は、TRACE ログレベルを使用します。トランザクションロガーの設定に関する詳細については、Transactions サブシステムのロギング設定を参照してください。

TRACE ログレベルでログを記録するよう設定すると、トランザクションマネージャー (TM) は多くのロギング情報を生成できます。最も一般的なメッセージの一部は次のとおりです。このリストは包括的ではなく、他のメッセージが表示されることもあります。

表14.1 トランザクション状態の変更

トランザクションの開始

トランザクションが開始されたら、クラス com.arjuna.ats.arjuna.coordinator.BasicAction のメソッド Begin が実行され、メッセージ BasicAction::Begin() for action-id <transaction uid> でログに示されます。

トランザクションのコミット

トランザクションがコミットされたら、クラス com.arjuna.ats.arjuna.coordinator.BasicAction のメソッド Commit が実行され、メッセージ BasicAction::Commit() for action-id <transaction uid> でログに示されます。

トランザクションのロールバック

トランザクションがロールバックされたら、クラス com.arjuna.ats.arjuna.coordinator.BasicAction のメソッド Rollback が実行され、メッセージ BasicAction::Rollback() for action-id <transaction uid> でログに示されます。

トランザクションのタイムアウト

トランザクションがタイムアウトすると、com.arjuna.ats.arjuna.coordinator.TransactionReaper のメソッド doCancellations が実行され、Reaper Worker <thread id> attempting to cancel <transaction uid> とログに示されます。この結果、上記のように同じスレッドがトランザクションをロールバックすることが示されます。

14.1.4. Transactions サブシステムのロギング設定

JBoss EAP の他のログ設定に依存せずにログに記録されたトランザクションに関する情報の量を制御できます。ログ設定は、管理コンソールまたは管理 CLI を使用して設定できます。

管理コンソールを使用したトランザクションロガーの設定
  1. Logging サブシステム設定に移動します。

    1. 管理コンソールで、Configuration タブをクリックします。管理対象ドメインを使用する場合は、最初に適切なサーバープロファイルを選択する必要があります。
    2. Logging サブシステムを選択し、View をクリックします。
  2. com.arjuna 属性を編集します。

    Log Categories タブを選択します。com.arjuna エントリーがすでに存在します。com.arjuna を選択し、属性セクションの Edit をクリックします。ログレベルを変更し、親ハンドラーを使用するかどうかを選択できます。

    • ログレベル:

      トランザクションにより大量のロギング出力が生成されることがあるため、サーバーのログがトランザクション出力で満たされないようデフォルトのロギングレベルは WARN に設定されます。トランザクション処理の詳細を確認する必要がある場合は、トランザクション ID が表示されるよう TRACE ログレベルを使用します。

    • 親ハンドラーの使用:

      親ハンドラーはロガーが出力を親ロガーに送信するかどうかを指定します。デフォルトの動作は true です。

  3. Save をクリックして変更を保存します。
管理 CLI を使用したトランザクションロガーの設定

以下のコマンドを使用して管理 CLI からログレベルを設定します。スタンドアロンサーバーの場合は、コマンドから /profile=default を削除します。

/profile=default/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=VALUE)

14.2. トランザクション管理

14.2.1. トランザクションの参照と管理

管理 CLI では、トランザクションレコードを参照および操作する機能がサポートされます。この機能は、TM と JBoss EAP の管理 API 間の対話によって提供されます。

TM は、待機中の各トランザクションとトランザクションに関連する参加者に関する情報を、オブジェクトストアと呼ばれる永続ストレージに格納します。管理 API は、オブジェクトストアを log-store と呼ばれるリソースとして公開します。probe と呼ばれる API 操作はトランザクションログを読み取り、各レコードに対してノードパスを作成します。probe コマンドは、log-store を更新する必要があるときに、いつでも手動で呼び出すことができます。トランザクションログが即座に表示され、非表示になるのは、正常な挙動です。

ログストアの更新

このコマンドは、管理対象ドメインでプロファイル default を使用するサーバーグループに対してログストアを更新します。スタンドアローンサーバーの場合は、コマンドから profile=default を削除します。

/profile=default/subsystem=transactions/log-store=log-store/:probe
準備済みトランザクションすべての表示

準備されたすべてのトランザクションを表示するには、最初にログストアを更新し (ログストアの更新 を参照)、ファイルシステムの ls コマンドに類似した機能を持つ次のコマンドを実行します。

ls /profile=default/subsystem=transactions/log-store=log-store/transactions

または

/host=master/server=server-one/subsystem=transactions/log-store=log-store:read-children-names(child-type=transactions)

各トランザクションが一意の ID とともに表示されます。個々の操作は、各トランザクションに対して実行できます (トランザクションの管理 を参照)。

14.2.1.1. トランザクションの管理

トランザクションの属性の表示

JNDI 名、EIS 製品名およびバージョン、ステータスなどのトランザクションに関する情報を表示するには、:read-resource 管理 CLIコマンドを使用します。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
トランザクションの参加者の表示

各トランザクションログには、participants (参加者) と呼ばれる子要素が含まれます。トランザクションの参加者を確認するには、この要素に対して read-resource 管理 CLI コマンドを使用します。参加者は JNDI 名によって識別されます。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=java\:\/JmsXA:read-resource

結果は以下のようになります。

{
   "outcome" => "success",
   "result" => {
       "eis-product-name" => "ActiveMQ",
       "eis-product-version" => "2.0",
       "jndi-name" => "java:/JmsXA",
       "status" => "HEURISTIC",
       "type" => "/StateManager/AbstractRecord/XAResourceRecord"
   }
}

ここで示された結果ステータスは HEURISTIC であり、リカバリーが可能です。詳細については、トランザクションのリカバリーを参照してください。

特別な場合では、ログに対応するトランザクションレコードがないオーファンレコード (XAResourceRecords) をオブジェクトストアに作成できます。たとえば、準備済みの XA リソースが TM が記録する前にクラッシュした場合や、ドメイン管理 API では XA リソースにアクセスできない場合などがこれに該当します。このようなレコードにアクセスするには、管理オプション expose-all-logstrue に設定する必要があります。このオプションは管理モデルには保存されず、サーバーが再起動されると false に戻ります。

/profile=default/subsystem=transactions/log-store=log-store:write-attribute(name=expose-all-logs, value=true)

代わりに以下のコマンドを実行すると、トラザクション参加者 ID が集約され表示されます。

/host=master/server=server-one/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-children-names(child-type=participants)
トランザクションの削除

各トランザクションログは、トランザクションを表すトランザクションログを削除する :delete 操作をサポートします。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:delete
トランザクションのリカバリー

トランザクションの各参加者は、:recover 管理 CLI コマンドを使用したリカバリーをサポートします。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:recover
  • トランザクションの状態が HEURISTIC である場合は、リカバリー操作によって状態が PREPARE に変わり、リカバリーがトリガーされます。
  • トランザクションの参加者の 1 つがヒューリスティックな場合、リカバリー操作は commit 操作を再実行しようとします。成功した場合、トランザクションログから参加者が削除されます。これを確認するには、log-store 上で :probe 操作を再実行し、参加者がリストされていないことを確認します。これが最後の参加者の場合は、トランザクションも削除されます。
リカバリーが必要なトランザクション状態の更新

トランザクションをリカバリーする必要がある場合は、リカバリーを試行する前に :refresh 管理 CLI コマンドを使用して、トランザクションのリカバリーが必要であるかを確認できます。

/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:refresh

14.2.2. トランザクション統計情報の表示

トランザクションマネージャーの統計が有効になっていると、トランザクションマネージャーによる処理されたトラザクションの統計を表示できます。トランザクションマネージャーの統計を有効にする方法については、トランザクションマネージャーの設定を参照してください。

管理コンソールまたは管理 CLI を使用して統計を表示できます。管理コンソールでは、Runtime タブから Transactions サブシステムを選択するとトラザクションの統計を表示できます。管理コンソールではすべての統計を利用できません。

以下の表は、利用できる統計とその説明を示しています。

表14.2 Transactions サブシステムの統計

統計説明

number-of-transactions

このサーバー上でトランザクションマネージャーにより処理されるトランザクションの合計数。

number-of-committed-transactions

このサーバー上でトランザクションマネージャーにより処理されるコミット済みトランザクションの数。

number-of-aborted-transactions

このサーバー上でトランザクションマネージャーにより処理されるアボートされたトランザクションの数。

number-of-timed-out-transactions

このサーバー上でトランザクションマネージャーにより処理されるタイムアウトのトランザクションの数。タイムアウトのトランザクションの数はアボートされたトランザクションの数まで計算されます。

number-of-heuristics

ヒューリスティック状態のトランザクションの数。

number-of-inflight-transactions

開始した未終了のトランザクションの数。

number-of-application-rollbacks

障害の原因がアプリケーションであった失敗トランザクションの数。

number-of-resource-rollbacks

障害の原因がリソースであった失敗トランザクションの数。

14.2.3. トランザクションオブジェクトストア

トランザクションにはオブジェクトを保存する場所が必要です。オブジェクトストレージのオプションの 1 つが JDBC データソースです。ファイルストアと比べると、JDBC インターフェースは同じネットワークのすべてのシステムからデータベースにアクセスできます。ファイルストアを使用する場合は、ディスクを共有または移行してからでないと、オブジェクトストレージとしてデータベースにアクセスすることはできません。特にパフォーマンスが気になる場合、JDBC オフジェクトストアはファイルシステムまたは ActiveMQ ジャーナルオブジェクトストアよりも速度が遅くなる場合があります。

重要

トラザクションログのストレージタイプとして Apache ActiveMQ Artemis ジャーナルを使用するよう transactions サブシステムが設定されている場合、JBoss EAP の 2 つのインスタンスは同じディレクトリーを使用してジャーナルを保存することはできません。アプリケーションサーバーインスタンスは同じ場所を共有することはできず、アプリケーションサーバーインスタンスごとに一意な場所を設定する必要があります。

JDBC データソースをトランザクションオブジェクトストアとして使用

JDBC データソースをトランザクションオブジェクトストアとして使用するには、以下の手順に従います。

  1. データソース (例: TransDS) を作成します。手順は 非 XA データソースの作成を参照してください。データソースの JDBC ドライバーは、JAR デプロイメントとしてではなくコアモジュールとしてインストールしないとオブジェクトストアが適切に動作しないことに注意してください。
  2. データソースの jta 属性を false に設定します。

    /subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)
  3. jdbc-store-datasource 属性を、使用するデータソースの JNDI 名に設定します (例: java:jboss/datasources/TransDS)。

    /subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)
  4. use-jdbc-store 測定を true に設定します。

    /subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)
  5. JBoss EAP サーバーをリロードし、変更を反映します。

    reload

以下の表は、JDBC オブジェクトストレージに関係する利用可能な属性をすべて表しています。

表14.3 トランザクション JDBC ストア属性

プロパティー説明

use-jdbc-store

トランザクションに対して JDBC ストアを有効にするには、true に設定します。

jdbc-store-datasource

ストレージに使用される JDBC データソースの JNDI 名。

jdbc-action-store-drop-table

起動時にアクションストアテーブルをドロップおよび再作成するかどうか。デフォルトは false です。

jdbc-action-store-table-prefix

アクションストアテーブル名の接頭辞。

jdbc-communication-store-drop-table

起動時にコミュニケーションストアテーブルをドロップおよび再作成するかどうか。デフォルトは false です。

jdbc-communication-store-table-prefix

コミュニケーションストアテーブル名の接頭辞。

jdbc-state-store-drop-table

起動時にステートストアテーブルをドロップおよび再作成するかどうか。デフォルトは false です。

jdbc-state-store-table-prefix

ステートストアテーブル名の接頭辞。

第15章 ORB 設定

15.1. Common Object Request Broker Architecture (CORBA)

Common Object Request Broker Architecture (CORBA) は、アプリケーションとサービスが複数の互換性がない言語で記述され、異なるプラットフォームでホストされる場合でも、アプリケーションとサービスが連携することを可能にする標準です。CORBA のリクエストは Object Request Broker (ORB) というサーバーサイドコンポーネントが仲介します。JBoss EAP は、Open JDK ORB コンポーネントを用いて ORB インスタンスを提供します。

ORB は Java Transaction Service (JTS) トランザクションに対して内部的に使用され、ユーザー独自のアプリケーションが使用することもできます。

15.2. JTS トランザクション用 ORB の設定

JBoss EAP のデフォルトインストールでは、トランザクションの ORB サポートが無効になっています。管理 CLI または管理コンソールを使用して iiop-openjdk サブシステムの ORB を設定できます。

注記

iiop-openjdk サブシステムを利用できるのは、管理対象ドメインで full または full-ha プロファイルを使用している場合や、スタンドアロンサーバーの standalone-full.xml または standalone-full-ha.xml 設定ファイルを使用している場合です。

管理 CLI を使用した ORB の設定

管理 CLI を使用して ORB を設定できます。これは、JTS と使用するために行う ORB の最低限の設定です。

以下の管理 CLI コマンドは、full プロファイルを使用する管理対象ドメインを対象としています。必要な場合は設定に応じてプロファイルを変更してください。スタンドアロンサーバーを使用している場合は、コマンドの /profile=full 部分を省略してください。

セキュリティーインターセプターの有効化

値を identityに設定し、security 属性を有効にします。

/profile=full/subsystem=iiop-openjdk:write-attribute(name=security,value=identity)
IIOP サブシステムでのトランザクションの有効化

JTS に対して ORB を有効にするには、transactions 属性の値をデフォルトの spec ではなく full に設定します。

/profile=full/subsystem=iiop-openjdk:write-attribute(name=transactions, value=full)
Transactions サブシステムでの JTS の有効化
/profile=full/subsystem=transactions:write-attribute(name=jts,value=true)
注記

JTS をアクティベートするにはリロードでは不十分なため、サーバーを再起動する必要があります。

管理コンソールを使用した ORB の設定

  1. 管理コンソールの上部で Configuration タブを選択します。
  2. Subsystems を選択します。管理対象ドメインの場合は、最初に適切なプロファイルを選択する必要があります。
  3. IIOP サブシステムを選択し、View をクリックします。
  4. Edit ボタンをクリックし、必要な属性を編集します。各フィールドの詳細を表示するには、ヘルプ リンクをクリックします。
  5. Save をクリックして変更を保存します。

第16章 Java Connector Architecture (JCA) の管理

16.1. Java Connector Architecture (JCA)

Java EE Connector Architecture (JCA) は外部にある異種のエンタープライズ情報システム (EIS) に対して Java EE システムの標準アーキテクチャーを定義します。EIS の例として、 エンタープライズリソースプランニング (ERP) システム、メインフレームトランザクション処理 (TP)、データベース、メッセージングシステムなどが挙げられます。リソースアダプターは Java EE Connector API アーキテクチャーを実装するコンポーネントです。

データソースオブジェクトと似ていますが、JCA 1.7 は以下を管理する機能を提供します。

  • connections
  • transactions
  • security
  • life-cycle
  • work instances
  • transaction inflow
  • message inflow

JCA 1.7 は Java Community Process で JSR-322 として開発されました。

16.2. リソースアダプター

リソースアダプターは、 Java Connector Architecture (JCA) 仕様を使用して Java EE アプリケーションとエンタープライズ情報システム (EIS) との間の通信を提供するデプロイ可能な Java EE コンポーネントです。EIS ベンダーの製品と Java EE アプリケーションの統合を容易にするため、リソースアダプターは通常 EIS ベンダーによって提供されます。

エンタープライズ情報システムは、組織内における他のあらゆるソフトウェアシステムのことです。例としては、エンタープライズリソースプランニング (ERP) システム、データベースシステム、電子メールサーバー、商用メッセージングシステムなどが挙げられます。

リソースアダプターは、JBoss EAP にデプロイできる Resource Adapter Archive (RAR) ファイルでパッケージ化されます。また、RAR ファイルは、Enterprise Archive (EAR) デプロイメントにも含めることができます。

16.3. JCA サブシステムの設定

jca サブシステムは、JCA コンテナーおよびリソースアダプターデプロイメントの一般的な設定を制御します。管理コンソールまたは管理 CLI を使用して jca サブシステムを設定できます。

設定する主な JCA 要素は次のとおりです。

管理コンソールでの JCA の設定

管理コンソールで jca サブシステムを設定するには、ConfigurationSubsystemsJCA と選択し、適切なタブを選択します。

  • Common Config タブ - キャッシュ接続マネージャー、アーカイブバリデーション、および Bean バリデーションの設定が含まれます。これらの項目は独自のタブに含まれます。設定を変更するには、タブを開き、Edit ボタンをクリックします。
  • Bootstrap Contexts タブ - 設定されたブートストラップコンテキストのリストが含まれます。新しいブートストラップコンテキストオブジェクトを追加、削除、および設定できます。各ブートストラップコンテキストをワークマネージャーに割り当てる必要があります。
  • Work Managerタブ - 設定されたワークマネージャーのリストが含まれます。新しいワークマネージャーを追加および削除でき、スレッドプールをここで設定できます。各ワークマネージャーは短時間実行されるスレッドプールを 1 つ持つことができ、任意で長時間実行されるスレッドプールを 1 つ持つことができます。

    スレッドプール属性を設定するには、選択したワークマネージャーの View をクリックします。

管理 CLI での JCA の設定
/subsystem=jca アドレスから管理 CLI で jca サブシステムを設定できます。管理対象ドメインでは、コマンドの前に /profile=PROFILE_NAME を追加する必要があります。

アーカイブバリデーション

デプロイメントユニットでアーカイブバリデーションを実行するかどうかを決定します。以下の表はアーカイブバリデーションに設定できる属性を表しています。

表16.1 アーカイブバリデーション属性

属性デフォルト値説明

enabled

true

アーカイブバリデーションが有効であるかどうかを指定します。

fail-on-error

true

アーカイブバリデーションのエラーレポートによってデプロイメントが失敗するかどうかを指定します

fail-on-warn

false

アーカイブバリデーションの警告レポートによってデプロイメントが失敗するかどうかを指定します。

アーカイブバリデーションが有効な状態で、アーカイブが JCA 仕様を正しく実装しない場合、デプロイメント中に問題を説明するエラーメッセージが表示されます。例は次のとおりです。

Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public int hashCode()" method.
Code: com.mycompany.myproject.ResourceAdapterImpl

Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public boolean equals(Object)" method.
Code: com.mycompany.myproject.ResourceAdapterImpl

アーカイブバリデーションが指定されていない場合は、アーカイブバリデーションが指定されているとみなされ、enabled 属性のデフォルトが true に設定されます。

Bean バリデーション

この設定は、Bean バリデーション(JSR-303) がデプロイメントユニットで実行されるかどうかを決定します。以下の表は Bean バリデーションに設定できる属性について表していまう。

表16.2 Bean バリデーションの属性

属性デフォルト値説明

enabled

true

Bean バリデーションが有効であるかどうかを指定します。

Bean バリデーションが指定されていない場合は、Bean バリデーションが指定されているとみなされ、enabled 属性のデフォルトが true に設定されます。

ワークマネージャー

ワークマネージャーには次の 2 種類があります。

デフォルトワークマネージャー
デフォルトのワークマネージャーおよびそのスレッドプール。
カスタムワークマネージャー
カスタムワークマネージャーの定義およびそのスレッドプール。

ワークマネージャーに設定できる属性は下表のとおりです。

表16.3 ワークマネージャーの属性

属性説明

name

ワークマネージャーの名前を指定します。

short-running-threads

標準の Work インスタンスのスレッドプール。ワークマネージャーごとに短時間実行されるスレッドプールが 1 つあります。

long-running-threads

LONG_RUNNING ヒントを設定する JCA 1.7 Work インスタンスのスレッドプール。各ワークマネージャーはオプションの長期スレッドプールを 1 つ持てます。

ワークマネージャーのスレッドプールに設定できる属性は下表のとおりです。

表16.4 スレッドプールの属性

属性デフォルト値説明

name

default

スレッドプールの名前を指定します。

keepalive-time

10 秒

ワーク実行後にスレッドプールが保持される期間を指定します。

allow-core-timeout

false

コアスレッドがタイムアウトするかどうかを決定するブール値の設定。デフォルト値は false です。

thread-factory

 

スレッドファクトリーへの参照。

max-thread

50

スレッドプールの最大サイズ。

core-threads

50

コアスレッドプールのサイズ。スレッドプールの最大サイズ以下である必要があります。

queue-length

50

キューの最大長。

ブートストラップコンテキスト

カスタムのブートストラップコンテキストを定義するために使用されます。以下の表は、ブートストラップコンテキストに設定できる属性を表しています。

表16.5 ブートストラップコンテキストの属性

属性説明

name

ブートストラップコンテキストの名前を指定します。

workmanager

このコンテキストに使用するワークマネージャーの名前を指定します。

キャッシュ接続マネージャー

トランザクションの接続における接続のデバッグおよび Lazy Enlistment のサポートに使用され、アプリケーションによって使用およびリリースされるかどうかを追跡します。以下の表はキャッシュ接続マネージャーに設定できる属性を表しています。

表16.6 キャッシュ接続マネージャーの属性

属性デフォルト値説明

debug

false

接続を明示的に閉じるため、障害時に警告を出力します。

error

false

接続を明示的に閉じるため、障害時に例外が発生します。

ignore-unknown-connections

false

未知の接続はキャッシュされないことを指定します。

16.4. リソースアダプターの設定

16.4.1. リソースアダプターのデプロイ

リソースアダプターは管理 CLI または管理コンソールを使用して他のデプロイメントと同様にデプロイできます。また、スタンドアロンサーバー実行時にアーカイブをデプロイメントディレクトリーにコピーして、デプロイメントスキャナーによって検出されるようにすることもできます。

管理 CLI を使用したリソースアダプターのデプロイ

リソースアダプターをスタンドアロンサーバーへデプロイするには、以下の管理 CLI コマンドを実行します。

deploy /path/to/resource-adapter.rar

リソースアダプターを管理対象ドメインのすべてのサーバーグループにデプロイするには、以下の管理 CLI コマンド を入力します。

deploy /path/to/resource-adapter.rar --all-server-groups
管理コンソールを使用したリソースアダプターのデプロイ
  1. 管理コンソールにログインし、Deployments タブをクリックします。
  2. 追加 をクリックします。管理対象ドメインの場合は、最初に Content Repository を選択する必要があります。
  3. 新規デプロイメントのアップロードオプションを選択し、次へ をクリックします。
  4. リソースアダプターアーカイブを閲覧し、次へ をクリックします。
  5. アップロードを確認してから 完了をクリックします。
  6. 管理対象ドメインでは、デプロイメントを適切なサーバーグループに割り当て、デプロイメントを有効にします。
デプロイメントスキャナーを使用したリソースアダプターのデプロイ

リソースアダプターを手作業でスタンドアロンサーバーにデプロイするには、リソースアダプターアーカイブをサーバーデプロイメントディレクトリー (例: EAP_HOME/standalone/deployments/) にコピーします。これにより、デプロイメントスキャナーによって検出され、デプロイされます。

注記

このオプションは管理対象ドメインでは使用できません。管理コンソールまたは管理 CLI を使用してリソースアダプターをサーバーグループにデプロイする必要があります。

16.4.2. リソースアダプターの設定

管理インターフェースを使用してリソースアダプターを設定できます。以下の例は、管理 CLI を使用してリソースアダプターを設定する方法を示しています。サポートされるプロパティーやその他の重要な情報は、リソースアダプターベンダーのマニュアルを参照してください。

リソースアダプター設定の追加

リソースアダプター設定を追加します。

/subsystem=resource-adapters/resource-adapter=eis.rar:add(archive=eis.rar, transaction-support=XATransaction)
リソースアダプターの設定

必要に応じて以下を設定します。

  • config-properties を設定します。

    server 設定プロパティーを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=server:add(value=localhost)

    port 設定プロパティーを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/config-properties=port:add(value=9000)
  • admin-objects を設定します。

    管理オブジェクトを追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName:add(class-name=com.acme.eis.ra.EISAdminObjectImpl, jndi-name=java:/eis/AcmeAdminObject)

    管理オブジェクト設定プロパティーを設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/admin-objects=aoName/config-properties=threshold:add(value=10)
  • connection-definitions を設定します。

    管理接続ファクトリーの接続定義を追加します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:add(class-name=com.acme.eis.ra.EISManagedConnectionFactory, jndi-name=java:/eis/AcmeConnectionFactory)

    管理接続ファクトリーの設定プロパティーを設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName/config-properties=name:add(value=Acme Inc)

    エンリストメントトレースを記録するかどうかを設定します。エンリストメントトレースの記録を無効にするには、enlistment-trace 属性を false に設定します。

    /subsystem=resource-adapters/resource-adapter=eis.rar/connection-definitions=cfName:write-attribute(name=enlistment-trace,value=false)
    警告

    エンリストメントトレースを無効にすると、トランザクションエンリストメント中にエラーを追跡するのが難しくなります。

リソースアダプターの利用可能なすべてのオプションについては、リソースアダプターの属性 を参照してください。

リソースアダプターのアクティベート

リソースアダプターをアクティベートします。

/subsystem=resource-adapters/resource-adapter=eis.rar:activate
注記

リソースアダプターのキャパシティーポリシーを定義することも可能です。詳細は キャパシティーポリシーの項を参照してください。

16.4.3. WebSphere MQ リソースアダプターのデプロイおよび設定

Websphere MQ リソースアダプターのデプロイ手順については、JBoss EAP Configuring Messaging Deploying a Websphere MQ Resource Adapter を参照してください。

16.4.4. 汎用 JMS リソースアダプターのデプロイおよび設定

汎用 JMS リソースアダプターの設定方法については、JBoss EAP Configuring MessagingConfiguring a Generic JMS Resource Adapter を参照してください。

16.5. 管理接続プールの設定

JBoss EAP は ManagedConnectionPool インターフェースの 3 つの実装を提供します。

org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedQueueManagedConnectionPool
これは、JBoss EAP 7 のデフォルトの接続プールで、追加設定がない場合のパフォーマンスが最も優れています。
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool
過去の JBoss EAP バージョンではデフォルトの接続プールでした。
org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool
この接続プールはデバッグの目的でのみ使用され、シャットダウンやプールのフラッシュ時にリークが報告されます。

以下の管理 CLI コマンドを使用して、データソースの管理接続プール実装を設定できます。

/subsystem=datasources/data-source=DATA_SOURCE:write-attribute(name=mcp,value=MCP_CLASS)

以下の管理 CLI コマンドを使用して、リソースアダプターの管理接続プール実装を設定できます。

/subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER/connection-definitions=CONNECTION_DEFINITION:write-attribute(name=mcp,value=MCP_CLASS)

以下の管理 CLI コマンドを使用して、メッセージングサーバーの管理接続プール実装を設定できます。

/subsystem=messaging-activemq/server=SERVER/pooled-connection-factory=CONNECTION_FACTORY:write-attribute(name=managed-connection-pool,value=MCP_CLASS)

16.6. 接続統計の表示

/deployment=NAME.rar サブツリーから定義された接続の統計を読み取りできます。これは、standalone.xml または domain.xml 設定に定義されていなくても、すべての RAR の統計にアクセスできるようにするためです。

/deployment=NAME.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/testMe:read-resource(include-runtime=true)
注記

統計はすべてランタイムのみの情報であるため、必ず include-runtime=true 引数を指定してください。

利用できる統計については、 リソースアダプターの統計を参照してください。

第17章 Web サーバーの設定 (Undertow)

17.1. Undertow サブシステムの概要

重要

JBoss EAP 7 では、JBoss EAP の過去のバージョンで使用された web サブシステムの代わりに undertow サブシステムが使用されます。

undertow サブシステムは、Web サーバーおよびサーブレットコンテナーの設定を可能にします。Java Servlet 3.1 仕様や WebSocket を実装し、HTTP Upgrade をサポートします。また、サーブレットデプロイメントでパフォーマンスの高い非ブロッキングハンドラーの使用をサポートします。undertow サブシステムは、mod_cluster をサポートする高パフォーマンスなリバースプロキシとして動作することも可能です。

undertow サブシステム内で設定する主なコンポーネントは 5 つあります。

注記

JBoss EAP には、これらの各コンポーネントの設定を更新する機能がありますが、デフォルト設定は妥当なパフォーマンスの設定を提供し、ほとんどのユースケースに適しています。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  <servlet-container name="default">
      <jsp-config/>
      <websockets/>
  </servlet-container>
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  <filters>
      <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
      <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
  </filters>
</subsystem>
重要

また、undertow サブシステムは io サブシステムに依存して XNIO ワーカーやバッファープールを提供します。io サブシステムは個別に設定され、ほとんどの場合で最適なパフォーマンスを得られるデフォルト設定を提供します。

注記

JBoss EAP の過去のリリースに含まれていた web サブシステムと比較すると、JBoss EAP 7 の undertow サブシステムでは HTTP メソッドのデフォルト動作が異なります。

17.2. バッファーキャッシュの設定

バッファーキャッシュは静的リソースをキャッシュするために使用されます。JBoss EAP では複数のキャッシュを設定でき、デプロイメントによる参照が可能であるため、デプロイメントごとに異なるキャッシュサイズを使用することができます。バッファーは固定サイズで、リージョンで割り当てられます。使用領域の合計は、バッファーサイズ、リージョンごとのバッファー数、およびリージョンの最大数を掛けて算出できます。バッファーキャッシュのデフォルトサイズは 10MB です。

JBoss EAP はデフォルトで単一のキャッシュを提供します。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  ....
</subsystem>

既存のバッファーキャッシュの更新

既存のバッファーキャッシュを更新するには、以下を指定します。

/subsystem=undertow/buffer-cache=default/:write-attribute(name=buffer-size,value=2048)
reload

新規バッファーキャッシュの作成

新しいバッファーキャッシュを作成するには、以下を指定します。

/subsystem=undertow/buffer-cache=new-buffer:add

バッファーキャッシュの削除

バッファーキャッシュを削除するには、以下を指定します。

/subsystem=undertow/buffer-cache=new-buffer:remove
reload

バッファーキャッシュの設定に使用できる属性の完全リストは、Undertow サブシステムの属性の項を参照してください。

17.3. サーバーの設定

サーバーは Undertow のインスタンスを表し、複数の要素で構成されます。

  • host
  • http-listener
  • https-listener
  • ajp-listener

ホスト要素は仮想ホスト設定を提供し、3 つのリスナーはそのタイプの接続を Undertow インスタンスに提供します。

注記

複数のサーバーを設定でき、デプロイメントやサーバーを完全に分離できます。これは、マルチテナント環境などで便利です。

JBoss EAP はデフォルトでサーバーを提供します。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  ...
</subsystem>

既存のサーバーの更新

既存のサーバーを更新するには、以下を設定します。

/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
reload

新規サーバーの作成

新規サーバーを作成するには、以下を指定します。

/subsystem=undertow/server=new-server:add
reload

サーバーの削除

サーバーを削除するには、以下を指定します。

/subsystem=undertow/server=new-server:remove
reload

サーバーの設定に使用できる属性の完全リストは、Undertow サブシステムの属性の項を参照してください。

17.4. サーブレットコンテナーの設定

サーブレットコンテナーは、すべてのサーブレット、 JSP、およびソケット関連の設定 (セッションに関連する設定を含む) を提供します。ほとんどのサーバーにはサーブレットコンテナーが 1 つだけ必要ですが、servlet-container 要素を追加すると複数のサーブレットコンテナーを設定することができます。サーブレットコンテナーが複数設定されていると、複数のデプロイメントを異なる仮想ホストの同じコンテキストパスにデプロイできるなど、一部の動作を有効にすることができます。

注記

サーブレットコンテナーによって提供される設定の多くは、デプロイされたアプリケーションが web.xml ファイルを使用して個別にオーバーライドできます。

JBoss EAP はデフォルトでサーブレットコンテナーを提供します。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
    ...
  </server>
  <servlet-container name="default">
      <jsp-config/>
      <websockets/>
  </servlet-container>
...
</subsystem>

既存のサーブレットコンテナーの更新

既存のサーブレットコンテナーを更新するには、以下を指定します。

/subsystem=undertow/servlet-container=default:write-attribute(name=ignore-flush,value=true)
reload

新規サーブレットコンテナーの作成

新規のサーブレットコンテナーを作成するには、以下を指定します。

/subsystem=undertow/servlet-container=new-servlet-container:add
reload

サーブレットコンテナーの削除

サーブレットコンテナーを削除するには、以下を指定します。

/subsystem=undertow/servlet-container=new-servlet-container:remove
reload

サーブレットコンテナーの設定に使用できる属性の完全リストは、Undertow サブシステムの属性の項を参照してください。

17.5. ハンドラーの設定

JBoss EAP では、2 つのタイプのハンドラーを設定できます。

  • ファイルハンドラー
  • リバースプロキシハンドラー

ファイルハンドラーは静的ファイルに対応します。各ファイルハンドラーは仮想ホストの場所にアタッチされている必要があります。リバースプロキシーハンドラーによって、JBoss EAP は高パフォーマンスなリバースプロキシーとして機能することができます。AJP、HTTP、および HTTP.2 バックエンドを処理でき、mod_cluster をサポートします。

JBoss EAP はデフォルトでファイルハンドラーを提供します。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
      ...
  </server>
  <servlet-container name="default">
      ...
  </servlet-container>
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  ...
</subsystem>

静的リソースに WebDAV を使用

過去のバージョンの JBoss EAP では、web サブシステムで WebDAV を使用して (WebdavServlet 経由) 静的リソースをホストし、追加の HTTP メソッドを有効にしてこれらのファイルへのアクセスや操作を実行できました。JBoss EAP 7 では、ファイルハンドラーを経由した静的ファイルの対応メカニズムは undertow サブシステムによって提供されますが、undertow サブシステムは WebDAV をサポートしません。JBoss EAP 7 で WebDAV を使用する場合は、カスタムの WebDav サーブレットを記述してください。

既存のファイルハンドラーの更新

既存のファイルハンドラーを更新するには、以下を指定します。

/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=case-sensitive,value=true)
reload

新規ファイルハンドラーの作成

新規のファイルハンドラーを作成するには、以下を指定します。

/subsystem=undertow/configuration=handler/file=new-file-handler:add

ファイルハンドラーの削除

ファイルハンドラーを削除するには、以下を指定します。

/subsystem=undertow/configuration=handler/file=new-file-handler:remove
reload

ハンドラーの設定に使用できる属性の完全リストは、Undertow サブシステムの属性の項を参照してください。

17.6. フィルターの設定

フィルターはリクエストの一部の変更を可能にし、述語を使用してフィルターの実行時を制御できます。フィルターの一般的なユースケースには、ヘッダーの設定や GZIP 圧縮などがあります。

注記

フィルターの機能は、過去のバージョンの JBoss EAP で使用されたグローバルバルブと同等です。

以下のタイプのフィルターを定義できます。

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • rewrite

JBoss EAP はデフォルトで 2 つのフィルターを提供します。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  <buffer-cache name="default"/>
  <server name="default-server">
    ...
  </server>
  <servlet-container name="default">
    ...
  </servlet-container>
  <handlers>
      ...
  </handlers>
  <filters>
      <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
      <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
  </filters>
</subsystem>

既存のフィルターの更新

既存のフィルターを更新するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=server-header:write-attribute(name=header-value,value="JBoss-EAP")
reload

新規のフィルターの作成

新規のフィルターを作成するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")

フィルターの削除

フィルターを削除するには、以下を指定します。

/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload

フィルターの設定に使用できる属性の完全リストは、Undertow サブシステムの属性の項を参照してください。

17.7. デフォルトの Welcome Web アプリケーションの設定

JBoss EAP には、デフォルトでポート 8080 のルートコンテキストで表示される Welcome アプリケーションが含まれます。

Undertow には、Welcome コンテンツに対応するデフォルトのサーバーが事前設定されています。

デフォルトの Undertow サブシステムの設定

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
  ...
  <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https"/>
      <host name="default-host" alias="localhost">
          <location name="/" handler="welcome-content"/>
          <filter-ref name="server-header"/>
          <filter-ref name="x-powered-by-header"/>
      </host>
  </server>
  ...
  <handlers>
      <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
  </handlers>
  ...
</subsystem>

デフォルトのサーバー (default-server) にはデフォルトのホスト (default-host) が設定されています。デフォルトのホストは、welcome-content ファイルハンドラーで <location> 要素を使用して、サーバーのルートへのリクエストを処理するよう設定されています。welcome-content ハンドラーは path プロパティーに指定された場所でコンテンツを処理します。

このデフォルトの Welcome アプリケーションは、独自の Web アプリケーションで置き換えることができます。これは、以下の 2 つのいずれかの方法で設定できます。

Welcome コンテンツを無効にすることもできます。

welcome-content ファイルハンドラーの変更

新しいデプロイメントを参照する、既存の welcome-content ファイルハンドラーのパスを変更します。

/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=path,value="/path/to/content")
注記

または、サーバーのルートにより使用される異なるファイルハンドラーを作成することもできます。

/subsystem=undertow/configuration=handler/file=NEW_FILE_HANDLER:add(path="/path/to/content")
/subsystem=undertow/server=default-server/host=default-host/location=\/:write-attribute(name=handler,value=NEW_FILE_HANDLER)

変更を反映するためにサーバーをリロードします。

reload

default-web-module の変更

デプロイされた Web アプリケーションをサーバーのルートにマップします。

/subsystem=undertow/server=default-server/host=default-host:write-attribute(name=default-web-module,value=hello.war)

変更を反映するためにサーバーをリロードします。

reload

デフォルトの Welcome Web アプリケーションの無効化

default-hostlocation エントリー (/) を削除して welcome アプリケーションを無効にします。

/subsystem=undertow/server=default-server/host=default-host/location=\/:remove

変更を反映するためにサーバーをリロードします。

reload

17.8. HTTPS の設定

両方の Web アプリケーションおよび管理インターフェースと使用するために HTTPS を設定する方法の詳細は、How to Configure Server Security Guide を参照してください。

17.9. HTTP セッションタイムアウトの設定

HTTP セッションタイムアウトは、HTTP セッションの無効を宣言するために必要な非アクティブな期間を定義します。たとえば、HTTP セッションを作成する JBoss EAP にデプロイされたアプリケーションにユーザーがアクセスしたとします。HTTP セッションタイムアウト後に同じユーザーが同じアプリケーションにアクセスしようとすると、元の HTTP セッションは無効化され、ユーザーは新しい HTTP セッションの作成を強制されます。これにより、永続化されなかったデータを損失したり、ユーザーを再認証する必要がある場合があります。

HTTP セッションタイムアウトは、アプリケーションの web.xml ファイルに設定されますが、デフォルトの HTTP セッションタイムアウトは JBoss EAP 内で指定できます。サーバーのタイムアウト値はデプロイされたすべてのアプリケーションに適用されますが、アプリケーションの web.xml はサーバーの値をオーバーライドします。

サーバーの値は、undertow サブシステムの servlet-container セクションにある default-session-timeout プロパティーに指定されます。default-session-timeout の値は分単位で指定され、デフォルトは 30 です。

デフォルトのセッションタイムアウトの設定

default-session-timeout を設定するには、以下を指定します。

/subsystem=undertow/servlet-container=default:write-attribute(name=default-session-timeout, value=60)
reload
重要

HTTP セッションタイムアウトを変更する場合は、影響を受けるすべての JBoss EAP インスタンスを再起動する必要があります。この操作が行われるまで元の HTTP セッションタイムアウト値が適用されます。

17.10. HTTP のみのセッション管理クッキーの設定

セッション管理クッキーは、HTTP API と非 HTTP API (JavaScript など) の両方によってアクセスされます。JBoss EAP は HttpOnly ヘッダーを Set-Cookie 応答ヘッダーの一部としてクライアント (通常はブラウザー) に送信します。サポートされるブラウザーでこのヘッダーを有効にすると、非 HTTP API を経由してセッション管理クッキーへアクセスしないようにブラウザーに通知します。セッション管理クッキーを HTTP API のみに制限すると、クロスサイトスクリプティングの攻撃よるセッションクッキーの窃盗のリスクを軽減することができます。この動作を有効にするには、http-only 属性を true に設定する必要があります。

重要

HttpOnly ヘッダーを使用しても、単にブラウザーに通知を行うだけで、クロスサイトスクリプティングによる攻撃を実際に防ぐわけではありません。この動作を反映するには、ブラウザーも HttpOnly をサポートしている必要があります。

重要

http-only 属性を使用すると制限がセッション管理クッキーのみに適用され、その他のブラウザークッキーには適用されません。

http-only 属性は undertow サブシステムの 2 カ所で設定されます。

  • セッションクッキー設定としてサーブレットコンテナーで設定
  • 単一のサインオンプロパティーとしてサーバーのホストセクションで設定

host-only プロパティーをサーブレットコンテナーセッションクッキーに設定するには、以下を指定します。

/subsystem=undertow/servlet-container=default/setting=session-cookie:add
/subsystem=undertow/servlet-container=default/setting=session-cookie:write-attribute(name=http-only,value=true)
reload

host-only をシングルサインオンに設定

host-only プロパティーをホストシングルサインオンに設定するには、以下を指定します。

/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:add
/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:write-attribute(name=http-only,value=true)
reload

17.11. HTTP/2 の設定

Undertow では、HTTP/2 標準を使用できます。この標準は、ヘッダーの圧縮と多くのストリームの多重化を同じ TCP 接続で行い、待ち時間を削減します。さらに、リクエストの前にサーバーがリソースをクライアントにプッシュできる機能も提供するため、ページのロードがより速くなります。新しい仕様に更新していないクライアントをサポートするため、Undertow は HTTP/2 以前の SPDY とも互換性を維持します。

重要

JBoss EAP 7.0 では HTTP/2 は技術プレビューとしてのみサポートされ、HTTP/2 標準をサポートするブラウザーでのみ動作します。

重要

HTTP/2 を使用するには、Java 8 を使用し、クラスパス上に ALPN を設定する必要があります。これは、HTTP/2 には Java 8 のデフォルトインストールに含まれていない ALPN をサポートする TLS スタックが必要であるためです。

17.11.1. Undertow が HTTP/2 を使用するよう設定

Undertow が HTTP/2 を使用するよう設定するには、以下を行う必要があります。

Undertow が HTTPS を使用するよう設定する

Web アプリケーションに HTTPS を使用するよう Undertow を設定するには、How to Configure Server Security Guide を参照してください。

注記

HTTP アップグレードを使用するプレーン HTTP の場合は HTTPS を使用せずに HTTP/2 を使用することは可能です。この場合、ALPN をインストールする必要はなく、Undertow で HTTP/2 を有効にします。

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
ALPN JAR のダウンロード

最初に、Java のバージョンを確認します。ターミナルで以下のコマンドを実行し、インストールされている Java のバージョンを出力します。

java -version

このバージョンを基に このページ を参照し、このリスト からダウンロードする ALPN JAR の正しいバージョンを判断します。たとえば、実行している Java のバージョンが 1.8.0_51 である場合、使用する ALPN バージョンは 8.1.4.v20150727 で、alpn-boot-8.1.4.v20150727.jar をダウンロードします。

ALPN JAR の ブートクラスパスへの追加

正しいバージョンの ALPN JAR をダウンロードしたら、EAP_HOME/bin にコピーします。また、以下を bin/standalone.conf (管理対象ドメインで実行している場合は bin/domain.conf) に追加する必要もあります。$JBOSS_HOME$ALPN_VERSION は適切な値に置き換えてください。

JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-$ALPN_VERSION.jar"
重要

クラスパスの変更を反映するには、JBoss EAP を再起動する必要があります。

HTTPS リスナーでの HTTP/2 の有効化

HTTP/2 を使用するよう Undertow の HTTPS リスナーを有効にするには、enable-http2 属性を true に設定します。

/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)
HTTP/2 が使用されていることを検証

Undertow が HTTP/2 を使用していることを検証するには、Undertow からのヘッダーを確認する必要があります。https を使用して JBoss EAP インスタンスに移動し (例: https://localhost:8443)、ブラウザーの開発者ツールを使用してヘッダーを確認します。 Google Chrome などの一部のブラウザーは、HTTP/2 の使用時には HTTP/2 擬似ヘッダーを表示します (:path, :authority:method、および :scheme)。 Firefox や Safari などの他のブラウザーは、HTTP/2.0 のようにヘッダーの状態またはバージョンを表示します。

17.12. RequestDumping ハンドラーの設定

RequestDumping ハンドラー (io.undertow.server.handlers.RequestDumpingHandler)、JBoss EAP 内で Undertow によって処理されるリクエストとその応答オブジェクトの詳細をログに記録します。

重要

このハンドラーはデバッグに便利ですが、機密情報がログに記録される可能性があります。この点に留意してこのハンドラーを有効にしてください。

注記

RequestDumping ハンドラーは、JBoss EAP の過去のバージョンで使用された RequestDumperValve の代わりに使用されます。

RequestDumping ハンドラーは、JBoss EAP のサーバーレベルまたは個別のアプリケーション内で設定できます。

17.12.1. サーバーでの RequestDumping ハンドラーの設定

RequestDumping ハンドラーは式フィルターとして設定する必要があります。RequestDumping ハンドラーを式フィルターとして設定するには、以下を行う必要があります。

RequestDumping ハンドラーで新しい式フィルターを作成する
/subsystem=undertow/configuration=filter/expression-filter=requestDumperExpression:add(expression="dump-request")
Undertow Web サーバーで式フィルターを有効にする
/subsystem=undertow/server=default-server/host=default-host/filter-ref=requestDumperExpression:add
重要

このように RequestDumping ハンドラーを式フィルターとして有効にすると、Undertow Web サーバーによって処理されるすべてのリクエストおよびそれらの応答がログに記録されます。

特定 URL に対して RequestDumping ハンドラーを設定する

すべてのリクエストをログに記録する他に、特定の URL のリクエストやそれらの応答のみをログに記録するために式フィルターを使用することもできます。これには、pathpath-prefix、または path-suffix などの述語を式に使用します。たとえば、/myApplication/test へのリクエストとそれらの応答をすべてログに記録するには、式フィルターの作成時に式 "dump-request" の代わりに "path(/myApplication/test) -> dump-request" を使用します。これにより、/myApplication/test に完全一致するパスを持つリクエストのみが RequestDumping ハンドラーに送られます。

17.12.2. アプリケーション内での RequestDumping ハンドラーの設定

サーバーで RequestDumping ハンドラーを設定する他に、個別のアプリケーション内で設定することもできます。これにより、ハンドラーの範囲がそのアプリケーションのみに制限されます。 RequestDumping ハンドラーは WEB-INF/undertow-handlers.conf で設定する必要があります。

指定のアプリケーションのすべてのリクエストとそれらの応答をログに記録するよう WEB-INF/undertow-handlers.confRequestDumping ハンドラーを設定するには、以下の式を WEB-INF/undertow-handlers.conf に追加します。

WEB-INF/undertow-handlers.conf の例

dump-request

指定のアプリケーション内での特定 URL のリクエストやそれらの応答のみをログに記録するには、pathpath-prefixpath-suffix などの述語を式に使用します。たとえば、アプリケーションの test へのリクエストとそれらの応答をすべてログに記録するには、path 述語が含まれる以下の式を使用できます。

WEB-INF/undertow-handlers.conf の例

path(/test) -> dump-request

注記

pathpath-prefixpath-suffix などの述語をアプリケーションの WEB-INF/undertow-handlers.conf に定義された式で使用する場合、使用する値はアプリケーションのコンテキストルートからの相対値になります。たとえば、アプリケーションのコンテキストルートは myApplication で、式 path(/test) -> dump-requestWEB-INF/undertow-handlers.conf に設定されている場合、 /myApplication/test へのリクエストとそれらの応答のみがログに記録されます。

第18章 リモーティングの設定

18.1. Remoting サブシステム

remoting サブシステムは、ローカルおよびリモートサービスのインバウンドおよびアウトバウンド接続の設定を可能にします。

JBoss Remoting には、設定可能な要素としてエンドポイント、コネクター、複数のローカルおよびリモート接続 URI が含まれます。独自のアプリケーションにカスタムコネクターを使用する場合を除き、remoting のサブシステムの設定は必要でないことがほとんどです。EJB などの、リモーティングクライアントとして動作するアプリケーションには特定のコネクターに接続するための別の設定が必要になります。

Remoting サブシステムのデフォルト設定

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
    <endpoint/>
    <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>

remoting サブシステムで使用できる属性の完全リストは、Remoting サブシステムの属性を参照してください。

リモーティングエンドポイント

リモーティングエンドポイントは、io サブシステムによって宣言および設定される XNIO ワーカーを使用します。

リモーティングエンドポイントの設定方法の詳細は、エンドポイントの設定を参照してください。

コネクター

コネクターは主なリモーティング設定要素です。複数のコネクターを設定できます。各コネクターは、複数のサブ要素を持つ <connector> 要素とその他の属性で構成されます。デフォルトのコネクターは複数の JBoss EAP サブシステムによって使用されます。カスタムコネクターの要素や属性の設定はアプリケーションによって異なるため、詳細は Red Hat グローバルサポートサービスまでご連絡ください。

コネクターの設定方法の詳細は、コネクターの設定を参照してください。

アウトバウンド接続

3 つのタイプのアウトバウンド接続を指定することができます。

追加設定

リモーティングは、ネットワークインターフェースや IO ワーカーなどの remoting サブシステム外部で設定された複数の要素に依存します。

詳細は、リモーティングの追加設定を参照してください。

18.2. エンドポイントの設定

重要

JBoss EAP 6 では、ワーカースレッドプールは直接 remoting サブシステムで設定されていました。JBoss EAP 7 では、リモーティング endpoint 設定が io サブシステムからワーカーを参照します。

JBoss EAP は 以下の endpoint 設定をデフォルトで提供します。

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
  <endpoint/>
  ...
</subsystem>

既存のエンドポイント設定の更新

/subsystem=remoting/configuration=endpoint:write-attribute(name=authentication-retries,value=2)
reload

新規エンドポイント設定の作成

/subsystem=remoting/configuration=endpoint:add

エンドポイント設定の削除

/subsystem=remoting/configuration=endpoint:remove
reload

エンドポイント設定で使用できる属性の完全リストは、エンドポイントの設定を参照してください。

18.3. コネクターの設定

コネクターはリモーティングに関する主な設定要素で、追加設定のサブ要素が複数含まれます。

既存のコネクター設定の更新

/subsystem=remoting/connector=new-connector:write-attribute(name=socket-binding,value=my-socket-binding)
reload

新規コネクターの作成

/subsystem=remoting/connector=new-connector:add(socket-binding=my-socket-binding)

コネクターの削除

/subsystem=remoting/connector=new-connector:remove
reload

コネクターの設定に使用できる属性の完全リストは Remoting サブシステムの属性の項を参照してください。

18.4. HTTP コネクターの設定

HTTP コネクターは、HTTP アップグレードベースのリモーティングコネクターの設定を提供します。JBoss EAP はデフォルトで次の http-connector 設定を提供します。

<subsystem xmlns="urn:jboss:domain:remoting:3.0">
    ...
    <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>

デフォルトでは、この HTTP コネクターは undertow サブシステムに設定される default という名前の HTTP リスナーに接続します。詳細は、Web サーバーの設定 (Undertow) を参照してください。

既存の HTTP コネクター設定の更新

/subsystem=remoting/http-connector=new-connector:write-attribute(name=connector-ref,value=new-connector-ref)
reload

新規 HTTP コネクターの作成

/subsystem=remoting/http-connector=new-connector:add(connector-ref=default)

HTTP コネクターの削除

/subsystem=remoting/http-connector=new-connector:remove

HTTP コネクターの設定に使用できる属性の完全リストは、コネクターの属性を参照してください。

18.5. アウトバウンド接続の設定

アウトバウンド接続は、URI によって完全に指定される汎用のリモーティングアウトバウンド接続です。

既存のアウトバウンド接続の更新

/subsystem=remoting/outbound-connection=new-outbound-connection:write-attribute(name=uri,value=http://example.com)

新規アウトバウンド接続の作成

/subsystem=remoting/outbound-connection=new-outbound-connection:add(uri=http://example.com)

アウトバウンド接続の削除

/subsystem=remoting/outbound-connection=new-outbound-connection:remove

アウトバウンド接続の設定に使用できる属性の完全リストは、アウトバウンド接続の属性を参照してください。

18.6. リモートアウトバウンド接続の設定

リモートアウトバウンド接続は、プロトコル、アウトバウンドソケットバインディング、ユーザー名、およびセキュリティーレルムによって指定されます。プロトコルは remotehttp-remotinghttps-remoting のいずれかになります。

既存のリモートアウトバウンド接続の更新

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)

新規リモートアウトバウンド接続の作成

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)

リモートアウトバウント接続の削除

/subsystem=remoting/remote-outbound-connection=new-remote-outbound-connection:remove

リモートアウトバウンド接続の設定に使用できる属性の完全リストは、リモートアウトバウンド接続の属性を参照してください。

18.7. ローカルアウトバウンド接続の設定

ローカルアウトバウンド接続はプロトコルが local のリモーティングアウトバウンド接続で、アウトバウントソケットバインディングのみによって指定されます。

既存のローカルアウトバウンド接続の更新

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:write-attribute(name=outbound-socket-binding-ref,value=outbound-socket-binding)

新規ローカルアウトバウンド接続の作成

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:add(outbound-socket-binding-ref=outbound-socket-binding)

ローカルアウトバウンド接続の削除

/subsystem=remoting/local-outbound-connection=new-local-outbound-connection:remove

ローカルアウトバウンド接続の設定に使用できる属性の完全リストは、ローカルアウトバウンド接続の属性を参照してください。

18.8. リモーティングの追加設定

remoting サブシステム外部に接続されるリモーティング要素が複数あります。

IO ワーカー

以下のコマンドを使用してリモーティングの IO ワーカーを設定します。

/subsystem=remoting/configuration=endpoint:write-attribute(name=worker, value=WORKER_NAME)

IO ワーカーの設定方法に関する詳細は ワーカーの設定 を参照してください。

ネットワークインターフェース

remoting サブシステムによって使用されるネットワークインターフェースは public インターフェースです。このインターフェースは他のサブシステムによっても使用されるため、変更する場合は十分注意してください。

<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>
   <interface name="unsecure">
      <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
   </interface>
</interfaces>

管理対象ドメインでは、public インターフェースはホストごとに host.xml ファイルで定義されます。

ソケットバインディング

remoting サブシステムによって使用されるデフォルトのソケットバインディングはポート 8080 にバインドされます。

ソケットバインディングおよびソケットバインディンググループの詳細は、ソケットバインディングを参照してください。

EJB の リモーティングコネクター参照

ejb3 サブシステムにはリモートメソッド呼び出しに対するリモーティングコネクターへの参照が含まれています。デフォルト設定は次のとおりです。

<remote connector-ref="remoting-connector" thread-pool-name="default"/>
セキュアなトランスポート設定

リモーティングトランスポートはクライアントの要求があれば STARTTLS を使用してセキュアな接続 (HTTPS、Secure Servlet など) を使用します。安全な接続と安全でない接続の両方で同じソケットバインディング (ネットワークポート) が使用されるため、サーバー側に追加の設定をする必要はありません。クライアントは必要に応じて安全なトランスポートまたは安全でないトランスポートを要求します。EJB、ORB、JMS プロバイダーなどのリモーティングを使用する JBoss EAP のコンポーネントはデフォルトで安全なインターフェースを使用します。

警告

STARTTLS はクライアントの要求があればセキュアな接続を有効にしますが、セキュアでない接続がデフォルトになります。本質的に、StartTLS は攻撃者がクライアントの要求を妨害し、要求を編集してセキュアでない接続を要求する中間者攻撃の対象になりやすい欠点があります。セキュアでない接続が適切なフォールバックである場合を除き、クライアントがセキュアな接続を取得できなかったときに適切に失敗するよう記述する必要があります。

第19章 IO サブシステムの設定

19.1. IO サブシステムの概要

io サブシステムは、Undertow や Remoting などの他のサブシステムによって使用される XNIO ワーカーバッファープール を定義します。これらのワーカーやバッファープールは、io サブシステムの以下のコンポーネント内で定義されます。

IO サブシステムのデフォルト設定

<subsystem xmlns="urn:jboss:domain:io:1.1">
    <worker name="default"/>
    <buffer-pool name="default"/>
</subsystem>

19.2. ワーカーの設定

ワーカーは XNIO ワーカーインスタンスです。XNIO ワーカーインスタンスは、IO およびワーカースレッドの管理や SSL サポートなどの機能を提供する Java NIO API の抽象化レイヤーです。JBoss EAP はデフォルトで default という単一のワーカーを提供しますが、複数のワーカーを定義できます。

既存のワーカーの更新

既存のワーカーを更新するには、以下を指定します。

/subsystem=io/worker=default:write-attribute(name=io-threads,value=10)
reload

新規ワーカーの作成

新規ワーカーを作成するには、以下を指定します。

/subsystem=io/worker=newWorker:add

ワーカーの削除

ワーカーを削除するには、以下を指定します。

/subsystem=io/worker=newWorker:remove
reload

ワーカーの設定に使用できる属性の完全リストは IO サブシステムの属性 の項を参照してください。

19.3. バッファープールの設定

バッファープールはプールされた NIO バッファーインスタンスです。

重要

バッファーサイズの変更はアプリケーションのパフォーマンスに大きく影響します。通常、ほとんどのサーバーでは 16 K が理想のサイズになります。

既存のバッファープールの更新

既存のバッファープールを更新するには、以下を指定します。

/subsystem=io/buffer-pool=default:write-attribute(name=direct-buffers,value=true)
reload

バッファープールの作成

新しいバッファープールを作成するには、以下を指定します。

/subsystem=io/buffer-pool=newBuffer:add

バッファープールの削除

バッファープールを削除するには、以下を指定します。

/subsystem=io/buffer-pool=newBuffer:remove
reload

バッファープールの設定に使用できる属性の完全リストは IO サブシステムの属性 の項を参照してください。

第20章 バッチアプリケーションの設定

JBoss EAP 7 には JSR-352 に定義されている Java バッチアプリケーションのサポートが導入されました。バッチアプリケーションを実行するための環境を設定し、batch-jberet サブシステムを使用してバッチジョブを管理できます。

バッチアプリケーションの開発に関する詳細は、JBoss EAP 開発ガイドJava バッチアプリケーションの開発を参照してください。

20.1. batch ジョブの設定

JBeret 実装を基にした batch-jberet サブシステムを使用してバッチジョブを設定できます。

デフォルトの batch-jberet サブシステム設定は、インメモリージョブリポジトリーとデフォルトのスレッドプールの設定を定義します。

<subsystem xmlns="urn:jboss:domain:batch-jberet:1.0">
    <default-job-repository name="in-memory"/>
    <default-thread-pool name="batch"/>
    <job-repository name="in-memory">
        <in-memory/>
    </job-repository>
    <thread-pool name="batch">
        <max-threads count="10"/>
        <keepalive-time time="30" unit="seconds"/>
    </thread-pool>
</subsystem>

デフォルトでは、サーバーの中断中に停止したバッチジョブはサーバーの再開時に再度開始されます。restart-jobs-on-resume プロパティーを false に設定すると STOPPED 状態のジョブをそのままにすることができます。

/subsystem=batch-jberet:write-attribute(name=restart-jobs-on-resume,value=false)

バッチジョブリポジトリーおよびスレッドプールを設定することもできます。

20.1.1. バッチジョブリポジトリーの設定

本項では、管理 CLI を使用してバッチジョブ情報を保存するインメモリーおよび JDBC ジョブリポジトリーを設定する方法を説明します。管理コンソールを使用してジョブリポジトリーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Batch サブシステムを選択し、左側のメニューから In Memory または JDBC を選択します。

インメモリージョブリポジトリーの追加

バッチジョブ情報をメモリーに保存するジョブリポジトリーを追加できます。

/subsystem=batch-jberet/in-memory-job-repository=REPOSITORY_NAME:add
JDBC ジョブリポジトリー

バッチジョブ情報をデータベースに保存するジョブリポジトリーを追加できます。data-source を指定してデータベースに接続する必要があります。

/subsystem=batch-jberet/jdbc-job-repository=REPOSITORY_NAME:add(data-source=java:jboss/datasources/DATASOURCE)
デフォルトのジョブリポジトリーの設定

インメモリーまたは JDBC ジョブリポジトリーをバッチアプリケーションのデフォルトのジョブリポジトリーとして設定できます。

/subsystem=batch-jberet:write-attribute(name=default-job-repository,value=REPOSITORY_NAME)

サーバーをリロードする必要があります。

reload

20.1.2. バッチスレッドプールの設定

本項では、管理 CLI を使用を使用してバッチジョブに使用されるスレッドプールおよびスレッドファクトリーを設定する方法を説明します。管理コンソールを使用してスレッドプールおよびスレッドファクトリーを設定することもできます。管理コンソールを使用する場合は Configuration タブで Batch サブシステムを選択し、左側のメニューから Thread Pools または Thread Factories を選択します。

スレッドプールの設定

スレッドプールを追加するときに max-threads を指定する必要があります。パーティションのジョブが想定どおりに実行されるように 2 つのスレッドが予約されているため、3 よりも大きい値を常に設定してください。

  1. スレッドプールを追加します。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:add(max-threads=10)
  2. 必要な場合は keepalive-time の値を設定します。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=keepalive-time,value={time=60,unit=SECONDS})
スレッドファクトリーの使用
  1. スレッドファクトリーを追加します。

    /subsystem=batch-jberet/thread-factory=THREAD_FACTORY_NAME:add
  2. スレッドファクトリーの属性を設定します。

    • group-name - このスレッドファクトリーに作成するスレッドグループの名前。
    • priority - 作成されたスレッドの優先度。
    • thread-name-pattern - スレッドの名前の作成に使用されるテンプレート。以下のパターンを使用できます。

      • %% - パーセント記号
      • %t - ファクトリーごとのスレッドシーケンス番号
      • %g - グローバルスレッドシーケンス番号
      • %f - ファクトリーシーケンス番号
      • %i - スレッド ID
  3. スレッドファクトリーをスレッドプールに割り当てます。

    /subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:write-attribute(name=thread-factory,value=THREAD_FACTORY_NAME)

    サーバーをリロードする必要があります。

    reload
デフォルトスレッドプールの設定

別のスレッドプールをデフォルトのスレッドプールとして設定できます。

/subsystem=batch-jberet:write-attribute(name=default-thread-pool,value=THREAD_POOL_NAME)

サーバーをリロードする必要があります。

reload
スレッドプールの統計表示

read-resource 管理 CLI 操作を使用するとバッチスレッドプールのランタイム情報を表示できます。このランタイム情報を表示するには include-runtime=true パラメーターを使用する必要があります。

/subsystem=batch-jberet/thread-pool=THREAD_POOL_NAME:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "active-count" => 0,
        "completed-task-count" => 0L,
        "current-thread-count" => 0,
        "keepalive-time" => undefined,
        "largest-thread-count" => 0,
        "max-threads" => 15,
        "name" => "THREAD_POOL_NAME",
        "queue-size" => 0,
        "rejected-count" => 0,
        "task-count" => 0L,
        "thread-factory" => "THREAD_FACTORY_NAME"
    }
}

管理コンソールの Runtime タブで Batch サブシステムを選択して、バッチスレッドプールのランタイム情報を表示することもできます。

20.2. バッチジョブの管理

デプロイメントの batch-jberet サブシステムリソースを使用すると、バッチジョブを開始、停止、および再開できます。ジョブ実行の詳細を表示することもできます。

バッチジョブの再開

STOPPED または FAILED 状態のジョブを再開するには、実行 ID を指定し、任意でバッチジョブの再開時に使用するプロパティーを指定します。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:restart-job(execution-id=EXECUTION_ID,properties={PROPERTY=VALUE})

実行 ID はジョブインスタンスが最後に実行された ID である必要があります。

バッチジョブの開始

バッチジョブを開始するには、ジョブ XML ファイルを指定し、任意でバッチジョブの再開時に使用するプロパティーを指定します。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:start-job(job-xml-name=JOB_XML_NAME,properties={PROPERTY=VALUE})

バッチジョブの停止

実行中のバッチジョブを停止するには、実行 ID を指定します。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:stop-job(execution-id=EXECUTION_ID)

バッチジョブ実行詳細の表示

バッチジョブ実行の詳細を表示することができます。このランタイム情報を表示するには include-runtime=true パラメーターを使用する必要があります。

/deployment=DEPLOYMENT_NAME/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)
{
    "outcome" => "success",
    "result" => {"job" => {"import-file" => {
        "instance-count" => 2,
        "running-executions" => 0,
        "execution" => {
            "2" => {
                "batch-status" => "COMPLETED",
                "create-time" => "2016-04-11T22:03:12.708-0400",
                "end-time" => "2016-04-11T22:03:12.718-0400",
                "exit-status" => "COMPLETED",
                "instance-id" => 58L,
                "last-updated-time" => "2016-04-11T22:03:12.719-0400",
                "start-time" => "2016-04-11T22:03:12.708-0400"
            },
            "1" => {
                "batch-status" => "FAILED",
                "create-time" => "2016-04-11T21:57:17.567-0400",
                "end-time" => "2016-04-11T21:57:17.596-0400",
                "exit-status" => "Error : org.hibernate.exception.ConstraintViolationException: could not execute statement",
                "instance-id" => 15L,
                "last-updated-time" => "2016-04-11T21:57:17.597-0400",
                "start-time" => "2016-04-11T21:57:17.567-0400"
            }
        }
    }}}
}

第21章 Naming サブシステムの設定

21.1. Naming サブシステム

naming サブシステムは JBoss EAP のJNDI 実装を提供します。このサブシステムを設定して、グローバル JNDI 名前空間のエントリーをバインドすることができます。さらに、このサブシステムを設定してリモート JNDI をアクティブまたは非アクティブにすることもできます。

以下は、すべての要素と属性が指定された naming サブシステムの XML 設定例になります。

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <simple name="java:global/simple-integer-binding" value="100" type="int" />
        <simple name="java:global/jboss.org/docs/url" value="https://docs.jboss.org" type="java.net.URL" />
        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" />
        <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
            <environment>
                <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
                <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
                <property name="java.naming.security.authentication" value="simple" />
                <property name="java.naming.security.principal" value="uid=admin,ou=system" />
                <property name="java.naming.security.credentials" value="secret" />
            </environment>
        </external-context>
        <lookup name="java:global/new-alias-name" lookup="java:global/original-name" />
    </bindings>
    <remote-naming/>
</subsystem>

21.2. グローバルバインディングの設定

naming サブシステムは、エントリーを java:globaljava:jboss、または java グローバル JNDI 名前空間へバインドできるようにしますが、標準のポータブルな java:global 名前空間を使用することが推奨されます。

グローバルバインディングは naming サブシステムの <bindings> 要素で設定されます。以下の 4 種類のバインディングがサポートされます。

シンプルバインディングの設定

simple XML 設定要素は、プリミティブまたは java.net.URL エントリーにバインドします。

  • name 属性は必須で、エントリーのターゲット JNDI 名を指定します。
  • value 属性は必須で、エントリーの値を定義します。
  • 任意の type 属性はエントリーの値の型を指定し、デフォルトは java.lang.String になります。java.lang.String の他に、int または java.lang.Integer、および java.net.URL などのプリミティブ型や対応するオブジェクトラッパークラスを指定できます。

以下に、シンプルバインディングを作成する管理 CLI コマンドの例を示します。

/subsystem=naming/binding=java\:global\/simple-integer-binding:add(binding-type=simple, type=int, value=100)

結果の XML 設定

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <simple name="java:global/simple-integer-binding" value="100" type="int"/>
    </bindings>
    <remote-naming/>
</subsystem>

以下のコマンドを使用してバインディングを削除します。

/subsystem=naming/binding=java\:global\/simple-integer-binding:remove

バインディングオブジェクトファクトリー

object-factory XML 設定要素は javax.naming.spi.ObjectFactory エントリーをバインドします。

  • name 属性は必須で、エントリーのターゲット JNDI 名を指定します。
  • class 属性は必須で、オブジェクトファクトリーの Java タイプを定義します。
  • module 属性は必須で、オブジェクトファクトリーの Java クラスをロードできる JBoss Module ID を指定します。
  • 任意の environment 子要素は、カスタム環境をオブジェクトファクトリーに提供するために使用できます。

以下に、オブジェクトファクトリーバインディングを作成する管理 CLI コマンドの例を示します。

/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])

結果の XML 設定

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory">
            <environment>
                <property name="p1" value="v1" />
                <property name="p2" value="v2" />
            </environment>
        </object-factory>
    </bindings>
  </subsystem>

以下のコマンドを使用してバインディングを削除します。

/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove

外部コンテンツのバインド

LDAP コンテキストなどの外部 JNDI コンテキストのフェデレーションは、external-context XML 設定要素を使用して実行されます。

  • name 属性は必須で、エントリーのターゲット JNDI 名を指定します。
  • class 属性は必須で、フェデレートされたコンテキストの作成に使用される Java 初期ネーミングコンテキストタイプを示します。このようなタイプには、単一の環境マップ引数を持つコンストラクターが必要なことに注意してください。
  • 任意の module 属性は、外部 JNDI コンテキストが必要とするすべてのクラスをロードできる JBoss Module ID を指定します。
  • オプションの cache 属性は外部コンテキストインスタンスをキャッシュする必要があるかどうかを示し、デフォルトは false になります。
  • 任意の environment 子要素は、外部コンテキストを検索するために必要なカスタム環境を提供するために使用されます。

以下に、外部コンテキストバインディングを作成する管理 CLI コマンドの例を示します。

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap\:\/\/ldap.example.com\:389, java.naming.security.authentication=simple, java.naming.security.principal=uid\=admin\,ou\=system, java.naming.security.credentials= secret])

結果の XML 設定

<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true">
            <environment>
                <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
                <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" />
                <property name="java.naming.security.authentication" value="simple" />
                <property name="java.naming.security.principal" value="uid=admin,ou=system" />
                <property name="java.naming.security.credentials" value="secret" />
            </environment>
        </external-context>
    </bindings>
</subsystem>

以下のコマンドを使用してバインディングを削除します。

/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
注記

JNDI プロバイダーのリソースルックアップが lookup(Name) メソッドを適切に実装しないと、「javax.naming.InvalidNameException: Only support CompoundName names」エラーが発生することがあります。

以下のプロパティーを追加せずに、外部コンテキスト環境が lookup(String) メソッドを使用するよう指定すると、この問題を回避できる可能性がありますが、パフォーマンスが劣化します。

<property name="org.jboss.as.naming.lookup.by.string" value="true"/>

ルックアップエイリアスのバインド

lookup 要素を使用すると、既存のエントリーを追加の名前またはエイリアスにバインドできます。

  • name 属性は必須で、エントリーのターゲット JNDI 名を指定します。
  • lookup 属性は必須で、ソース JNDI 名を示します。

以下に、既存のエントリーをエイリアスにバインドする管理 CLI コマンドの例を示します。

/subsystem=naming/binding=java\:global\/new-alias-name:add(binding-type=lookup, lookup=java\:global\/original-name)

結果の XML 設定

<lookup name="java:global/new-alias-name" lookup="java:global/original-name" />

以下のコマンドを使用してバインディングを削除します。

/subsystem=naming/binding=java\:global\/c:remove

21.3. リモート JNDI インターフェースの設定

リモート JNDI インターフェースは、クライアントがリモート JBoss EAP インスタンスでエントリーをルックアップできるようにします。naming サブシステムを設定すると、このインターフェースをアクティブまたは非アクティブにすることができます (デフォルトではアクティブになります)。リモート JNDI インターフェースは <remote-naming> 要素を使用して設定されます。

以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースをアクティブまたは非アクティブにします。

/subsystem=naming/service=remote-naming:add

以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースを非アクティブにします。

/subsystem=naming/service=remote-naming:remove
注記

リモート JNDI 上では java:jboss/exported コンテキスト内のエントリーのみにアクセスできます。

第22章 高可用性の設定

22.1. 高可用性

JBoss EAP はデプロイされた Java EE アプリケーションの可用性を保証するために以下の高可用性サービスを提供します。

ロードバランシング
複数のサーバーにワークロードを分散し、サービスが大量のリクエストを処理できるようにします。リクエストが大量に発生しても、クライアントはサービスからタイムリーに応答を受け取ることができます。
フェイルオーバー
ハードウェアやネットワークの障害が発生してもクライアントのサービスへのアクセスが中断しないようにします。サービスに障害が発生すると、別のクラスターメンバーがクライアントのリクエストを引き継ぎ、処理が続行されます。

クラスタリングはこれらすべての機能を包括する言葉です。ワークロードを共有し (ロードバランシング)、他のクラスターメンバーに障害が発生したときにクライアントの処理を引き継ぐよう (フェイルオーバー)、クラスターのメンバーを設定することができます。

注記

選択した JBoss EAP の操作モード (スタンドアロンサーバーまたは管理対象ドメイン) によってサーバーの管理方法が異なることに注意してください。操作モードに関係なく JBoss EAP で高可用性サービスを設定できます。

JBoss EAP は、さまざまなコンポーネントを使用した異なるレベルの高可用性をサポートします。高可用性を実現できるランタイムのコンポーネントおよびアプリケーションの一部は以下のとおりです。

  • アプリケーションサーバーのインスタンス
  • 内部 JBoss Web Server、Apache HTTP Server、Microsoft IIS、または Oracle iPlanet Web Server と併用される Web アプリケーション
  • ステートフルおよびステートレスセッション Enterprise JavaBean (EJB)
  • シングルサインオン (SSO) メカニズム
  • HTTP セッション
  • JMS サービスおよびメッセージ駆動型 Bean (MDB)
  • シングルトン MSC サービス
  • シングルトンデプロイメント

JBoss EAP では、jgroupsinfinispan、および modcluster サブシステムによってクラスタリングが使用できるようになります。 ha および full-ha プロファイルではこれらのシステム有効になっています。JBoss EAP では、これらのサービスは必要に応じて起動およびシャットダウンしますが、分散可能と設定されたアプリケーションがサーバーにデプロイされた場合のみ起動します。

アプリケーションを分散可能とする方法は、JBoss EAP 開発ガイド を参照してください。

22.2. JGroups を用いたクラスター通信

22.2.1. JGroups

JGroups は信頼できるメッセージングのためのツールキットで、お互いにメッセージを送信するノードを持つクラスターを作成するために使用できます。

jgroups サブシステムは JBoss EAP で高可用性サービスのグループ通信サポートを提供します。これにより、名前付きのチャネルおよびプロトコルスタックを設定でき、チャネルのランタイム統計を表示することもできます。jgroups サブシステムは高可用性の機能を提供する設定を使用する場合に使用できます (管理対象ドメインでは hafull-ha プロファイル、スタンドアロンサーバーは standalone-ha.xmlstandalone-full-ha.xml 設定ファイルなど)。

JBoss EAP には 2 つの JGroups スタックが事前に設定されています。

udp
クラスターのノードは UDP (User Datagram Protocol) マルチキャストを使用してお互いに通信します。これはデフォルトのスタックです。
tcp
クラスターのノードは TCP (Transmission Control Protocol) を使用してお互いに通信します。

事前設定されたスタックを使用できますが、システムの要件に合うよう独自に定義することもできます。

注記

TCP はエラーのチェック、パケットの順番、および輻輳制御を処理するため、TCP のオーバーヘッドは UDP よりも大きく、速度も遅くなると考えられます。JGroups は UDP のこれらの機能を処理しますが、TCP はこれらの機能を独自で処理します。信頼できないネットワークや輻輳度の高いネットワークで JGroups を使用する場合やマルチキャストが使用できない場合は、TCP を選択するとよいでしょう。

22.2.2. デフォルトの JGroups チャネルが TCP を使用するよう設定

デフォルトでは、クラスターノードは UDP プロトコルを使用して通信します。デフォルトの ee JGroups は事前定義された udp プロトコルスタックを使用します。

<channels default="ee">
  <channel name="ee" stack="udp"/>
</channels>
<stacks>
  <stack name="udp">
    <transport type="UDP" socket-binding="jgroups-udp"/>
    <protocol type="PING"/>
    ...
  </stack>
  <stack name="tcp">
    <transport type="TCP" socket-binding="jgroups-tcp"/>
    <protocol type="MPING" socket-binding="jgroups-mping"/>
    ...
  </stack>
</stacks>

一部のネットワークでは TCP のみを使用できます。以下の管理 CLI コマンドを使用して、ee チャネルが事前設定された tcp スタックを使用するようにします。

/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)

このデフォルトの tcp スタックは、IP マルチキャストを使用して初期クラスターメンバーシップを検出する MPING プロトコルを使用します。他のメンバーシップ検出プロトコルに対してスタックを設定する場合は以下の項を参照してください。

  • TCPPING プロトコルを使用して静的クラスターメンバーシップのリストを定義する。
  • TCPGOSSIP プロトコルを使用し、外部ゴシップルーターを使ってクラスターのメンバーを検出する。

22.2.3. TCPPING の設定

この手順は TCPPING プロトコルを使用する新しい JGroups スタックを作成し、静的クラスターメンバーシップのリストを定義します。ベーススクリプトは、tcpping スタックを作成し、この新しいスタックを使用するようデフォルトの ee チャネルを設定します。このスクリプトの管理 CLI コマンドは環境に合わせてカスタマイズする必要があり、バッチで処理されます。

  1. 以下のスクリプトをテキストエディターにコピーし、ローカルファイルシステムに保存します。

    batch
    # Add the tcpping stack
    /subsystem=jgroups/stack=tcpping:add
    /subsystem=jgroups/stack=tcpping/transport=TCP:add(socket-binding=jgroups-tcp)
    /subsystem=jgroups/stack=tcpping/protocol=TCPPING:add
    # Set the properties for the TCPPING protocol
    /subsystem=jgroups/stack=tcpping/protocol=TCPPING:write-attribute(name=properties,value={initial_hosts="HOST_A[7600],HOST_B[7600]",port_range=0,timeout=3000})
    /subsystem=jgroups/stack=tcpping/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpping/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)
    /subsystem=jgroups/stack=tcpping/protocol=FD:add
    /subsystem=jgroups/stack=tcpping/protocol=VERIFY_SUSPECT:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.NAKACK2:add
    /subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.STABLE:add
    /subsystem=jgroups/stack=tcpping/protocol=pbcast.GMS:add
    /subsystem=jgroups/stack=tcpping/protocol=MFC:add
    /subsystem=jgroups/stack=tcpping/protocol=FRAG2:add
    # Set tcpping as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpping)
    run-batch
    reload

    定義するプロトコルの順序が重要になることに注意してください。

  2. 環境に合わせてスクリプトを変更します。

    • 管理対象ドメインで実行している場合は、/subsystem=jgroups コマンドの前に /profile=PROFILE_NAME を追加し、更新するプロファイルを指定する必要があります。
    • 任意で、環境に合わせて TCPPING プロパティーを調整します。

      • initial_hosts: 既知と見なされたホストのカンマ区切りのリストであり、初期メンバーシップを検索するために使用できます。
      • port_range: 必要な場合はポートの範囲を割り当てできます。ポート範囲として 2 を割り当て、初期ポートが 7600 である場合、TCPPING はポート 7600-7601 上の各ホストと通信しようとします。
      • timeout: クラスターメンバーのタイムアウト値 (ミリ秒単位)。
  3. スクリプトファイルを管理 CLI に渡してスクリプトを実行します。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME

TCPPING スタックが使用できるようになり、ネットワークの通信に TCP が使用されます。

22.2.4. TCPGOSSIP の設定

この手順は、TCPGOSSIP プロトコルを使用する新しい JGroups スタックを作成し、外部ゴシップルーターを使用してクラスターのメンバーを検索します。ベーススクリプトは、tcpgossip スタックを作成し、この新しいスタックを使用するようデフォルトの ee チャネルを設定します。このスクリプトの管理 CLI コマンドは環境に合わせてカスタマイズする必要があり、バッチで処理されます。

  1. 以下のスクリプトをテキストエディターにコピーし、ローカルファイルシステムに保存します。

    batch
    # Add the tcpgossip stack
    /subsystem=jgroups/stack=tcpgossip:add
    /subsystem=jgroups/stack=tcpgossip/transport=TCP:add(socket-binding=jgroups-tcp)
    /subsystem=jgroups/stack=tcpgossip/protocol=TCPGOSSIP:add
    # Set the properties for the TCPGOSSIP protocol
    /subsystem=jgroups/stack=tcpgossip/protocol=TCPGOSSIP:write-attribute(name=properties,value={initial_hosts="HOST_A[13001]"})
    /subsystem=jgroups/stack=tcpgossip/protocol=MERGE3:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)
    /subsystem=jgroups/stack=tcpgossip/protocol=FD:add
    /subsystem=jgroups/stack=tcpgossip/protocol=VERIFY_SUSPECT:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.NAKACK2:add
    /subsystem=jgroups/stack=tcpgossip/protocol=UNICAST3:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.STABLE:add
    /subsystem=jgroups/stack=tcpgossip/protocol=pbcast.GMS:add
    /subsystem=jgroups/stack=tcpgossip/protocol=MFC:add
    /subsystem=jgroups/stack=tcpgossip/protocol=FRAG2:add
    # Set tcpgossip as the stack for the ee channel
    /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpgossip)
    run-batch
    reload

    定義するプロトコルの順序が重要になることに注意してください。

  2. 環境に合わせてスクリプトを変更します。

    • 管理対象ドメインで実行している場合は、/subsystem=jgroups コマンドの前に /profile=PROFILE_NAME を追加し、更新するプロファイルを指定する必要があります。
    • 任意で、環境に合わせて TCPGOSSIP プロパティーを調整します。

      • initial_hosts: 既知と見なされたホストのカンマ区切りのリストであり、初期メンバーシップを検索するために使用できます。
      • reconnect_interval: 接続が切断されたスタブがゴシップルーターへの再接続を試みる間隔 (ミリ秒単位)。
      • sock_conn_timeout: ソケット作成の最大時間。デフォルトは 1000 ミリ秒です。
      • sock_read_timeout: 読み取りがブロックされる最大時間 (ミリ秒単位)。 0 を値として指定すると無制限にブロックされます。
  3. スクリプトファイルを管理 CLI に渡してスクリプトを実行します。

    $ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME

TCPGOSSIP スタックが使用できるようになり、ネットワークの通信に TCP が使用されます。このスタックはゴシップルーターと使用するように設定されるため、JGroups メンバーは他のクラスターメンバーを見つけることができます。

22.2.5. JGroups のネットワークインターフェースへのバインディング

デフォルトでは、JGroups は private ネットワークインターフェースのみへバインドし、private ネットワークインターフェースはデフォルト設定でローカルホストへ示されます。クラスタリングのトラフィックはパブリックネットワークインターフェースで公開するべきではないため、セキュリティー上の理由で JGroups は JBoss EAP の起動中に指定された -b 引数によって定義されたネットワークインターフェースにはバインドしません。

ネットワークインターフェースの設定方法については ネットワークおよびポート設定の章を参照してください。

重要

セキュリティー上の理由で、JGroups はパブリックではないネットワークインターフェースのみにバインドされる必要があります。また、パフォーマンス上の理由で JGroups トラフィックのネットワークインターフェースは専用の VLAN (Virtual Local Area Network) の一部にすることが推奨されます。

22.2.6. クラスターのセキュア化

クラスターをセキュアに実行するには、複数の課題に対応する必要があります。

  • 承認されていないノードがクラスターに参加しないようにします。これは認証を要求して対処します。
  • クラスターメンバーがクラスターメンバー以外と通信しないようにします。これはメッセージの暗号化で対処します。
認証の設定

JGroups の認証は AUTH プロトコルによって実行されます。認証されたノードのみがクラスターに参加できるようにすることが目的です。

該当のサーバー設定ファイルに AUTH プロトコルと適切なプロパティー設定を追加します。AUTH プロトコルは pbcast.GMS プロトコルの直前に設定する必要があります。

<subsystem xmlns="urn:jboss:domain:jgroups:4.0">
  <stacks>
    <stack name="udp">
      <transport type="UDP" socket-binding="jgroups-udp"/>
      <protocol type="PING"/>
      <protocol type="MERGE3"/>
      <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
      <protocol type="FD_ALL"/>
      <protocol type="VERIFY_SUSPECT"/>
      <protocol type="pbcast.NAKACK2"/>
      <protocol type="UNICAST3"/>
      <protocol type="pbcast.STABLE"/>
      <protocol type="AUTH">
        <property name="auth_class">org.jgroups.auth.MD5Token</property>
        <property name="auth_value">mytoken</property> <!-- Change this password -->
        <property name="token_hash">MD5</property>
      </protocol>
      <protocol type="pbcast.GMS"/>
      <protocol type="UFC"/>
      <protocol type="MFC"/>
      <protocol type="FRAG2"/>
    </stack>
  </stacks>
</subsystem>
暗号化の設定

JGroups はクラスターのメンバーが共有する秘密鍵を使用してメッセージを暗号化します。送信元は共有する秘密鍵を使用してメッセージを暗号化し、受信先は同じ秘密鍵を使用してメッセージを復号化します。対称暗号化SYM_ENCRYPT プロトコルを使用して設定され、ノードは共有のキーストアを使用して秘密鍵を取得します。非対称暗号化ASYM_ENCRYPT プロトコルを使用して設定され、ノードは AUTH を使用して認証された後にクラスターのコーディネーターから秘密鍵を取得します。

対称暗号化の使用

SYM_ENCRYPT を使用するには、各ノードの JGroups 設定で参照されるキーストアを設定する必要があります。

  1. キーストアを作成します。

    以下のコマンドの VERSION は適切な JGroups JAR バージョンに置き換え、PASSWORD はキーストアパスワードに置き換えます。

    $ java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykey

    これにより、JGroups 設定で参照される defaultStore.keystore ファイルが生成されます。

  2. jgroups サブシステムで SYM_ENCRYPT プロトコルを設定します。

    該当のサーバー設定ファイルに SYM_ENCRYPT プロトコルと適切なプロパティー設定を追加します。SYM_ENCRYPT プロトコルは pbcast.NAKACK2 プロトコルの直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:4.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="SYM_ENCRYPT">
            <property name="provider">SunJCE</property>
            <property name="sym_algorithm">AES</property>
            <property name="encrypt_entire_message">true</property>
            <property name="keystore_name">/path/to/defaultStore.keystore</property>
            <property name="store_password">PASSWORD</property>
            <property name="alias">mykey</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
注記

SYM_ENCRYPT を使用する場合、AUTH の設定は任意です。

非対称暗号化の使用
  1. jgroups サブシステムで ASYM_ENCRYPT プロトコルを設定します。

    該当のサーバー設定ファイルに ASYM_ENCRYPT プロトコルと適切なプロパティー設定を追加します。ASYM_ENCRYPT プロトコルは pbcast.NAKACK2 プロトコルの直前に設定する必要があります。

    <subsystem xmlns="urn:jboss:domain:jgroups:4.0">
      <stacks>
        <stack name="udp">
          <transport type="UDP" socket-binding="jgroups-udp"/>
          <protocol type="PING"/>
          <protocol type="MERGE3"/>
          <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
          <protocol type="FD_ALL"/>
          <protocol type="VERIFY_SUSPECT"/>
          <protocol type="ASYM_ENCRYPT">
            <property name="encrypt_entire_message">true</property>
            <property name="sym_keylength">128</property>
            <property name="sym_algorithm">AES/ECB/PKCS5Padding</property>
            <property name="asym_keylength">512</property>
            <property name="asym_algorithm">RSA</property>
          </protocol>
          <protocol type="pbcast.NAKACK2"/>
          <protocol type="UNICAST3"/>
          <protocol type="pbcast.STABLE"/>
          <!-- Configure AUTH protocol here -->
          <protocol type="pbcast.GMS"/>
          <protocol type="UFC"/>
          <protocol type="MFC"/>
          <protocol type="FRAG2"/>
        </stack>
      </stacks>
    </subsystem>
  2. jgroups サブシステムで AUTH プロトコルを設定します。

    ASYM_ENCRYPT には AUTH が必要です。手順は 認証の設定の項を参照してください。

22.2.7. JGroups スレッドプールの設定

jgroups サブシステムには defaultinternaloob、および timer スレッドプールが含まれます。これらのプールはすべての JGroups スタックに設定できます。

以下の表は、各スレッドプールに設定できる属性とデフォルト値を表しています。

スレッドプール名keepalive-timemax-threadsmin-threadsqueue-length

default

60000L

300

20

100

internal

60000L

4

2

100

oob

60000L

300

20

0

timer

5000L

4

2

500

以下の構文を使用して、管理 CLI で JGroups スレッドプールを設定します。

/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)

以下は、 udp スタックの default スレッドプールで max-threads の値を 500 に設定する管理 CLI コマンドの例になります。

/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")

22.2.8. JGroups の送受信バッファーの設定

バッファーサイズ警告の解決

デフォルトでは、JGroups は特定の送受信バッファー値で設定されています。しかし、可能なバッファーサイズがオペレーティングシステムによって制限され、JBoss EAP が設定されたバッファー値を使用できないことがあります。このような場合、以下と似た警告が JBoss EAP のログに記録されます。

WARNING [org.jgroups.protocols.UDP] (ServerService Thread Pool -- 68)
JGRP000015: the send buffer of socket DatagramSocket was set to 640KB, but the OS only allocated 212.99KB.
This might lead to performance problems. Please set your max send buffer in the OS correctly (e.g. net.core.wmem_max on Linux)
WARNING [org.jgroups.protocols.UDP] (ServerService Thread Pool -- 68)
JGRP000015: the receive buffer of socket DatagramSocket was set to 20MB, but the OS only allocated 212.99KB.
This might lead to performance problems. Please set your max receive buffer in the OS correctly (e.g. net.core.rmem_max on Linux)

これに対応するには、オペレーティングシステムのマニュアルでバッファーサイズを増やす方法を参照してください。Red Hat Enterprise Linux システムの場合は、root ユーザーとして /etc/sysctl.conf を編集し、システムの再起動後も維持されるバッファーサイズの最大値を設定します。例を以下に示します。

# Allow a 25MB UDP receive buffer for JGroups
net.core.rmem_max = 26214400
# Allow a 1MB UDP send buffer for JGroups
net.core.wmem_max = 1048576

/etc/sysctl.conf を編集後、sysctl -p を実行して変更を反映します。

JGroups バッファーサイズの設定

以下のトランスポートプロパティーを UDP および TCP JGroups スタックに設定すると、JBoss EAP が使用する JGroups バッファーサイズを設定できます。

UDP スタック
  • ucast_recv_buf_size
  • ucast_send_buf_size
  • mcast_recv_buf_size
  • mcast_send_buf_size
TCP スタック
  • recv_buf_size
  • send_buf_size

JGroups バッファーサイズは、管理コンソールまたは管理 CLI を使用して設定できます。

以下の構文を使用して、管理 CLI で JGroups バッファーサイズプロパティーを設定します。

/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)

以下は、tcp スタックで recv_buf_size プロパティーを 20000000 に設定する管理 CLI コマンドの例になります。

/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)

JGroups バッファーサイズは管理コンソールを使用して設定することもできます。Configuration タブで JGroups サブシステムを選択して関連するスタックを確認します。Transport を選択し、 Properties タブを選択します。

22.2.9. JGroups トラブルシューティング

22.2.9.1. ノードがクラスターを形成しない

マシンで IP マルチキャストが正しくセットアップされていることを確認します。JBoss EAP には、IP マルチキャストのテストに使用できる McastReceiverTestMcastSenderTest の 2 つのテストプログラムが含まれています。

ターミナルで McastReceiverTest を開始します。

$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555

別のターミナルウインドウで McastSenderTest を開始します。

$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555

特定のネットワークインターフェースカード (NIC) をバインドする場合は、-bind_addr YOUR_BIND_ADDRESS を使用します。YOUR_BIND_ADDRESS はバインドする NIC の IP アドレスに置き換えます。送信側と受信側の両方にこのパラメーターを使用します。

McastSenderTest ターミナルウインドウで入力すると McastReceiverTest ウインドウに出力が表示されます。表示されない場合は以下の手順に従います。

  • 送信側のコマンドに -ttl VALUE を追加して、マルチキャストパケットの TTL (time-to-live) を増やします。このテストプログラムによって使用されるデフォルトの値は 32 で、VALUE255 以下である必要があります。
  • マシンに複数のインターフェースがある場合は、適切なインターフェースを使用していることを確認します。
  • システム管理者に連絡し、マルチキャストが選択したインターフェースで動作することを確認します。

クラスターの各マシンでマルチキャストが適切に動作したら、送信側と受信側を別々のマシンに配置し、テストを繰り返します。

22.2.9.2. 障害検出での不明なハートビートの原因

ハートビートの確認が一定時間 (T) 受信されないと、障害検出 (FD) によってクラスターメンバーが原因として疑われることがあります。Ttimeout および max_tries によって定義されます。

たとえば、ノード A、B、C、および D のクラスターがあり、A が B、B が C、C が D、D が A を ping する場合、以下のいずれかの理由で C が疑われます。

  • B または C が CPU の使用率が 100% の状態で T 秒よりも長く稼働している場合。この場合、 C がハートビート確認を B に送信しても CPU の使用率が 100% であるため B が確認を処理できないことがあります。
  • B または C がガベッジコレクションを実行している場合、上記と同じ結果になります。
  • 上記 2 件の組み合わせ。
  • ネットワークによるパケットの損失が発生する場合。通常、ネットワークに大量のトラフィックがあり、スイッチがパケットを破棄すると発生します (通常は最初にブロードキャスト、次に IP マルチキャスト、そして最後に TCP パケットが破棄されます)。
  • B または C がコールバックを処理する場合。C が処理に T + 1 秒かかるリモートメソッド呼び出しをチャネル上で受信した場合、C はハートビートを含む他のメッセージを処理できません。そのため、B はハートビート確認を受信せず、C が疑われます。

22.3. Infinispan

22.3.1. Infinispan

Infinispan は Java データグリッドプラットフォームで、キャッシュされたデータの管理に JSR-107 準拠のキャッシュインターフェースを提供します。Infinispan の機能や設定オプションの詳細は Infinispan のドキュメントを参照してください。

infinispan サブシステムは JBoss EAP のキャッシュサポートを提供します。名前付きのキャッシュコンテナーやキャッシュのランタイムメトリックスを設定および表示できます。

高可用性の機能を提供する設定を使用する場合 (管理対象ドメインでは hafull-ha プロファイル、スタンドアロンサーバーは standalone-ha.xmlstandalone-full-ha.xml 設定ファイル)、infinispan サブシステムはキャッシング、状態のレプリケーション、および状態分散サポートを提供します。高可用性でない設定では、infinispan サブシステムはローカルのキャッシュサポートを提供します。

重要

Infinispan は JBoss EAP のプライベートモジュールとして含まれ、JBoss EAP のキャッシュ機能を提供します。アプリケーションによる Infinispan の直接使用はサポートされません。

22.3.2. キャッシュコンテナー

キャッシュコンテナーはサブシステムによって使用されるキャッシュのリポジトリーです。各キャッシュコンテナーは、使用されるデフォルトのキャッシュを定義します。

JBoss EAP 7 は以下のデフォルト Infinispan キャッシュコンテナーを定義します。

  • server (シングルトンキャッシング)
  • web (Web セッションクラスタリング)
  • ejb (ステートフルセッション Bean クラスタリング)
  • hibernate (エンティティーキャッシング)

例: Infinispan のデフォルト設定

<subsystem xmlns="urn:jboss:domain:infinispan:4.0">
  <cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
    <transport lock-timeout="60000"/>
    <replicated-cache name="default" mode="SYNC">
      <transaction mode="BATCH"/>
    </replicated-cache>
  </cache-container>
  <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan">
    <transport lock-timeout="60000"/>
    <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2">
      <locking isolation="REPEATABLE_READ"/>
      <transaction mode="BATCH"/>
      <file-store/>
    </distributed-cache>
  </cache-container>
  <cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
    <transport lock-timeout="60000"/>
    <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2">
      <locking isolation="REPEATABLE_READ"/>
      <transaction mode="BATCH"/>
      <file-store/>
    </distributed-cache>
  </cache-container>
  <cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan">
    <transport lock-timeout="60000"/>
    <local-cache name="local-query">
      <eviction strategy="LRU" max-entries="10000"/>
      <expiration max-idle="100000"/>
    </local-cache>
    <invalidation-cache name="entity" mode="SYNC">
      <transaction mode="NON_XA"/>
      <eviction strategy="LRU" max-entries="10000"/>
      <expiration max-idle="100000"/>
    </invalidation-cache>
    <replicated-cache name="timestamps" mode="ASYNC"/>
  </cache-container>
</subsystem>

各キャッシュコンテナーで定義されたデフォルトのキャッシュに注目してください。この例では、web キャッシュコンテナーは dist 分散キャッシュをデフォルトとして定義します。そのため、Web セッションのクラスタリングでは dist キャッシュが使用されます。

重要

HTTP セッション、ステートフルセッション Bean、シングルトンサービスやデプロイメントなどのキャッシュやキャッシュコンテナーを追加できます。ユーザーアプリケーションによるこれらのキャッシュの直接使用はサポートされません。

22.3.2.1. キャッシュコンテナーの設定

キャッシュコンテナーやキャッシュ属性は、管理コンソールまたは管理 CLI を使用して設定できます。

警告

設定の他のコンポーネントが参照する可能性があるため、キャッシュまたはキャッシュコンテナーの名前を変更しないでください。

管理コンソールを使用したキャッシュの設定

管理コンソールの Configuration タブで Infinispan サブシステムを選択するとキャッシュやキャッシュコンテナーを設定できます。管理対象ドメインでは設定するプロファイルを選択してください。

  • キャッシュコンテナーを追加します。

    Cache Container の横にある 追加 ボタンをクリックし、新しいキャッシュコンテナーの設定を入力します。

  • キャッシュコンテナー設定を更新します。

    適切なキャッシュコンテナーを選択し、ドロップダウンメニューで コンテナーの設定を選択します。必要に応じてキャッシュコンテナーの設定を行います。

  • キャッシュコンテナートランスポート設定を更新します。

    適切なキャッシュコンテナーを選択し、ドロップダウンメニューで トランスポートの設定を選択します。必要に応じてキャッシュコンテナートランスポート設定を行います。

  • キャッシュを設定します。

    適切なキャッシュコンテナーを選択し、表示 を選択します。キャッシュタブ (Replicated Caches など) でキャッシュを追加、更新、および削除できます。

管理 CLI を使用したキャッシュの設定

管理 CLI を使用してキャッシュおよびキャッシュコンテナーを設定できます。管理対象ドメインでは コマンドの前に /profile=PROFILE_NAME を追加して更新するプロファイルを指定する必要があります。

  • キャッシュコンテナーを追加します。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:add
  • レプリケートされたキャッシュを追加します。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE:add(mode=MODE)
  • キャッシュコンテナーのデフォルトキャッシュを設定します。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=default-cache,value=CACHE)
  • レプリケートされたキャッシュのバッチ処理を設定します。

    /subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE/component=transaction:write-attribute(name=mode,value=BATCH)

22.3.3. クラスタリングモード

JBoss EAP で Infinispan を使用すると、2 つの方法でクラスタリングを設定できます。ご使用のアプリケーションに最も適した方法は要件によって異なります。各モードでは可用性、一貫性、信頼性、およびスケーラビリティーのトレードオフが発生します。クラスタリングモードを選択する前に、ネットワークで最も重要な点を特定し、これらの要件のバランスを取ることが必要となります。

キャッシュモード
Replicated
Replicated モードはモードはクラスターの新しいインスタンスを自動的に検出し、追加します。これらのインスタンスに加えられた変更は、クラスター上のすべてのノードにレプリケートされます。ネットワークでレプリケートされる情報量が多いため、通常レプリケートモードは小型のクラスターでの使用に最も適しています。UDP マルチキャストを使用するよう Infinispan を設定すると、ネットワークトラフィックの輻輳をある程度軽減できます。
Distributed

Distributed モードでは、Infinispan はクラスターを線形にスケールできます。Distributed モードは一貫性のあるハッシュアルゴリズムを使用して、クラスター内で新しいノードを配置する場所を決定します。保持する情報のコピー数 (所有者) は設定可能です。保持するコピー数、データの永続性、およびパフォーマンスにはトレードオフが生じます。保持するコピー数が多いほどパフォーマンスへの影響が大きくなりますが、サーバーの障害時にデータを損失する可能性は低くなります。ハッシュアルゴリズムは、メタデータのマルチキャストや保存を行わずにエントリーを配置し、ネットワークトラフィックを軽減します。

クラスターサイズが 6-8 ノードを超える場合は分散モードをキャッシュストラテジーとして使用することを考慮してください。Distributed モードでは、データはクラスター内のすべてのノードではなくノードのサブセットのみに分散されます。

同期および非同期のレプリケーション

レプリケーションは同期または非同期モードで実行でき、選択するモードは要件やアプリケーションモードによって異なります。

同期のレプリケーション
同期レプリケーションでは、ユーザーの要求を処理するスレッドはレプリケーションが正常に終了するまでブロックされます。レプリケーションに成功すると応答がクライアントに送信され、その場合のみスレッドが開放されます。同期レプリケーションはクラスターの各ノードからの応答を必要とするため、ネットワークトラフィックに影響を与えます。ただし、クラスターのすべてのノードへ確実に変更が加えられる利点があります。
非同期のレプリケーション
非同期のレプリケーションでは、Infinispan はスレードプールを使用してバックグラウンドでレプリケーションを実行します。送信元はクラスターの他のノードからの返答を待ちません。しかし、同じセッションを読み取るキャッシュはその前のレプリケーションが完了するまでブロックされるため、陳腐データは読み取られません。レプリケーションは時間ベースまたはキューのサイズによって引き起こされます。失敗したレプリケーションはログに書き込まれ、リアルタイムで通知されません。

22.3.3.1. キャッシュモードの設定

管理 CLI を使用してデフォルトキャッシュを変更できます。

注記

ここでは、デフォルトが Distributed モードである Web セッションキャッシュの設定に固有する手順を説明します。手順と管理 CLI コマンドは、他のキャッシュコンテナー向けに簡単に調整できます。

Replicated キャッシュモードへの変更

Web セッションキャッシュのデフォルトの JBoss EAP 7 設定には、レプリケートされたキャッシュ repl が含まれていません。最初にこのキャッシュを追加する必要があります。

注記

以下はスタンドアロンサーバーの管理 CLI コマンドになります。管理対象ドメインで実行している場合は、/subsystem=infinispan コマンドの前に /profile=PROFILE_NAME を追加し、更新するプロファイルを指定する必要があります。

  1. レプリケートされたキャッシュ repl を追加します。

    /subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode=ASYNC)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=transaction:write-attribute(name=mode,value=BATCH)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=locking:write-attribute(name=isolation, value=REPEATABLE_READ)
    /subsystem=infinispan/cache-container=web/replicated-cache=repl/store=file:add
  2. デフォルトのキャッシュをレプリケートされたキャッシュ repl に変更します。

    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=repl)
  3. サーバーをリロードします。

    reload
Distributed キャッシュモードへの変更

Web セッションキャッシュのデフォルトの JBoss EAP 設定にはすでに dist 分散キャッシュが含まれています。

注記

以下はスタンドアロンサーバーの管理 CLI コマンドになります。管理対象ドメインで実行している場合は、/subsystem=infinispan コマンドの前に /profile=PROFILE_NAME を追加し、更新するプロファイルを指定する必要があります。

  1. デフォルトのキャッシュを dist 分散キャッシュに変更します。

    /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
  2. 分散キャッシュの所有者数を設定します。以下のコマンドは所有者の数を 5 に設定します。デフォルトは 2 です。

    /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=5)
  3. サーバーをリロードします。

    reload

22.3.3.2. キャッシュストラテジーのパフォーマンス

SYNCキャッシュストラテジーを使用すると、レプリケーションが完了するまでリクエストが完了しないため、レプリケーションのコストを簡単に評価でき、直接応答時間に影響します。

ASYNC キャッシュストラテジーの応答時間は SYNCキャッシュストラテジーよりも短いと思われがちですが、一定の状況下でのみ短くなります。ASYNC キャッシュストラテジーの評価はより困難ですが、リクエスト間の時間がキャッシュ操作を完了できるほど長い場合はパフォーマンスが SYNC よりも良くなります。これは、レプリケーションのコストが応答時間に即影響しないためです。

同じセッションのリクエストの作成が早すぎると、先行リクエストからのレプリケーションが完了するまで待機しなければならないため、先行リクエストのレプリケーションコストが後続リクエストの前に移動します。応答の受信直後に後続リクエストが送信され、リクエストが急速に発生する場合、 ASYNC キャッシュストラテジーのパフォーマンスは SYNC よりも劣化します。そのため、同じセッションのリクエストの間には、SYNC キャッシュストラテジーのパフォーマンスが ASYNC キャッシュストラテジーよりも良くなる期間のしきい値があります。実際の使用状態では、通常同じセッションのリクエストが立て続けに受信されることはありませんが、一般的にリクエストの間に数秒程度の時間が存在します。この場合、 ASYNC キャッシュストラテジーが適切なデフォルトとなり、応答時間が早くなります。

22.3.4. Infinispan スレッドプールの設定

infinispan サブシステムには async-operationsexpirationlistenerpersistenceremote-commandstate-transfer、および transport スレッドプールが含まれます。これらのプールはすべての Infinispan キャッシュコンテナーに設定できます。

以下の表は、infinispan サブシステムの各スレッドプールに設定できる属性とデフォルト値を表しています。

スレッドプール名keepalive-timemax-threadsmin-threadsqueue-length

async-operations

60000L

25

25

1000

expiration

60000L

1

該当なし

該当なし

listener

60000L

1

1

100000

persistence

60000L

4

1

0

remote-command

60000L

200

1

0

state-transfer

60000L

60

1

0

transport

60000L

25

25

100000

以下の構文を使用して、管理 CLI で Infinispan スレッドプールを設定します。

/subsystem=infinispan/cache-container=CACHE_CONTAINER_NAME/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)

以下は、 server キャッシュコンテナーの persistence スレッドプールで max-threads の値を 10 に設定する管理 CLI コマンドの例になります。

/subsystem=infinispan/cache-container=server/thread-pool=persistence:write-attribute(name="max-threads", value="10")

22.3.5. Infinispan の統計

監視目的で、Infinispan キャッシュやキャッシュコンテナーに関する実行時統計を有効にできます。パフォーマンス上の理由で、統計の収集はデフォルトでは無効になっています。

統計収集は、各キャッシュコンテナー、キャッシュ、または両方に対して有効にできます。各キャッシュの統計オプションはキャッシュコンテナーのオプションをオーバーライドします。キャッシュコンテナーの統計収集を無効または有効にすると、独自の設定が明示的に指定されている場合以外はそのコンテナーのすべてのキャッシュが設定を継承します。

22.3.5.1. Infinispan 統計の有効化

警告

Infinispan の統計を有効にすると、infinispan サブシステムのパフォーマンスに影響する可能性があります。統計は必要な場合のみ有効にしてください。

管理コンソールまたは管理 CLI を使用すると Infinispan の統計収集を有効または無効にできます。管理コンソールでは、Configuration タブで Infinispan サブシステム選択してキャッシュまたはキャッシュコンテナーを選択し、Statistics enabled 属性を編集します。管理 CLI を使用する場合は以下のコマンドを実行して統計を有効にします。

キャッシュコンテナーの統計収集を有効にします。サーバーをリロードする必要があります。

/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=statistics-enabled,value=true)

キャッシュの統計収集を有効にします。サーバーをリロードする必要があります。

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:write-attribute(name=statistics-enabled,value=true)
注記

以下のコマンドを使用すると、キャッシュの statistics-enabled 属性の定義が解除され、キャッシュコンテナーの statistics-enabled 属性の設定を継承します。

/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:undefine-attribute(name=statistics-enabled)

22.3.6. Infinispan パーティションの処理

Infinispan クラスターは、データが保存される複数のノードで構築されます。複数のノードに障害が発生した場合のデータの損失を防ぐため、Infinispan は複数のノードで同じデータをコピーします。このレベルのデータ冗長性は owners 属性を使用して設定されます。設定されたノードの数未満のノードが同時にクラッシュしても、Infinispan はデータのコピーを利用できます。

しかし、クラスターから大量のノードが消滅すると最悪の事態を招く可能性があります。

スプリットブレイン

スプリットブレインはクラスターを独立して動作する 2 つ以上のパーティションまたはサブクラスターに分割します。このような場合、異なるパーティションから読み書きする複数のクライアントが同じキャッシュエントリーの異なるバージョンを見ることになり、多くのアプリケーションにとって問題となります。

注記

スプリットブレインの発生を軽減する方法には、冗長化ネットワークや IP ボンディングなどがあります。しかし、これらの方法は問題発生のリードタイムを削減するだけです。

複数ノードの連続クラッシュ
複数のノード (所有者の数) が連続してクラッシュし、Infinispan がクラッシュ間の状態を適切に調整する時間がない場合、結果として部分的なデータの損失が発生します。

スプリットブレインや複数ノードの連続クラッシュが原因で、不適切なデータがユーザーに返されないようにすることが大切です。

22.3.6.1. スプリットブレイン

スプリットブレインが発生した場合、各ネットワークパーティションが独自の JGroups ビューをインストールし、他のパーティションからノードを削除します。パーティションはお互いを認識しないため、クラスターが 2 つ以上のパーティションに分割されたかどうかを直接判断することはできません。そのため、明示的な脱退メッセージを送信せずに、1 つ以上のノードが JGroups クラスターから消滅した場合にクラスターが分割されたと判断します。

パーティション処理が無効の場合、各パーティションは継続して独立したクラスターとして機能します。各パーティションはデータの一部のみを認識できる可能性があり、競合する更新をキャッシュに書き込む可能性があります。

パーティション処理が有効の場合、スプリットを検出したときに各パーティションは即座にリバランスを行わず、degrade モードにするかどうかを最初にチェックします。

  • 1 つ以上のセグメントがすべての所有者を失った場合 (最後に行ったリバランスが完了した後に指定した所有者の数以上が脱退した場合)、パーティションは degrade モードになります。
  • 最新の安定したトポロジーでパーティションに単純多数のノード (floor(numNodes/2) + 1) が含まれない場合も、パーティションは degrade モードになります。
  • その他の場合は、パーティションは通常通り動作し、リバランスを開始します。

安定したトポロジーは、リバランス操作が終了するたびに更新され、コーディネーターによって他のリバランスが必要ないと判断された場合に毎回更新されます。これらのルールは、1 つのパーティションが available モードを維持し、他のパーティションが degraded モードになるようにします。

パーティションが degraded モードの場合、完全に所有されたキーへのアクセスのみを許可します。

  • このパーティション内のノード上のコピーをすべて持つエントリーのリクエスト (読み取りおよび書き込み) は許可されます。
  • 消滅したノードによって完全所有または一部所有されたエントリーのリクエストは AvailabilityException によって拒否されます。

これにより、パーティションが同じキーに異なる値を書き込めないようにし (キャッシュの一貫性を保つ) 、さらにパーティションが他のパーティションで更新されたキーを読み取れないようにします (陳腐データをなくす)。

注記

2 つのパーティションは分離して開始できます。これらのパーティションはマージされなければ不整合なデータを読み書きできます。将来的に、この状況に対処できるカスタムの可用性ストラテジーが許可される可能性があります (例: 特定のノードがクラスターの一部であるかを確認、外部のマシンにアクセスできるかどうかを確認など)。

22.3.6.2. パーティション処理の設定

現在、パーティションの処理はデフォルトで無効になっています。パーティションの処理を有効にするには、以下の管理 CLI コマンドを使用します。

/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=partition-handling:write-attribute(name=enabled, value=true)

22.3.7. HTTP セッションの JBoss Data Grid への外部化

注記

この機能を使用するには JBoss Data Grid のサブスクリプションが必要になります。

Red Hat JBoss Data Grid は、HTTP セッションなどの JBoss EAP のアプリケーション固有データの外部キャッシュコンテナーとして使用できます。これにより、アプリケーションとは独立したデータレイヤーのスケーリングが可能になり、さまざまなドメインに存在する可能性がある異なる JBoss EAP クラスターが同じ JBoss Data Grid クラスターからデータにアクセスできるようになります。また、他のアプリケーションは Red Hat JBoss Data Grid によって提供されたキャッシュと対話できます。

以下の例は、HTTP セッションを外部化する方法を説明しています。これは、JBoss EAP のスタンドアロンインスタンスと管理対象ドメインの両方に適用されますが、管理対象ドメインでは各サーバーグループに一意のリモートキャッシュが設定されている必要があります。複数のサーバーグループは同じ Red Hat JBoss Data Grid クラスターを使用できますが、各リモートキャッシュは JBoss EAP サーバーグループに固有となります。

注記

分散可能なアプリケーションごとに完全に新しいキャッシュを作成する必要があります。新しいキャッシュは Web などの既存のキャッシュコンテナーに作成できます。

HTTP セッションを外部化するには、以下を行います。

  1. ネットワーク情報を socket-binding-group に追加することにより、リモート Red Hat JBoss Data Grid サーバーの場所を定義します。

    リモートソケットバインディングの追加例

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-jdg-server1:add(host=JDGHostName1, port=11222)
    
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-jdg-server2:add(host=JDGHostName2, port=11222)

    結果の XML

    <socket-binding-group name="standard-sockets" ... >
      ...
      <outbound-socket-binding name="remote-jdg-server1">
        <remote-destination host="JDGHostName1" port="11222"/>
      </outbound-socket-binding>
      <outbound-socket-binding name="remote-jdg-server2">
        <remote-destination host="JDGHostName2" port="11222"/>
      </outbound-socket-binding>
    </socket-binding-group>

    注記

    各 Red Hat JBoss Data Grid サーバーにリモートソケットバインディングを設定する必要があります。

  2. リモートキャッシュコンテナーが JBoss EAP の infinispan サブシステムで定義されているようにしてください。以下の例では、remote-store 要素の cache 属性によって、リモート JBoss Data Grid サーバーのキャッシュ名が定義されます。

    管理対象ドメインで実行している場合はコマンドの前に /profile=PROFILE_NAME を付けます。

    リモートキャッシュコンテナーの追加例

    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg:add(mode=SYNC)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/component=locking:write-attribute(name=isolation,value=REPEATABLE_READ)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/component=transaction:write-attribute(name=mode,value=BATCH)
    
    /subsystem=infinispan/cache-container=web/invalidation-cache=jdg/store=remote:add(remote-servers=["remote-jdg-server1","remote-jdg-server2"], cache=default, socket-timeout=60000, passivation=false, purge=false, shared=true)

    結果の XML

    <subsystem xmlns="urn:jboss:domain:infinispan:4.0">
      ...
      <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan" statistics-enabled="true">
        <transport lock-timeout="60000"/>
        <invalidation-cache name="jdg" mode="SYNC">
          <locking isolation="REPEATABLE_READ"/>
          <transaction mode="BATCH"/>
          <remote-store cache="default" socket-timeout="60000" remote-servers="remote-jdg-server1 remote-jdg-server2" passivation="false" purge="false" shared="true"/>
        </invalidation-cache>
        ...
      </cache-container>
    </subsystem>

  3. キャッシュ情報をアプリケーションの jboss-web.xml に追加します。以下の例では、web はキャッシュコンテナーの名前で、jdg はこのコンテナーにある適切なキャッシュの名前になります。

    jboss-web.xml ファイルの例

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd"
               version="10.0">
        <replication-config>
            <replication-granularity>SESSION</replication-granularity>
            <cache-name>web.jdg</cache-name>
        </replication-config>
    </jboss-web>

22.4. JBoss EAP をフロントエンドロードバランサーとして設定

バックエンド JBoss EAP サーバーへリクエストをプロキシーするフロントエンドロードバランサーとして動作するよう JBoss EAP と undertow サブシステムを設定できます。Undertow は非同期 IO を使用するため、リクエストに関与するスレッドは接続用の IO スレッドのみになります。同じスレッドがバックエンドサーバーへの接続に使用されます。

以下のプロトコルを使用できます。

  • HTTP/1 および HTTP/2 (h2c) をサポートするプレーンテキスト上の HTTP (http)

    注記

    HTTP/2 は 技術プレビューとしてのみ提供されます。

  • HTTP/1 お