Avec des mappes fiables, vous pouvez fournir une valeur de délai d'attente en millisecondes à WebSphere eXtreme Scale pour les demandes de transaction.
Pourquoi et quand exécuter cette tâche
Vous pouvez définir la valeur du délai d'attente dans le fichier des propriétés du client ou dans une session. La valeur de session remplace la valeur dans les propriétés du client. Si la valeur définie est supérieure à zéro, la demande est réessayée jusqu'à ce que le dépassement du délai d'attente soit atteint ou qu'une erreur permanente se produise. Une erreur permanente peut être une exception DuplicateKeyException.
La valeur zéro indique le mode fail-fast et eXtreme Scale ne retente pas la transaction, quelle que soit son type.
Pendant l'exécution, la valeur de délai d'expiration des transactions est utilisée avec la valeur de délai d'attente de nouvelle tentative, ce qui garantit que le délai d'attente de relance ne dépasse pas le délai d'expiration des transactions.
Deux types de transactions existent : les transactions de validation automatique et les transactions qui utilisent des méthodes explicites
begin et
commit.
Les exceptions valides de tentatives diffèrent de ces deux types de transactions :
- Pour les transactions appelées au sein d'une session, les transactions sont retentées pour les exceptions CORBA SystemException et eXtreme Scale TargetNotAvailable.
- Pour les transactions de validation automatique, les transactions sont retentées pour les exceptions de disponibilité CORBA eXtreme Scale.
Ces exceptions incluent les exceptions ReplicationVotedToRollbackTransactionException,
TargetNotAvailable et AvailabilityException.
Les erreurs d'application et les autres erreurs permanentes s'exécutent immédiatement et le client ne retente pas la transaction.
Ces erreurs permanentes incluent les exceptions DuplicateKeyException et KeyNotFoundException. Utilisez le paramètre fail-fast pour exécuter toutes les exceptions sans retenter les transactions.
Exceptions pour lesquels le client retente la transaction :- ReplicationVotedToRollbackTransactionException (uniquement en validation automatique)
- TargetNotAvailable
- org.omg.CORBA.SystemException
- AvailabilityException (uniquement en validation automatique)
- LockTimeoutException (uniquement en validation automatique)
- UnavailableServiceException (uniquement en validation automatique)
Exceptions permanentes pour lesquelles la transaction n'est pas retentée :- DuplicateKeyException
- KeyNotFoundException
- LoaderException
- TransactionAffinityException
- LockDeadlockException
- OptimisticCollisionException
- Définissez la valeur du délai d'attente dans un fichier de propriétés client.
Pour définir la valeur de requestRetryTimeout
dans un client, ajoutez ou modifiez la propriété dans le Fichier de propriétés du client. Les propriétés du client sont définies par défaut dans le fichier objectGridClient.properties. La propriété requestRetryTimeout est définie en millisecondes.
Une valeur supérieure à zéro indique que la demande doit être réessayée en cas de survenue d'exceptions
pour lesquelles le retry est possible. Une valeur de 0
indique que les échecs ne donnent lieu à aucune nouvelle tentative dans les exceptions. Pour utiliser le comportement par défaut,
supprimez la propriété ou donnez-lui une valeur de -1. Exemple de valeur dans le fichier objectGridClient.properties :
requestRetryTimeout = 30000
La valeur de requestRetryTimeout
est spécifiée en millisecondes. Dans l'exemple, si la valeur est utilisée dans une instance ObjectGrid, la valeur de requestRetryTimeout sera de 30 secondes.
- Définissez la valeur du délai d'attente à l'aide d'un programme.
Pour définir par programmation les propriétés du client,
commencez par créer un fichier de propriétés dans un <emplacement> approprié
à votre application. Dans l'exemple suivant, le fichier des propriétés du client
correspond au fragment de code objectGridClient.properties
de la section précédente. Après vous être connecté à une instance ObjectGridManager, définissez les propriétés du client, comme indiqué. Ensuite, lorsque vous avez une instance ObjectGrid, l'instance a les propriétés client que vous avez définies dans le fichier. A chaque fois que vous serez amené à modifier ce fichier,
vous devrez explicitement obtenir une nouvelle instance ObjectGrid.
ObjectGridManager manager = ObjectGridManagerFactory.getObjectGridManager();
String objectGridName = “testObjectGrid”;
URL clientXML = null;
ClientClusterContext ccc = manager.connect("localhost:2809", null, clientXML);
File file = new File("<location>/objectGridClient.properties");
URL url = file.toURI().toURL();
ccc.setClientProperties(objectGridName, url);
ObjectGrid objectGrid = ogManager.getObjectGrid(ccc, objectGridName);
- Définissez le fichier de remplacement pendant une validation de session.
Pour définir
dans l'objet Session pendant combien de temps effectuer de nouvelles tentatives ou pour remplacer la propriété client requestRetryTimeout,
appelez la méthode setRequestRetryTimeout(long)
dans l'interface Session.
Session sessionA = objectGrid.getSession();
sessionA.setRequestRetryTimeout(30000);
ObjectMap mapA = sessionA.getMap("payroll");
String key = "key:" + j;
mapA.insert(key, "valueA");
Cette session utilise à présent la valeur 30 000 millisecondes (30 secondes) pour requestRetryTimeout, quelle que soit la valeur définie dans le fichier des propriétés du client. Pour plus d'informations sur l'interface de session, voir Utilisation des sessions pour accéder aux données de la grille.