ローカル ObjectGrid とともに、あるいは分散 eXtreme Scale 環境で EntityManager API を使用することができます。主な違いは、このリモート環境への接続方法です。 接続を確立した後は、Session オブジェクトを使用した場合と EntityManager API を使用した場合に違いはありません。
これらのファイルには、サーバーがホストするエンティティーと BackingMaps を指定します。
エンティティー・メタデータ記述子ファイルには、 使用されるエンティティーの記述が含まれています。少なくとも、エンティティー・クラスおよび名前を指定する必要があります。Java Platform, Standard Edition 5 環境で 稼働している場合、eXtreme Scale は、エンティティー・クラスと そのアノテーションを自動的に読み取ります。エンティティー・クラスにアノテーションがない場合、またはクラス属性のオーバーライドが必要な場合には、追加の XML 属性を定義できます。 エンティティーをクラスレスで登録している場合は、すべてのエンティティー情報を XML ファイルのみに指定してください。
以下の XML 構成スニペットを使用して、データ・グリッドをエンティティーとともに定義できます。このスニペットでは、bookstore という名前の ObjectGrid と、関連付ける order という名前のバックアップ・マップがサーバーによって作成されます。objectgrid.xml ファイルのスニペットは、entity.xml ファイルを参照します。この例では、entity.xml ファイルに含まれているエンティティーは Order エンティティーの 1 つのみです。
objectgrid.xml
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="bookstore" entityMetadataXMLFile="entity.xml">
<backingMap name="Order"/>
</objectGrid>
</objectGrids>
</objectGridConfig>
entity.xml
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="com.ibm.websphere.tutorials.objectgrid.em.
distributed.step1.Order" name="Order"/>
</entity-mappings>
この例では、orderNumber フィールドと desc フィールドが同じようにアノテーションを付けられて Order クラスにあると想定しています。同等のクラスレス entity.xml は以下のようになります。
classless entity.xml
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="@Order " name="Order">
<description>"Entity named: Order"</description>
<attributes>
<id name="orderNumber" type="int"/>
<basic name="desc" type="java.lang.String"/>
</attributes>
</entity>
</entity-mappings>
String catalogEndpoints="localhost:2809";
URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
String catalogEndpoints="myHost:2809";
URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
String catalogEndpoints="myHost:2809";
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, null);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
クライアント・サイドでサブセット・エンティティーを使用するか使用しないかに関わらず、XML ファイルは必要でした。 サーバーで定義されたエンティティーを使用するために、これらのファイルは既に必要ありません。 その代わり、前のセクションのオプション 2 のように overRideObjectGridXml パラメーターとしてヌルを渡します。 XML ファイルがサーバーに設定された同じパス上で検出されない場合、クライアントはサーバーのエンティティー構成を使用します。
ただし、クライアントのサブセット・エンティティーを使用する場合は、オプション 1 のようにオーバーライドする ObjectGrid XML を指定してください。
@Entity
class ServerPerson
{
@Id String ssn;
String firstName;
String surname;
int age;
int salary;
}
@Entity(name="ServerPerson")
class ClientPerson
{
@Id @Basic(alias="ssn") String socialSecurityNumber;
String surname;
}
クライアント・サイド・エンティティー記述子 XML ファイルは、以下の場合に必要です。クライアント・サイドがクラスレスで実行されていて、サーバーがクラス・ベースのエンティティーとともに実行されている場合、あるいは、サーバーはクラスレスで、クライアントがクラス・ベースのエンティティーを使用している場合です。クラスレスのクライアント・モードでは、クライアントは物理クラスへのアクセス権を持たずに引き続きエンティティー照会を実行することができます。 サーバーが上記の ServerPerson エンティティーを登録したとすると、クライアントは以下のように entity.xml でデータ・グリッドをオーバーライドします。
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="@ServerPerson" name="Order">
<description>"Entity named: Order"</description>
<attributes>
<id name="socialSecurityNumber" type="java.lang.String"/>
<basic name="surname" type="java.lang.String"/>
</attributes>
</entity>
</entity-mappings>
このファイルは、実際のアノテーション付きクラスの指定をクライアントに要求することなく、クライアントで同等のサブセット・エンティティーを取得します。サーバーがクラスレスで、クライアントがクラスレスでない場合、クライアントはオーバーライドするエンティティー記述子 XML ファイルを提供します。 このエンティティー記述子 XML ファイルには、クラス・ファイル参照へのオーバーライドが含まれます。
ローカル・データ・グリッドの場合、XML ファイルは不要です。 プログラムは ObjectGrid 参照を取得し、ObjectGrid.registerEntities メソッドを呼び出して、Java SE 5 のアノテーションを付けられたクラスのリストまたは XML ファイルを指定します。
ランタイムは、この XML ファイルまたはアノテーション付きクラスのリストを使用して、エンティティー名、属性名とタイプ、キー・フィールドとタイプ、およびエンティティー間のリレーションシップを見つけます。 eXtreme Scale がサーバーで実行している場合、 またはスタンドアロン・モードで実行している場合は、各エンティティーから付けられた名前を持つマップが 自動的に作成されます。アプリケーション、または Spring などの注入フレームワークのいずれかによって 設定された、objectgrid.xml ファイルまたは API を使用して、 これらのマップをさらにカスタマイズすることができます。