Vous pouvez utiliser l'API EntityManager avec un ObjectGrid local ou dans un environnement distribué eXtreme Scale. La principale différence réside dans le mode choisi pour se connecter à cet environnement. Une fois la connexion établie, il n'existe aucune différence entre l'utilisation d'un objet Session et l'utilisation de l'API EntityManager.
Ces fichiers indiquent les entités et les mappes BackingMaps qu'un serveur héberge.
Le fichier descripteur des métadonnées d'entité contient une description des entités utilisées. Vous devez au minimum définir la classe et le nom de l'entité. Si votre environnement d'exécution est un environnement Java Platform, Standard Edition 5, eXtreme Scale lit automatiquement la classe d'entités et ses annotations. Vous pouvez définir des attributs XML supplémentaires si la classe d'entités n'est associée à aucune annotation ou si vous devez remplacer les attributs de classe. Si vous enregistrez les entités sans classe, entrez toutes les informations relatives à l'entité uniquement dans le fichier XML.
Vous pouvez utiliser le fragment de code XML suivant pour définir une grille de données et ses entités. Dans ce fragment, le serveur crée un ObjectGrid avec le nom bookstore et une mappe de sauvegarde associée nommée order. Le fichier de fragment objectgrid.xml fait référence au fichier entity.xml. Dans ce cas, le fichier entity.xml contient une entité, l'entité Order.
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>
Cet exemple suppose que la classe Order a les zones orderNumber et desc annotées de la même manière.Un fichier sans classe équivalent entity.xml se présente comme suit :
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");
Que vous souhaitiez ou non utiliser des entités de sous-ensemble côté client, les fichiers XML étaient jusqu'alors nécessaires. Ils ne le sont désormais plus pour utiliser les entités telles qu'elles sont définies par le serveur. Vous pouvez simplement transmettre la valeur null comme paramètre pour overRideObjectGridXml, comme dans l'option 2 de la précédente section. Si le fichier XML ne se trouve pas dans le même chemin défini sur le serveur, le client utilise la configuration d'entité sur le serveur.
Toutefois, si vous utilisez des entités de sous-ensemble sur le client, vous devez fournir un fichier XML ObjectGrid de remplacement, comme dans l'option 1.
@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;
}
Le fichier XML descripteur d'entité côté client est requis dans les cas suivants : si le serveur s'exécute avec des entités basées sur les classes alors que le côté client s'exécute sans classe, ou l'inverse. Le mode client sans classe permet au client d'exécuter les requêtes d'entité sans avoir accès aux classes physiques. Supposons que le serveur ait enregistré l'entité ServerPerson ci-dessus. Le client remplacerait la grille de données par un fichier entity.xml, tel que :
<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>
Ce fichier a pour effet de créer une entité de sous-ensemble équivalente dans le client, ce qui dispense ce dernier de fournir la classe annotée réelle. Si le serveur est sans classe alors que le client ne l'est pas, le client fournit un fichier XML descripteur d'entités dans lequel la référence au fichier classe est remplacée. Ce fichier XML contient un remplacement de la référence au fichier de classes.
Une grille de données locale n'a pas besoin d'un fichier XML. Le programme peut obtenir une référence ObjectGrid et appeler la méthode ObjectGrid.registerEntities pour définir une liste de classes annotées Java SE 5 ou un fichier XML.
L'environnement d'exécution utilise le fichier XML ou une liste des classes annotées pour rechercher les noms d'entité, les noms et les types des attributs, les zones et les types de clé, ainsi que les relations entre les entités. Si eXtreme Scale s'exécute sur un serveur ou en mode autonome, il crée immédiatement des mappes nommées d'après le nom de chaque entité. Vous pouvez personnaliser ces mappes à l'aide du fichier objectgrid.xml ou des API définies par l'application ou par les structures d'injection telles que Spring.