Saltar al contenido principal
DISTRIBUTED / JAX-WS
PROJECT // 03

Rides24

Sistema Distribuido Java

Java
JAX-WS
ObjectDB

El Desafío

Ride-sharing distribuido. Reto: consistencia de datos y reservas concurrentes sin errores.

Stack Tecnológico

Java
01
JAX-WS
02
ObjectDB
03
Swing
04

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.