第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 モジュールのダウンロード

  1. https://access.redhat.com のカスタマーポータルにログインします。
  2. ページの上部にある ダウンロード ボタンをクリックします。
  3. 製品のダウンロード ページで Red Hat JBoss Data Grid をクリックします。
  4. Version: ドロップダウンメニューで適切な JBoss Data Grid のバージョンを選択します。
  5. 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.5org.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 つの手順のみが必要になります。

  1. Infinispan 拡張を <extensions> セクションに追加します。
<extensions>
  <extension module="org.infinispan.extension:jdg-7.2"/>
  <extension module="org.jgroups.extension:jdg-7.2"/>

  <!--Other EAP extensions-->
</extensions>
  1. 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>
  1. 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 『設定ガイド』の「ネットワークおよびポート設定」を参照してください。

  1. 指定されたすべてのプロトコルのモデル属性が定義されるよう、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 でトレースを有効にすると、LinkageErrorClassNotFoundException などの問題をデバッグするのに便利です。起動時にトレースロギングを有効にするには、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)'
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.