EntityManager との対話

アプリケーションは通常、最初に ObjectGrid 参照を取得し、次にその参照からそれぞれのスレッドのセッションを取得します。 セッションはスレッド間で共有することはできません。 セッションの追加メソッドである getEntityManager メソッドが使用可能です。 このメソッドは、このスレッド用に使用するエンティティー・マネージャー への参照を戻します。EntityManager インターフェース は、すべてのアプリケーションの Session インターフェースと ObjectMap インターフェースを置換することができます。 クライアントが定義済みのエンティティー・クラスに対するアクセス権を持つ場合、これらの EntityManager API を使用することができます。

セッションからの EntityManager インスタンスの取得

getEntityManager メソッドは Session オブジェクトで 使用可能です。以下のコードの例は、ローカル ObjectGrid インスタンスの作成方法 および EntityManager へのアクセスの方法を示しています。サポートされているすべてのメソッドの詳細については、API 資料で EntityManager インターフェースを 参照してください。

ObjectGrid og = 
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("intro-grid");
Session s = og.getSession();
EntityManager em = s.getEntityManager();

Session オブジェクトと EntityManager オブジェクトの間には、1 対 1 のリレーションシップが存在します。EntityManager オブジェクトは複数回使用することができます。

エンティティーの永続化

エンティティーの永続化とは、新規エンティティーの状態を ObjectGrid キャッシュに保存することを意味します。 persist メソッドが呼び出されると、エンティティーは管理対象状態になります。永続化はトランザクションの操作であり、新規エンティティーはトランザクションのコミット後に ObjectGrid キャッシュに保管されます。

すべてのエンティティーに、タプルが保管されている、対応する BackingMap があります。 BackingMap はエンティティーと同じ名前で、クラスの登録時に作成されます。以下のコード例 は、persist 操作を使用して Order オブジェクトを作成する方法を示します。
Order order = new Order(123);
em.persist(order);
order.setX();
...
Order オブジェクトはキー 123 を使用して作成され、 persist メソッドに渡されます。それに続けて、トランザクションをコミットする前にオブジェクトの状態を変更することができます。
重要: 前記の 例には、begin や commit などの必要なトランザクション境界が含まれて いません。詳しくは、チュートリアル: オーダー情報のエンティティーへの保管 を参照してください。

エンティティーの検索

ObjectGrid キャッシュ内のエンティティーは、キャッシュに保管された後に、キーを指定することにより find メソッドで見つけることができます。 このメソッドは、トランザクション境界を必要としないため、読み取り専用セマンティクスに有用です。以下の例では、1 行のコードのみでエンティティーを見つけることができることを示しています。
Order foundOrder = (Order)em.find(Order.class, new Integer(123));

エンティティーの除去

remove メソッドは、persist メソッドと同様、トランザクション操作です。 以下の例は、begin メソッドと commit メソッドを呼び出すことによってトランザクション境界を示しています。

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.remove(foundOrder );
em.getTransaction().commit();

エンティティーは、トランザクション境界の内側で find メソッドを呼び出すことによって管理された後でないと、除去できません。 その後で、EntityManager インターフェースで remove メソッドを呼び出します。

エンティティーの無効化

invalidate メソッドの動作は、remove メソッドとよく似ていますが、Loader プラグインを呼び出すことはありません。 ObjectGrid からエンティティーを除去するが、バックエンド・データ・ストアではそのまま保持するには、このメソッドを使用します。

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.invalidate(foundOrder );
em.getTransaction().commit();

エンティティーは、トランザクション境界の内側で find メソッドを呼び出すことによって管理された後でないと、無効化できません。 find メソッドを呼び出した後、EntityManager インターフェースで invalidate メソッドを呼び出すことができます。

エンティティーの更新

update メソッドもトランザクション操作です。 更新を適用する前に、エンティティーを管理する必要があります。

em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
foundOrder.date = new Date(); // update the date of the order
em.getTransaction().commit();

上の例では、エンティティーが更新された後で persist メソッドは呼び出されていません。 エンティティーは、トランザクションのコミット時に ObjectGrid キャッシュで更新されます。

照会と照会キュー

柔軟な照会エンジンにより、EntityManager API を使用してエンティティーを取得することができます。ObjectGrid 照会言語を使用することにより、エンティティーまたはオブジェクト・ベースのスキーマで SELECT タイプ照会を作成します。Query インターフェースでは、EntityManager API を使用して 照会を実行する方法を詳細に説明しています。照会の使用について詳しくは、Query API を参照してください。

エンティティー QueryQueue は、 キューに似たデータ構造体であり、エンティティー照会に 関連付けられます。これは、照会フィルターの WHERE 条件に一致する すべてのエンティティーを選択し、結果のエンティティーをキューに 入れます。その後、クライアントは、このキューからエンティティーを繰り返し取り出す ことができます。詳しくは、エンティティー照会キューを参照してください。