Ciao a tutti, sono nuovo del forum!
Sto realizzando un'applicazione di rete in Java, e mi trovo di fronte ad un problema un po' spinoso. Si tratta di un'applicazione distribuita, in cui più server, che comunicano tra loro su Socket TCP, devono condividere le stesse informazioni in modo che ogni client riceva sempre una risposta univoca, qualsiasi server contatti.

Lo scambio delle informazioni avverrà attraverso l'invio reciproco di un oggetto (ogni volta che viene modificato) tramite ObjectStream, il problema e' come sincronizzare correttamente i server, in modo da evitare che due client accedano a due server, che tentano di aggiornarsi a vicenda nello stesso istante, con il rischio (concreto) che la consistenza del sistema vada perduta.

In parole povere, devo realizzare una mutex, ma se per sincronizzare dei thread basta usare la parola magica 'synchronized' al posto giusto, su host diversi la cosa si fa più complicata.

Io pensavo di realizzare una cosa del genere, ma non mi è ben chiaro se possa funzionare correttamente, se puo' generare deadlock e come implementarla:

codice:
synchronized(oggetto) { // per bloccare localmente l'oggetto

// invio un messaggio di lock a tutti i server
// attendo le conferme del lock tramite messaggi su socket

// invio dell'oggetto tramite ObjectOutputStream

// invio messaggio di unlock a tutti i server

}
Come gestisco il sistema? Un thread sempre attivo che accetta connessioni su ServerSocket e un metodo chiamato ogni volta che si tenta di modificare l'oggetto che invia i messaggi di lock e l'oggetto?

Grazie in anticipo per l'aiuto!