El Desafío
Ride-sharing distribuido. Reto: consistencia de datos y reservas concurrentes sin errores.
Stack Tecnológico
Java01
JAX-WS02
ObjectDB03
Swing04
Transacciones Atómicas & ObjectDB
Uso de JAX-WS y bloqueos pesimistas (PESSIMISTIC_WRITE) para evitar duplicados en asientos.
Concurrencia Thread-Safe
Gestión de monitores de Java para sincronizar peticiones de usuarios simultáneos.
RideService.java — Atomic Lock
// RideService.java — JAX-WS Atomic Seat Lock
@WebMethod
public synchronized BookingResult reserveSeat(String rideId, String userId, int seat) {
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Ride ride = em.find(Ride.class, rideId, LockModeType.PESSIMISTIC_WRITE);
if (ride.getSeats().get(seat).isOccupied()) {
tx.rollback();
return BookingResult.error("Taken");
}
ride.occupySeat(seat, userId);
em.merge(ride);
tx.commit();
return BookingResult.success(rideId, seat);
} catch (Exception e) { if (tx.isActive()) tx.rollback(); throw new WebServiceException(e); }
}Conclusión del Proyecto
Consistencia Total
Sistema funcional testeado bajo carga con 0 condiciones de carrera.