Con las interfaces DistributedMap o DistributedObjectCache, las aplicaciones de Java™ Platform,
Enterprise Edition (Java EE) y componentes del sistema pueden almacenar en memoria caché
y compartir objetos Java almacenando una referencia al objeto en la memoria caché.
Acerca de esta tarea
Las interfaces DistributedMap y DistributedObjectCache son interfaces
sencillas para la memoria caché dinámica. Utilizando estas interfaces, las aplicaciones
Java EE
y los componentes del sistema pueden almacenar en memoria caché y compartir objetos
Java almacenando una referencia al objeto en la memoria caché. La instancia de memoria caché dinámica predeterminada se crea si se habilita el
servicio de memoria caché dinámica en la consola administrativa. Esta instancia predeterminada
se asocia con el espacio de nombres de la JNDI (Java Naming and Directory
Interface) global utilizando el nombre services/cache/distributedmap.
Varias
instancias de las interfaces DistributedMap y DistributedObjectCache en la misma máquina
virtual Java (JVM) permiten que las aplicaciones configuren por separado
instancias de memoria caché según sea necesario. Cada instancia de la interfaz DistributedMap tiene sus propias propiedades que se pueden establecer.
Importante: Si utiliza claves de objetos personalizados, debe colocar las clases en una biblioteca compartida. Puede definir la biblioteca compartida a nivel de célula, nodo o servidor. A continuación, en cada servidor cree un cargador de clase y asócielo con la biblioteca compartida que se ha definido.
Para obtener más información, consulte
Gestión de bibliotecas compartidas y
Valores del cargador de clases.
Coloque los archivos JAR en una biblioteca compartida al desplegar la aplicación en un clúster con la réplica habilitada. Activar la réplica no requiere una biblioteca compartida; sin embargo, si utiliza objetos Java específicos de la aplicación como, por ejemplo, el valor de la memoria caché o la clave de la memoria caché, estas clases Java deben estar en la biblioteca compartida. Si estos valores no están en una biblioteca compartida, obtendrá excepciones ClassNotFound cuando el servicio de réplica de datos
(DRS) intenta deserializar estos objetos en el lado del receptor.
En entornos en clúster, el contenido que se sitúa en memoria caché podría
compartirse con otros servidores del clúster. El contenido también podría
descargarse a disco. Si va a tener los objetos en memoria caché compartidos
o descargados a disco, deberá hacer estos objetos particulares
serializables. Si los objetos que sitúa en memoria caché no son
serializables, deberá especificar que la política de compartición de estos
objetos no es compartida. La interfaz DistributedMap interfaz DistributedMap contiene información acerca de cómo se especifica la política de compartición para un objeto en memoria caché. Si se especifica una política
de compartición distinta de no compartida para objetos no serializables
podría disminuir el rendimiento del sistema.
Existen cuatro métodos para configurar y utilizar las instancias de memoria caché:
- Configurar la memoria caché del objeto predeterminada (método uno en Procedimiento)
- Crear y configurar la memoria caché de objeto personalizada (método tres en Procedimiento)
- Crear y configurar la memoria caché de objeto personalizada utilizando el archivo cacheinstances.properties (método cuatro en Procedimiento)
- Usar la referencia de recursos (método cinco en Procedimiento)
- Método 1 - Configurar las instancias de memoria caché predeterminadas.
La instancia
de memoria caché de servlet predeterminada (nombre JNDI: services/cache/basecache)
se crea cuando el servidor se inicia, si el uso de memoria caché de servlet está habilitado.
La
instancia de memoria caché del objeto predeterminado (nombre JNDI: services/cache/distributedmap)
siempre se crea cuando se inicia el servidor.
- En la consola administrativa, seleccione Servidores >
Tipos de servidor > Servidores de aplicaciones WebSphere > nombre_servidor >
Servicio de contenedor > Servicio de memoria caché dinámica .
- Configure otros valores de la memoria caché. Consulte el artículo Valores de servicio de memoria caché dinámica para obtener más información.
- Pulse Aplicar o Aceptar.
- Reinicie WebSphere Application Server.
Puede utilizar el código siguiente para consultar las instancias de memoria caché:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instancia_uno");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instancia_dos");
//
o bien
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_uno");
DistributedObjectCache dm2 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_dos");
- Método 2 - Configurar las instancias de memoria caché de servlet.
Una instancia de memoria caché de servlet es una ubicación, además de la memoria caché
del servlet predeterminada, en la que la memoria caché dinámica puede almacenar,
distribuir y compartir datos.
Mediante el uso de instancias de memoria caché de servlet, las
aplicaciones tiene una mayor flexibilidad y mejor ajuste de los recursos de memoria
caché. El nombre JNDI (Java™ Naming and
Directory Interface) que se especifica para la instancia de memoria
caché se correlaciona con el atributo de nombre en la etiqueta
<cache instance> en el archivo de
configuración cachespec.xml.
Avoid trouble: No se pueden efectuar búsqueda en las memorias caché del servlet.
Las búsquedas darán error y se devolverá un nulo.
gotcha
- En la consola de administración, pulse Recursos > Instancias de
memoria caché > Instancias de memoria caché de servlet.
- Especifique el ámbito, de la siguiente manera:
- Especifique CELL SCOPE para ver y configurar instancias de memoria caché que estén disponibles
para todos los servidores dentro de la célula.
- Especifique NODE SCOPE para ver y configurar instancias de memoria caché que estén disponibles
para todos los servidores con un nodo concreto.
- Especifique el ámbito SERVIDOR para ver y configurar las
instancias de memoria caché que están disponibles sólo en un servidor
determinado.
- Especifique el nombre de visualización necesario para el recurso en el campo name.
- Especifique el nombre JNDI para el recurso. Especifique este nombre en el campo attribute del código <cache-instance> en el archivo de configuración cachespec.xml. Este código busca la instancia de memoria caché concreta en la que almacenar
entradas de memoria caché.
- Configure otros valores de la memoria caché. Consulte el artículo Valores de servicio de memoria caché dinámica para obtener más información.
- Pulse Aplicar o Aceptar.
- Opcional: Si desea configurar propiedades personalizadas adicionales para esta instancia, pulse
Recursos > Instancias de memoria caché > Instancias de memoria caché de servlet > nombre_instancia_memoria_caché_servlet>
Propiedades personalizadas > Nueva.
- Opcional: Entre el nombre de la propiedad personalizada en el campo de nombre. Para obtener más información, consulte el artículo Propiedades personalizadas de memoria caché
dinámica.
Importante: Utilice la propiedad personalizada sólo con el ámbito indicado
Por instancia de memoria caché.
Por ejemplo, especifique createCacheAtServerStartup en el campo Name.
- Especifique un valor válido para la propiedad en el campo Value.
- Guarde la propiedad y reinicie WebSphere Application Server.
- Método 3 - Configurar las instancias de memoria caché de objeto.
Una
instancia de memoria caché de objeto es una ubicación, además de la
memoria caché de objeto predeterminada, donde la memoria caché
dinámica puede almacenar, distribuir y compartir datos para
aplicaciones Java™ Platform, Enterprise Edition (Java EE). Utilice instancias de memoria caché para dar a las aplicaciones
mayor flexibilidad y ajuste de los recursos de memoria caché. Utilice la interfaz de programación DistributedObjectCache para acceder a instancias de la memoria caché. Para obtener más información sobre la interfaz de programación de aplicaciones DistributedObjectCache, consulte la documentación de la
API.
Atención: El método tres es una extensión del método uno o el método dos, indicados al principio de la sección Procedimiento. En primer lugar, utilice el método uno o el método dos.
Cree y configure la instancia de memoria caché de objeto según se indica:
- En la consola administrativa, pulse Recursos > Instancias de memoria caché > Instancias de memoria caché de objetos.
- Especifique el ámbito:
- Especifique CELL SCOPE para ver y configurar instancias de memoria caché que estén disponibles
para todos los servidores dentro de la célula.
- Especifique NODE SCOPE para ver y configurar instancias de memoria caché que estén disponibles
para todos los servidores con un nodo concreto.
- Especifique el ámbito SERVIDOR para ver y configurar las
instancias de memoria caché que están disponibles sólo en un servidor
determinado.
- Especifique el nombre de visualización necesario para el recurso en el campo name.
- Especifique el nombre JNDI para el recurso. Utilice este nombre cuando
busque una referencia en esta instancia de memoria caché. Los resultados devuelven un objeto
DistributedMap.
- Configure otros valores de la memoria caché. Para obtener más información, consulte el artículo Configuración del servicio de memoria caché dinámica.
- Pulse Aplicar o Aceptar.
- Opcional: Si desea configurar propiedades personalizadas adicionales para esta instancia, pulse Recursos >
Instancias de memoria caché > Instancias de objeto de memoria caché > nombre_instancia_memoria_caché_servlet >
Propiedades personalizadas > Nueva.
- Opcional: Entre el nombre de la propiedad personalizada en el campo de nombre.
Importante: Utilice la propiedad personalizada sólo con el ámbito indicado
Por instancia de memoria caché.
Por ejemplo, especifique createCacheAtServerStartup en el campo Name.
- Especifique un valor válido para la propiedad en el campo Value.
- Guarde la propiedad y reinicie WebSphere Application Server.
Si ha definido dos instancias de memoria caché de objetos en la consola de administración con los nombres JNDI services/cache/instancia_uno y
services/cache/instancia_dos, puede utilizar el siguiente código para
realizar búsquedas en las instancias de memoria caché:
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instancia_uno");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instancia_dos");
//
o bien
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_uno");
DistributedObjectCache dm2 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_dos");
- Método 4 - Configure instancias de memoria caché utilizando el archivo
cacheinstances.properties.
Puede crear instancias
de memoria caché utilizando el archivo cacheinstances.properties y empaquetar
el archivo en el archivo EAR (Enterprise Archive). Utilice la información de tabla en el artículo
del archivo cacheinstances.properties como referencia de nombres, valores y explicaciones.
La primera
línea define el nombre de la instancia de memoria caché. Las líneas posteriores definen las propiedades personalizadas. Los formatos son:
cache.instance.x=NombreInstancia
cache.instance.x.customPropertyName=ValorPropiedadPersonalizada
donde:
A continuación se proporciona un
ejemplo de cómo crear instancias de memoria caché adicionales utilizando el archivo
cacheinstances.properties: archivo:
cache.instance.0=/services/cache/instance_one
cache.instance.0.cacheSize=1000
cache.instance.0.enableDiskOffload=true
cache.instance.0.diskOffloadLocation=${app_server_root}/diskOffload
cache.instance.0.flushToDiskOnStop=true
cache.instance.0.useListenerContext=true
cache.instance.0.enableCacheReplication=false
cache.instance.0.disableDependencyId=false
cache.instance.0.htodCleanupFrequency=60
cache.instance.1=/services/cache/instancia_dos
cache.instance.1.cacheSize=1500
cache.instance.1.enableDiskOffload=false
cache.instance.1.flushToDiskOnStop=false
cache.instance.1.useListenerContext=false
cache.instance.1.enableCacheReplication=true
cache.instance.1.replicationDomain=DynaCacheCluster
cache.instance.1.disableDependencyId=true
En el ejemplo anterior se
crean dos instancias de memoria caché llamadas instancia_uno e instancia_dos. La instancia_uno de memoria caché tiene un tamaño de entrada de memoria caché de
1.000 y la instancia_dos de 1.500. La descarga del disco está
habilitada en instancia_uno e inhabilitada en instancia_dos. El uso del contexto de escucha está
habilitado en instancia_uno e inhabilitado en instancia_dos. El vaciado en disco está habilitado en instancia_uno e instancia_dos. La réplica de memoria caché está
habilitada en instancia_dos e inhabilitada en instancia_uno. El nombre del dominio de réplica de datos de instancia_dos es
DynaCacheCluster. El soporte de ID de dependencia está inhabilitado en instancia_dos.
Sitúe el archivo cacheinstances.properties en la vía de acceso del
servidor de aplicaciones o la classpath.
Por ejemplo, puede utilizar el archivo WAR de
aplicación, el directorio WEB-INF\classes o el directorio server_root\classes. La primera entrada del archivo
de propiedades (cache.instance.0) especifica el
nombre de la JNDI para la instancia de memoria caché del espacio de nombres global.
Puede utilizar
el código siguiente para consultar la instancia de memoria caché:
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
//
o bien
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_uno");
DistributedObjectCache dm2 =
(DistributedObjectCache)ic.lookup("services/cache/instancia_dos");
- Método 5: Referencia de recursos.
Importante: Este método es una extensión del método tres y el método cuatro,
indicados
al principio de la sección Procedimiento. En primer lugar, utilice el método tres o el método cuatro.
Defina una referencia a recursos (Resource-ref) en el
descriptor de despliegue del módulo (archivos web.xml y ibm-web-bnd.xmi) y consulte la memoria caché utilizando el
espacio de nombres
java:comp.
El siguiente ejemplo de resource-ref utiliza web.xml:
<resource-ref id="ResourceRef_1">
<res-ref-name>dmap/LayoutCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_2">
<res-ref-name>dmap/UserCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
El siguiente ejemplo de resource-ref utiliza ibm-web-bnd.xmi:
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:webappbnd="webappbnd.xmi"
xmlns:webapplication="webapplication.xmi" xmlns:commonbnd="commonbnd.xmi"
xmlns:common="common.xmi"
xmi:id="WebApp_ID_Bnd" virtualHostName="default_host">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1"
jndiName="services/cache/instance_one">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>
</resRefBindings>
<resRefBindings xmi:id="ResourceRefBinding_2"
jndiName="services/cache/instance_two">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_2"/>
</resRefBindings>
</webappbnd:WebAppBinding>
Supported configurations: Para los
archivos de enlace y extensión de IBM®, la extensión
del nombre de archivo .xmi o .xml es diferente en función de si se utiliza una aplicación
o módulo previo a Java EE 5 o una aplicación o módulo
Java EE 5 o posterior. Un archivo de enlace o
extensión de IBM se denomina ibm-*-ext.xmi o
ibm-*-bnd.xmi donde * es el tipo de archivo de extensión o enlace como app, application,
ejb-jar o web. Se aplican las condiciones siguientes:
- En el caso de una aplicación o módulo que utilice una Java EE anterior a la versión 5, la extensión del archivo debe ser .xmi.
- En el caso de una aplicación que utilice Java EE versión 5 o posterior, la extensión del archivo debe ser .xml. Si los archivos .xmi se incluyen con la aplicación o el módulo, el producto ignora los archivos .xmi.
No obstante, puede existir un módulo de Java EE
5 o posterior dentro de una aplicación que incluya archivos previos a Java EE 5 y que
utilice la extensión de nombre de archivo .xmi.
Los archivos ibm-webservices-ext.xmi, ibm-webservices-bnd.xmi, ibm-webservicesclient-bnd.xmi, ibm-webservicesclient-ext.xmi,
y ibm-portlet-ext.xmi siguen utilizando la extensión de archivo .xmi.
sptcfg
En el ejemplo siguiente se muestra cómo consultar
la referencia a recursos:
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");
//
o bien
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
En el ejemplo
anterior de referencia a recursos se establece una correlación de java:comp/env/dmap/LayoutCache con /services/cache/instancia_uno y de java:comp/env/dmap/UserCache con /services/cache/instancia_dos.
En lso ejemplos, DistributedMap dm1 y dm1a son el mismo objeto.
DistributedMap
dm2 y dm2a son el mismo objeto.
- Método 6: valores de memoria caché de máquina virtual Java.
Puede establecer las propiedades personalizadas globalmente para que afecten a todas las
instancias de memoria caché. Así se sobrescriben los valores de los métodos 1, 2 y 3, pero no los del
método 4 (cacheinstances.properties).
Configure globalmente la instancia de la memoria caché, según se indica:
- En la consola administrativa, pulse Servidores > Tipos
de servidor > Servidores de aplicaciones WebSphere > nombre_servidor >
Java y gestión de procesos > Definición de proceso > Máquina virtual Java > Propiedades personalizadas > Nueva.
- Entre el nombre de la propiedad personalizada en el campo de nombre. Para obtener más información, consulte el artículo Propiedades personalizadas de memoria caché
dinámica.
Tras encontrar el nombre de la propiedad personalizada, añada el prefijo
com.ibm.ws.cache.CacheConfig delante del nombre de dicha propiedad personalizada. Por ejemplo,
si el nombre de la propiedad personalizada es createCacheAtServerStartup, especifique com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup en el campo Name.
- Especifique un valor válido para la propiedad en el campo Value.
- Guarde la propiedad y reinicie WebSphere Application
Server.