Cada instancia de ObjectGrid contiene una colección de objetos BackingMap. Utilice el método defineMap o el método createMap de la interfaz ObjectGrid para nombrar y añadir cada BackingMap a una instancia de ObjectGrid. Estos métodos devuelven
una instancia de BackingMap que se utiliza después para definir el comportamiento
de una correlación individual.Un objeto BackingMap puede considerarse como una
memoria caché en memoria de datos confirmados para una correlación individual.
Interfaz Session
La interfaz Session se utiliza para iniciar una transacción y obtener el objeto ObjectMap o JavaMap necesario para realizar la interacción transaccional entre una aplicación y un objeto BackingMap. No obstante, los
cambios de la transacción no se aplican al objeto BackingMap hasta que se
confirme la transacción. Un objeto BackingMap puede considerarse como una
memoria caché en memoria de datos confirmados para una correlación individual. Para obtener más información, consulte Utilización de sesiones para acceder a los datos de la cuadrícula.
La interfaz BackingMap proporciona métodos para establecer los atributos BackingMap. Algunos de estos
métodos permiten la ampliación de un objeto BackingMap a través de diversos
plug-ins de diseño personalizado. Consulte la lista siguiente de los métodos set para definir atributos y proporcionar soporte de plug-ins de diseño personalizado:
// Para establecer atributos de
BackingMap.
public void setReadOnly(boolean readOnlyEnabled);
public void setNullValuesSupported(boolean nullValuesSupported);
public void setLockStrategy( LockStrategy lockStrategy );
public void setCopyMode(CopyMode mode, Class valueInterface);
public void setCopyKey(boolean b);
public void setNumberOfBuckets(int numBuckets);
public void setNumberOfLockBuckets(int numBuckets);
public void setLockTimeout(int seconds);
public void setTimeToLive(int seconds);
public void setTtlEvictorType(TTLType type);
public void setEvictionTriggers(String evictionTriggers);
// Para establecer un plug-in personalizado y opcional que proporciona la
aplicación.
public abstract void setObjectTransformer(ObjectTransformer t);
public abstract void setOptimisticCallback(OptimisticCallback checker);
public abstract void setLoader(Loader loader);
public abstract void setPreloadMode(boolean async);
public abstract void setEvictor(Evictor e);
public void setMapEventListeners( List /*MapEventListener*/ eventListenerList );
public void addMapEventListener(MapEventListener eventListener );
public void removeMapEventListener(MapEventListener eventListener );
public void addMapIndexPlugin(MapIndexPlugin index);
public void setMapIndexPlugins(List /\* MapIndexPlugin \*/ indexList );
public void createDynamicIndex(String name, boolean isRangeIndex,
String attributeName, DynamicIndexCallback cb);
public void createDynamicIndex(MapIndexPlugin index, DynamicIndexCallback cb);
public void removeDynamicIndex(String name);
Para cada uno de los
métodos set listados, existe un método get correspondiente.
Atributos de BackingMap
Cada BackingMap tiene los
siguientes atributos que pueden establecerse para modificar o controlar el
comportamiento del objeto BackingMap:
- ReadOnly: este atributo indica si la correlación es una correlación de sólo
lectura o una correlación de lectura y grabación. Si este atributo no se
establece, la correlación toma el valor predeterminado de lectura y grabación.
Cuando un objeto BackingMap se establece para sólo lectura, ObjectGrid optimiza
el rendimiento para sólo lectura siempre que sea posible.
- NullValuesSupported: este atributo indica si se puede asignar un valor nulo
a la correlación. Si no se establece este atributo, la correlación no admite
valores nulos. Si la correlación admite valores nulos, una operación get que
devuelve un valor nulo significa que o bien el valor es nulo o bien la
correlación no contiene la clave especificada por la operación get.
- LockStrategy: este atributo determina si este objeto BackingMap utiliza un
gestor de bloqueos. Si se utiliza, el atributo LockStrategy se usa para indicar
si se emplea un procedimiento de bloqueo optimista o pesimista para bloquear
las entradas de correlación. Si no se establece este atributo, se utiliza la
estrategia de bloqueo optimista. Consulte el tema sobre bloqueos para obtener
más información sobre las estrategias de bloqueo permitidas.
- CopyMode: este atributo determina si BackingMap realiza una copia de un
objeto de valor cuando se lee un valor de la correlación o éste se coloca en el
objeto BackingMap durante el ciclo de confirmación de una transacción.
Se admiten diversas modalidades de copia que permiten a la aplicación
conseguir el equilibrio entre rendimiento e integridad de datos. Si no se
establece el atributo, se utiliza la modalidad de copia
COPY_ON_READ_AND_COMMIT. Esta modalidad de copia no tiene el mejor rendimiento,
pero sí la mejor protección frente a problemas de integridad de los datos. Si BackingMap está asociado a una entidad de API
EntityManager, el valor de CopyMode no tiene ningún efecto, a menos que el valor se establezca en COPY_TO_BYTES. Si se define cualquier otro CopyMode, siempre estará establecido en NO_COPY. Para alterar temporalmente el valor de CopyMode para una correlación de entidad, utilice el método ObjectMap.setCopyMode.
Para obtener más información sobre las modalidades de copia, consulte Ajuste de la modalidad de copia.
- CopyKey: este atributo determina si BackingMap realiza una copia de un
objeto de clave cuando se crea por primera vez una entrada en la correlación.
De manera predeterminada, no se realiza ninguna copia de objetos de clave
porque las claves suelen ser objetos que no se pueden cambiar.
- NumberOfBuckets: este atributo indica el número de grupos hash que
BackingMap utiliza. La implementación de BackingMap utiliza una correlación
hash para su implementación. Si existen muchas entradas en el objeto
BackingMap, la existencia de más grupos mejora el rendimiento. El número de
claves que tienen el mismo grupo disminuye a medida que crece el número de
grupos. Un número mayor de grupos también implica mayor simultaneidad. Este
atributo es útil para el ajuste del rendimiento. Se utiliza un valor
predeterminado no definido si la aplicación no establece el atributo
NumberOfBuckets.
- NumberOfLockBuckets: este atributo indica el número de grupos de bloqueo
que utiliza el gestor de bloqueos para este objeto BackingMap.
Cuando LockStrategy se establece en OPTIMISTIC o PESSIMISTIC, se crea un gestor
de bloqueos para BackingMap. El gestor de bloqueos utiliza una correlación hash
para realizar un seguimiento de las entradas bloqueadas por una o más
transacciones.
Si existen muchas entradas en la correlación hash, un número mayor de grupos de
bloqueo mejora el rendimiento porque el número de claves que tienen el mismo
grupo disminuye a medida que crece el número de grupos. Un número mayor de
grupos de bloqueo también implica mayor simultaneidad. Si el atributo
LockStrategy se establece en NONE, este objeto BackingMap no utiliza ningún
gestor de bloqueos. En este caso, establecer numberOfLockBuckets no tiene
ningún efecto. Si no se establece este atributo, se utiliza un valor no
definido.
- LockTimeout: este atributo se utiliza cuando BackingMap usa un gestor de
bloqueos. BackingMap utiliza un gestor de bloqueos cuando el atributo LockStrategy está establecido en
OPTIMISTIC o PESSIMISTIC. El valor del
atributo se especifica en segundos y determina cuánto tiempo espera el gestor
de bloqueos a que se otorgue un bloqueo. Si este atributo no está definido, se utilizan 15 segundos como el valor de LockTimeout. Consulte el tema que
trata sobre el bloqueo pesimista para obtener más información sobre las
excepciones de tiempo de espera de bloqueo que pueden producirse.
- TtlEvictorType: cada BackingMap tiene su propio desalojador de tiempo de
vida incorporado que utiliza un algoritmo basado en la hora para determinar las
entradas de la correlación que debe desalojar. De manera predeterminada, el
desalojador de tiempo de vida incorporado no está activo. Para activarlo, llame
al método setTtlEvictorType con uno de los estos valores: CREATION_TIME,
LAST_ACCESS_TIME, LAST_UPDATE_TIME o NONE. Un valor CREATION_TIME indica que el desalojador añade
el atributo TimeToLive a la hora en que se creó la entrada de correlación en
BackingMap para determinar cuándo debe el desalojador desalojar la entrada de
correlación del objeto BackingMap. Un valor LAST_ACCESS_TIME (o LAST_UPDATE_TIME) indica que el
desalojador añade el atributo TimeToLive a la hora en la que una transacción,
que ejecuta la aplicación, accedió (o accedió y actualizó) por última vez a la entrada de correlación
para determinar cuándo debe el desalojador desalojar la entrada de correlación.
La entrada de correlación sólo se desaloja si ninguna transacción accede a una
entrada de correlación durante un período de tiempo especificado por el
atributo TimeToLive. Un valor NONE indica que el desalojador debe permanecer
inactivo y no desalojar nunca ninguna de las entradas de correlación. Si no se
establece este atributo, NONE se utiliza como el valor predeterminado y el
desalojador de tiempo de vida no está activo. Consulte el tema sobre los
desalojadores para obtener más información sobre el desalojador de tiempo de
vida incorporado.
- TimeToLive: este atributo se utiliza para especificar el número de segundos
que necesita el desalojador de tiempo de vida incorporado para añadir al tiempo
de creación o de acceso por última vez de cada entrada, como se ha descrito en
el atributo TtlEvictorType. Si no se establece este atributo, se utiliza el
valor especial de cero para indicar que el tiempo de vida es infinito. Si este
atributo se establece en infinito, el desalojador nunca desaloja las entradas
de correlación.
El ejemplo
siguiente muestra cómo definir someMap BackingMap en la
instancia someGrid ObjectGrid y establecer varios atributos de BackingMap
mediante los métodos set de la interfaz BackingMap:
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("someGrid");
BackingMap bm = objectGrid.getMap("someMap");
bm.setReadOnly( true ); // alterar temporalmente el valor predeterminado de
// lectura/grabación
bm.setNullValuesSupported(false); // alterar temporalmente el valor
// predeterminado de permitir valores nulos
bm.setLockStrategy( LockStrategy.PESSIMISTIC ); // alterar temporalmente
// el valor predeterminado de OPTIMISTIC
bm.setLockTimeout( 60 ); // alterar temporalmente el valor predeterminado
// de 15 segundos.
bm.setNumberOfBuckets(251); // alterar temporalmente el valor predeterminado
// (números primos funcionan mejor)
bm.setNumberOfLockBuckets(251); // alterar temporalmente el valor
// predeterminado (números primos funcionan mejor)
Plug-ins de BackingMap
La interfaz BackingMap tiene
diversos plug-ins opcionales que amplían las interacciones con ObjectGrid:
- Plug-in ObjectTransformer: para algunas operaciones de correlación, BackingMap podría necesitar serializar, deserializar o copiar una clave o valor de una entrada en el objeto BackingMap. BackingMap puede realizar estas acciones; para ello, proporcione
una implementación predeterminada de la interfaz ObjectTransformer.
Una aplicación puede mejorar el rendimiento si proporciona un plug-in
ObjectTransformer de diseño personalizado que BackingMap utilice para
serializar, deserializar o copiar una clave o valor de una entrada en
BackingMap.
Consulte Plug-in ObjectTransformer para obtener más información.
- Plug-in Evictor: el desalojador de tiempo de vida incorporado utiliza un algoritmo basado en la hora para decidir cuándo se debe desalojador una entrada en BackingMap. Algunas aplicaciones podrían necesitar un algoritmo diferente para
decidir cuándo debe desalojarse una entrada en BackingMap. El plug-in Evictor
pone a disposición de BackingMap un desalojador de diseño personalizado.
El plug-in Evictor se ofrece además del desalojador de tiempo de vida
incorporado.
No so reemplaza. ObjectGrid proporciona un plug-in Evictor personalizado que
implementa los algoritmos conocidos de "menos utilizado recientemente" o
"utilizado con menor frecuencia". Las aplicaciones pueden conectar uno de los
plug-ins Evictor suministrados o pueden proporcionar su propio plug-in Evictor. Consulte Plug-ins para desalojar los objetos de memoria caché.
- Plug-in MapEventListener: es posible que una aplicación desee conocer los sucesos de
BackingMap como, por ejemplo, un desalojo de una entrada de correlación o una precarga de una terminación de BackingMap. BackingMap llama a los métodos del
plug-in MapEventListener para informar de sucesos de BackingMap a una
aplicación. Una aplicación puede recibir una notificación de varios sucesos de
BackingMap mediante el método setMapEventListener para proporcionar uno o más
plug-ins MapEventListener de diseño personalizado a BackingMap. La aplicación puede modificar los objetos
MapEventListener listados utilizando el método addMapEventListener o el método removeMapEventListener. Consulte Plug-in MapEventListener para obtener más información.
- Plug-in Loader: BackingMap es una memoria caché en memoria de una correlación. Un plug-in Loader es una opción que utiliza BackingMap para mover los datos
entre la memoria y un almacén persistente.
Por ejemplo, se puede utilizar un cargador JDBC (Java database
connectivity) para insertar y extraer datos de BackingMap y una o más tablas relacionales de una base de datos relacional-
Una base de datos relacional no
necesita utilizarse como almacén persistente de un objeto BackingMap. El cargador también se puede utilizar para mover datos entre BackingMap y un archivo, entre BackingMap y una correlación Hibernate, entre
BackingMap y un bean de entidad de Java 2
Platform, Enterprise Edition (JEE), entre BackingMap y otro servidor de aplicaciones, etc. La
aplicación debe proporcionar un plug-in Loader de diseño personalizado para
mover datos entre BackingMap y el almacén persistente de cada tecnología que se
use. Si no se proporciona un cargador, BackingMap se convierte en una sencilla
memoria caché en memoria.
Consulte Plug-ins para la comunicación con bases de datos para obtener más información.
- Plug-in OptimisticCallback: cuando el atributo LockStrategy para
BackingMap está establecido en OPTIMISTIC, BackingMap o un plug-in
Loader debe realizar operaciones de comparación para los valores de la correlación. BackingMap y Loader utilizan el plug-in OptimisticCallback para realizar las
operaciones de comparación de versiones optimistas. Consulte Plug-ins para el mantenimiento de versiones y la comparación de objetos de memoria caché para obtener más información.
- Plug-in MapIndexPlugin: un plug-in MapIndexPlugin, o un
Index, es una opción utilizada por BackingMap para crear un índice que se basa en el atributo especificado del objeto almacenado.
El índice permite a la aplicación buscar objetos por un valor específico o un
intervalo de valores. Existen dos tipos de índice: estático y dinámico.
Consulte el tema que trata sobre los índices para obtener más información.
Para obtener más información sobre los plug-ins, consulte Visión general de los plug-ins.