Si je comprends bien, vous avez différentes machines virtuelles qui exécutent le même jar/code (que j'appellerai fonctionnement ). Si c'est le cas, vous pouvez mettre en place un mécanisme de verrouillage indépendant de ces VM. Par exemple, vous pourriez utiliser un fichier, mais il est préférable d'utiliser la base de données et ses fonctions de verrouillage natives : créez un tableau "Verrous" (ID, version, opération, expiration) puis, à chaque fois que l'opération s'exécute, essayez de récupérer une ligne de verrouillage pour l'opération, si la ligne n'existe pas ou est expirée, créez/mettez à jour une ligne de verrouillage définissant l'expiration et autorisez l'opération, sinon levez l'exception "cannot-execute-since-locked" (ne peut être exécuté depuis le verrouillage). L'expiration est utilisée pour éviter un verrouillage définitif si l'opération se bloque, comme dans le cas suivant finally
n'a pas pu être exécutée (par exemple : plantage du système d'exploitation). Pour éviter les écritures doubles/concurrentes, vous devez utiliser DB verrouillage optimiste pour la table Lock, par exemple : un champ Version. Libérez le verrou à la fin de l'opération en supprimant la ligne. Les lignes de verrouillage doivent être créées et supprimées dans des transactions distinctes, séparées de celles de l'opération (le cas échéant).