1252
Capítulo 28 Servicios Web JAX-WS, Web 2.0 y Mash-ups
1
// Fig. 28.17: Reservacion.java
2
// Servicio Web de reservaciones de una aerolínea.
3
package
com.deitel.jhtp7.cap28.reservacion;
4
5
import
java.sql.Connection;
6
import
java.sql.Statement;
7
import
java.sql.DriverManager;
8
import
java.sql.ResultSet;
9
import
java.sql.SQLException;
10
import
javax.jws.WebService;
11
import
javax.jws.WebMethod;
12
import
javax.jws.WebParam;
13
14
@WebService( name =
"Reservacion"
, serviceName =
"ServicioReservacion”
)
15
public class
Reservacion
16
{
17
private static final
String
URL_BASEDATOS
=
18
"jdbc:derby://localhost:1527/Reservacion"
;
19
private static final
String
USUARIO
=
"jhtp7"
;
20
private static final
String
CONTRASENIA
=
"jhtp7"
;
21
private
Connection conexion;
22
private
Statement instruccion;
23
24
// un Método Web que puede reservar un asiento
25
@WebMethod( operationName =
"reservar"
)
26
public boolean
reserve( @WebParam( name =
"tipoAsiento"
) String tipoAsiento,
27
@WebParam( name =
"tipoClase"
) String tipoClase )
28
{
29
try
30
{
31
conexion = DriverManager.getConnection(
32
URL_BASEDATOS
,
USUARIO
,
CONTRASENIA
);
33
instruccion = conexion.createStatement();
34
ResultSet conjuntoResultados = instruccion.executeQuery(
35
"SELECT \"Numero\" FROM \"Asientos\""
+
36
"WHERE (\"Reservado\" = 0) AND (\"Ubicacion\" = '"
+ tipoAsiento +
37
"') AND (\"Clase\" = '"
+ tipoClase +
"')"
);
38
39
// si el asiento solicitado está disponible, lo reserva
40
if
( conjuntoResultados.next() )
Figura 28.17
| Servicio Web de reservaciones de una aerolínea. (Parte 1 de 2).
Si
conjuntoResultados
no está vacío (es decir, que por lo menos haya un asiento disponible que coincida
con los criterios seleccionados), la condición en la línea 40 es
true
y el servicio Web reserva el primer número de
asiento que coincida. Recuerde que el método
next
de
conjuntoResultados
devuelve
true
si existe una fi la que
no esté vacía, y posiciona el cursor en esa fi la. Para obtener el número de asiento (línea 42), accedemos a la prime-
ra columna de
conjuntoResultado
(es decir,
conjuntoResultados.getInt(1)
; la primera columna en la fi la).
Después, en las líneas 43 y 44 se invoca el método
executeUpdate
de
instruccion
para ejecutar el SQL:
UPDATE
"Asientos"
SET
"Reservado" =
1
WHERE
("Numero" =
número
)
el cual marca el asiento como reservado en la base de datos. El parámetro
número se sustituye con el valor de
numeroAsiento
. El método
reserve
devuelve
true
(línea 45) para indicar que la reservación se realizó con éxito.
Si no hay asientos que coincidan, o si ocurrió una excepción, el método
reserve
devuelve
false
(líneas 48, 53,
58 y 70) para indicar que ningún asiento coincidió con la petición del usuario.
28_MAQ_CAP_28_DEITEL.indd1252
5/8/084:19:41PM