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