Está en la página 1de 7

Biblioteca

Implementación en 3 niveles de 2 CU:


Reservar Libro
Tomar en Préstamo Copia de Libro

“Instalar” la aplicación
• Obtener este fichero:
http://siul02.si.ehu.es/~alfredo/Biblio3Niv.zip

• Descomprimirlo en D\
– Los ficheros aparecerán en D:\ISO\
• Ejecutar JDEVELOPER 9.i (jdevw)
• Abrir el “workspace” D:\ISO\biblioteca.jws
• Crear la fuente de datos ODBC
– Nombre: BDBiblioteca
– Escoger la BD: D:\ISO\biblioteca\BDBiblioteca.mdb

1
Arquitectura lógica en 3 niveles

Ejecutar los 3 niveles en una sola


máquina

Run Configuracion.java

2
Ejecutar los casos de uso

Hay 25 socios, 10 libros y 3 copias por libro.


Comprobadlo en la BD BDBiblioteca.mdb

CU: Tomar Préstamo Copia


Libro
Tomar Préstamo <<extends>>
Copia Libro Reservar Libro
- No disponible

Socio

Flujo de eventos:
• El socio proporciona su número de socio y la
signatura del libro que quiere tomar en préstamo
• El sistema comprueba si existe alguna copia no
prestada de dicho libro
• Si no hay copias disponibles:
EXTENDS RESERVAR LIBRO
• Se comprueba que el socio no se pasa de su número
máximo de libros en préstamo
• Se registra el nuevo préstamo con la fecha actual

3
Realización
CU: Tomar en Préstamo Copia de Libro

diseño – CU
IU-TPCL GestorPrest GestorLibro GestorBD GestorSocios

Tomar en
1: Introducir Signatura y numSocio() C1:
Socio SELECT NumCopia
2: Aceptar () FROMCopiaLibroasC

Préstamo Copia
3: obtenerCopiaLibre(signatura:String) WHERE Estado ="Disponible "
4: execSQL (c1:String ) AND Signatura =%signatura

Libro (usando
5: new()
ResultadoSQL
6: next()

7: [Resultadono vacío]: get("NumCopia ")


8: destroy() C2:
SGBD)
9: [hay copias libres]: isLímitePr éstamo (numSocio:int) SELECT * FROM SOCIO
WHERE NumSocio=%numSocio
AND maxlibros >
(SELECTcount(*)
FROMCOPIA_LIBRO
10: execSQL(c2:String)
WHERE NumSocio=%numSocio)
11: new ()
ResultadoSQL

12: next()

14: [L ímite no alcanzado]: registrarPrestamo (numSocio:String, signatura:String, numCopia:String, HOY:Date) 13: destroy ()

15: execSQL(C3:String)

14b: [L ímite alcanzado]: new()


IUError

15: aceptar ()

9b: [no hay copias libres]: new(signatura:String, numSocio:int)


C3:
IUReserva UPDATECOPIA_LIBRO
10b: reservar: () SET NumSocio=%numSocio ,
FechaPrest=HOY,
Estado="Prestada"
11b: execSQL(C4:String) WHERE NumCopia=%numCopia
AND Signatura=%signatura

C4:
INSERT INTO
RESERVA( Signatura, NumSocio)
VALUES (%signatura,%numSocio)

CU: Reservar Libro


Tomar Préstamo <<extends>>
Copia Libro Reservar Libro
- No disponible

Socio

Flujo de eventos:
• El socio proporciona su número de socio y la
signatura del libro que quiere reservar
• El sistema comprueba que el libro NO está
disponible
• El sistema almacena que el socio desea reservar
dicho libro
Flujo de eventos alternativo:
• Si el libro está disponible entonces no se reserva

4
Realización-CU diseño “Reservar Libro” (SGBD)
CU: Reservar Libro

IU-TPCL GestorLibro GestorBD GestorSocios


GestorPrest

1: Introducir Signatura y numSocio() C1:


Socio SELECT NumCopia
2: Aceptar()
FROM CopiaLibro as C
3: obtenerCopiaLibre(signatura:String)
WHERE Estado="Disponible"
AND Signatura=%signatura
4: execSQL(c1:String)

5: new()
ResultadoSQL
6: next()

7 [Resultado no vacío]: get("NumCopia")

8: destroy()

C2:
INSERT INTO Reserva
9: [no hay copia libre]: registrarReserva(signatura:String, numSocio:String)
VALUES (%Signatura,%numSocio)
10: execSQL(C2:String)

9: [hay copia libre]: new()


IUError

10: aceptar()

Arquitectura física en 2 niveles:


cliente gordo/servidor flaco

5
Arquitectura física en 2 niveles:
cliente gordo/servidor flaco
• La BD se pondrá en este ordenador:
– sipiXX
• Encontrar dicha máquina
– Hacer click en el botón de la derecha
– Hacer “conectar a unidad de red” y asignar un
nombre de unidad
• Redefinir la fuente de datos ODBC
– Seleccionar el fichero biblioteca.mdb

Arquitectura física en 3 niveles

$XUNH]SHQ0 DLO
D 1HJR]LRDUHQ
/RJLND0 DLOD

- $ 9 $ - ' %&

-$9$ 5 0 , ' D WXHQ0 DLO


D

-$9$ 5 0 ,

-$9$ - ' %&

$XUNH]SHQ0 DLOD 1HJR]LRDUHQ


/RJLND0 DLOD

6
Ejecutar la lógica del negocio de
otra máquina
1:
Poner
nombre
IP