Plug-in pour communiquer avec les bases de données

Avec un plug-in Loader, une mappe ObjectGrid peut se comporter comme un cache pour les données généralement conservées dans un magasin persistant sur le même système ou un autre système. Généralement, une base de données ou un système de fichiers est utilisé comme stockage de persistance. Une machine virtuelle Java (JVM) distante peut également être utilisée comme source des données, ce qui permet de créer des caches basés sur un concentrateur à l'aide d'ObjectGrid. Un chargeur peut lire et écrire des données vers un stockage persistant ou à partir de celui-ci.

Les chargeurs sont des plug-in de mappe de sauvegarde appelés lorsque des modifications sont apportées à la mappe de sauvegarde ou lorsque cette dernière est dans l'impossibilité de répondre à une demande de données (absence dans le cache).

Figure 1. Chargeur
Le chargeur réside dans le fragment primaire. Il communique avec la base de données et la BackingMap.

WebSphere eXtreme Scale est livré avec deux chargeurs permettant de s'intégrer aux dorsaux de bases de données relationnelles. Les chargeurs Java Persistence API (JPA) utilisent les fonctions du mappage objet-relationnel (ORM) des implémentations OpenJPA et Hibernate de la spécification JPA.

Utilisation d'un chargeur

Pour ajouter un chargeur à la configuration BackingMap, vous pouvez utiliser la configuration programmatique ou la configuration XML. Un chargeur possède la relation suivante avec une mappe de sauvegarde :
  • Une mappe de sauvegarde peut avoir un seul chargeur.
  • Une mappe de sauvegarde client (cache proche) ne peut pas avoir de chargeur.
  • Une définition de chargeur peut être appliquée à plusieurs mappes de sauvegarde, mais chaque mappe de sauvegarde dispose de sa propre instance de chargeur.

Chargeurs dans les configurations multimaîtres

Pour des remarques sur l'utilisation de chargeurs dans les configurations multimaîtres, voir Remarques sur les chargeurs dans une topologie multimaître.

Ajout d'un chargeur à l'aide d'un programme

L'extrait de code suivant illustre comment introduire un chargeur fourni par l'application dans la mappe de sauvegarde pour map1, par le biais de l'API ObjectGrid :

import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
import com.ibm.websphere.objectgrid.ObjectGridManager;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.BackingMap;
ObjectGridManager ogManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid og = ogManager.createObjectGrid( "grid" );
BackingMap bm = og.defineMap( "map1" );
MyLoader loader = new MyLoader();
loader.setDataBaseName("testdb");
loader.setIsolationLevel("read committed");
bm.setLoader( loader );

Cet extrait de code fait la supposition que la classe MyLoader est la classe fournie par l'application qui implémente l'interface com.ibm.websphere.objectgrid.plugins.Loader. Etant donné que l'association d'un chargeur avec une mappe de sauvegarde ne peut pas être modifiée postérieurement à l'initialisation d'ObjectGrid, le code doit être exécuté avant d'appeler la méthode initialize de l'interface ObjectGrid appelée. Une exception IllegalStateException se produit suite à l'appel de la méthode setLoader si cet appel est postérieur à l'initialisation.

Le chargeur fourni par l'application peut avoir des propriétés définies. Dans l'exemple donné, le chargeur MyLoader est utilisé pour lire et écrire des données à partir de la table d'une base de données relationnelle. Le chargeur doit spécifier le nom de la base de données et le niveau d'isolement SQL. Le chargeur MyLoader dispose des méthodes setDataBaseName et setIsolationLevel, qui permettent à l'application de définir ces deux propriétés de chargeur.

Approche XML de la connexion d'un chargeur

Un chargeur fourni par l'application peut être également connecté par le biais d'un fichier XML. L'exemple suivant illustre la façon de connecter le chargeur MyLoader dans la mappe de sauvegarde map1 avec le même nom de base de données et les mêmes propriétés Loader de niveau d'isolement. Vous devez spécifier le nom de classe pour le chargeur, le nom de la base de données et les détails de connexion ainsi que les propriétés de niveau d'isolement. Vous pouvez utiliser la même structure XML si vous utilisez uniquement un préchargeur en spécifiant le nom de classe du préchargeur et non pas un nom de classe de chargeur complet :
<?xml version="1.0" encoding="UTF-8"?>
<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="grid">
        <backingMap name="map1" pluginCollectionRef="map1" lockStrategy="OPTIMISTIC" />
    </objectGrid>
</objectGrids>
<backingMapPluginCollections>
    <backingMapPluginCollection id="map1">
        <bean id="Loader" className="com.myapplication.MyLoader">
            <property name="dataBaseName" 
                      type="java.lang.String" 
                      value="testdb" 
                      description="database name" />
            <property name="isolationLevel" 
                      type="java.lang.String" 
                      value="read committed" 
                      description="iso level" />
        </bean>
    </backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>