L'interface ObjectMap est utilisée pour l'interaction
transactionnelle entre les applications et les mappes de sauvegarde.
Rôle
Une instance ObjectMap est extraite d'un objet de
session qui correspond à l'unité d'exécution en cours. L'interface ObjectMap
représente le principal moyen utilisé par les applications pour apporter des
modifications aux entrées d'une mappe de sauvegarde.
Obtention d'une instance ObjectMap
Une application
extrait une instance ObjectMap d'un objet de session à l'aide de la méthode
Session.getMap(String).
Le fragment de code suivant montre comment obtenir une instance ObjectMap :
ObjectGrid objectGrid = ...;
BackingMap backingMap = objectGrid.defineMap("mapA");
Session sess = objectGrid.getSession();
ObjectMap objectMap = sess.getMap("mapA");
Chaque instance ObjectMap
correspond à un objet de session particulier. Le fait d'appeler plusieurs
fois la méthode
getMap sur un objet Session particulier
avec le même nom de mappe de sauvegarde renvoie toujours la même instance ObjectMap.
Transactions de validation automatique
Les opérations
sur les mappes de sauvegarde qui utilisent des instances ObjectMaps et
JavaMaps sont effectuées de manière plus efficace dans une transaction de
session. WebSphere eXtreme Scale prend en
charge la validation automatique si les méthodes sur les interfaces ObjectMap et
JavaMap sont appelées en dehors d'une transaction de session. Les méthodes
démarrent une transaction implicite, effectuent l'opération demandée et
valident la transaction implicite.
Sémantique des méthodes
Vous trouverez ci-après une
explication de la sémantique de chaque méthode des interfaces ObjectMap
et JavaMap.
- Méthode containsKey
- La méthode containsKey détermine si une clé
possède une valeur dans la mappe de sauvegarde ou le chargeur. Si les valeurs
null sont prises en charge par une application, cette méthode peut être
utilisée pour déterminer si une référence null renvoyée par une opération
d'extraction fait référence à une valeur null ou indique que la mappe de
sauvegarde et le chargeur ne contiennent pas la clé.
- Méthode flush
- La sémantique de la méthode flush est similaire à celle
de la méthode flush sur l'interface Session, à la différence
près que la méthode flush de l'interface Session applique les modifications
actuelles en attente de toutes les mappes modifiées dans la session en cours. Avec cette méthode, seules les
modifications apportées à cette instance ObjectMap sont vidées dans le chargeur.
- Méthode get
- La méthode get extrait l'entrée de l'instance BackingMap. Si
l'entrée est introuvable dans l'instance BackingMap, mais qu'un chargeur
est associé à l'instance BackingMap, cette dernière tente d'extraire l'entrée
du chargeur. La méthode getAll est fournie pour permettre un
traitement d'extraction par lots.
- Méthode getForUpdate
- La méthode getForUpdate est identique à la méthode get,
mais l'utilisation de la méthode getForUpdate indique à
la mappe de sauvegarde et au chargeur une intention de mise à jour de l'entrée. Un chargeur peut utiliser
ce conseil pour lancer une requête SELECT for UPDATE sur un système dorsal de
base de données.
Si une stratégie de verrouillage pessimiste est définie pour la mappe de
sauvegarde, le gestionnaire de verrouillage verrouille l'entrée. La méthode getAllForUpdate est
fournie pour permettre un traitement d'extraction par lots.
- Méthode insert
- La méthode insert insère une
entrée dans la mappe de sauvegarde et le chargeur. L'utilisation de cette
méthode indique à la mappe de sauvegarde et au chargeur que vous souhaitez
insérer une entrée qui n'existait pas précédemment. Si vous appelez cette
méthode sur une entrée existante, une exception se produit lorsque la
méthode est appelée ou que la transaction en cours est validée.
- Méthode invalidate
- La sémantique de la méthode invalidate dépend
de la valeur du paramètre isGlobal transmise à la méthode. La
méthode invalidateAll est fournie pour permettre un
traitement d'invalidation par lots.
L'invalidation
locale est spécifiée si la valeur false est transmise au paramètre
isGlobal de la méthode invalidate. L'invalidation
locale annule les modifications apportées à l'entrée dans le
cache des transactions. Si l'application génère une méthode get,
l'entrée est extraite de la dernière valeur validée dans la mappe de sauvegarde.
Si aucune entrée n'est présente dans la mappe de sauvegarde, l'entrée est
extraite de la dernière valeur vidée ou validée du chargeur. Si une transaction
est validée, les entrées marquées comme invalidées en local n'ont aucun
impact sur la mappe de sauvegarde. Les modifications vidées dans le chargeur
sont quand même validées, même si l'entrée a été invalidée.
L'invalidation
globale est spécifiée si la valeur true est transmise comme paramètre
isGlobal de la méthode invalidate. L'invalidation
globale supprime les modifications en attente apportées à l'entrée dans le cache des transactions et ignore la valeur BackingMap sur les opérations
suivantes effectuées sur l'entrée. Si une transaction est validée, les entrées marquées comme
invalidées globalement sont expulsées de la mappe de sauvegarde.
Soit le
scénario d'invalidation suivant : La mappe de sauvegarde est sauvegardée par
une table de base de données qui contient une colonne d'incrémentation
automatique. Les colonnes d'incrémentation sont utiles pour affecter des
numéros uniques aux enregistrements. L'application
insère une entrée. Après l'insertion, l'application doit connaître le
numéro de séquence de la ligne insérée. Elle sait que sa copie de l'objet est
ancienne et elle utilise donc l'invalidation globale pour extraire la valeur du
chargeur. Le code suivant illustre ce scénario d'utilisation :Session sess = objectGrid.getSession();
ObjectMap map = sess.getMap("mymap");
sess.begin();
map.insert("Billy", new Person("Joe", "Bloggs", "Manhattan"));
sess.flush();
map.invalidate("Billy", true);
Person p = map.get("Billy");
System.out.println("Version column is: " + p.getVersion());
map.commit();
// Fermer la session (facultatif dans les versions 7.1.1 et ultérieures) pour améliorer les performances
session.close();
Cet exemple de code ajoute une entrée pour Billy.
L'attribut de version de Person est défini à l'aide d'une colonne
d'incrémentation automatique dans la base de données. L'application effectue d'abord une commande d'insertion.
Elle lance ensuite une opération de vidage qui envoie l'insertion au chargeur
et à la base de données. La base de données affecte à la colonne de version le
numéro suivant dans la séquence, ce qui rend obsolète l'objet Person dans la
transaction. Pour mettre à jour l'objet, l'application est invalidée
globalement.
La méthode get suivante qui est générée extrait
l'entrée du chargeur et ignore la valeur de la transaction. L'entrée est
extraite de la base de données avec la valeur de version mise à jour.
- Méthode put
- La sémantique de la méthode put varie suivant qu'une
méthode get précédente ait été appelée dans la transaction
pour la clé. Si l'application lance une opération get qui
renvoie une entrée existant dans la mappe de sauvegarde ou le chargeur, l'appel
de méthode put est interprété comme une mise à jour et
renvoie la valeur précédente dans la transaction. Si un appel de méthode
put a été exécuté sans appel de méthode
get précédent ou qu'un appel de méthode
get précédent n'a pas trouvé d'entrée, l'opération est
interprétée comme une insertion. La sémantique des méthodes
insert et update s'applique lorsque
l'opération put est validée. La méthode putAll est fournie
pour permettre un traitement d'insertion et de mise à jour par lots.
- Méthode remove
- La méthode remove supprime l'entrée de la mappe de
sauvegarde et du chargeur, si un chargeur est connecté. La valeur de l'objet
supprimé est renvoyée par cette méthode. Si l'objet n'existe pas, cette méthode
renvoie une valeur null. La méthode removeAll est fournie
pour permettre un traitement de suppression par lots sans les valeurs de retour.
- Méthode setCopyMode
- La méthode setCopyMode spécifie une valeur de mode de
copie pour cet ObjectMap. Avec cette méthode, une application peut remplacer
la valeur du mode de copie qui est spécifiée sur la mappe de sauvegarde. La valeur
du mode de copie spécifiée est appliquée tant que la méthode
clearCopyMode n'est pas appelée. Les deux méthodes sont
appelées en dehors des liaisons transactionnelles.
Une valeur de mode de copie ne peut pas être modifiée en cours de transaction.
- Méthode touch
- La méthode touch met à jour le dernier temps d'accès
d'une entrée. Cette méthode n'extrait pas la valeur de la mappe de
sauvegarde.
Utilisez cette méthode dans sa propre transaction. Si la clé fournie n'existe
pas dans la mappe de sauvegarde car elle a été invalidée ou supprimée, une
exception se produit lors du traitement de validation.
- Méthode update
- La méthode update met à jour de manière explicite une
entrée de la mappe de sauvegarde et du chargeur. L'utilisation de cette
méthode indique à la mappe de sauvegarde et au chargeur que vous souhaitez
mettre à jour une entrée existante. Une
exception se produit si vous appelez cette méthode sur une entrée qui n'existe
pas lorsque la méthode est appelée ou lors du traitement de validation.
- Méthode getIndex
- La méthode getIndex tente d'obtenir un index nommé
généré sur la mappe de sauvegarde. L'index ne peut pas être partagé entre
les unités d'exécution et utilise les mêmes règles qu'une session. L'objet
d'index renvoyé doit être transtypé dans l'interface d'index d'application
appropriée (par exemple, l'interface MapIndex, l'interface
MapRangeIndex ou une interface d'index personnalisée).
- Méthode clear
- La méthode clear supprime toutes les entrées de cache dans une mappe sur toutes les partitions. Cette opération étant une
fonction d'auto-validation, aucune transaction active ne doit être
présente lors de l'appel de la méthode clear.
Remarque : La méthode clear
n'efface que le contenu de la mappe sur laquelle elle est appelée ; les
mappes d'entités associées ne sont pas affectées. Cette méthode n'appelle pas le plug-in du
chargeur.