第30章 セッションの外部化

30.1. JBoss EAP 6.x から JBoss Data Grid への HTTP セッションの外部化

Red Hat JBoss Data Grid は、HTTP セッションなどの、JBoss Enterprise Application Platform (EAP) のアプリケーション固有データの外部キャッシュコンテナーとして使用できます。これにより、アプリケーションとは独立したデータレイヤーのスケーリングが可能になり、さまざまなドメインに存在する可能性がある異なる EAP クラスターが同じ JBoss Data Grid クラスターからデータにアクセスできるようになります。また、他のアプリケーションは Red Hat JBoss Data Grid により提供されたキャッシュと対話できます。
以下の手順は、EAP のスタンドアロンモードとドメインモードの両方に適用されます。ただし、ドメインモードでは、各サーバーグループで一意のリモートキャッシュが設定されている必要があります。複数のサーバーグループは同じ Red Hat JBoss Data Grid クラスターを使用できますが、各リモートキャッシュは EAP サーバーグループに対して一意になります。

手順30.1 HTTP セッションの外部化

  1. リモートキャッシュコンテナーが EAP の infinispan サブシステムで定義されるようにします。以下の例では、remote-store 要素の cache 属性によって、リモート JBoss Data Grid サーバーのキャッシュ名を定義します。
    <subsystem xmlns="urn:jboss:domain:infinispan:1.5">
      [...]
      <cache-container name="cacheContainer" default-cache="default-cache" module="org.jboss.as.clustering.web.infinispan" statistics-enabled="true">
        <transport lock-timeout="60000"/>
        <replicated-cache name="default-cache" mode="SYNC" batching="true">
          <remote-store cache="default" socket-timeout="60000" preload="true" passivation="false" purge="false" shared="true">
            <remote-server outbound-socket-binding="remote-jdg-server1"/>
            <remote-server outbound-socket-binding="remote-jdg-server2"/>
          </remote-store>
        </replicated-cache>
      </cache-container>
    </subsystem>
  2. ネットワーク情報を socket-binding-group に追加することにより、リモート Red Hat JBoss Data Grid サーバーの場所を定義します。
    <socket-binding-group ...>
      <outbound-socket-binding name="remote-jdg-server1">
        <remote-destination host="JDGHostName1" port="11222"/>
      </outbound-socket-binding>
      <outbound-socket-binding name="remote-jdg-server2">
        <remote-destination host="JDGHostName2" port="11222"/>
      </outbound-socket-binding>
    </socket-binding-group>
  3. 各キャッシュコンテナーと各 Red Hat JBoss Data Grid サーバーに対して上記の手順を繰り返します。定義された各サーバーでは、個別の <outbound-socket-binding> 要素が定義されている必要があります。
  4. パッシベーションとキャッシュ情報をアプリケーションの jboss-web.xml に追加します。以下の例では、cacheContainer はキャッシュコンテナーの名前であり、default-cache はこのコンテナーにあるデフォルトのキャッシュの名前です。サンプルファイルを以下に示します。
    <?xml version="1.0" encoding="UTF-8"?>
     
    <jboss-web version="6.0"
               xmlns="http://www.jboss.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_6_0.xsd">
     
        <replication-config>
            <replication-trigger>SET</replication-trigger>   
            <replication-granularity>SESSION</replication-granularity>
            <cache-name>jboss.infinispan.cacheContainer.default-cache</cache-name>
        </replication-config>
        
        <passivation-config>
            <use-session-passivation>true</use-session-passivation>
            <passivation-min-idle-time>900</passivation-min-idle-time>
            <passivation-max-idle-time>1800</passivation-max-idle-time>
        </passivation-config>
        
    </jboss-web>

    注記

    上記のパッシベーションタイムアウトは、通常のセッションが 15 分以内に破棄され、JBoss EAP のデフォルトの HTTP セッションタイムアウトが 30 分であることを前提として提供されています。これらの値は、各アプリケーションのワークロードに基いて調整する必要がある場合があります。