En utilisant les interfaces DistributedMap ou DistributedObjectCache, Java™ Platform,
les applications Enterprise Edition (Java 2EE) et les composants système
peuvent mettre en mémoire cache et partager des objets Java en stockant une référence à l'objet
dans la mémoire cache.
Pourquoi et quand exécuter cette tâche
Les interfaces DistributedMap et DistributedObjectCache
représentent des interfaces simples de gestion de cache dynamique. A l'aide de ces interfaces, les applications J 2EE
et les composants système peuvent mettre en mémoire cache et partager les objets Java
en stockant une référence à l'objet en mémoire cache. L'instance
de cache dynamique par défaut est créée lorsque la mise en cache dynamique est activée dans la console d'administration. Cette instance
par défaut est liée à l'espace de nom JNDI (Java Naming and Directory Interface) global
à l'aide du nom services/cache/distributedmap.
La présence de plusieurs instances
des interfaces DistributedMap et DistributedObjectCache sur une même machine virtuelle Java
permet aux applications de configurer séparément les instances de mémoire cache
en fonction des besoins. Chaque instance de l'interface DistributedMap possède ses propres propriétés.
Conseil : Pour plus d'informations sur les interfaces DistributedMap et DistributedObjectCache, recherchez le package com.ibm.websphere.cache dans la documentation de l'API. Pour plus d'informations, voir
API supplémentaires.
Important : Si vous utilisez des clés d'objet personnalisées, placez vos classes dans une bibliothèque partagée. Vous pouvez définir la bibliothèque partagée au niveau de la cellule, du noeud ou du serveur. Ensuite, dans chaque serveur, créez un chargeur de classe et associez-le à la bibliothèque partagée. Pour plus d'informations, voir
Gestion des bibliothèques partagées et
Paramètres du chargeur de classe.
Placez les fichiers JAR dans une bibliothèque partagée lorsque vous déployez l'application dans un cluster avec la réplication activée. La simple activation de la réplication ne nécessite pas
de bibliothèque partagée. Cependant, si vous utilisez des objets Java propres à certaines applications,
tels que la clé de mémoire cache ou la valeur de mémoire cache, ces classes
Java doivent figurer dans la bibliothèque
partagée. Si ces valeurs ne figurent pas dans une bibliothèque partagée, vous obtiendrez des exceptions ClassNotFound lorsque le service de réplication des données (DRS) tentera de désérialiser ces objets à l'extrémité réceptrice.
Dans un environnement de clusters, le contenu placé en mémoire cache peut être partagé par
d'autres serveurs du cluster. Le contenu peut également être chargé sur le disque. Si vous prévoyez de partager les objets mis en cache ou de les charger sur le disque, vous devez les rendre sérialisables. Si les objets que vous mettez en mémoire cache ne sont pas sérialisables, vous devez indiquer que la politique de ces objets n'est pas partagée. L'interface
DistributedMap (Interface
DistributedMap) contient des informations sur la méthode à suivre pour indiquer une règle
de partage pour un objet en cache. L'indication d'une règle de partage autre que non partagée pour des objets non sérialisables peut entraîner une baisse des performances du système.
Il existe quatre méthodes pour configurer et utiliser des instances de
cache :
- Configurer la mémoire cache de l'objet par défaut (méthode un de la procédure)
- Créer et configurer la mémoire cache de l'objet personnalisée (méthode trois de la procédure)
- Créer et configurer la mémoire cache de l'objet personnalisée en utilisant le fichier cacheinstances.properties
(méthode quatre de la procédure)
- Utiliser la référence des ressources (méthode cinq de la procédure)
- Méthode 1 : Configurer les instances de cache par défaut.
L'instance
de cache par défaut du servlet (nom JNDI : services/cache/basecache)
est créée lorsque le serveur démarre, si la mise en cache est activée.
L'instance de cache
par défaut de l'objet (nom JNDI : services/cache/distributedmap)
est toujours créée lorsque le serveur démarre.
- Dans la console d'administration, sélectionnez Serveurs >
Types de serveurs > Serveurs d'applications WebSphere > nom_serveur >
Services du conteneur > Service Dynamic cache.
- Configurez les autres paramètres de la mémoire cache. Pour plus d'informations, voir l'article Paramètres du service de cache dynamique.
- Cliquez sur Valider ou sur OK.
- Redémarrez WebSphere Application Server.
Vous pouvez utiliser le code suivant pour rechercher les instances de cache :
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Méthode 2 : Configurer les instances de cache de servlet.
Une instance de cache de servlet est un emplacement qui, en plus du cache de servlet par défaut,
permet à un cache dynamique de stocker, distribuer et partager des données.
En utilisant des instances de cache de servlet, vous conférez aux applications une souplesse plus grande et une meilleure optimisation des ressources de la mémoire cache. Le nom JNDI (JavaNaming and Directory Interface) spécifié pour l'instance de cache est mappé à l'attribut de nom
dans la balise <instance de cache> du fichier de configuration cachespec.xml.
Eviter les incidents: Les caches servlet ne peuvent pas être consultés.
Si vous les consultez, vous recevez la valeur null.
gotcha
- dans la console d'administration, cliquez sur Ressources > Instances de cache > Instances de cache de servlet.
- Entrez la portée de la manière suivante :
- Spécifiez PORTEE DE CELLULE pour afficher et configurer les instances de cache qui sont disponibles pour tous les serveurs de la cellule.
- Spécifiez PORTEE DE NOEUD pour afficher et configurer les instances de cache qui sont disponibles pour tous les serveurs du noeud particulier.
- Spécifiez PORTEE DE SERVEUR pour afficher et configurer les instances de cache disponibles uniquement sur le serveur spécifique.
- Entrez le nom de la ressource dans la zone nom.
- Entrez le nom JNDI de la ressource. Spécifiez ce nom dans la zone d'attribut de nom dans la balise <cache-instance> du fichier de configuration cachespec.xml. Cette balise permet de trouver l'instance de cache particulière dans laquelle les entrées de cache doivent être stockées.
- Configurez les autres paramètres de la mémoire cache. Pour plus d'informations, voir l'article Paramètres du service de cache dynamique.
- Cliquez sur Appliquer ou sur OK.
- Facultatif : Si vous souhaitez configurer des propriétés personnalisées
supplémentaires pour cette instance, cliquez sur Ressources >
Instances de cache > Instances de cache de servlet > nom_instance_cache_servlet>
Propriétés personnalisées > Nouveau .
- Facultatif : Entrez le nom de la propriété personnalisée dans la zone Nom. Pour plus d'informations, voir l'article
Propriétés personnalisées de la mémoire cache dynamique.
Important : Utilisez la propriété personnalisée avec
la portée indiquée uniquement Par instance de cache .
Par exemple, entrez créerCacheAuDémarragetServeur dans
la zone Nom.
- Entrez une valeur valide pour la propriété dans la zone Valeur.
- Enregistrez la propriété et redémarrez WebSphere Application Server.
- Méthode 3 : Configurer les instances de cache de l'objet.
Une instance de cache est
un emplacement qui, en plus du cache de l'objet par défaut, permet
à un cache dynamique de stocker, distribuer et partager des données pour les applications Java Platform,
Enterprise Edition (Java EE). Utilisez les instances de cache pour conférer aux applications une souplesse plus grande et une meilleure optimisation des ressources de la mémoire cache.
Utilisez l'interface de programmation DistributedObjectCache pour accéder aux instances de cache. Pour plus d'informations sur l'interface de programmation de l'application DistributedObjectCache, voir la documentation de l'API.
Avertissement : La troisième méthode est une extension de la méthode 1 ou 2 décrite au début de la section Procédure. Commencez par utiliser la méthode 1 ou 2.
Créez et configurez l'instance de cache de l'objet de la manière suivante :
- Dans la console d'administration, cliquez sur Ressources > Instances de cache > Instances de cache d'objet.
- Entrez la portée :
- Spécifiez PORTEE DE CELLULE pour afficher et configurer les instances de cache qui sont disponibles pour tous les serveurs de la cellule.
- Spécifiez PORTEE DE NOEUD pour afficher et configurer les instances de cache qui sont disponibles
pour tous les serveurs de noeud particulier.
- Spécifiez PORTEE DE SERVEUR pour afficher et configurer les instances de cache disponibles uniquement sur le serveur spécifique.
- Entrez le nom de la ressource dans la zone nom.
- Entrez le nom JNDI de la ressource. Utilisez ce nom lors de la recherche d'une référence dans cette instance de cache. Un objet DistributedMap
est renvoyé comme résultat.
- Configurez les autres paramètres de la mémoire cache. Plus plus d'informations,
voir l'article Paramètres du service de cache dynamique.
- Cliquez sur Valider ou sur OK.
- Facultatif : Si vous souhaitez configurer des propriétés personnalisées
supplémentaires pour cette instance, cliquez sur Ressources >
Instances de cache > Instances de cache d'objet > nom_instance_cache_servlet >
Propriétés personnalisées > Nouveau .
- Facultatif : Entrez le nom de la propriété personnalisée dans la zone Nom.
Important : Utilisez la propriété personnalisée avec
la portée indiquée uniquement Par instance de cache .
Par exemple, entrez créerCacheAuDémarragetServeur dans
la zone Nom.
- Entrez une valeur valide pour la propriété dans la zone Valeur.
- Enregistrez la propriété et redémarrez WebSphere Application Server.
Si vous avez défini deux instances de cache d'objet avec les noms JNDI services/cache/instance_un et services/cache/instance_deux dans la console d'administration, vous pouvez utiliser le code suivant pour rechercher les instances de cache : InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Méthode 4 : Configurer des instances de cache en utilisant le fichier cacheinstances.properties.
Vous pouvez créer des instances de cache à l'aide du fichier cacheinstances.properties
et intégrer le fichier dans votre fichier EAR (Enterprise Archive). Utilisez les informations contenues dans le fichier cacheinstances.properties comme référence des
noms, valeurs et explications.
La première ligne définit le nom de l'instance de cache. Les lignes suivantes définissent les propriétés personnalisées. Les formats sont les suivants :
cache.instance.x=InstanceName
cache.instance.x.customPropertyName=customPropertyValue
Où :
L'exemple suivant indique comment créer
des instances de cache supplémentaires à l'aide du fichier cacheinstances.properties. :
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/instance_two
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
L'exemple précédent crée deux instances de cache
appelées instance_un et instance_deux. La taille des entrées en cache a la valeur 1000 pour l'instance_un et
la valeur 1500 pour l'instance_deux. Le déchargement sur disque est activé
pour l'instance_un et désactivé pour l'instance_deux. L'utilisation du contexte du programme d'écoute est activée
pour l'instance_un et désactivée pour l'instance_deux. Le vidage du disque à l'arrêt est activé
pour l'instance_un et désactivé pour l'instance_deux. La réplication de cache est activée
pour l'instance_deux et désactivée pour l'instance_un. Le nom du domaine de réplication des données
pour l'instance_deux est DynaCacheCluster. Le support d'ID de dépendance est désactivé
dans l'instance_deux.
Placez le fichier cacheinstances.properties dans le chemin d'accès de votre serveur d'applications ou aux classes de l'application.
Par exemple, vous pouvez utiliser votre fichier WAR d'applications, le répertoire WEB-INF\classes ou le répertoire server_root\classes. La première entrée dans le fichier propriétés (cache.instance.0) indique
le nom JNDI de l'instance de cache dans l'espace de nom global.
Vous pouvez utiliser le code suivant pour rechercher l'instance de cache :
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- Méthode 5 : Référence des ressources.
Important : Cette
méthode est une extension des méthodes 3 et 4 décrites au début de la section Procédure. Commencez par utiliser la méthode 3 ou 4.
Définissez un élément resource-ref dans le descripteur de déploiement du module (fichiers web.xml et ibm-web-bnd.xmi) et recherchez l'instance de cache
à l'aide de l'espace de nom
java:comp .
L'exemple resource-ref suivant utilise 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>
L'exemple resource-ref suivant utilise 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>
Configurations prises en charge: Pour les
fichiers de liaison et d'extension IBM®, l'extension
de nom de fichier .xmi ou .xml est différente selon que vous utilisiez un module ou une application antérieure à
Java EE 5 ou un module ou une application ultérieure à Java EE 5. Un fichier de liaison ou d'extension
IBM porte le nom ibm-*-ext.xmi ou ibm-*-bnd.xmi où * correspond au fichier
d'extension ou de liaison, tel app, application, ejb-jar ou web. Les conditions suivantes s'appliquent :
- Pour une application ou un module qui utilise une version Java EE antérieure à la
version 5, l'extension de fichier doit être .xmi.
- Pour une application ou un module qui utilise Java EE 5 ou version ultérieure, l'extension
de fichier doit être .xml. Si des fichiers .xmi sont inclus dans l'application ou le module, le produit les ignore.
Toutefois, un module Java EE
5 ou version ultérieure peut exister dans une application qui inclut des fichiers
antérieurs à Java EE 5 et utilise l'extension de nom de fichier .xmi.
Les fichiers ibm-webservices-ext.xmi, ibm-webservices-bnd.xmi, ibm-webservicesclient-bnd.xmi, ibm-webservicesclient-ext.xmi et ibm-portlet-ext.xmi continuent d'utiliser les extensions de fichier .xmi.
sptcfg
L'exemple suivant indique comment rechercher resource-ref :
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");
// or
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
L'exemple resource-ref précédent mappe java:comp/env/dmap/LayoutCache à /services/cache/instance_one et java:comp/env/dmap/UserCache à /services/cache/instance_two.
Dans ces exemples, DistributedMap dm1 et dm1a correspondent au même objet.
DistributedMap
dm2 et dm2a désignent le même objet.
- Méthode 6 : Paramètres de cache de la machine virtuelle Java
Vous pouvez définir les propriétés personnalisées de manière globale afin d'affecter toutes les instances de cache. Cela écrase les paramètres des méthodes 1, 2 et 3, mais pas ceux de la méthode
4 (cacheinstances.properties).
Configurez l'instance de cache de manière globale comme suit :
- Dans la console d'administration, cliquez sur Serveurs > Types
de serveurs > Serveurs d'applications WebSphere > nom_serveur >
Gestion des processus et Java > Définition des processus > Machine virtuelle
Java > Propriétés personnalisées > Nouveau.
- Entrez le nom de la propriété personnalisée dans la zone Nom. Pour plus d'informations, voir l'article
Propriétés personnalisées de la mémoire cache dynamique.
Une fois que vous avez trouvé
le nom de la propriété personnalisée, ajoutez le préfixe com.ibm.ws.cache.CacheConfig
devant le nom de la propriété personnalisée. Par exemple, si le nom de la propriété personnalisée est
createCacheAtServerStartup, entrez com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup dans
la zone Nom.
- Entrez une valeur valide pour la propriété dans la zone Valeur.
- Enregistrez la propriété et redémarrez WebSphere Application Server.