Sto provando a usare Jini, in un "Masters / Workers" accordo, ma i lavori di Worker potrebbero essere di lunga durata. Inoltre, ogni lavoratore deve avere accesso esclusivo a una risorsa singleton su quella macchina.
Allo stato attuale, se un lavoratore riceve un'altra richiesta mentre è in esecuzione una richiesta precedente, la nuova richiesta viene accettata ed eseguita in un secondo thread.
Esistono best practice per garantire che un Worker non accetti altri lavori fino a quando il lavoro corrente non è completo?
Cose che ho considerato:
- sincronizza il lavoro sul server, con un blocco sulla risorsa singleton. Questo funzionerebbe, ma è lontano dall'ideale. Una chiamata da un Master bloccherebbe fino al completamento del thread corrente del lavoratore, anche se altri lavoratori diventeranno liberi nel frattempo
- annullare la registrazione di Worker dal registro mentre il lavoro è in esecuzione, quindi registrarsi nuovamente al termine. Potrebbe funzionare OK, ma qualcosa non ha un buon odore con questa idea ...
Naturalmente, sono abbastanza felice di sentirmi dire che ci sono tecnologie più appropriate di Jini ... ma non vorrei nulla di troppo pesante, come la distribuzione di contenitori EJB dappertutto.