第36章 EAP との統合
36.1. EAP との統合
EAP には Infinispan モジュールが含まれていますが、内部の EAP で使用することを目的とし、JBoss Data Grid との使用はサポートされていません。EAP 内で JDG を使用するには、JDG が提供する EAP モジュールを使用します。これらのモジュールを使用すると、スロットが異なるため、EAP の内部モジュールとの競合を防ぐことができます。さらに、JDG をデプロイメント内 (WAR、EAR など) にパッケージ化せずにアプリケーションをデプロイできるため、サイズが最小限になります。
36.2. EAP モジュールのインストール
EAP のモジュールは、Red Hat カスタマーポータルからダウンロードできます。
手順: EAP モジュールのダウンロード
- https://access.redhat.com のカスタマーポータルにログインします。
- ページの上部にある ダウンロード ボタンをクリックします。
- 製品のダウンロード ページで Red Hat JBoss Data Grid をクリックします。
- Version: ドロップダウンメニューで適切な JBoss Data Grid のバージョンを選択します。
- Red Hat JBoss Data Grid 7.2 Library Module for JBoss EAP を見つけ、対応する Download リンクをクリックします。
zip ファイルを EAP_HOME/modules
に展開する必要があります。ファイルが適切に展開されると、Infinispan コアモジュールの場所は EAP_HOME/modules/org/infinispan/core
になります。
36.3. EAP の依存関係
Maven を使用してモジュールを設定するには、JDG の依存関係を提供済みとしてマークし、アーティファクトアーカイバーを設定して、以下の pom.xml
ファイルを使用して適切な MANIFEST.MF
で WAR ファイルを生成します。
pom.xml
<dependencies> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-core</artifactId> <version>${infinispan.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-jdbc</artifactId> <version>${infinispan.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <manifestEntries> <Dependencies>org.infinispan.core:jdg-7.2 services, org.infinispan.cachestore.jdbc:jdg-7.2 services</Dependencies> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build>
36.4. 特定の JDG コンポーネントの依存関係
以下は、JDG の特定の機能を有効にする MANIFEST.MF
設定ファイルの例になります。
36.4.1. コア依存関係
JDG のコア依存関係のみをアプリケーションに公開するには、次のマニフェストを追加します。
MANIFEST.MF
Manifest-Version: 1.0 Dependencies: org.infinispan:jdg-7.2 services
36.4.2. リモート/Hot Rod 依存関係
リモートクエリー実行のために含まれる Hot Rod を介してリモート JDG サーバーに接続するには、org.infinispan.remote
モジュールを使用します。このモジュールは、必要な依存関係をすべて自動的に公開します。
MANIFEST.MF
Manifest-Version: 1.0 Dependencies: org.infinispan.remote:jdg-7.2 services
36.4.3. 埋め込みクエリーの依存関係
Infinispan Query DSL、Lucene、および Hibernate Search Queries を含む埋め込みクエリーの場合、以下をマニフェストに追加します。
MANIFEST.MF
Manifest-Version: 1.0 Dependencies: org.infinispan:jdg-7.2 services, org.infinispan.query:jdg-7.2 services
36.4.4. Lucene ディレクトリーの依存関係
org.apache.lucene.store.Directory を使用してJDG を Lucene のディレクトリーとして使用する場合はクエリーモジュールは必要なく、以下で対応できます。
MANIFEST.MF
Manifest-Version: 1.0 Dependencies: org.infinispan.lucene-directory:jdg-7.2 services
36.4.5. Hibernate Search ディレクトリープロバイダーの依存関係
JDG の Hibernate Search ディレクトリープロバイダーも JBoss EAP zip ファイルの JBoss Data Grid 7.2 ライブラリーモジュール内に含まれています。Hibernate Search モジュールにはすでに任意の依存関係があるため、マニフェストファイルにエントリーを追加する必要はありません。どの JDG モジュール zip を使用するかを決める場合、どの Hibernate Search が使用されているかをチェックしてから決めてください。
36.4.6. EAP の内部 Hibernate Search モジュールの使用
EAP 7.1 の Hibernate Search モジュールにはバージョン 5.5.x があり、スロットが for-hibernatesearch-5.5
の org.infinispan.hibernate-search.directory-provider
モジュールへの任意の依存関係があります。この依存関係は、Infinispan モジュールが インストール されると利用可能になります。
36.4.7. その他の Hibernate Search モジュールとの用途
JDG と配布されるモジュール org.hibernate.search:jdg-7.2
は、Infinispan Query のみと併用し (キャッシュからデータをクエリー)、Hibernate ORM アプリケーションによって使用されないようにします。Hibernate Search を EAP に存在する他のバージョンと使用する場合は、Hibernate Search のドキュメントを参照してください。
org.infinispan.hibernate-search.directory-provider
に選択した Hibernate Search のオプションスロットが JBoss Data Grid と配布されるものと一致するようにしてください。
36.5. EAP モジュールの使用
アプリケーションは、ライブラリー (埋め込み) モードまたは EAP サブシステムモードにて EAP 内で JDG を使用できます。
36.5.1. ライブラリーモード
ライブラリーモードにて EAP 内で JDG を使用する場合、すべての CacheManager
およびキャッシュインスタンスはアプリケーションロジックで作成されます。よって、EmbeddedCacheManager
のライフサイクルはアプリケーションのライフサイクルと密に結合しているため、アプリケーションが破棄されると、そのアプリケーションによって作成されたマネージャーインスタンスが破棄されます。
36.5.2. EAP サブシステムモード
JDG が EAP のサブシステムである EAP サブシステムモードでは、EAP の domain/configuration/domain.xml
設定の一部としてランタイム前にキャッシュコンテナーおよびキャッシュが作成されるようにすることが可能です。これにより、キャッシュインスタンスを複数のアプリケーション全体で共有することができ、基盤のキャッシュコンテナーのライフサイクルはデプロイされたアプリケーションとは無関係になります。
36.6. EAP サブシステムモードの設定
EAP サブシステムモードを有効にするには、以下を domain/configuration/domain.xml
の EAP 設定に追加します。
ローカルキャッシュインスタンスには最初の 2 つの手順のみが必要になります。
-
Infinispan 拡張を
<extensions>
セクションに追加します。
<extensions> <extension module="org.infinispan.extension:jdg-7.2"/> <extension module="org.jgroups.extension:jdg-7.2"/> <!--Other EAP extensions--> </extensions>
- Infinispan を必要とするサーバープロファイルに、必要なすべてのコンテナーおよびキャッシュとともに Infinispan サブシステムを設定します。
必ずモジュール属性が定義されているようにしてください。そうでないと、正しい Infinispan クラスがロードされません。
<subsystem xmlns="urn:infinispan:server:core:8.5"> <cache-container name="jdg-container" default-cache="default" module="org.infinispan.extension:jdg-7.2"> <transport channel="jdg-cluster"/> <global-state/> <distributed-cache-configuration name="default"/> <distributed-cache name="default"/> </cache-container> </subsystem>
- JGroups サブシステムが必要な EAP インターフェースおよびソケットバインディングを定義します。
インターフェースの定義:
<interfaces> <interface name="jdg"> <inet-address value="${jdg.bind.address:127.0.0.1}"/> </interface> </interfaces>
ソケットバインディングの定義:
<socket-binding-group name="full-sockets" default-interface="public"> <socket-binding name="jdg-jgroups-udp" interface="jdg" port="55200" multicast-address="${jdg.default.multicast.address:230.0.0.4}" multicast-port="45688"/> <socket-binding name="jdg-jgroups-udp-fd" interface="jdg" port="54200"/> </socket-binding-group>
EAP インターフェースとソケットバインディングの詳細は、JBoss EAP 『設定ガイド』の「ネットワークおよびポート設定」を参照してください。
- 指定されたすべてのプロトコルのモデル属性が定義されるよう、JGroups トランスポートを定義します。
<subsystem xmlns="urn:infinispan:server:jgroups:8.0"> <channels> <channel name="jdg-cluster" stack="udp"/> </channels> <stacks> <stack name="udp"> <transport type="UDP" socket-binding="jdg-jgroups-udp" module="org.jgroups:jdg-7.2"/> <protocol type="PING" module="org.jgroups:jdg-7.2"/> <protocol type="MERGE3" module="org.jgroups:jdg-7.2"/> <protocol type="FD_SOCK" socket-binding="jdg-jgroups-udp-fd" module="org.jgroups:jdg-7.2"/> <protocol type="FD_ALL" module="org.jgroups:jdg-7.2"/> <protocol type="VERIFY_SUSPECT" module="org.jgroups:jdg-7.2"/> <protocol type="pbcast.NAKACK2" module="org.jgroups:jdg-7.2"/> <protocol type="UNICAST3" module="org.jgroups:jdg-7.2"/> <protocol type="pbcast.STABLE" module="org.jgroups:jdg-7.2"/> <protocol type="pbcast.GMS" module="org.jgroups:jdg-7.2"/> <protocol type="UFC" module="org.jgroups:jdg-7.2"/> <protocol type="MFC" module="org.jgroups:jdg-7.2"/> <protocol type="FRAG3" module="org.jgroups:jdg-7.2"/> </stack> </stacks> </subsystem>
サーバーモードの設定には、コマンドラインスクリプトも使用できます。
# adding the necessary modules to the EAP configuration # remember to add the datagrid library modules of JDG 7.2 before ! /extension=org.infinispan.extension\:jdg-7.2:add /extension=org.jgroups.extension\:jdg-7.2:add batch /profile=full/subsystem=datagrid-infinispan:add /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container:add(module="org.infinispan.extension:jdg-7.2", default-cache="default" /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container/transport=TRANSPORT:add(channel=jdg-cluster) /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container/global-state=GLOBAL_STATE:add # add an interface for JDG cluster communication, can be skipped if the same as JGroups or public is used /interface=jdg:add(inet-address="${jdg.bind.address:127.0.0.1}" # add the port numbers for JDG JGroups /socket-binding-group=full-sockets/socket-binding=jdg-jgroups-udp:add(interface="jdg", port=55200, multicast-address="${jdg.default.multicast.address:230.0.0.4}", multicast-port="45688" /socket-binding-group=full-sockets/socket-binding=jdg-jgroups-udp-fd:add(port=54200, interface="jdg") # adding the datagrid JGroups subsystem with UDP stack /profile=full/subsystem=datagrid-jgroups:add(default-channel=jdg-cluster) /profile=full/subsystem=datagrid-jgroups/channel=jdg-cluster:add(stack=udp) /profile=full/subsystem=datagrid-jgroups/stack=udp:add() /profile=full/subsystem=datagrid-jgroups/stack=udp/transport=UDP:add(socket-binding=jdg-jgroups-udp, module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=PING:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=MERGE3:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=FD_SOCK:add(module="org.jgroups:jdg-7.2", socket-binding=jdg-jgroups-udp-fd) /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=FD_ALL:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=VERIFY_SUSPECT:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=pbcast.NAKACK2:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=UNICAST3:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=pbcast.STABLE:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=pbcast.GMS:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=UFC:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=MFC:add(module="org.jgroups:jdg-7.2") /profile=full/subsystem=datagrid-jgroups/stack=udp/protocol=FRAG3:add(module="org.jgroups:jdg-7.2") # add a configuration as this is needed if the CLI is used to add a cache /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container/configurations=CONFIGURATIONS:add /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container/configurations=CONFIGURATIONS/distributed-cache-configuration=default:add run-batch
キャッシュを追加するには、次のコマンドを使用します。
# add a simple cache /profile=full/subsystem=datagrid-infinispan/cache-container=jdg-container/distributed-cache=default:add(configuration=default)
36.7. コンテナーおよびキャッシュへのリモートアクセス
コンテナーがサーバーの設定に定義されたら、 @Resource
JNDI ルックアップを使用して CacheContainer
または Cache
のインスタンスをアプリケーションにインジェクトできます。コンテナーは文字列 java:jboss/datagrid-infinispan/container/<container_name>
を使用してアクセスされ、キャッシュも同様に java:jboss/datagrid-infinispan/container/<container_name>/cache/<cache_name>
を使用してアクセスされます。
以下の例は、「jdg-container」と呼ばれる CacheContainer
と分散キャッシュ「default」をアプリケーションにインジェクトする方法を示しています。
public class ExampleApplication { @Resource(lookup = "java:jboss/datagrid-infinispan/container/jdg-container") CacheContainer container; @Resource(lookup = "java:jboss/datagrid-infinispan/container/jdg-container/cache/default") Cache cache; }
このコード例では、jdg-7.2
モジュールに依存関係があります。
36.8. EAP サブシステムモードでの EAP および JDG のトラブルシューティング
36.8.1. ロギングの有効化
org.jboss.modules
でトレースを有効にすると、LinkageError
や ClassNotFoundException
などの問題をデバッグするのに便利です。起動時にトレースロギングを有効にするには、EAP CLI を使用します。
bin/jboss-cli.sh -c '/subsystem=logging/logger=org.jboss.modules:add' bin/jboss-cli.sh -c '/subsystem=logging/logger=org.jboss.modules:write-attribute(name=level,value=TRACE)'
36.8.2. 依存関係ツリーの出力
以下のコマンドを使用すると、特定モジュールのすべての依存関係を出力できます。たとえば、モジュール org.infinispan:jdg-7.2
のツリーを取得するには、以下を EAP_HOME
から実行します。
java -jar jboss-modules.jar -deptree -mp modules/ "org.infinispan:jdg-7.2"