En général, les applications obtiennent d'abord une référence ObjectGrid, puis, pour chaque unité d'exécution, une session à partir de cette référence. Plusieurs unités d'exécution ne peuvent pas partager une même session. Une autre méthode, getEntityManage, peut être utilisée dans la session. Elle permet de renvoyer une référence à un gestionnaire d'entités en vue de son utilisation pour cette unité d'exécution. L'interface EntityManager peut remplacer les interfaces Session et ObjectMap pour toutes les applications. Vous pouvez utiliser ces API EntityManager si le client a accès aux classes d'entités définies.
La méthode getEntityManager est disponible pour un objet Session. L'exemple de code suivante présente comment créer une instance ObjectGrid locale et comment accéder à EntityManager. Pour plus de détails sur les méthodes prises en charge, consultez la partie consacrée à l'interface EntityManager dans la documentation concernant l'API.
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("intro-grid");
Session s = og.getSession();
EntityManager em = s.getEntityManager();
Une relation one-to-one existe entre l'objet Session et l'objet EntityManager. Vous pouvez utiliser l'objet EntityManager plusieurs fois.
Stocker une entité signifie sauvegarder l'état d'une nouvelle entité dans le cache d'une grille d'objets. Une fois la méthode persist appelée, l'entité passe à l'état géré. Persist est une opération transactionnelle et la nouvelle entité est stockée dans le cache de la grille d'objets après la validation de la transaction.
Order order = new Order(123);
em.persist(order);
order.setX();
...
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
De même que la méthode persist, la méthode remove est une opération transactionnelle. L'exemple suivant présente les limites de la transaction appelées par les méthodes begin et commit.
em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.remove(foundOrder );
em.getTransaction().commit();
L'entité doit être gérée avant d'être supprimée. Pour cela, appelez la méthode find à l'intérieur des limites de la transaction. Appelez ensuite la méthode remove dans l'interface EntityManager.
La méthode invalidate se comporte comme la méthode remove, mais elle n'appelle pas les plug-in Loader. Utilisez cette méthode pour supprimer des entités de la grille d'objets tout en les conservant dans le magasin de données dorsal.
em.getTransaction().begin();
Order foundOrder = (Order)em.find(Order.class, new Integer(123));
em.invalidate(foundOrder );
em.getTransaction().commit();
L'entité doit être gérée avant d'être invalidée. Pour cela, appelez la méthode find à l'intérieur des limites de la transaction. Une fois cette méthode appelée, vous pouvez appeler la méthode invalidate dans l'interface EntityManager.
La méthode update est également une opération transactionnelle. L'entité doit être gérée avant d'être mise à jour.
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();
Dans cet exemple, la méthode persist n'est pas appelée après la mise à jour de l'entité. L'entité est mise à jour dans le cache de l'entité lors de la validation de la transaction.
Grâce au moteur de requête très souple, vous pouvez extraire de entités à l'aide de l'API EntityManager. Créez des requêtes de type SELECT sur une entité ou un schéma basé sur un objet à l'aide du langage ObjectGrid Query. L'interface de requête explique en détail comment exécuter les requêtes à l'aide de l'API EntityManager. Pour plus d'informations sur l'utilisation des requêtes, reportez-vous à l'API Query.
Une file d'attente de requête d'entité est une structure de données semblable à une file d'attente associée à une requête d'entité. Elle sélectionne toutes les entités correspondant à la condition WHERE du le filtre de la requête et met les entités résultantes en file d'attente. Les clients peuvent alors extraire les entités de cette file d'attente de manière itérative. Pour plus d'informations, voir Files d'attente des requêtes d'entité.