21 トピックの構成

coherence-cache-config.xmlファイルで構成の変更を行います。

この項には次のトピックが含まれます:

トピック・マッピングの定義

トピック・マッピングは、トピック名をページ・トピック・スキーム定義にマップします。マッピングは、アプリケーションと基になるトピック定義との間の分離レベルを提供します。この分離により、アプリケーション・コードを変更せずに、トピックの実装を必要に応じて変更できるようになります。トピック・マッピングには、基礎となるページ・トピック・スキーム定義に適用されるオプションの初期化パラメータがあります。

トピック・マッピングは、<topic-scheme-mapping>ノード内の<topic-mapping>要素を使用して定義されます。トピック・マッピングはいくつでも作成できます。トピック・マッピングには、トピック名とトピック名のマップ先のスキーム名を含める必要があります。「topic-mapping」構成要素を参照してください。

この項には次のトピックが含まれます:

正確なトピック・マッピングの使用

正確なトピック・マッピングは、特定のトピック名をページ・トピック・スキーム定義にマップします。アプリケーションでトピックを使用するには、マッピングで指定されたとおりの名前で指定する必要があります。スラッシュ(/)とコロン(:)は予約文字であり、トピック名では使用できません。例21-1では、トピック名exampleTopicをスキーム名topic-schemepaged-topic-scheme定義にマップする単一トピック・マッピングを作成します。

例21-1 正確なトピック・マッピングのサンプル

<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
   <topic-scheme-mapping>
      <topic-mapping>
         <topic-name>exampleTopic</topic-name>
         <scheme-name>topic-scheme</scheme-name>
      </topic-mapping>
   </topic-scheme-mapping>
   <caching-schemes>
      <paged-topic-scheme>
         <scheme-name>topic-scheme</scheme-name>
         <service-name>DistributedTopicService</service-name>
      </paged-topic-scheme>
   </caching-schemes>
</cache-config>

名前パターン・トピック・マッピングの使用方法

名前パターン・トピック・マッピングを使用すると、アプリケーションでトピック名を指定する際にパターンを使用できます。パターンではアスタリスク(*)ワイルドカードを使用できます。名前パターンを使用することで、アプリケーションでトピックの正確な名前を認識する必要がなくなります。スラッシュ(/)とコロン(:)は予約文字であり、トピック名では使用できません。例21-2では、トピック・マッピングを2つ作成します。最初のマッピングでは、ワイルドカード(*)を使用して、任意のトピック名をbasic-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップします。2番目のマッピングでは、名前パターンaccount-*account-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップします。

例21-2 トピック名パターン・マッピングのサンプル

<?xml version="1.0"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
             xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
    <topic-scheme-mapping>
      <topic-mapping>
          <topic-name>*</topic-name>
          <scheme-name>basic-topic-scheme</scheme-name>
      </topic-mapping>
      <topic-mapping>
          <topic-name>account-*</topic-name>
          <scheme-name>account-topic-scheme</scheme-name>
          <service-name>accountDistributedTopicService</service-name>      
      </topic-mapping>
    </topic-scheme-mapping>

    <caching-schemes>
      <paged-topic-scheme>
          <scheme-name>basic-topic-scheme</scheme-name>
      </paged-topic-scheme>
      <paged-topic-scheme>
          <scheme-name>account-topic-scheme</scheme-name>
      </paged-topic-scheme>
    </caching-schemes>
</cache-config>

最初のマッピングでは、アプリケーションでのトピックの作成時に任意の名前が使用可能であり、その名前がbasic-topic-schemeというスキーム名のページ・トピック・スキーム定義にマップされます。2番目のマッピングでは、アプリケーションでトピック名を指定する際に、パターンを使用する必要があります。この例の場合は、名前の前に接頭辞account-を付ける必要があります。たとえば、トピック名としてaccount-overdueを指定するアプリケーションは、account-topic-schemeというスキーム名のページ・トピック・スキーム定義を使用します。

例21-2に示されているように、複数のトピック・マッピングに一致するトピック名(たとえば、account-overdue)を持つことが可能です。このような場合、正確なトピック・マッピングで定義されているものがあると、それがワイルドカードの一致よりも優先されて常に選択されます。複数のワイルドカードの一致の中で、最後に一致したワイルドカード・マッピング(ファイルで定義された順番に基づく)が選択されます。そのため、あまり限定的でないワイルドカード・パターンをファイルの先に定義し、ファイル後方のより限定的なワイルドカード・パターンでオーバーライドされるようにするのが一般的です。

トピック名とキャッシュ名には異なるネームスペースがあることに注意してください。

サブスクライバ・グループの使用

トピックは、そのトピックのtopic-mappingで定義された0個、1個または複数の恒久サブスクライバ・グループを持つことができます。サブスクライバ・グループはトピックとともに作成され、データがトピックにパブリッシュされる前に存在することが保証されます。サブスクライバ・グループは、そこからの値を処理する0、1またはそれ以上のサブスクライバ・グループ・メンバーを持つことができます。サブスクライバ・グループに複数のサブスクライバを作成すると、恒久サブスクライバ・グループによって収集されたすべての値のパラレル分散処理が可能になります。サブスクライバが存在しない場合、サブスクライバ・グループは、将来のサブスクライバが各値を使用できるように値を保持します。

ノート:

サブスクライバがグループに参加するために、サブスクライバ・グループがトピックのtopic-mappingに定義されている必要はありません。構成済および動的サブスクライバ・グループの詳細は、「NamedTopicのサブスクライバ・グループ」を参照してください。

例21-3 恒久サブスクライバ・グループのサンプル

<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
   <topic-scheme-mapping>
      <topic-mapping>
         <topic-name>exampleTopic</topic-name>
         <scheme-name>topic-scheme</scheme-name>
         <subscriber-groups>
             <subscriber-group>
                 <name>durableSubscription</name>
             </subscriber-group>
         <subscriber-groups>
      </topic-mapping>
   </topic-scheme-mapping>
   <caching-schemes>
      <paged-topic-scheme>
         <scheme-name>topic-scheme</scheme-name>
         <service-name>DistributedTopicService</service-name>
      </paged-topic-scheme>
   </caching-schemes>
</cache-config>

分散トピック・スキームの定義

トピック・スキームは、アプリケーションで使用可能なトピック・サービスの定義に使用されます。トピック・スキームは、トピックを使用するアプリケーションに依存せずにトピックを定義できる宣言メカニズムを提供します。これにより、アプリケーションでトピックを定義する必要がなくなり、アプリケーションのコードを変更せずにトピックを変更できるようになります。トピック・スキームにより、多数のアプリケーションで同一のトピック定義が使用可能となり、トピック定義の再利用も促進されます。

トピック・スキームは<caching-schemes>要素で定義されます。<paged-topic-scheme>スキーム要素とそのプロパティを使用して、そのタイプのトピックを定義します。

分散トピック定義のサンプル

<paged-topic-scheme>要素は、分散トピックの定義に使用されます。分散トピックでは、分散(パーティション)トピック・サービス・インスタンスを使用します。キャッシュ構成ファイルで、分散トピックを必要な数だけ定義できます。「paged-topic-scheme」を参照してください。

例21-4では、distributed-topicをスキーム名として使用し、トピック名example-topicにマップされる基本的な分散トピックを定義しています。<autostart>要素をtrueに設定すると、キャッシュ・サーバー・ノード上でサービスを開始します。

例21-4 分散トピック定義のサンプル

<?xml version="1.0"?>
<cache-config xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   xmlns=http://xmlns.oracle.com/coherence/coherence-cache-config
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
   <topic-scheme-mapping>
     <topic-mapping>
       <topic-name>example-topic</topic-name>
       <scheme-name>distributed-topic</scheme-name>
       <value-type>java.lang.String</value-type>
     </topic-mapping>
   </topic-scheme-mapping>
   <caching-schemes>
     <paged-topic-scheme>
        <scheme-name>distributed-topic</scheme-name>
        <service-name>distributed-topic-service</service-name>
        <autostart>true</autostart>
     </paged-topic-scheme>
   </caching-schemes>
</cache-config>

ノート:

<topic-mapping><value-type>サブ要素はオプションで、トピックの値の処理で拡張汎用タイプ・チェックを有効にする場合にのみ指定する必要があります。トピックの取得時のValueTypeAssertionの指定の詳細は、「トピック・インスタンスの取得」を参照してください。

この項には次のトピックが含まれます:

サイズ制限のあるトピック

<paged-topic-scheme>要素に<high-units>サブ要素を追加すると、トピック用に保持される値の記憶域サイズが制限されます。この記憶域制限に達すると、トピックはフルとみなされます。この高水位標を超えないことは、デフォルトでフロー制御を使用して管理されます。サブスクライバで、トピックに保持されている未処理の値の処理が遅延している場合、使用可能な領域ができるまでパブリッシャが制限されます。「トピック記憶域に上限を設定するためのパブリッシャ・フロー制御の管理」を参照してください。

期限切れが近い値があるトピック

<paged-topic-scheme>要素に<expiry-delay>サブ要素を追加すると、Subscriberで受信されるのを待機しているパブリッシュされた値がトピックに存続する時間が制限されます。

トピック値の記憶域オプション

<storage>サブ要素を使用すると、on-heapramjournalおよびflashjournalを指定して、トピックの値とメタデータを格納できます。ramjournalオプションおよびflashjournalオプションの詳細は、「エラスティック・データ機能を使用したデータの保存」を参照してください。

トピック値シリアライザ

<paged-topic-scheme>要素の<serializer>サブ要素では、事前定義のシリアライザpofまたはjava (デフォルト)を指定できます。serializerを参照してください。

永続トピック

トピックに対してアクティブ永続性が構成されており、クラスタ全体が再起動される場合、永続性リカバリ操作中に、サブスクライバおよびサブスクライバ・グループのトピックで未処理の未使用値がリカバリされます。<paged-topic-scheme>要素の次のサブ要素は、トピックが永続的であるかどうかを構成します。オプションのtransientサブ要素は、デフォルトのfalseである必要があります。オプションのpersistence.environmentサブ要素は、事前定義済またはカスタムの永続性環境を参照します。構成の例は、「永続トピックの構成」を参照してください。