Ho implementato un servizio Web con Java Servlet.Come gestire le condizioni di gara nel servizio Web?
Ho ottenuto la seguente configurazione: C'è un database che gestisce le voci "lavoro". Ogni lavoro ha uno stato come "in esecuzione" o "in coda" o "finito". Se un utente inizia un nuovo lavoro, viene creata una voce nel database con un lavoro e lo stato 'in coda'.
Il lavoro deve essere eseguito solo se sono già stati eseguiti meno di altri cinque lavori. Se ci sono altri cinque già in esecuzione lo stato deve rimanere "in coda" e un Cronjob gestirà l'esecuzione di questo lavoro in seguito.
Ora mi chiedo solo che se ci sono meno di cinque lavori in esecuzione al momento, il mio script eseguirà questo lavoro. Ma cosa succede se, allo stesso tempo, tra il mio script che chiede al database quanti lavori vengono eseguiti e lo script che inizia a eseguire il lavoro, un'altra richiesta da un altro utente crea un lavoro e ottiene anche "quattro processi in esecuzione" come risultato Banca dati.
Quindi ci sarebbe una condizione di gara e verrebbero eseguiti 6 lavori.
Come posso evitare qualcosa del genere? Qualche consiglio? Grazie mille!
Quindi non si sta utilizzando EJB (o forse Spring) per il livello di servizio? Quelli hanno strutture integrate per questo. Questo almeno non è responsabilità di un servlet (che sta semplicemente controllando le richieste/risposte HTTP). – BalusC
@BalusC Purtroppo sono molto nuovo all'intera programmazione di Java Servlet. Ho solo un servlet che ottiene la richiesta di aggiungere un lavoro all'utente. Questo Sevlet esegue anche il lavoro se è disponibile uno slot libero. – progNewbie
Il tuo processo non è chiaro. Parli di "script". Che cos'è? Il responsabile del lavoro e il creatore del lavoro si trovano nella stessa app? – davidxxx