Plug-ins para la comunicación con bases de datos

Con un plug-in Loader, una correlación de ObjectGrid se puede comportar como una memoria caché de memoria para datos que normalmente se mantienen en un almacén persistente en el mismo sistema o en algún otro sistema. Generalmente, se utiliza una base de datos o un sistema de archivos como almacenamiento persistente. También se puede utilizar una máquina virtual Java (JVM) remota como el origen de datos, lo que permite que las memorias caché basadas en hub se creen utilizando el ObjectGrid. Un cargador tiene la lógica para leer y escribir datos en un almacén persistente.

Los cargadores son plug-ins de correlaciones de respaldo que se invocan cuando se realizan cambios en la correlación de respaldo o ésta no puede satisfacer una solicitud de datos (una falta de memoria caché).

Figura 1. Cargador
El cargador reside en el fragmento primario. El cargador se comunica con la base de datos y BackingMap.

WebSphere eXtreme Scale incluye dos cargadores incorporados para integrar con los programas de fondo de la base de datos relacional. Los cargadores JPA (Java Persistence API) utilizan las capacidades de correlación de objetos relacionales (ORM) de ambas implementaciones, OpenJPA e Hibernate, de la especificación JPA.

Utilización de un cargador

Para añadir un cargador a la configuración de BackingMap, puede utilizar la configuración programática o la configuración XML. Un cargador tiene la siguiente relación con una correlación de respaldo:
  • Una correlación de respaldo sólo puede tener un cargador.
  • Una correlación de respaldo de cliente (memoria caché cercana) no puede tener un cargador.
  • Una definición de cargador se puede aplicar a varias correlaciones de respaldo, pero cada una de éstas tiene su propia instancia de cargador.

Cargadores en configuraciones multimaestro

Para ver las consideraciones sobre los cargadores en configuraciones multimaestro, consulte Consideraciones sobre el cargador en una topología multimaestro.

Conexión de un cargador mediante programación

El siguiente fragmento de código demuestra cómo conectar un cargador proporcionado por la aplicación a una correlación de respaldo para map1 utilizando la API de 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 );

Este fragmento de código presupone que la clase MyLoader es la clase proporcionada por la aplicación que implementa la interfaz com.ibm.websphere.objectgrid.plugins.Loader. Dato que no se puede modificar la asociación de un cargador con una correlación de respaldo después de que se inicialice ObjectGrid, el código se debe ejecutar antes de invocar el método initialize de la interfaz ObjectGrid que se está llamando. Se produce una excepción IllegalStateException en una llamada de método setLoader, si se llama después de que se haya producido la inicialización.

El cargador que proporciona la aplicación puede tener propiedades establecidas. En el ejemplo, el cargador MyLoader se utiliza para leer y escribir datos de una tabla en una base de datos relacional. El cargador debe especificar el nombre de la base de datos y el nivel de aislamiento de SQL. El cargador MyLoader tiene los métodos setDataBaseName y setIsolationLevel que permiten a la aplicación establecer estas dos propiedades de cargador.

Enfoque de configuración XML para conectar un cargador

Un cargador proporcionado por una aplicación también puede conectarse mediante la configuración de un archivo XML. El ejemplo siguiente muestra cómo conectar el cargador MyLoader a la correlación de respaldo map1 con las mismas propiedades de cargador de nivel de aislamiento y nombre de base de datos. Debe especificar el className para el cargador, el nombre de la base de datos y los detalles de la conexión, y las propiedades del nivel de aislamiento. Puede utilizar la misma estructura XML si solo utiliza un precargador especificando el nombre de clase de precargador en lugar de un nombre de clase completo de cargador:
<?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>