Introduction à l'interface ObjectMap

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.