4. Proposer des solutions
Pessimistic Locking
On met un verrou exclusif lors de la lecture de l’évènement => les autres transactions doivent attendre qu’elles soient en lecture ou écriture
Event event = em.find(Event.class, eventId, LockModeType.PESSIMISTIC_WRITE);Optimistic Locking
Complément
- Nécessite
@Versionet de mettre à jour l’entitéEvent - => pour ce faire on va rajouter une colonne pour incrémenter le nombre de places réservées. En effet pour que la version soit incrémentée il faut avoir une modification de l’entité
Si on ajoute uniquement, alors on peut toujours avoir un accès concurrent (le test échoue)
public void reserveOne() {
if (reserved >= capacity) {
throw new IllegalStateException("Event is full");
}
reserved++;
}Il faut donc impérativement rajouter une version dans notre entité
/**
* Verrou optimiste
*/
@Version
private long version;