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 設定ファイルの jacorb
、messaging
、および 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 では、jacorb
、messaging
、および web
サブシステムを以前のリリースから新しい設定へ自動的に更新する migrate
操作を実行できます。また、 jacorb
、messaging
、および web
サブシステムに describe-migration
操作を実行すると、移行を行う前に提案された移行設定の変更を確認することもできます。cmp
、jaxr
、および 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 のサーバー設定を更新します。
- 移行を始める前に、「重要データのバックアップおよびサーバー状態の確認」の内容を見直してください。ここには、サーバーを良好な状態にし、適切なファイルをバックアップするための重要な情報が記載されています。
JBoss EAP 6 の設定で JBoss EAP 7 のサーバーを起動します。
- JBoss EAP 7 サーバー設定ファイルをバックアップします。
以前のリリースの設定ファイルを JBoss EAP 7 ディレクトリーにコピーします。
$ cp EAP6_HOME/standalone/configuration/standalone-full.xml EAP7_HOME/standalone/configuration
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.
新しいターミナルを開いて、JBoss EAP 7 のインストールディレクトリーへ移動し、
--controller=remote://localhost:9999
引数を使用して管理 CLI を開始します。$ bin/jboss-cli.sh --connect --controller=remote://localhost:9999
JacORB、Messaging、および Web サブシステムの移行
移行を行う前にサブシステムに追加した設定変更を確認するには、
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")] } ] } }
migrate
操作を実行し、サブシステムの設定を JBoss EAP 7 の代替サブシステムに移行します。この操作では以下の構文を使用します。/subsystem=SUBSYSTEM_NAME:migrate
注記messaging
サブシステムのdescribe-migration
およびmigrate
操作を使用すると、引数を渡してレガシークライアントによるアクセスを設定することができます。コマンド構文の詳細は、「Messaging サブシステムの移行および前方互換性」を参照してください。このコマンドの結果を確認します。必ず、操作が正常に完了し、"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
警告のリストは、本ガイドの最後にあるリファレンス資料 に記載されています。サーバー設定ファイルを確認し、拡張、サブシステム、および名前空間が更新され、既存のサブシステム設定が JBoss EAP 7 に移行されたことを確認します。
注記この手順は、以下のコマンドを使用して
jacorb
、messaging
、およびweb
の各サブシステムに対して繰り返す必要があります。/subsystem=jacorb:migrate /subsystem=messaging:migrate /subsystem=web:migrate
cmp
、jaxr
、およびthreads
サブシステムおよび拡張をサーバー設定から削除します。管理 CLI プロンプトで以下のコマンドを実行し、廃止された
cmp
、jaxr
、および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
サーバーを再起動して通常操作を行う前に messaging
、jacorb
、および web
サブシステムを移行し、cmp
、jaxr
、および 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 "%T sec" "%r" %s %b "%{Referer}i" "%{User-agent}i""/>
JBoss EAP 7.1 では Undertow が使用されるようになったため、受信ヘッダーのパターンは %{i,headername}
に変更になりました。
例: JBoss EAP 7.1 でのアクセス形式ヘッダー
<access-log pattern="%h %l %u %t "%T sec" "%r" %s %b "%{i,Referer}" "%{i,User-Agent}""/>
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 |
手順については |
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>
- ログエントリーを保存するデータベースのドライバーモジュールを作成します。
データベースのデータソースを設定し、ドライバーを
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>
式
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.6. Set-Cookie の動作変更
RFC2109 や RFC2965 など、Set-Cookie
HTTP 応答ヘッダー構文の以前の仕様では、クッキー値が引用符で囲まれている場合はクッキー値に空白やその他の区切り文字を使用することができました。JBoss EAP 6.4 の JBoss Web は以前の仕様に準拠し、区切り文字が含まれるクッキー値を自動的に引用符で囲みました。
Set-Cookie
HTTP 応答ヘッダー構文の RFC6265 仕様には、Set-Cookie
応答ヘッダーのクッキー値は特定の文法制約に準拠しなければならないと記載されています。たとえば、US-ASCII 文字でなければならず、CTRL (コントロール)、空白、2 重引用符、コンマ、セミコロン、またはバックスラッシュ文字を含んではいけません。
JBoss EAP 7.0 の累積パッチ Red Hat JBoss Enterprise Application Platform 7.0 Update 08 以前では、Undertow はこれらの無効な文字を制限せず、除外された文字が含まれたクッキーを引用符で囲みません。この累積パッチまたはこれ以降の累積パッチを適用し、 io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION
システムプロパティーを true
に設定すると、RFC6265 に準拠するクッキーの検証を有効にすることができます。
JBoss EAP 7.1 では、Undertow はデフォルトで RFC6265 に準拠するクッキーの検証を有効にしません。除外された文字が含まれたクッキーを引用符で囲みます。JBoss EAP 7.1 では、io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION
システムプロパティーを使用して RFC6265 に準拠するクッキーの検証を有効にすることはできません。代わりに、rfc6265-cookie-validation
リスナー属性を true
に設定して HTTP、HTTPS、または AJP リスナーの RFC6265 に準拠するクッキーの検証を有効にします。以下の例は、HTTP リスナーの RFC6265 に準拠するクッキーの検証を有効にします。
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=rfc6265-cookie-validation,value=true)
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-store
のmax-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
キャッシュを再設定してこのエラーを解決する必要があります。
- 「サーバーおよび管理 CLI の起動」の手順に従います。
以下のコマンドを実行して、
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-entries
が true
に設定されていると、messaging-activemq
サブシステムが legacy-connection-factory
リソースを作成し、legacy-entries
を jms-queue
および jms-topic
リソースに追加します。
ブール値の引数 add-legacy-entries
が false
に設定されていると、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-consumers
が false
に設定され、クラスターにコンシューマーがない場合に、メッセージはクラスターのすべてのノードへ再分散されました。
この挙動は JBoss EAP 7 では変更になりました。forward-when-no-consumers
が false
に設定され、クラスターにコンシューマーがない場合にメッセージは再分散されず、メッセージの送信先のノードに保持されます。
デフォルトのクラスター負荷分散ポリシーの変更
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
操作を使用してそのファイルをインポートします。
メッセージングデータの XML ファイルへのエクスポート
- XML 形式のメッセージングデータのインポート
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/
ディレクトリー内に作成します。
以下の手順に従い、データをエクスポートします。
- JBoss EAP 6.4 サーバーを停止します。
- 上記の説明にあるようにカスタムモジュールを作成します。
以下のコマンドを実行してデータをエクスポートします。
$ 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
- コマンド完了後に、ログにエラーや警告メッセージがないことを確認します。
- 使用中のオペレーティングシステムで利用可能なツールを使用して、生成された出力ファイルの XML を検証します。
メッセージングデータの JBoss EAP 7.0 からのエクスポート
以下の手順に従って、JBoss EAP 7.0 からメッセージングデータをエクスポートします。
ターミナルを開き、JBoss EAP 7.0 のインストールディレクトリーへ移動し、
admin-only
モードでサーバーを起動します。$ EAP_HOME/bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
新しいターミナルを開き、JBoss EAP 7.0 のインストールディレクトリーへ移動し、管理 CLI に接続します。
$ EAP_HOME/bin/jboss-cli.sh --connect
以下の管理 CLI コマンドを使用して、メッセージングジャーナルデータをエクスポートします。
/subsystem=messaging-activemq/server=default:export-journal()
- コマンド完了後に、ログにエラーや警告メッセージがないことを確認します。
- 使用中のオペレーティングシステムで利用可能なツールを使用して、生成された出力ファイルの XML を検証します。
XML 形式のメッセージングデータのインポート
以下のように、 import-journal
操作を使用して、XML ファイルを JBoss EAP 7.0 およびそれ以降のリリースにインポートします。
ターゲットサーバーによって一部のメッセージングタスクがすでに実行済みである場合は、インポートに失敗した場合にデータを損失しないようにするため、import-journal
操作の実行前にメッセージングフォルダーをバックアップしてください。詳細は、「メッセージングフォルダーデータのバックアップ」を参照してください。
- JBoss EAP 6.4 サーバーを 7.1 に移行する場合、サーバー設定の移行が完了してから管理 CLI の migrate 操作の使用または JBoss Server Migration Tool の実行を開始してください。このツールの設定および実行方法に関する詳細は、『Using the JBoss Server Migration Tool』を参照してください。
JMS クライアントが未接続の状態で、JBoss EAP 7.x サーバーを通常モードで起動します。
重要接続している JMS クライアントがない状態でサーバーを起動することが重要になります。これは、
import-journal
操作が JMS プロデューサーのように動作するからです。操作の実行中、メッセージは即座に使用できます。インポート中にこの操作に失敗し、JMS クライアントが接続状態である場合、JMS クライアントがメッセージの一部を消費済みである可能性があるため、復元することができません。新しいターミナルを開き、JBoss EAP 7.x のインストールディレクトリーへ移動し、管理 CLI に接続します。
$ EAP_HOME/bin/jboss-cli.sh --connect
以下の管理 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
操作に失敗した場合、以下の手順に従って復元を行います。
- JBoss EAP 7.x サーバーをシャットダウンします。
- すべてのメッセージングジャーナルフォルダーを削除します。メッセージングジャーナルフォルダーのディレクトリーの場所を正しく判断する管理 CLI コマンドについては、「メッセージングフォルダーデータのバックアップ」を参照してください。
- インポートの前にターゲットサーバーのメッセージングデータをバックアップしたら、メッセージングフォルダーをバックアップした場所から前の手順で決定したメッセージングジャーナルディレクトリーにコピーします。
- 手順を繰り返して、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 サーバーの設定
- JBoss EAP 6.4 サーバーを停止します。
HornetQ のジャーナルおよび設定ファイルをバックアップします。
-
デフォルトでは、HornetQ ジャーナルは
EAP6_HOME/standalone/data/
ディレクトリーにあります。 - 各リリースにおけるメッセージングフォルダーのデフォルトの場所は、「メッセージングフォルダー名のマッピング」を参照してください。
-
デフォルトでは、HornetQ ジャーナルは
-
JMS メッセージが含まれる
InQueue
JMS キューが JBoss EAP 6.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 サーバーの設定
以前のリリースでは、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 6.4 サーバーから
JBoss EAP 7.x の
EAP_HOME/modules/org/hornetq/main/module.xml
ファイルから HornetQlib
の<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.xEAP_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
フォルダーをコピーします。
-
このモジュールにパッチを適用しなかった場合は、 JBoss EAP 6.4 サーバーから
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"/>
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])
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>
-
セキュリティーが JBoss EAP 6.4 に設定されている場合、接続の作成時に JNDI ルックアップで使用される正しいユーザー名およびパスワードを指定する
source-context
が含まれるよう、JMS ブリッジ設定<source>
要素を設定する必要もあります。
メッセージングデータの移行
以下の設定に提供する情報が正しいことを確認します。
- キューおよびトピック名。
-
JNDI ルックアップの
java.naming.provider.url
。
- ターゲット JMS 宛先が JBoss EAP 7.x サーバーにデプロイされているようにしてください。
- 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 のディレクトリー名 |
---|---|
|
|
|
|
|
|
|
|
大型のメッセージがない場合や、ページングが無効になっている場合は、 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.JMSException
の serialVersionUID
が変更になりました。そのため、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 で新しいメソッド名を検索できます。
以下のコマンドを使用して JConsole に接続します。
$ EAP_HOME/bin/jconsole.sh
- JBoss EAP のローカルプロセスに接続します。「jboss-modules.jar」で始まることに注意してください。
- MBeans タブで jboss.as → messaging-activemq → default → Operations と選択し、メソッド名と属性のリストを表示します。
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> |
|
<poa> |
|
以下の on/off
属性はサポート対象外となり、管理 CLI の migrate
操作を実行しても移行されません。これらの属性が on
に設定されていると移行の警告が表示されます。<security support-ssl="on|off">
などの、この表に記載されていない on/off
属性のサポートは継続され、正常に移行されます。唯一の違いは、値が on/off
から true/false
に変更されることです。
表4.6 off に設定するまたは削除する属性
要素 | off に設定する属性 |
---|---|
<orb> |
|
<interop> |
(
|
<poa> |
|
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_NAME と DRIVER_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 つの手順で行われます。
- アカウントを検索します。
- クレデンシャルを検証します。
デフォルトでは、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『設定ガイド』の「設定変更の確認」を参照してください。