Chargeurs JPA

La Java Persistence API (JPA) est une spécification de mappage des objets Java à des bases de données relationnelles. JPA contient une spécification ORM (Object-Relational Mapping) complète utilisant des annotations de métadonnées de langage Java, des descripteurs XML ou les deux pour définir le mappage entre les objets Java et une base de données relationnelle. Un certain nombre d'implémentations commerciales et de code source ouvert sont disponibles.

Vous pouvez utiliser une implémentation de plug-in Loader Java Persistence API (JPA) avec eXtreme Scale pour interagir avec les bases de données prises en charge par le chargeur choisi. Pour utiliser JPA, vous devez disposer d'un fournisseur JPA pris en charge, tel qu'OpenJPA ou Hibernate, des fichiers JAR et un fichier META-INF/persistence.xml dans votre chemin d'accès aux classes.

Les plug-in JPALoader com.ibm.websphere.objectgrid.jpa.JPALoader et JPAEntityLoader com.ibm.websphere.objectgrid.jpa.JPAEntityLoader sont deux plug-in pré-intégrés de chargeur JPA qui permettent de synchroniser les mappes ObjectGrid avec une base de données. Pour utiliser cette fonction, vous devez disposer d'une implémentation JPA, comme Hibernate ou OpenJPA. La base de données peut correspondre à tout programme d'arrière plan prise en charge par le fournisseur JPA choisi.

Vous pouvez utiliser le plug-in JPALoader lorsque vous stockez des données à l'aide de l'API ObjectMap. Utilisez le plug-in JPAEntityLoader lorsque vous stockez des données à l'aide de l'API EntityManager.

Architecture du chargeur JPA

Le chargeur JPA est utilisé pour les mappes eXtreme Scale qui stockent des objets Java simples (Plain Old Java Objects - POJO).

Figure 1. Architecture du chargeur JPA
Architecture du chargeur JPA

Lorsqu'une méthode ObjectMap.get(Object key) est appelée, l'exécution eXtreme Scale vérifie tout d'abord si l'entrée est contenue dans la couche de l'ObjectMap. Si ce n'est pas le cas, l'exécution délègue la demande au chargeur JPA. Sur demande de chargement de la clé, JPALoader appelle la méthode JPA EntityManager.find(Object key) pour trouver les données à partir du chargeur JPA. Si les données sont contenues dans le gestionnaire d'entités JPA, elles sont renvoyées ; dans le cas contraire, le fournisseur JPA interagit avec la base de données pour obtenir la valeur.

Lors d'une mise à jour de l'ObjectMap, par exemple à l'aide de la méthode ObjectMap.update(Object key, Object value), l'exécution eXtreme Scale crée un élément LogElement pour cette mise à jour et l'envoie au JPALoader. Le JPALoader appelle la méthode JPA EntityManager.merge(Object value) pour mettre à jour la valeur dans la base de données.

Le plug-in JPAEntityLoader implique les quatre mêmes couches. Toutefois, étant donné que le plug-in JPAEntityLoader est utilisé pour les mappes qui stockent des entités eXtreme Scale, les relations entre les entités peuvent compliquer le scénario d'usage. Une entité eXtreme Scale se distingue d'une entité JPA. Pour plus d'informations, voir Plug-in JPAEntityLoader.pour plus d'informations, voir Plug-in JPAEntityLoader.Pour plus d'informations, voir les informations relatives au plug-in JPAEntityLoader dans Guide de programmation.

Méthodes

Les chargeurs présentent trois méthodes principales :
  1. get : renvoie une liste de valeurs qui correspond à l'ensemble des clés qui sont transmises par l'extraction des données à l'aide de JPA. La méthode utilise JPA pour trouver les entités dans la base de données. Pour le plug-in JPALoader, la liste renvoyée contient une liste des entités JPA extraite directement de l'opération find. Pour le plug-in JPAEntityLoader, la liste renvoyée contient des tuples de valeur d'entité eXtreme Scale qui sont convertis à partir des entités JPA.
  2. batchUpdate : écrit les données des mappes ObjectGrid dans la base de données. En fonction des différents types d'opérations (insert, update ou delete), le chargeur utilise les opérations JPA persist, merge et remove pour mettre à jour les données dans la base de données. Pour le JPALoader, les objets de la mappe sont directement utilisés en tant qu'entités JPA. Pour le JPAEntityLoader, les tuples d'entité de la mappe sont convertis en objets utilisés en tant qu'entités JPA.
  3. preloadMap : précharge la mappe à l'aide de la méthode de chargeur client ClientLoader.load. Pour les mappes partitionnées, la méthode preloadMap est uniquement appelée dans une seule partition. La partition est spécifiée par la propriété preloadPartition de la classe JPALoader ou JPAEntityLoader. Si la valeur preloadPartition est inférieure à zéro ou supérieure à (nombre_total_de_partitions - 1), le préchargement est désactivé.

Les plug-in JPALoader et JPAEntityLoader s'associent à la classe JPATxCallback pour coordonner les transactions eXtreme Scale et les transactions JPA. La classe JPATxCallback doit être configurée dans l'instance ObjectGrid pour utiliser ces deux chargeurs.

Configuration et programmation

Si vous utilisez des chargeurs JPA dans un environnement multi-maître, voir Remarques sur les chargeurs dans une topologie multimaître. Pour plus d'informations sur la configuration des chargeurs JPA, voir les Configuration des chargeurs JPA. Pour plus d'informations sur la programmation des chargeurs JPA, voir Remarques sur la programmation de chargeurs JPA.