CopyMode 属性

ObjectGrid 記述子 XML ファイルで BackingMap または ObjectMap オブジェクトの CopyMode 属性を定義することで、コピーの数を調整することができます。

BackingMap または ObjectMap オブジェクトの CopyMode 属性を定義することで、コピーの数を調整することができます。コピー・モードには以下の値があります。 COPY_ON_READ_AND_COMMIT がデフォルト値です。 COPY_ON_READ 値は、最初のデータ取得時にはコピーを行いますが、コミット時にはコピーを行いません。アプリケーションが、トランザクションのコミット後の値を変更しなければ、このモードが安全です。NO_COPY 値は、データをコピーしないため、読み取り専用データの場合のみ安全です。データが変更されない限り、分離目的でデータをコピーする必要はありません。

更新される可能性があるマップに NO_COPY 属性値を使用する場合は、注意が必要です。WebSphere® eXtreme Scale は最初のタッチ時のコピーを使用して、トランザクションのロールバックを可能にします。 アプリケーションはコピーを変更しただけなので、eXtreme Scale はそのコピーを破棄します。 NO_COPY 属性値が使用され、かつアプリケーションがコミットされた値を変更した場合は、ロールバックを完了することが不可能になります。 索引やレプリカはトランザクションのコミット時に更新されるため、コミット済みの値を変更すると、索引、レプリカ生成などに問題が生じます。コミット済みのデータを変更してからトランザクションをロールバックした場合は、これによって実際にはまったくロールバックされないため、索引は更新されず、レプリカ生成は行われません。 他のスレッドは、コミットされていない変更を、ロックがあっても即時に参照することができます。 読み取り専用マップ、または値を変更する前に適切なコピーを完了するアプリケーションの場合は、NO_COPY 属性値を使用してください。 NO_COPY 属性値を使用した場合に、データ保全性の問題で IBM® サポートに連絡すると、コピー・モードを COPY_ON_READ_AND_COMMIT に設定して問題を再現するように求められます。

COPY_TO_BYTES 値は、マップ内の値をシリアライズ・フォームに保管します。 eXtreme Scale は、読み取り時にシリアライズ・フォームからの値を拡張し、コミット時に値をシリアライズ・フォームに保管します。 この方法によれば、読み取り時とコミット時の両方でコピーが行われます。

マップのデフォルトのコピー・モードは、BackingMap オブジェクトで構成することができます。さらに、トランザクションを開始する前に、ObjectMap.setCopyMode メソッドを使用してマップのコピー・モードを変更することができます。

objectgrid.xml ファイルにあり、指定のバックアップ・マップのコピー・モードを設定する方法を示すバックアップ・マップ・スニペットの例は以下のとおりです。 この例では、objectgrid/config 名前空間として cc を使用しているものとします。
<cc:backingMap name="RuntimeLifespan" copyMode="NO_COPY"/>