Me estoy ejecutando en un escenario en el que una base de datos NoSQL (MongoDB) mantendrá un registro del estado de éxito o falla de una determinada tarea y si una tarea está en un estado fallido, mi aplicación del programador Java leerá el estado, volverá a intentarlo e intentará ejecutar la tarea una vez más y, si la tarea se completa con éxito, actualizará el registro de la base de datos como estado 'éxito' o estado 'fallido' si falla nuevamente.
Ahora el problema es que mi aplicación se implementa en dos nodos diferentes (básicamente, 2 jvm diferentes) y ambos nodos comparten la base de datos NoSQL común. antes de que complete su ejecución, otro subproceso de aplicación de un nodo diferente lee el registro de base de datos y vuelve a ejecutar la tarea una vez más, lo que anula la actualización exitosa anterior del registro de datos y provoca resultados inesperados. En resumen, estoy pasando por una condición de carrera y no tengo control sobre el bloqueo de base de datos NoSQL pero quiero controlar a nivel de aplicación.
¿Cómo evito que mi aplicación lea el registro que ya ha sido procesado por otro subproceso jvm?
Sus sugerencias serán muy apreciadas.
Estoy usando la biblioteca jongo versión 1.2 y jdk 1.8