Red Hat Training

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

第4章 サーバー設定の変更

4.1. RPM Installation Changes

In JBoss EAP 6, the default path for the RPM installation was the /usr/share/jbossas/ directory.

JBoss EAP 7 was built to Software Collections Library conventions. The root directory of Software Collections is normally located in the /opt/ directory to avoid possible conflicts between Software Collections and the base system installation. The use of the /opt/ directory is recommended by the Filesystem Hierarchy Standard (FHS). As a result, the default path for the RPM installation has changed to /opt/rh/eap7/root/usr/share/wildfly/ in JBoss EAP 7.

4.2. サーバー設定移行オプション

サーバー設定を JBoss EAP 6 から JBoss EAP 7 に移行するには、JBoss Server Migration Tool を使用するか、管理 CLI の migrate 操作 を使用して手作業で移行を行います。

JBoss Server Migration Tool

既存の設定を保持しながら、設定を更新して JBoss EAP 7 の新機能および設定を追加する場合は、JBoss Server Migration Tool を使用することが推奨されます。このツールの設定および実行方法に関する詳細は、『Using the JBoss Server Migration Tool』を参照してください。

管理 CLI の migrate 操作

管理 CLI の migrate 操作を使用して JBoss EAP 6 設定ファイルの jacorbmessaging、および web サブシステムを更新すると、新しいリリースで実行できるようにすることができますが、完全な JBoss EAP 7 の設定にはならないことに注意してください。例を以下に示します。

  • この操作は、元の remote プロトコルおよびポート設定を JBoss EAP 7 で使用される新しい http-remoting およびポート設定に更新しません。
  • 設定には、新しい JBoss EAP サブシステム、クラスター化されたシングルトンデプロイメントなどの機能、正常シャットダウンが含まれません。
  • 設定には、バッチ処理などの新しい Java EE 7 の機能が含まれません。
  • migrate 操作は ejb3 サブシステムの設定を移行しません。起こりうる EJB の移行問題に関する詳細は、EJB サーバー設定の変更を参照してください。

migrate 操作を使用したサーバー設定の移行に関する詳細は、「管理 CLI の移行操作」を参照してください。

4.3. 管理 CLI の移行操作

管理 CLI を使用して、JBoss EAP 7 上で実行するよう JBoss EAP 6 のサーバー設定ファイルを更新することができます。管理 CLI では、jacorbmessaging、および web サブシステムを以前のリリースから新しい設定へ自動的に更新する migrate 操作を実行できます。また、 jacorbmessaging、および web サブシステムに describe-migration 操作を実行すると、移行を行う前に提案された移行設定の変更を確認することもできます。cmpjaxr、および threads サブシステムの代替はないため、これらのサブシステムをサーバー設定から削除する必要があります。

重要

サーバー設定移行オプション」で migrate 操作の制限を確認してください。既存の設定を保持しながら、設定を更新して JBoss EAP 7 の新機能および設定を追加する場合は、JBoss Server Migration Tool を使用することが推奨されます。このツールの設定および実行方法に関する詳細は、『Using the JBoss Server Migration Tool』を参照してください。

表4.1 サブシステムの移行および管理 CLI 操作

JBoss EAP 6 サブシステムJBoss EAP 7 サブシステム管理 CLI 操作

cmp

代替なし

remove

jacorb

iiop-openjdk

migrate

jaxr

代替なし

remove

messaging

messaging-activemq

migrate

threads

代替なし

remove

web

undertow

migrate

サーバーおよび管理 CLI の起動

以下の手順に従って、JBoss EAP 7 上で実行されるよう JBoss EAP 6 のサーバー設定を更新します。

  1. 移行を始める前に、「重要データのバックアップおよびサーバー状態の確認」の内容を見直してください。ここには、サーバーを良好な状態にし、適切なファイルをバックアップするための重要な情報が記載されています。
  2. JBoss EAP 6 の設定で JBoss EAP 7 のサーバーを起動します。

    1. JBoss EAP 7 サーバー設定ファイルをバックアップします。
    2. 以前のリリースの設定ファイルを JBoss EAP 7 ディレクトリーにコピーします。

      $ cp EAP6_HOME/standalone/configuration/standalone-full.xml EAP7_HOME/standalone/configuration
    3. JBoss EAP 7 のインストールディレクトリーへ移動し、--start-mode=admin-only 引数を使用してサーバーを起動します。

      $ bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
      注記

      サーバーを起動すると、以下の org.jboss.as.controller.management-operation エラーがサーバーログに記録されます。これらのエラーは予期されたエラーで、レガシーサブシステムの設定を削除するか JBoss EAP 7 に移行する必要があることを示しています。

      • WFLYCTL0402: Subsystems [cmp] provided by legacy extension 'org.jboss.as.cmp' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
      • WFLYCTL0402: Subsystems [jacorb] provided by legacy extension 'org.jboss.as.jacorb' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
      • WFLYCTL0402: Subsystems [jaxr] provided by legacy extension 'org.jboss.as.jaxr' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
      • WFLYCTL0402: Subsystems [messaging] provided by legacy extension 'org.jboss.as.messaging' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
      • WFLYCTL0402: Subsystems [threads] provided by legacy extension 'org.jboss.as.threads' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
      • WFLYCTL0402: Subsystems [web] provided by legacy extension 'org.jboss.as.web' are not supported on servers running this version. Both the subsystem and the extension must be removed or migrated before the server will function.
  3. 新しいターミナルを開いて、JBoss EAP 7 のインストールディレクトリーへ移動し、--controller=remote://localhost:9999 引数を使用して管理 CLI を開始します。

    $ bin/jboss-cli.sh --connect --controller=remote://localhost:9999

JacORB、Messaging、および Web サブシステムの移行

  1. 移行を行う前にサブシステムに追加した設定変更を確認するには、describe-migration 操作を実行します。

    describe-migration 操作では以下の構文を使用します。

    /subsystem=SUBSYSTEM_NAME:describe-migration

    以下の例は、JBoss EAP 7 への移行時に JBoss EAP 6.4 の standalone-full.xml 設定ファイルに加えられる設定の変更を示しています。見やすくするため、エントリーは出力から削除されています。

    例: describe-migration 操作

    /subsystem=messaging:describe-migration
    {
        "outcome" => "success",
        "result" => {
            "migration-warnings" => [],
            "migration-operations" => [
                {
                    "operation" => "add",
                    "address" => [("extension" => "org.wildfly.extension.messaging-activemq")],
                    "module" => "org.wildfly.extension.messaging-activemq"
                },
                {
                    "operation" => "add",
                    "address" => [("subsystem" => "messaging-activemq")]
                },
                <!-- *** Entries removed for readability *** -->
                {
                    "operation" => "remove",
                    "address" => [("subsystem" => "messaging")]
                },
                {
                    "operation" => "remove",
                    "address" => [("extension" => "org.jboss.as.messaging")]
                }
            ]
        }
    }

  2. migrate 操作を実行し、サブシステムの設定を JBoss EAP 7 の代替サブシステムに移行します。この操作では以下の構文を使用します。

    /subsystem=SUBSYSTEM_NAME:migrate
    注記

    messaging サブシステムの describe-migration および migrate 操作を使用すると、引数を渡してレガシークライアントによるアクセスを設定することができます。コマンド構文の詳細は、「Messaging サブシステムの移行および前方互換性」を参照してください。

  3. このコマンドの結果を確認します。必ず、操作が正常に完了し、"migration-warning" エントリーがないことを確認してください。これは、サブシステムの移行設定が完了したことを意味します。

    例: 警告のない成功した migrate 操作

    /subsystem=messaging:migrate
    {
        "outcome" => "success",
        "result" => {"migration-warnings" => []}
    }

    サーバー設定の移行が正常に完了したにも関わらず、すべての要素と属性を移行できなかった場合、ログに "migration-warnings" エントリーが表示されます。"migration-warnings" が示す提案に従い、追加の管理 CLI コマンドを実行してこれらの設定を編集する必要があります。"migration-warnings" を返す migrate 操作の例を以下に示します。

    例: 警告のある migrate 操作

    /subsystem=messaging:migrate
    {
        "outcome" => "success",
        "result" => {"migration-warnings" => [
            "WFLYMSG0080: Could not migrate attribute group-address from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupB\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group.",
            "WFLYMSG0080: Could not migrate attribute group-port from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupB\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group.",
            "WFLYMSG0080: Could not migrate attribute local-bind-address from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupA\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group.",
            "WFLYMSG0080: Could not migrate attribute local-bind-port from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupA\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group.",
            "WFLYMSG0080: Could not migrate attribute group-address from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupA\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group.",
            "WFLYMSG0080: Could not migrate attribute group-port from resource [
        (\"subsystem\" => \"messaging-activemq\"),
        (\"server\" => \"default\"),
        (\"broadcast-group\" => \"groupA\")
    ]. Use instead the socket-binding attribute to configure this broadcast-group."
        ]}
    }

    注記

    各サブシステムの migrate および describe-migration 警告のリストは、本ガイドの最後にあるリファレンス資料 に記載されています。

  4. サーバー設定ファイルを確認し、拡張、サブシステム、および名前空間が更新され、既存のサブシステム設定が JBoss EAP 7 に移行されたことを確認します。

    注記

    この手順は、以下のコマンドを使用して jacorbmessaging、および web の各サブシステムに対して繰り返す必要があります。

    /subsystem=jacorb:migrate
    /subsystem=messaging:migrate
    /subsystem=web:migrate
  5. cmpjaxr、および threads サブシステムおよび拡張をサーバー設定から削除します。

    管理 CLI プロンプトで以下のコマンドを実行し、廃止された cmpjaxr、および threads サブシステムを削除します。

    /subsystem=cmp:remove
    /extension=org.jboss.as.cmp:remove
    /subsystem=jaxr:remove
    /extension=org.jboss.as.jaxr:remove
    /subsystem=threads:remove
    /extension=org.jboss.as.threads:remove
重要

サーバーを再起動して通常操作を行う前に messagingjacorb、および web サブシステムを移行し、cmpjaxr、および threads 拡張およびサブシステムを削除する必要があります。この作業の完了前にサーバーを再起動する必要がある場合は、サーバー起動のコマンドラインで --start-mode=admin-only 引数を使用するようにしてください。これにより、サーバーの変更を継続できます。

4.4. ロギングの変更

4.4.1. ロギングメッセージの接頭辞の変更

ログメッセージには、メッセージを報告するサブシステムのプロジェクトコードが接頭辞として付けられます。JBoss EAP 7 では、すべてのログメッセージの接頭辞が変更になりました。

JBoss EAP 7 で使用されるログメッセージの新しいプロジェクトコード接頭辞の完全リストは、JBoss EAP『開発ガイド』の「JBoss EAP で使用されるプロジェクトコード」を参照してください。

4.4.2. ルートロガーコンソールハンドラーの変更

JBoss EAP 7.0 のルートロガーには、すべてのドメインサーバープロファイルと standalone-full-ha プロファイル以外のデフォルトのスタンドアロンプロファイル用のコンソールログハンドラーが含まれていました。JBoss EAP 7.1 のルートロガーには、管理対象ドメインプロファイルのコンソールログハンドラーが含まれていません。ホストコントローラーとプロセスコントローラーはデフォルトでコンソールにログが記録されます。JBoss EAP 7.0 で提供された機能を実現するには、JBoss EAP 『設定ガイド』の「Console ログハンドラーの設定」を参照してください。

4.5. Web サーバー設定の変更

4.5.1. Undertow による Web サブシステムの置換

JBoss EAP 7 の web サーバーは、JBoss Web から Undertow に変更になりました。そのため、web サブシステム設定を新しい JBoss EAP 7 undertow サブシステム設定に移行する必要があります。

  • サーバー設定ファイルの urn:jboss:domain:web:2.2 サブシステム設定ネームスペースは urn:jboss:domain:undertow:4.0 ネームスペースに置き換えられました。
  • EAP_HOME/modules/system/layers/base/ にあった org.jboss.as.web 拡張モジュールは、org.wildfly.extension.undertow 拡張モジュールに置き換えられました。

管理 CLI migrate 操作を使うと、 web サブシステムをサーバー設定ファイル内の undertow に移行することができます。ただし、この操作では JBoss Web サブシステムのすべての設定が移行できるわけではないことに注意してください。"migration-warning" エントリーが表示される場合は、追加の管理 CLI コマンドを実行して設定を Undertow に移行する必要があります。管理 CLI migrate 操作についての詳細情報は、「管理 CLI の移行操作」を参照してください。

以下の例は、JBoss EAP 6 のデフォルトの web サブシステム設定を示しています。

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="true">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>
</subsystem>

以下の例は、JBoss EAP 7 のデフォルトの undertow サブシステム設定を示しています。

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
    <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>

4.5.2. JBoss Web リライト条件の移行

管理 CLI の migrate 操作はリライト条件を自動的に移行できません。"migration-warnings" として報告され、手作業で移行する必要があります。Undertow の述語属性およびハンドラーを使用すると (「Undertow Predicates Attributes and Handlers」を参照)、JBoss EAP 7 で同等の設定を作成できます。

以下の例は、rewrite 設定を含む JBoss EAP 6 の web サブシステム設定を示しています。

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default" native="false">
    <virtual-server name="default" enable-welcome-root="true">
        <alias name="localhost"/>
        <rewrite name="test" pattern="(.*)/toberewritten/(.*)" substitution="$1/rewritten/$2" flags="NC"/>
        <rewrite name="test2" pattern="(.*)" substitution="-" flags="F">
            <condition name="get" test="%{REQUEST_METHOD}" pattern="GET"/>
            <condition name="andCond" test="%{REQUEST_URI}" pattern=".*index.html" flags="NC"/>
        </rewrite>
    </virtual-server>
</subsystem>

管理 CLI の移行操作」にある手順にしたがってサーバーと管理 CLI を開始し、以下のコマンドを使用して web サブシステム設定ファイルを移行します。

/subsystem=web:migrate

上記の設定で migrate 操作を実行すると、以下の "migration-warnings" がレポートされます。

/subsystem=web:migrate
{
    "outcome" => "success",
    "result" => {"migration-warnings" => [
        "WFLYWEB0002: Could not migrate resource {
    \"pattern\" => \"(.*)\",
    \"substitution\" => \"-\",
    \"flags\" => \"F\",
    \"operation\" => \"add\",
    \"address\" => [
        (\"subsystem\" => \"web\"),
        (\"virtual-server\" => \"default-host\"),
        (\"rewrite\" => \"test2\")
    ]
}",
        "WFLYWEB0002: Could not migrate resource {
    \"test\" => \"%{REQUEST_METHOD}\",
    \"pattern\" => \"GET\",
    \"flags\" => undefined,
    \"operation\" => \"add\",
    \"address\" => [
        (\"subsystem\" => \"web\"),
        (\"virtual-server\" => \"default-host\"),
        (\"rewrite\" => \"test2\"),
        (\"condition\" => \"get\")
    ]
}",
        "WFLYWEB0002: Could not migrate resource {
    \"test\" => \"%{REQUEST_URI}\",
    \"pattern\" => \".*index.html\",
    \"flags\" => \"NC\",
    \"operation\" => \"add\",
    \"address\" => [
        (\"subsystem\" => \"web\"),
        (\"virtual-server\" => \"default-host\"),
        (\"rewrite\" => \"test2\"),
        (\"condition\" => \"andCond\")
    ]
}"
    ]}
}

サーバー設定ファイルを確認すると、undertow サブシステムが以下の設定になっています。

注記

リライト設定は削除されています。

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
     <buffer-cache name="default"/>
     <server name="default-server">
         <http-listener name="http" socket-binding="http"/>
         <host name="default-host" alias="localhost, example.com">
             <location name="/" handler="welcome-content"/>
         </host>
     </server>
     <servlet-container name="default">
         <jsp-config/>
     </servlet-container>
     <handlers>
         <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
     </handlers>
 </subsystem>

管理 CLI を使用してフィルターを作成し、undertow サブシステムのリライト設定を置き換えます。各コマンドで "{"outcome" ⇒ "success"}" が表示されるはずです。

# Create the filters
/subsystem=undertow/configuration=filter/expression-filter="test1":add(expression="path('(.*)/toberewritten/(.*)') -> rewrite('$1/rewritten/$2')")
/subsystem=undertow/configuration=filter/expression-filter="test2":add(expression="method('GET') and path('.*index.html') -> response-code(403)")

# Add the filters to the default server
/subsystem=undertow/server=default-server/host=default-host/filter-ref="test1":add
/subsystem=undertow/server=default-server/host=default-host/filter-ref="test2":add

更新されたサーバー設定ファイルを確認します。JBoss Web サブシステムは完全に移行され、undertow サブシステムに設定されます。

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="http" socket-binding="http"/>
        <host name="default-host" alias="localhost, example.com">
            <location name="/" handler="welcome-content"/>
            <filter-ref name="test1"/>
            <filter-ref name="test2"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <expression-filter name="test1" expression="path('(.*)/toberewritten/(.*)') -> rewrite('$1/rewritten/$2')"/>
        <expression-filter name="test2" expression="method('GET') and path('.*index.html') -> response-code(403)"/>
    </filters>
</subsystem>

管理 CLI を使用してフィルターとハンドラーを設定する方法については、JBoss EAP 7 『設定ガイド』の「Web サーバーの設定」を参照してください。

4.5.3. JBoss Web システムプロパティーの移行

以前のリリースの JBoss EAP では、システムプロパティーを使用して JBoss Web のデフォルトの動作を変更することが可能でした。Undertow で同じ動作を設定する方法は、「JBoss Web システムプロパティー移行のリファレンス」を参照してください。

4.5.4. アクセスログヘッダーパターンの更新

JBoss EAP 6.4 から JBoss EAP 7.1 に移行するときに、アクセスログに予期される "Referer" および "User-agent" 値が書き込まれないことに気付くかもしれません。これは、JBoss EAP 6.4 に含まれていた JBoss Web は access-log%{headername}i パターンを使用して受信ヘッダーをログに記録したためです。

例: JBoss EAP 6.4 でのアクセスログ形式

<access-log pattern="%h %l %u %t &quot;%T sec&quot; &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-agent}i&quot;"/>

JBoss EAP 7.1 では Undertow が使用されるようになったため、受信ヘッダーのパターンは %{i,headername} に変更になりました。

例: JBoss EAP 7.1 でのアクセス形式ヘッダー

<access-log pattern="%h %l %u %t &quot;%T sec&quot; &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot;"/>

4.5.5. グローバルバルブの移行

以前のリリースの JBoss EAP ではバルブがサポートされました。バルブとは、リクエストの変更や追加処理を実行するために、サーブレットフィルターの前にアプリケーションのリクエスト処理パイプラインへ挿入されるカスタムクラスのことです。

  • グローバルバルブは、デプロイされたすべてのアプリケーションのリクエスト処理パイプラインへ挿入され、サーバー設定ファイルで設定されます。
  • オーセンティケーターバルブはリクエストのクレデンシャルを認証します。
  • カスタムアプリケーションバルブは、org.apache.catalina.valves.ValveBase クラスを拡張して作成され、jboss-web.xml 記述子ファイルの <valve> 要素で設定されます。これらのバルブは手作業で移行する必要があります。

この項では、グローバルバルブの移行方法について説明します。カスタムおよびオーセンティケーターバルブの移行については、本ガイドの「カスタムアプリケーションバルブの移行」を参照してください。

JBoss EAP 7 で JBoss Web の代わりに導入された Undertow はグローバルバルブをサポートしませんが、Undertow ハンドラーを使用すると同様の機能を実現できます。Undertow には共通の機能を提供する複数のビルトインハンドラーが含まれています。また、カスタムハンドラーを作成する機能も含まれ、カスタムバルブの機能を置き換えるために使用することができます。

アプリケーションがバルブを使用する場合、JBoss EAP 7 へ移行するときに適切な Undertow ハンドラーコードに置き換え、同様の機能を実現する必要があります。

ハンドラーの設定方法に関する詳細は、JBoss EAP 7『設定ガイド』の「ハンドラーの設定」を参照してください。

フィルターの設定方法に関する詳細は、JBoss EAP 7『設定ガイド』の「フィルターの設定」を参照してください。

JBoss Web バルブの移行

以下の表では、JBoss EAP の前リリースで JBoss Web が提供していたバルブとそれに対応する Undertow ビルトインハンドラーを示しています。JBoss Web バルブは、org.apache.catalina.valves パッケージにあります。

表4.2 バルブとハンドラーのマッピング

バルブハンドラー

AccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

CrawlerSessionManagerValve

io.undertow.servlet.handlers.CrawlerSessionManagerHandler

ExtendedAccessLogValve

io.undertow.server.handlers.accesslog.AccessLogHandler

JDBCAccessLogValve

手順については JDBCAccessLogValve の手動移行の手順を参照してください。

RemoteAddrValve

io.undertow.server.handlers.IPAddressAccessControlHandler

RemoteHostValve

io.undertow.server.handlers.AccessControlListHandler

RemoteIpValve

io.undertow.server.handlers.ProxyPeerAddressHandler

RequestDumperValve

io.undertow.server.handlers.RequestDumpingHandler

RewriteValve

これらのバルブを手作業で移行する手順は、「JBoss Web リライト条件の移行」を参照してください。

StuckThreadDetectionValve

io.undertow.server.handlers.StuckThreadDetectionHandler

管理 CLI の migrate 操作を使用すると、以下の基準を満たすグローバルバルブを自動的に移行できます。

  • 前述の表にリストされている、手動処理の必要がないバルブに限定されます。
  • サーバー設定ファイルの web サブシステムに定義されている必要があります。

管理 CLI の migrate 操作の詳細は、「管理 CLI の移行操作」を参照してください。

JDBCAccessLogValve の手動移行の手順

org.apache.catalina.valves.JDBCAccessLogValve バルブはルールの例外で、io.undertow.server.handlers.JDBCLogHandler へ自動的に移行することができません。以下の手順に従って、次のバルブ例を移行します。

<valve name="jdbc" module="org.jboss.as.web" class-name="org.apache.catalina.valves.JDBCAccessLogValve">
    <param param-name="driverName" param-value="com.mysql.jdbc.Driver" />
    <param param-name="connectionName" param-value="root" />
    <param param-name="connectionPassword" param-value="password" />
    <param param-name="connectionURL" param-value="jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull" />
    <param param-name="format" param-value="combined" />
</valve>
  1. ログエントリーを保存するデータベースのドライバーモジュールを作成します。
  2. データベースのデータソースを設定し、ドライバーを datasources サブシステムの利用可能なドライバーのリストに追加します。

    <datasources>
        <datasource jndi-name="java:jboss/datasources/accessLogDS" pool-name="accessLogDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull</connection-url>
            <driver>mysql</driver>
            <security>
               <user-name>root</user-name>
               <password>Password1!</password>
            </security>
        </datasource>
        ...
        <drivers>
            <driver name="mysql" module="com.mysql">
                <driver-class>com.mysql.jdbc.Driver</driver-class>
            </driver>
        ...
        </drivers>
    </datasources>
  3. jdbc-access-log(datasource=DATASOURCE_JNDI_NAME) を使用して、undertow サブシステムの expression-filter を設定します。

    <filters>
        <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" />
        ...
    </filters>

4.5.7. HTTP メソッド呼び出しの挙動変更

JBoss Web が web サーバーとして含まれていた JBoss EAP 6.4 では、デフォルトで HTTP TRACE メソッド呼び出しが許可されていました。

JBoss EAP 7 で JBoss Web の代わりに web サーバーとして導入された Undertow は、デフォルトでは HTTP TRACE メソッド呼び出しを許可しません。この設定は、undertow サブシステムで http-listener 要素の disallowed-methods 属性を使用して設定されます。この設定を確認するには、以下の read-resource コマンドの出力を確認します。disallowed-methods 属性の値が ["TRACE"] であることに注目してください。

/subsystem=undertow/server=default-server/http-listener=default:read-resource
{
    "outcome" => "success",
    "result" => {
        "allow-encoded-slash" => false,
        "allow-equals-in-cookie-value" => false,
        "always-set-keep-alive" => true,
        "buffer-pipelined-data" => false,
        "buffer-pool" => "default",
        "certificate-forwarding" => false,
        "decode-url" => true,
        "disallowed-methods" => ["TRACE"],
         ...
    }
}

JBoss EAP 7 およびそれ以降のバージョンで HTTP TRACE メソッド呼び出しを有効にするには、以下のコマンドを実行して disallowed-methods 属性リストから "TRACE" エントリーを削除する必要があります。

/subsystem=undertow/server=default-server/http-listener=default:list-remove(name=disallowed-methods,value="TRACE")

read-resource コマンドを再度実行すると、TRACE メソッド呼び出しが許可されないメソッドのリストから削除されたことが確認できます。

/subsystem=undertow/server=default-server/http-listener=default:read-resource
{
    "outcome" => "success",
    "result" => {
        "allow-encoded-slash" => false,
        "allow-equals-in-cookie-value" => false,
        "always-set-keep-alive" => true,
        "buffer-pipelined-data" => false,
        "buffer-pool" => "default",
        "certificate-forwarding" => false,
        "decode-url" => true,
        "disallowed-methods" => [],
         ...
    }
}

HTTP メソッドのデフォルト動作に関する詳細は、JBoss EAP『設定ガイド』の「HTTP メソッドのデフォルトの動作」を参照してください。

4.5.8. Changes in the Default Web Module Behavior in JBoss EAP 7.1

In JBoss EAP 7.0, the root context of a web application was disabled by default in mod_cluster.

This is no longer the case in JBoss EAP 7.1. This can have unexpected consequences if you are expecting the root context to be disabled. For example, requests can be misrouted to undesired nodes or a private application that should not be exposed can be inadvertently accessible through a public proxy. Undertow locations are also now registered with the mod_cluster load balancer automatically unless they are explicitly excluded.

Use the following management CLI command to exclude ROOT from the modcluster subsystem configuration.

/subsystem=modcluster/mod-cluster-config=configuration:write-attribute(name=excluded-contexts,value=ROOT)

Use the following management CLI command to disable the default welcome web application.

/subsystem=undertow/server=default-server/host=default-host/location=\/:remove
/subsystem=undertow/configuration=handler/file=welcome-content:remove
reload

For more information about how to configure the default welcome web application, see Configure the Default Welcome Web Application in the Development Guide for JBoss EAP.

4.6. JGroups サーバー設定の変更

4.6.1. JGroups はデフォルトでプライベートネットワークインターフェースを使用

JBoss EAP 6 のデフォルト設定では、JGroups はサーバー設定ファイルの <interfaces> セクションに定義された public インターフェースを使用しました。

専用のネットワークインターフェースを使用することが推奨されるため、JBoss EAP 7 では JGroups はデフォルトでサーバー設定ファイルの <interfaces> セクションに定義された新しい private インターフェースを使用します。

4.6.2. JGroups チャネルの変更

JGroups は JGroups チャネルで HA サービスのグループ通信サポートを提供します。JBoss EAP 7 では、サーバー設定ファイルの jgroups サブシステムに <channel> 要素が導入されました。管理 CLI を使用して JGroups チャネル設定を追加、削除、および変更できます。

JGroups の設定方法の詳細は、JBoss EAP『設定ガイド』の「JGroups を用いたクラスター通信」を参照してください。

4.7. Infinispan サーバー設定の変更

4.7.1. Infinispan のデフォルトキャッシュ設定の変更

JBoss EAP 6 では、Web セッションレプリケーションおよび EJB レプリケーションのデフォルトのクラスター化キャッシュはレプリケートされた ASYNC キャッシュでしたが、これが JBoss EAP 7 では変更になりました。レプリケートされたキャッシュはデフォルトでは設定されません。レプリケートされたキャッシュの追加方法とレプリケートされたキャッシュをデフォルトにする方法については、JBoss EAP『設定ガイド』の「キャッシュモードの設定」を参照してください。

これは、新しい JBoss EAP 7 のデフォルト設定を使用する場合のみ影響します。JBoss EAP 6 から設定を移行する場合は、infinispan サブシステムの設定は保持されます。

4.7.2. Infinispan のキャッシュストラテジーの変更

ASYNC キャッシュストラテジーの動作が JBoss EAP 7 では変更になりました。

JBoss EAP 6 では、ASYNC キャッシュの読み取りにロックはありませんでした。ブロックは発生しませんでしたが、フェイルオーバーなどで陳腐データのダーティーリードが発生する傾向にありました。これは、リクエストの完了前に同じユーザーの次のリクエストを開始できたためです。これは、クラスタートポロジーの変更がセッションアフィニティーに影響し、容易にデータが陳腐化することがあるため、分散モードを使用するときは許可されません。

JBoss EAP 7 では、ASYNC キャッシュの読み取りにロックが必要になりました。レプリケーションが終了するまで同じユーザーの新しいリクエストをブロックするようになったため、ダーティーリードが発生しないようになりました。

4.7.3. パッシベーションに対するカスタムステートフルセッション bean の設定

JBoss EAP 7.1 にて、パッシベーションに対してカスタムステートフルセッション bean (SFSB) を設定する場合は、以下の制限に注意してください。

  • ejb3 サブシステムの infinispan passivation-store で設定される idle-timeout 属性は、JBoss EAP 7.1 で非推奨となりました。JBoss EAP 6.4 ではイーガー (eager) パッシベーションがサポートされ、idle-timeout の値を基にパッシベーションが実行されました。JBoss EAP 7.1 ではレイジー (lazy) パッシベーションがサポートされ、max-size しきい値に達するとパッシベーションが行われます。
  • JBoss EAP 7.1 では、EJB クライアントによって使用されるクラスター名は、jgroups サブシステムで設定されるチャネルの実際のクラスター名によって判断されます。
  • JBoss EAP 7.1 でも、max-size 属性を設定してパッシベーションのしきい値を制御できます。
  • EJB キャッシュ設定でエビクションまたはエクスパレーションを設定しないでください。

    • エビクションは、ejb3 サブシステムの passivation-storemax-size 属性を使用して設定してください。
    • エクスパレーションは、SFSB Java ソースコードの @StatefulTimeout アノテーションを使用するか、ejb-jar.xml ファイルに stateful-timeout 値を指定して設定してください。

4.7.4. Infinispan キャッシュコンテナートランスポートの変更

JBoss EAP 7.0 の動作が JBoss EAP 7.1 で変更になったため、キャッシュコンテナートランスポートプロトコルの更新はバッチモードで実行するか、特別なヘッダーを使用して実行する必要があります。この動作の変更は、JBoss EAP サーバーの管理に使用されたすべてのツールにも影響があります。

以下は、JBoss EAP 7.0 でキャッシュコンテナートランスポートプロトコルの設定に使用された管理 CLI コマンドの例になります。

/subsystem=infinispan/cache-container=my:add()
/subsystem=infinispan/cache-container=my/transport=jgroups:add()
/subsystem=infinispan/cache-container=my/invalidation-cache=mycache:add(mode=SYNC)

以下は、JBoss EAP 7.1 で同じ設定を実行するために必要な管理 CLI コマンドの例になります。コマンドはバッチモードで実行されることに注意してください。

batch
/subsystem=infinispan/cache-container=my:add()
/subsystem=infinispan/cache-container=my/transport=jgroups:add()
/subsystem=infinispan/cache-container=my/invalidation-cache=mycache:add(mode=SYNC)
run-batch

バッチモードを使用したくない場合は、代わりにトランスポートの定義時に allow-resource-service-restart=true 操作ヘッダーを指定できます。これによりサービスが再起動され、操作が適用されますが、このサービスが再起動するまで一部のサービスが停止する可能性があります。

スクリプトを使用してキャッシュコンテナートランスポートプロトコルを更新する場合は、スクリプトを確認し、バッチモードを追加してください。

4.8. EJB サーバー設定の変更

ejb3 サブシステムの migrate 操作はないため、管理 CLI の migrate 操作を使用して他の既存の JBoss EAP 6.4 設定をアップグレードする場合は、ejb3 サブシステムの設定は移行されないことに注意してください。JBoss EAP 7.1 での ejb3 サブシステムの設定は、JBoss EAP 6.4 とは若干異なるため、EJB アプリケーションをデプロイしたときにサーバーログに例外が記録されることがあります。

重要

JBoss Server Migration Tool を使用してサーバー設定を更新すると、ejb3 サブシステムは適切に設定され、EJBが アプリケーションのデプロイ時に問題は発生しないはずです。このツールの設定および実行方法に関する詳細は、『Using the JBoss Server Migration Tool』を参照してください。

DuplicateServiceException

以下の DuplicateServiceException は、JBoss EAP 7.1 のキャッシングの変更が原因で発生します。

サーバーログの DuplicateServiceException

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."mdb-1.0-SNAPSHOT.jar".cache-dependencies-installer: org.jboss.msc.service.StartException in service jboss.deployment.unit."mdb-1.0-SNAPSHOT.jar".cache-dependencies-installer: Failed to start service
...
Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.infinispan.ejb."mdb-1.0-SNAPSHOT.jar".config is already registered

キャッシュを再設定してこのエラーを解決する必要があります。

  1. サーバーおよび管理 CLI の起動」の手順に従います。
  2. 以下のコマンドを実行して、ejb3 サブシステムのキャッシングを再設定します。

    /subsystem=ejb3/file-passivation-store=file:remove
    /subsystem=ejb3/cluster-passivation-store=infinispan:remove
    /subsystem=ejb3/passivation-store=infinispan:add(cache-container=ejb, max-size=10000)
    
    /subsystem=ejb3/cache=passivating:remove
    /subsystem=ejb3/cache=clustered:remove
    /subsystem=ejb3/cache=distributable:add(passivation-store=infinispan, aliases=[passivating, clustered])

4.9. メッセージングサーバー設定の変更

JBoss EAP 7 では、JMS サポートプロバイダーが HornetQ から ActiveMQ Artemis に変更になりました。ここでは、設定と関連するメッセージングデータの移行方法を説明します。

4.9.1. メッセージングサブシステムサーバー設定の変更

EAP_HOME/modules/system/layers/base/ にあった org.jboss.as.messaging モジュール拡張は、 org.wildfly.extension.messaging-activemq 拡張モジュールに置き換えられました。

urn:jboss:domain:messaging:3.0 サブシステム設定ネームスペースは urn:jboss:domain:messaging-activemq:2.0 ネームスペースに置き換えられました。

管理モデル

ほとんどの場合で、要素名と属性名は以前のリリースとできる限り同じになるよう努力しています。以下の表は変更の一部を表しています。

表4.3 メッセージング属性のマッピング

HornetQ での名前ActiveMQ での名前 

hornetq-server

server

hornetq-serverType

serverType

connectors

connector

discovery-group-name

discovery-group

新しい messaging-activemq サブシステム上で呼び出される管理操作は、/subsystem=messaging/hornetq-server= から /subsystem=messaging-activemq/server= に変更になりました。

migrate 操作を呼び出すと、既存の JBoss EAP 6 の messaging サブシステム設定を JBoss EAP 7 の messaging-activemq サブシステムに移行できます。

/subsystem=messaging:migrate

migrate 操作を実行する前に describe-migration 操作を呼び出して、既存の JBoss EAP 6 の messaging サブシステム設定から JBoss EAP 7 サーバーの messaging-activemq サブシステムへの移行を実行する管理操作のリストを確認することができます。

/subsystem=messaging:describe-migration

migrate および describe-migration 操作は、自動的に移行されないリソースや属性の migration-warnings のリストも表示します。

Messaging サブシステムの移行および前方互換性

messaging サブシステムの describe-migration およびmigrate 操作は、追加の設定引数を提供します。メッセージングを設定してレガシー JBoss EAP 6 クライアントが JBoss EAP 7 サーバーに接続できるようにするには、以下のようにブール値の add-legacy-entries 引数を describe-migration または migrate 操作に追加します。

/subsystem=messaging:describe-migration(add-legacy-entries=true)
/subsystem=messaging:migrate(add-legacy-entries=true)

ブール値の引数 add-legacy-entriestrue に設定されていると、messaging-activemq サブシステムが legacy-connection-factory リソースを作成し、legacy-entriesjms-queue および jms-topic リソースに追加します。

ブール値の引数 add-legacy-entriesfalse に設定されていると、messaging-activemq サブシステムにはレガシーリソースが作成されず、レガシー JMS クライアントは JBoss EAP 7 サーバーと通信できません。これがデフォルト値になります。

前方互換性および後方互換性に関する詳細は、JBoss EAP『Configuring Messaging』の「Backward and Forward Compatibility」を参照してください。

管理 CLI の migrate および describe-migration 操作の詳細は、「管理 CLI の移行操作」を参照してください。

forward-when-no-consumers 属性の動作変更

JBoss EAP 7 では、forward-when-no-consumers 属性の動作が変更になりました。

JBoss EAP 6 では、forward-when-no-consumersfalse に設定され、クラスターにコンシューマーがない場合に、メッセージはクラスターのすべてのノードへ再分散されました。

この挙動は JBoss EAP 7 では変更になりました。forward-when-no-consumersfalse に設定され、クラスターにコンシューマーがない場合にメッセージは再分散されず、メッセージの送信先のノードに保持されます。

デフォルトのクラスター負荷分散ポリシーの変更

JBoss では、デフォルトのクラスター負荷分散ポリシーが変更になりました。

JBoss EAP 6 ではデフォルトの負荷分散ポリシーは STRICT と似ており、レガシーの forward-when-no-consumers パラメーターを true に設定した場合と同様でした。JBoss EAP 7 では、デフォルトは ON_DEMAND になり、レガシーの forward-when-no-consumers パラメーターを false に設定した場合と同様になります。これらの設定の詳細は、JBoss EAP『Configuring Messaging』の「Cluster Connection Attributes」を参照してください。

Messaging サブシステムの XML 設定

新しい messaging-activemq サブシステムにより、XML の設定が大幅に変更になり、他の JBoss EAP サブシステムとより一貫性のある XML スキームが提供されるようになりました。

新しい messaging-activemq サブシステムに準拠するために JBoss EAP messaging サブシステムの XML 設定を変更しないでください。この代わりに、レガシーサブシステムの migrate 操作を呼び出してください。この操作は、実行の一部として新しい messaging-activemq の XML 設定を書き込みます。

4.9.2. メッセージングデータの移行

You can use one of the following approaches to migrate messaging data from a previous release to the current release of JBoss EAP.

  • For file-based messaging systems, you can migrate messaging data from either JBoss EAP 6.4 or JBoss EAP 7.0 to JBoss EAP 7.1 using the export and import method. With this method you export the messaging data from the previous release and import it using the management CLI import-journal operation. Be aware that you can use this approach for file-based messaging systems only.
  • You can migrate messaging data from JBoss EAP 6.4 to JBoss EAP 7.1 by configuring a JMS bridge. You can use this approach for both file-based and JDBC messaging systems.

JMS サポートプロバイダーが HornetQ から ActiveMQ Artemis に変更になったため、JBoss EAP 7 およびそれ以上のリリースではメッセージングデータの形式と場所が変更になりました。6.4 から 7.x リリースで変更になったメッセージングデータフォルダー名と場所の詳細は、「メッセージングフォルダー名のマッピング」を参照してください。

4.9.2.1. エクスポートおよびインポートを使用したメッセージングデータの移行

この方法では、以前のリリースのメッセージングデータを XML ファイルへエクスポートし、import-journal 操作を使用してそのファイルをインポートします。

重要

You cannot use the export and import method to move messaging data between systems that use a JDBC-based journal for storage.

メッセージングデータの JBoss EAP 6.4 からのエクスポート

JMS サポートプロバイダーが HornetQ から ActiveMQ Artemis に変更になったため、JBoss EAP 7 およびそれ以降のリリースではメッセージングデータの形式と場所が変更になりました。

JBoss EAP 6.4 からメッセージングデータをエクスポートする場合は、HornetQ の exporter ユーティリティーを使用する必要があります。HornetQ exporter ユーティリティーは、メッセージングデータを生成し、JBoss EAP 6.4 から XML 形式のファイルへエクスポートします。このコマンドでは、JBoss EAP 6.4 に同梱されている必須の HornetQ JAR へのパスを指定し、以前のリリースからの messagingbindings/messagingjournal/messagingpaging/、および messaginglargemessages/ フォルダーへのパスを引数として渡し、エクスポートされる XML データを書き込む出力ファイルを指定する必要があります。

以下は HornetQ exporter ユーティリティーで必要となる構文です。

$ java -jar -mp MODULE_PATH org.hornetq.exporter MESSAGING_BINDINGS_DIRECTORY MESSAGING_JOURNAL_DIRECTORY MESSAGING_PAGING_DIRECTORY MESSAGING_LARGE_MESSAGES_DIRECTORY > OUTPUT_DATA.xml

カスタムモジュールを作成し、パッチやアップグレードでインストールされた JAR を含む HornetQ JAR の正しいバージョンがロードされ、exporter ユーティリティーで利用可能になるようにします。好みのエディターを使用して、EAP6_HOME/modules/org/hornetq/exporter/main/ ファイルを作成し、以下のコンテンツをコピーします。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.hornetq.exporter">
    <main-class name="org.hornetq.jms.persistence.impl.journal.XmlDataExporter"/>
    <properties>
        <property name="jboss.api" value="deprecated"/>
    </properties>
    <dependencies>
        <module name="org.hornetq"/>
    </dependencies>
</module>
注記

カスタムモジュールは modules/system/layers/base/ ディレクトリーではなく、modules/ ディレクトリー内に作成します。

以下の手順に従い、データをエクスポートします。

  1. JBoss EAP 6.4 サーバーを停止します。
  2. 上記の説明にあるようにカスタムモジュールを作成します。
  3. 以下のコマンドを実行してデータをエクスポートします。

    $ java -jar jboss-modules.jar -mp modules/ org.hornetq.exporter standalone/data/messagingbindings/ standalone/data/messagingjournal/ standalone/data/messagingpaging standalone/data/messaginglargemessages/ > OUTPUT_DIRECTORY/OldMessagingData.xml
  4. コマンド完了後に、ログにエラーや警告メッセージがないことを確認します。
  5. 使用中のオペレーティングシステムで利用可能なツールを使用して、生成された出力ファイルの XML を検証します。
メッセージングデータの JBoss EAP 7.0 からのエクスポート

以下の手順に従って、JBoss EAP 7.0 からメッセージングデータをエクスポートします。

  1. ターミナルを開き、JBoss EAP 7.0 のインストールディレクトリーへ移動し、admin-only モードでサーバーを起動します。

    $ EAP_HOME/bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
  2. 新しいターミナルを開き、JBoss EAP 7.0 のインストールディレクトリーへ移動し、管理 CLI に接続します。

    $ EAP_HOME/bin/jboss-cli.sh --connect
  3. 以下の管理 CLI コマンドを使用して、メッセージングジャーナルデータをエクスポートします。

    /subsystem=messaging-activemq/server=default:export-journal()
  4. コマンド完了後に、ログにエラーや警告メッセージがないことを確認します。
  5. 使用中のオペレーティングシステムで利用可能なツールを使用して、生成された出力ファイルの XML を検証します。
XML 形式のメッセージングデータのインポート

以下のように、 import-journal 操作を使用して、XML ファイルを JBoss EAP 7.0 およびそれ以降のリリースにインポートします。

重要

ターゲットサーバーによって一部のメッセージングタスクがすでに実行済みである場合は、インポートに失敗した場合にデータを損失しないようにするため、import-journal 操作の実行前にメッセージングフォルダーをバックアップしてください。詳細は、「メッセージングフォルダーデータのバックアップ」を参照してください。

  1. JBoss EAP 6.4 サーバーを 7.1 に移行する場合、サーバー設定の移行が完了してから管理 CLI の migrate 操作の使用または JBoss Server Migration Tool の実行を開始してください。このツールの設定および実行方法に関する詳細は、『Using the JBoss Server Migration Tool』を参照してください。
  2. JMS クライアントが未接続の状態で、JBoss EAP 7.x サーバーを通常モードで起動します。

    重要

    接続している JMS クライアントがない状態でサーバーを起動することが重要になります。これは、import-journal 操作が JMS プロデューサーのように動作するからです。操作の実行中、メッセージは即座に使用できます。インポート中にこの操作に失敗し、JMS クライアントが接続状態である場合、JMS クライアントがメッセージの一部を消費済みである可能性があるため、復元することができません。

  3. 新しいターミナルを開き、JBoss EAP 7.x のインストールディレクトリーへ移動し、管理 CLI に接続します。

    $ EAP_HOME/bin/jboss-cli.sh --connect
  4. 以下の管理 CLI コマンドを使用して、メッセージングデータをインポートします。

    /subsystem=messaging-activemq/server=default:import-journal(file=OUTPUT_DIRECTORY/OldMessagingData.xml)
    重要

    このコマンドは 1 度だけ実行してください。2 回以上実行するとメッセージが複製されます。

    警告

    JBoss EAP 7.0 を使用している場合、Red Hat JBoss Enterprise Application Platform 7.0 Update 05 またはこれ以降の累積パッチを JBoss EAP インストールに適用し、大型メッセージの読み取り時に既知の問題が発生しないようにする必要があります。詳細は、JBEAP-4407 - Consumer crashes with IndexOutOfBoundsException when reading large messages from imported journal を参照してください。この問題は、JBoss EAP 7.1 およびそれ以降のバージョンには影響しません。

メッセージングデータのインポート失敗からの復元

import-journal 操作に失敗した場合、以下の手順に従って復元を行います。

  1. JBoss EAP 7.x サーバーをシャットダウンします。
  2. すべてのメッセージングジャーナルフォルダーを削除します。メッセージングジャーナルフォルダーのディレクトリーの場所を正しく判断する管理 CLI コマンドについては、「メッセージングフォルダーデータのバックアップ」を参照してください。
  3. インポートの前にターゲットサーバーのメッセージングデータをバックアップしたら、メッセージングフォルダーをバックアップした場所から前の手順で決定したメッセージングジャーナルディレクトリーにコピーします。
  4. 手順を繰り返して、XML でフォーマットされたメッセージングデータをインポートします。

4.9.2.2. JMS ブリッジを使用したメッセージングデータの移行

この方法では、JMS ブリッジを JBoss EAP 7.x サーバーに設定およびデプロイします。JMS ブリッジはメッセージを JBoss EAP 6.4 HornetQ のキューから JBoss EAP 7.x ActiveMQ Artemis のキューに移動します。

JMS ブリッジはソースの JMS キューまたはトピックからメッセージを消費し、通常は異なるサーバーにあるターゲット JMS キューまたはトピックへ送信します。JMS 1.1 に準拠する JMS サーバーの間でメッセージをブリッジするために使用できます。送信元および宛先の JMS リソースは、JNDI を使用してルックアップされ、JNDI ルックアップのクライアントクラスはモジュールでバンドルされる必要があります。モジュール名は JMS ブリッジ設定で宣言されます。

ここでは、メッセージングデータを JBoss EAP 6.4 から JBoss EAP 7.x に移動するためにサーバーを設定し、JMS ブリッジをデプロイする方法を説明します。

ソース JBoss EAP 6.4 サーバーの設定
  1. JBoss EAP 6.4 サーバーを停止します。
  2. HornetQ のジャーナルおよび設定ファイルをバックアップします。

    • デフォルトでは、HornetQ ジャーナルは EAP6_HOME/standalone/data/ ディレクトリーにあります。
    • 各リリースにおけるメッセージングフォルダーのデフォルトの場所は、「メッセージングフォルダー名のマッピング」を参照してください。
  3. JMS メッセージが含まれる InQueue JMS キューが JBoss EAP 6.4 サーバーで定義されていることを確認してください。
  4. messaging サブシステムの設定に以下と似た RemoteConnectionFactory のエントリーが含まれていることを確認してください。

    <connection-factory name="RemoteConnectionFactory">
        <entries>
            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
        </entries>
        ...
    </connection-factory>

    エントリーが含まれていない場合は、以下の管理 CLI コマンドを使用して作成します。

    /subsystem=messaging/hornetq-server=default/connection-factory=RemoteConnectionFactory:add(factory-type=XA_GENERIC, connector=[netty], entries=[java:jboss/exported/jms/RemoteConnectionFactory],ha=true,block-on-acknowledge=true,retry-interval=1000,retry-interval-multiplier=1.0,reconnect-attempts=-1)
ターゲット JBoss EAP 7.x サーバーの設定
  1. 以前のリリースでは、JMS ブリッジ設定が HornetQ サーバーに接続するには、org.hornetq モジュールが必要です。このモジュールと直接の依存関係は JBoss EAP 7.x では存在しないため、以前のリリースから以下のモジュールをコピーする必要があります。

    • org.hornetq モジュールを JBoss EAP 7.x の EAP_HOME/modules/org/ ディレクトリーにコピーします。

      • このモジュールにパッチを適用しなかった場合は、 JBoss EAP 6.4 サーバーから EAP6_HOME/modules/system/layers/base/org/hornetq/ をコピーします。
      • このモジュールにパッチを適用した場合は、JBoss EAP 6.4 サーバーから EAP6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.x.CP/org/hornetq/ をコピーします。
    • JBoss EAP 7.x の EAP_HOME/modules/org/hornetq/main/module.xml ファイルから HornetQ lib<resource-root> を削除します。

      • JBoss EAP 6.4 の org.hornetq モジュールにパッチを適用しなかった場合、ファイルから以下の行を削除します。

        <resource-root path="lib"/>
      • JBoss EAP 6.4 の org.hornetq モジュールにパッチを適用した場合、ファイルから以下の行を削除します。

        <resource-root path="lib"/>
        <resource-root path="../../../../../org/hornetq/main/lib"/>
        警告

        HornetQ lib パス resource-root の削除に失敗すると、ブリッジに障害が発生し、以下のエラーがログファイルに記録されます。

        2016-07-15 09:32:25,660 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 2) WFLYCTL0013: Operation ("add") failed - address: ([
            ("subsystem" => "messaging-activemq"),
            ("jms-bridge" => "myBridge")
        ]) - failure description: "WFLYMSGAMQ0086: Unable to load module org.hornetq"
    • org.jboss.netty モジュールを JBoss EAP 7.x EAP_HOME/modules/org/jboss/ ディレクトリーにコピーします。

      • このモジュールにパッチを適用しなかった場合は、 JBoss EAP 6.4 サーバーから EAP6_HOME/modules/system/layers/base/org/jboss/netty/フォルダーをコピーします。
      • このモジュールにパッチを適用した場合は、 JBoss EAP 6.4 サーバーから EAP6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.x.CP/org/jboss/netty フォルダーをコピーします。
  2. JBoss EAP 6.4 サーバーから受信したメッセージを格納するために JSM キューを作成します。以下は、MigratedMessagesQueue JMS キューを作成してメッセージを受信する管理 CLI コマンドの例になります。

    jms-queue add --queue-address=MigratedMessagesQueue --entries=[jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue]

    このコマンドにより、JBoss EAP 7 .x サーバーの messaging-activemq サブシステムに以下のデフォルトサーバー用の jms-queue 設定が作成されます。

    <jms-queue name="MigratedMessagesQueue" entries="jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue"/>
  3. messaging-activemq サブシステムの default サーバーに以下と似た InVmConnectionFactory connection-factory の設定が含まれるようにしてください。

    <connection-factory name="InVmConnectionFactory" factory-type="XA_GENERIC" entries="java:/ConnectionFactory" connectors="in-vm"/>

    エントリーが含まれていない場合は、以下の管理 CLI コマンドを使用して作成します。

    /subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC, connectors=[in-vm], entries=[java:/ConnectionFactory])
  4. JBoss EAP 6 .4 サーバーで設定された InQueue JMS キューからメッセージを読み取る JMS ブリッジを作成およびデプロイし、JBoss EAP 7.x サーバーで設定された MigratedMessagesQueue に転送します。

    /subsystem=messaging-activemq/jms-bridge=myBridge:add(add-messageID-in-header=true,max-batch-time=100,max-batch-size=10,max-retries=-1,failure-retry-interval=1000,quality-of-service=AT_MOST_ONCE,module=org.hornetq,source-destination=jms/queue/InQueue,source-connection-factory=jms/RemoteConnectionFactory,source-context=[("java.naming.factory.initial"=>"org.wildfly.naming.client.WildFlyInitialContextFactory"),("java.naming.provider.url"=>"remote://127.0.0.1:4447")],target-destination=jms/queue/MigratedMessagesQueue,target-connection-factory=java:/ConnectionFactory)

    これにより、以下の jms-bridge 設定が JBoss EAP 7.x サーバーの messaging-activemq サブシステムに作成されます。

    <jms-bridge name="myBridge" add-messageID-in-header="true" max-batch-time="100" max-batch-size="10" max-retries="-1" failure-retry-interval="1000" quality-of-service="AT_MOST_ONCE" module="org.hornetq">
        <source destination="jms/queue/InQueue" connection-factory="jms/RemoteConnectionFactory">
            <source-context>
                <property name="java.naming.factory.initial" value="org.wildfly.naming.client.WildFlyInitialContextFactory"/>
                <property name="java.naming.provider.url" value="remote://127.0.0.1:4447"/>
            </source-context>
        </source>
        <target destination="jms/queue/MigratedMessagesQueue" connection-factory="java:/ConnectionFactory"/>
    </jms-bridge>
  5. セキュリティーが JBoss EAP 6.4 に設定されている場合、接続の作成時に JNDI ルックアップで使用される正しいユーザー名およびパスワードを指定する source-context が含まれるよう、JMS ブリッジ設定 <source> 要素を設定する必要もあります。
メッセージングデータの移行
  1. 以下の設定に提供する情報が正しいことを確認します。

    • キューおよびトピック名。
    • JNDI ルックアップの java.naming.provider.url
  2. ターゲット JMS 宛先が JBoss EAP 7.x サーバーにデプロイされているようにしてください。
  3. JBoss EAP 6.4 サーバーと JBoss EAP 7.x サーバーを両方起動します。

4.9.2.3. メッセージングフォルダー名のマッピング

以下の表では、JBoss EAP の以前および現在のリリースで対応するメッセージングディレクトリーの名前を示しています。ディレクトリーは jboss.server.data.dir ディレクトリーに相対的で、指定がない場合はデフォルトで EAP_HOME/standalone/data/ になります。

JBoss EAP 6.4 のディレクトリー名JBoss EAP 7.x のディレクトリー名

messagingbindings/

activemq/bindings/

messagingjournal/

activemq/journal/

messaginglargemessages/

activemq/largemessages/

messagingpaging/

activemq/paging/

注記

大型のメッセージがない場合や、ページングが無効になっている場合は、 messaginglargemessages/ および messagingpaging/ ディレクトリーが存在しないことがあります。

4.9.2.4. メッセージングフォルダーデータのバックアップ

ターゲットサーバーによってメッセージがすでに処理されている場合、ターゲットメッセージングフォルダーをバックアップしてから作業を開始した方がよいでしょう。メッセージングフォルダーのデフォルトの場所は EAP_HOME/standalone/data/activemq/ ですが、場所を設定できます。メッセージングデータの場所が分からない場合は、以下の管理 CLI コマンドを使用してメッセージングフォルダーの場所を探すことができます。

/subsystem=messaging-activemq/server=default/path=journal-directory:resolve-path
/subsystem=messaging-activemq/server=default/path=paging-directory:resolve-path
/subsystem=messaging-activemq/server=default/path=bindings-directory:resolve-path
/subsystem=messaging-activemq/server=default/path=large-messages-directory:resolve-path

フォルダーの場所を特定したら、各フォルダーを安全にバックアップできる場所にコピーします。

4.9.3. JMS 宛先の移行

JBoss EAP のこれまでのリリースでは、JMS 宛先キューは messaging サブシステムの <hornetq-server> 要素下にある <jms-destinations> 要素に設定されました。

<hornetq-server>
  ...
  <jms-destinations>
     <jms-queue name="testQueue">
        <entry name="queue/test"/>
         <entry name="java:jboss/exported/jms/queue/test"/>
      </jms-queue>
  </jms-destinations>
  ...
</hornetq-server>

JBoss EAP 7 では、JMS 宛先キューは messaging-activemq サブシステムのデフォルトの <server> 要素に設定されます。

<server name="default">
  ...
  <jms-queue name="testQueue" entries="queue/test java:jboss/exported/jms/queue/test"/>
  ...
</server>

4.9.4. メッセージングインターセプターの移行

JBoss EAP 7 では、JMS メッセージングプロバイダーが HornetQ から ActiveMQ Artemis に変更されたため、メッセージングインターセプターが大幅に変更されました。

以前の JBoss EAP リリースに含まれていた HornetQ messaging サブシステムでは、HornetQ インターセプターを JAR に追加し、HornetQ module.xml ファイルを修正するというインストール方法が必要でした。

JBoss EAP 7 に含まれる messaging-activemq サブシステムは、module.xml ファイルの修正を必要としません。Apache ActiveMQ Artemis Interceptor インターフェースを実装するユーザーインターセプタークラスは、どのサーバーモジュールからでもロードできるようになりました。インターセプターのロード先となるモジュールは、サーバー設定ファイルの messaging-activemq サブシステムで指定します。

例: インターセプター設定

<subsystem xmlns="urn:jboss:domain:messaging-activemq:2.0">
  <server name="default">
    ...
    <incoming-interceptors>
      <class name="com.mycompany.incoming.myInterceptor" module="com.mycompany" />
      <class name="com.othercompany.incoming.myOtherInterceptor" module="com.othercompany" />
    </incoming-interceptors>
    <outgoing-interceptors>
      <class name="com.mycompany.outgoing.myInterceptor" module="com.mycompany" />
      <class name="com.othercompany.outgoing.myOtherInterceptor" module="com.othercompany" />
    </outgoing-interceptors>
  </server>
</subsystem>

4.9.5. Netty サーブレット設定の変更

JBoss EAP 6 では、Netty サーブレットトランスポートと動作するようサーブレットエンジンを設定することができました。JBoss EAP 7 では、ビルトインメッセージングプロバイダーが HornetQ から ActiveMQ Artemis に変更になったため、この設定は使用できなくなりました。新しいビルトインメッセージング HTTP コネクターおよび HTTP アクセプターを使用するよう、サーブレット設定を変更する必要があります。

4.9.6. 汎用 JMS リソースアダプターの設定

サードパーティー JMS プロバイダーと使用するために汎用 JMS リソースアダプターを設定する方法は JBoss EAP 7 で変更になりました。詳細は、JBoss EAP『Configuring Messaging』の「Deploying a Generic JMS Resource Adapter」を参照してください。

4.9.7. JBoss EAP 7.1 で変更になったメッセージング設定

JBoss EAP 7.0 では、check-for-live-server 属性を指定せずに replication-master ポリシーを設定した場合のデフォルト値が false でした。JBoss EAP 7.1 ではこれが変更になり、check-for-live-server 属性のデフォルト値が true になりました。

以下は、check-for-live-server 属性を指定せずに replication-master を設定する管理 CLI コマンドの例になります。

/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(cluster-name=my-cluster,group-name=group1)

管理 CLI を使用してリソースを読み取ると、check-for-live-server 属性の値が true に設定されることに注意してください。

/subsystem=messaging-activemq/server=default/ha-policy=replication-master:read-resource(recursive=true)
{
    "outcome" => "success",
    "result" => {
        "check-for-live-server" => true,
        "cluster-name" => "my-cluster",
        "group-name" => "group1",
        "initial-replication-sync-timeout" => 30000L
    },
    "response-headers" => {"process-state" => "reload-required"}
}

4.9.8. リリース間の JMS シリアル化動作の変更

JMS 1.1 と JMS 2.0.0 では、javax.jms.JMSExceptionserialVersionUID が変更になりました。そのため、JMS 1.1 を使用して JMSException のインスタンスまたは JMSException のサブクラスをシリアライズした場合、JMS 2.0.0 を使用してデシリアライズすることはできません。その逆も同様です。JMS 2.0.0 を使用して JMSException のインスタンスをシリアライズした場合、JMS 1.1 を使用してデシリアライズすることはできません。両方の場合で以下のような例外が発生します。

javax.jms.JMSException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441

この問題は、JMS 2.0.1 メンテナンスリリースで修正されました。

以下の表は、各 JBoss EAP リリースの JMS 実装の詳細を表しています。

表4.4 各 JBoss EAP リリースの JMS 実装

JBoss EAP バージョンJMS 実装JMS バージョン

6.4

HornetQ

JMS 1.1

7.0

Apache ActiveMQ Artemis

JMS 2.0.0

7.1

Apache ActiveMQ Artemis

JMS 2.0.1

serialVersionUID の互換性が維持されないと、以下の状況で移行時に問題が発生することがあります。

  • JBoss EAP 6.4 クライアントを使用して JMSException が含まれるメッセージを送信し、メッセージングデータを JBoss EAP 7.0 に移行した後、JBoss EAP 7.0 クライアントを使用してそのメッセージをデシリアライズしようとするとデシリアライズに失敗し、例外が発生します。これは、JMS 1.1 の serialVersionUID は JMS 2.0.0 の serialVersionUID と互換性がないからです。
  • JBoss EAP 7.0 クライアントを使用して JMSException が含まれるメッセージを送信し、メッセージングデータを JBoss EAP 7.1 に移行した後、JBoss EAP 7.1 クライアントを使用してそのメッセージをデシリアライズしようとするとデシリアライズに失敗し、例外が発生します。これは、JMS 2.0.0 の serialVersionUID は JMS 2.0.1 の serialVersionUID と互換性がないからです。

JBoss EAP 6.4 クライアントを使用して JMSException が含まれるメッセージを送信し、メッセージングデータを JBoss EAP 7.1 に移行した後、JBoss EAP 7.1 クライアントを使用してそのメッセージをデシリアライズした場合、JMS 1.1 の serialVersionUID は JMS 2.0.1 の serialVersionUID と互換性があるため、デシリアライズに成功します。

重要

以下を実行してからメッセージングデータを移行することが推奨されます。

  • JMSExceptions が含まれる JMS 1.1 のメッセージをすべて消費してからメッセージングデータを JBoss EAP 6.4 から JBoss EAP 7.0 へ移行します。
  • JMSExceptions が含まれる JMS 2.0.0 のメッセージをすべて消費してからメッセージングデータを JBoss EAP 7.0 から JBoss EAP 7.1 へ移行します。

4.10. JMX 管理の変更

JBoss EAP 6 の HornetQ コンポーネントは独自の JMX 管理を提供しましたが、それは推奨されず、今回非推奨となったため、サポート対象外になりました。JBoss EAP 6 でこの機能に依存していた場合、EAP 7 で提供される JBoss EAP 管理 CLI または JMX 管理のいずれかを使用するよう、管理ツールを移行する必要があります。

また、クライアントライブラリーをアップグレードして、JBoss EAP 7 に同梱される jboss-client.jar を使用する必要もあります。

以下は、JBoss EAP 6 で使用された HornetQ JMX 管理コードの例になります。

JMXConnector connector = null;
try {
    HashMap environment = new HashMap();
    String[] credentials = new String[]{"admin", "Password123!"};
    environment.put(JMXConnector.CREDENTIALS, credentials);

    // HornetQ used the protocol "remoting-jmx" and port "9999"
    JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remoting-jmx://127.0.0.1:9999");

    connector = JMXConnectorFactory.connect(beanServerUrl, environment);
    MBeanServerConnection mbeanServer = connector.getMBeanServerConnection();

    // The JMX object name pointed to the HornetQ JMX management
    ObjectName objectName = new ObjectName("org.hornetq:type=Server,module=JMS");

    // The invoked method name was "listConnectionIDs"
    String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIDs", new Object[]{}, new String[]{});
    for (String connection : connections) {
        System.out.println(connection);
    }
} finally {
    if (connector != null) {
      connector.close();
   }
}

以下は、JBoss EAP 7 の ActiveMQ Artemis に必要な同等のコード例になります。

JMXConnector connector = null;
try {
    HashMap environment = new HashMap();
    String[] credentials = new String[]{"admin", "Password123!"};
    environment.put(JMXConnector.CREDENTIALS, credentials);

    // ActiveMQ Artemis uses the protocol "remote+http" and port "9990"
    JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remote+http://127.0.0.1:9990");

    connector = JMXConnectorFactory.connect(beanServerUrl, environment);
    MBeanServerConnection mbeanServer = connector.getMBeanServerConnection();

    // The JMX object name points to the new JMX management in the `messaging-activemq` subsystem
    ObjectName objectName = new ObjectName("jboss.as:subsystem=messaging-activemq,server=default");

    // The invoked method name is now "listConnectionIds"
    String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIds", new Object[]{}, new String[]{});
    for (String connection : connections) {
        System.out.println(connection);
    }
} finally {
    if (connector != null) {
      connector.close();
   }
}

新しい実装ではメソッド名とパラメーターが変更されたことに注意してください。以下の手順に従うと、JConsole で新しいメソッド名を検索できます。

  1. 以下のコマンドを使用して JConsole に接続します。

    $ EAP_HOME/bin/jconsole.sh
  2. JBoss EAP のローカルプロセスに接続します。「jboss-modules.jar」で始まることに注意してください。
  3. MBeans タブで jboss.asmessaging-activemqdefaultOperations と選択し、メソッド名と属性のリストを表示します。

4.11. ORB サーバー設定の変更

JBoss EAP 7 では、JacORB 実装が OpenJDK ORB のダウンストリームブランチに変更になりました。

EAP_HOME/modules/system/layers/base/ にあった org.jboss.as.jacorb 拡張モジュールは、org.wildfly.iiop-openjdk 拡張モジュールに置き換えられました。

サーバー設定ファイルの urn:jboss:domain:jacorb:1.4 サブシステム設定ネームスペースは urn:jboss:domain:iiop-openjdk:1.0 ネームスペースに置き換えられました。

以下の例は、JBoss EAP 6 のデフォルトの jacorb システム設定を示しています。

<subsystem xmlns="urn:jboss:domain:jacorb:1.4">
    <orb socket-binding="jacorb" ssl-socket-binding="jacorb-ssl">
        <initializers security="identity" transactions="spec"/>
    </orb>
</subsystem>

以下の例は、JBoss EAP 7 のデフォルトの iiop-openjdk サブシステム設定を示しています。

<subsystem xmlns="urn:jboss:domain:iiop-openjdk:1.0">
    <orb socket-binding="jacorb" ssl-socket-binding="jacorb-ssl" />
    <initializers security="identity" transactions="spec" />
</subsystem>

新しい iiop-openjdk サブシステム設定は、レガシー要素および属性のサブセットのみを受け入れます。以下は、有効な要素および属性がすべて含まれる、前リリースの JBoss EAP の jacorbサブシステム設定例になります。

<subsystem xmlns="urn:jboss:domain:jacorb:1.4">
   <orb name="JBoss" print-version="off" use-imr="off" use-bom="off"  cache-typecodes="off"
       cache-poa-names="off" giop-minor-version="2" socket-binding="jacorb" ssl-socket-binding="jacorb-ssl">
       <connection retries="5" retry-interval="500" client-timeout="0" server-timeout="0"
           max-server-connections="500" max-managed-buf-size="24" outbuf-size="2048"
           outbuf-cache-timeout="-1"/>
       <initializers security="off" transactions="spec"/>
   </orb>
   <poa monitoring="off" queue-wait="on" queue-min="10" queue-max="100">
       <request-processors pool-size="10" max-threads="32"/>
   </poa>
   <naming root-context="JBoss/Naming/root" export-corbaloc="on"/>
   <interop sun="on" comet="off" iona="off" chunk-custom-rmi-valuetypes="on"
       lax-boolean-encoding="off" indirection-encoding-disable="off" strict-check-on-tc-creation="off"/>
   <security support-ssl="off" add-component-via-interceptor="on" client-supports="MutualAuth"
       client-requires="None" server-supports="MutualAuth" server-requires="None"/>
   <properties>
       <property name="some_property" value="some_value"/>
   </properties>
</subsystem>

以下の要素属性はサポート対象外になったため、削除する必要があります。

表4.5 削除する属性

要素サポートされない属性

<orb>

  • client-timeout
  • max-managed-buf-size
  • max-server-connections
  • outbuf-cache-timeout
  • outbuf-size
  • connection retries
  • retry-interval
  • name
  • server-timeout

<poa>

  • queue-min
  • queue-max
  • pool-size
  • max-threads

以下の on/off 属性はサポート対象外となり、管理 CLI の migrate 操作を実行しても移行されません。これらの属性が on に設定されていると移行の警告が表示されます。<security support-ssl="on|off"> などの、この表に記載されていない on/off 属性のサポートは継続され、正常に移行されます。唯一の違いは、値が on/off から true/false に変更されることです。

表4.6 off に設定するまたは削除する属性

要素off に設定する属性

<orb>

  • cache-poa-names
  • cache-typecodes
  • print-version
  • use-bom
  • use-imr

<interop>

(sun 以外すべて)

  • comet
  • iona
  • chunk-custom-rmi-valuetypes
  • indirection-encoding-disable
  • lax-boolean-encoding
  • strict-check-on-tc-creation

<poa>

  • monitoring
  • queue-wait

4.12. threads サブシステム設定の移行

JBoss EAP 6 のサーバー設定には、サーバーの異なるサブシステムにまたがってスレッドプールを管理するために使用される threads が含まれていました。

threads サブシステムは JBoss EAP 7 では利用できないようになりました。この代わりに、各サブシステムが独自のスレッドプールを管理します。

infinispan サブシステムのスレッドプールを設定する方法は、 JBoss EAP『設定ガイド』の「Infinispan スレッドプールの設定」を参照してください。

jgroups サブシステムのスレッドプールを設定する方法は、JBoss EAP『設定ガイド』の「JGroups スレッドプールの設定」を参照してください。

JBoss EAP 6 では、threads サブシステムに定義された executorを参照して web サブシステムのコネクターおよびリスナーのスレッドプールを設定しました。JBoss EAP 7 では、io サブシステムに定義された worker を参照して undertow サブシステムのスレッドプールを設定します。詳細は、JBoss EAP『設定ガイド』の「IO サブシステムの設定」を参照してください。

remoting サブシステムのスレッドプール設定の変更に関する詳細は、本ガイドの「Remoting サブシステム設定の移行」と、JBoss EAP『設定ガイド』の「エンドポイントの設定」を参照してください。

4.13. Remoting サブシステム設定の移行

JBoss EAP 6 では、複数の worker-* 属性を設定して remoting サブシステムのスレッドプールを設定しました。JBoss EAP 7 では remoting サブシステムでワーカースレッドプールを設定しないようになりました。既存の設定を変更しようとすると、以下のメッセージが表示されます。

WFLYRMT0022: Worker configuration is no longer used, please use endpoint worker configuration

JBoss EAP 7 では、ワーカースレッドプールは、io サブシステムで定義される worker を参照するエンドポイント設定に置き換えられました。

エンドポイントの設定方法については、JBoss EAP『設定ガイド』の「エンドポイントの設定」を参照してください。

4.14. WebSocket サーバー設定の変更

JBoss EAP 6 で WebSockets を使用するには、以下と同様のコマンドを使用して JBoss EAP サーバー設定ファイルの web サブシステムにある http コネクターに対して非ブロッキング Java NIO2 コネクターを有効にする必要がありました。

/subsystem=web/connector=http/:write-attribute(name=protocol,value=org.apache.coyote.http11.Http11NioProtocol)

アプリケーションで WebSockets を使用するには、アプリケーションの WEB-INF/jboss-web.xml ファイル内で <enable-websockets> 要素を作成し、これを true に設定する必要もありました。

JBoss EAP 7 では、デフォルトの WebSocket サポートに対してサーバーを設定したり、アプリケーションがそれを使用するように設定したりする必要がなくなりました。WebSocket は Java EE 7 では必須で、必要なプロトコルはデフォルトで設定されています。さらに複雑な WebSocket の設定は、JBoss EAP サーバー設定ファイルの undertow サブシステムにある servlet-container で行います。以下のコマンドを実行すると、使用できる設定を表示できます。

/subsystem=undertow/servlet-container=default/setting=websockets:read-resource(recursive=true)
{
   "outcome" => "success",
   "result" => {
       "buffer-pool" => "default",
       "dispatch-to-worker" => true,
       "worker" => "default"
   }
}

WebSocket の開発に関する詳細は、JBoss EAP 開発ガイドWebSocket アプリケーションの作成 を参照してください。

また、WebSocket のコードサンプルは JBoss EAP に同梱されるクイックスタートに含まれています。

4.15. シングルサインオンサーバーの変更

JBoss EAP 7 でも、infinispan サブシステムによって HA サービスの分散キャッシングサポートが Infinispan キャッシュの形式で提供されます。しかし、認証情報のキャッシングおよび分散の処理方法はこれまでのリリースとは異なります。

JBoss EAP 6 では、シングルサインオン (SSO) が Infinispan キャッシュに提供されないと、キャッシュが分散されませんでした。

JBoss EAP 7 では、HA プロファイルを選択すると SSO が自動的に分散されるようになりました。HA プロファイルを実行している場合、各ホストは web キャッシュコンテナーのデフォルトキャッシュを基にした独自の Infinispan キャッシュを持ちます。このキャッシュは関連するセッションとホストの SSO クッキーの情報を格納します。JBoss EAP は、各キャッシュ情報をすべてのホストに伝搬する処理を行います。JBoss EAP 7 では、明確に Infinispan キャッシュを SSO に割り当てる方法はありません。

JBoss EAP 7 では、SSO はサーバー設定ファイルの undertow サブシステムで設定されます。

JBoss EAP 7 に移行する際、アプリケーションコードを変更する必要はありません。

4.16. データソース設定の変更

4.16.1. JDBC データソースドライバー名

以前のリリースの JBoss EAP でデータソースを設定した場合、ドライバー名に指定される値は JDBC ドライバー JAR に含まれる META-INF/services/java.sql.Driver ファイルにリストされたクラスの数によって決まりました。

単一クラスを含むドライバー

META-INF/services/java.sql.Driver ファイルで指定されたクラスが 1 つのみであった場合、ドライバー名は単に JDBC ドライバー JAR の名前でした。これは JBoss EAP 7 でも変更ありません。

複数クラスを含むドライバー

JBoss EAP 6 では、META-INF/services/java.sql.Driver ファイルに複数のクラスが記載されている場合、以下の形式で JAR 名にドライバークラスにするクラスの名前とメジャーおよびマイナーバージョンを追加してクラスを指定していました。

JAR_NAME + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION

JBoss EAP 7 ではこれが変更され、以下の形式でドライバー名を指定します。

JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION
注記

JAR_NAMEDRIVER_CLASS_NAME の間にアンダースコアが加えられています。

2 つのクラスが含まれるドライバーの例としては、MySQL 5.1.31 JDBC ドライバーが挙げられます。このドライバークラス名は com.mysql.jdbc.Driver となります。以下の 2 つの例では、JBoss EAP の以前のリリースと現行リリースにおけるドライバー名の指定方法の違いが示されています。

例: JBoss EAP 6 ドライバー名

mysql-connector-java-5.1.31-bin.jarcom.mysql.jdbc.Driver_5_1

例: JBoss EAP 7 ドライバー名

mysql-connector-java-5.1.31-bin.jar_com.mysql.jdbc.Driver_5_1

4.17. セキュリティーサーバー設定の変更

JBoss EAP 7 に移行し、Java Security Manager を有効にして実行する計画がある場合、ポリシーを定義する方法に変更があり、追加の設定変更が必要になる可能性があります。また、JBoss EAP 7 ではカスタムセキュリティーマネージャーはサポートされないため注意してください。

Java Security Manager のサーバー設定の変更に関する詳細は、JBoss EAP『How to Configure Server Security』の「Considerations Moving from Previous Versions」を参照してください。

4.17.1. JBoss EAP 7.0 と JBoss EAP 7.1 間のレガシーセキュリティー動作の変更

4.17.1.1. 到達不可能な LDAP レルムの HTTP ステータスの変更

JBoss EAP 7.0 でサーバーによって到達可能な LDAP レルムがない場合、security サブシステムは HTTP ステータスコード 401 (Unauthorized) を返しました。これは JBoss EAP 7.1 では変更になりました。JBoss EAP 7.1 のレガシー security サブシステムは HTTP ステータスコード 500 (Internal Error) を返すようになり、予期せぬ状況が発生してサーバーがリクエストの処理に失敗したことをより明確に示すようになりました。

4.17.1.2. LDAP セキュリティーレルムの有効化による DN のロールの解析

JBoss EAP 7.0 では、DN からのロールを解析するために org.jboss.as.domain.management.security.parseGroupNameFromLdapDN システムプロパティーを使用して LDAP セキュリティーを有効にしました。このプロパティーが true に設定されると、ロールは DN から解析されました。それ以外の場合は、ロールの検索に通常の LDAP 検索が使用されました。

JBoss EAP 7.1 では、このシステムプロパティーが非推奨になりました。このオプションを設定するには、以下の管理 CLI コマンドを使用して、コアサービスパスで新規導入された parse-group-name-from-dn 属性を true に設定します。

/core-service=management/security-realm=REALM_NAME/authorization=ldap/group-search=principal-to-group:add(parse-group-name-from-dn=true)

4.17.1.3. JBoss EAP SSL 証明書の LDAP サーバーへの送信に関する変更

JBoss EAP 7.0 では、ldapSSL セキュリティーレルムを使用するよう管理インターフェースが設定されていると、サーバーと LDAP 間の相互認証に失敗し、管理インターフェースの認証に失敗することがあります。これは、それぞれ異なるスレッドによって 2 つの LDAP 接続が確立され、これらの接続が SSL セッションを共有しないためです。

JBoss EAP 7.1 の LDAP outbound-connection に、新しいブール値 always-send-client-cert が導入されました。このオプションを使用すると、アウトバウンド LDAP 接続の設定によって、常にクライアント証明書が必要であると設定された LDAP サーバーをサポートすることができます。

LDAP 認証は 2 つの手順で行われます。

  1. アカウントを検索します。
  2. クレデンシャルを検証します。

デフォルトでは、always-send-client-cert 属性は false に設定されるため、クライアント SSL 証明書は最初のアカウント検索リクエストとのみ送信されます。この属性が true に設定されると、JBoss EAP LDAP クライアントは検索および検証リクエストの両方とともにクライアント証明書を LDAP サーバーに送信します。

以下の管理 CLI コマンドを使用してこの属性を true に設定できます。

/core-service=management/ldap-connection=my-ldap-connection:write-attribute(name=always-send-client-cert,value=true)

これにより、サーバー設定ファイルに以下の LDAP アウトバウンド接続が追加されます。

<management>
  ....
  <outbound-connections>
    <ldap name="my-ldap-connection" url="ldap://127.0.0.1:389" search-dn="cn=search,dc=myCompany,dc=com" search-credential="myPass" always-send-client-cert="true"/>
  </outbound-connections>
  ....
</management>

4.17.2. FIPS モードの変更

FIPS モードで実行している場合、JBoss EAP 7.0 のデフォルト動作が JBoss EAP 7.1 では変更になったことに注意してください。

レガシーセキュリティーレルムを使用している場合、JBoss EAP 7.1 では開発の目的で自己署名証明書が自動的に生成されます。この機能は JBoss EAP 7.0 にはなく、デフォルトで有効になっています。そのため、FIPS モードで実行している場合、サーバーを設定して自己署名証明書の自動作成を無効にする必要があります。無効にしないと、サーバーの起動時に以下のエラーが発生することがあります。

ERROR [org.xnio.listener] (default I/O-6) XNIO001007: A channel event listener threw an exception: java.lang.RuntimeException: WFLYDM0114: Failed to lazily initialize SSL context
...
Caused by: java.lang.RuntimeException: WFLYDM0112: Failed to generate self signed certificate
...
Caused by: java.security.KeyStoreException: Cannot get key bytes, not PKCS#8 encoded

自己署名証明書の自動作成に関する詳細は、JBoss EAP『How to Configure Server Security』の「Automatic Self-signed Certificate Creation for Applications」を参照してください。

4.18. transactions サブシステムの変更

JBoss EAP 6 の transactions サブシステムで使用できた Transaction Manager 設定属性の一部が JBoss EAP 7 で変更になりました。

transactions サブシステムの削除された属性

以下の表は、JBoss EAP 7 の transactions サブシステムから削除された JBoss EAP 6 の属性と、それらの代替となる同等の属性を示しています。

JBoss EAP 6 の属性JBoss EAP 7 で代替となる属性

path

object-store-path

relative-to

object-store-relative-to

非推奨となったトランザクションサブシステム属性

JBoss EAP 6 の transactions サブシステムで使用できた以下の属性は、JBoss EAP 7 では非推奨となりました。非推奨となった属性は将来のリリースで削除される可能性があります。以下の表はそれらの代替となる同等の属性を示しています。

JBoss EAP 6 の属性JBoss EAP 7 で代替となる属性

use-hornetq-store

use-journal-store

hornetq-store-enable-async-io

journal-store-enable-async-io

enable-statistics

statistics-enabled

4.19. mod_cluster 設定の変更

JBoss EAP 7 では、mod_cluster の静的プロキシーの設定が変更になりました。

JBoss EAP 6 では、hostname:port の形式で指定された httpd プロキシーアドレスのカンマ区切りリストである proxy-list 属性を設定しました。

proxy-list 属性は JBoss EAP 7 では非推奨になりました。この属性は、アウトバウンドソケットバインディング名のリストである proxies 属性に置き換えられました。

この変更は、mod_cluster のアドバタイズを無効にするときなど、静的プロキシーリストを定義する方法に影響します。mod_cluster のアドバタイズを無効化する方法の詳細は、JBoss EAP『設定ガイド』の「mod_cluster のアドバタイズの無効化」を参照してください。

mod_cluster 属性の詳細は、 JBoss EAP『設定ガイド』の「ModCluster サブシステムの属性」を参照してください。

4.20. 設定変更の確認

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

JBoss EAP 7.0 では、オプションの設定と最近の設定変更の一覧表示にcore-service 管理 CLI コマンドを使用する必要があります。

例: JBoss EAP 7.0 での設定変更の表示

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

JBoss EAP 7.1 には、稼働中のサーバーに追加された設定変更を追跡するよう設定できる新しい core-management サブシステムが導入されました。これは、JBoss EAP 7.1 で設定変更を設定および表示する推奨方法となります。

例: JBoss EAP 7.1 での設定変更の表示

/subsystem=core-management/service=configuration-changes:add(max-history=20)
/subsystem=core-management/service=configuration-changes:list-changes

JBoss EAP 7.1 に導入された新しい core-management サブシステムの使用に関する詳細は、JBoss EAP『設定ガイド』の「設定変更の確認」を参照してください。