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 1 2 Run Configuracion.java 2 Ejecutar los casos de uso 3 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 Copia Libro <<extends>> 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 CU: Tomar en Préstamo Copia de Libro IU-TPCL GestorPrest GestorLibro GestorBD 1: Introducir Signatura y numSocio() Socio 2: Aceptar () 3: obtenerCopiaLibre(signatura:String) 4: execSQL (c1:String ) GestorSocios C1: SELECT NumCopia FROMCopiaLibroasC WHERE Estado ="Disponible " AND Signatura =%signatura 5: new() ResultadoSQL 6: next() 7: [Resultadono vacío]: get("NumCopia ") 8: destroy() 9: [hay copias libres]: isLímitePr éstamo (numSocio:int) 10: execSQL(c2:String) Realización diseño – CU Tomar en Préstamo Copia Libro (usando SGBD) C2: SELECT * FROM SOCIO WHERE NumSocio=%numSocio AND maxlibros > (SELECTcount(*) FROMCOPIA_LIBRO 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) IUReserva 10b: reservar: () 11b: execSQL(C4:String) C3: UPDATECOPIA_LIBRO SET NumSocio=%numSocio , FechaPrest=HOY, Estado="Prestada" WHERE NumCopia=%numCopia AND Signatura=%signatura C4: INSERT INTO RESERVA( Signatura, NumSocio) VALUES (%signatura,%numSocio) CU: Reservar Libro Tomar Préstamo Copia Libro <<extends>> 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 GestorPrest GestorLibro GestorBD 1: Introducir Signatura y numSocio() Socio 2: Aceptar() 3: obtenerCopiaLibre(signatura:String) 4: execSQL(c1:String) GestorSocios C1: SELECT NumCopia FROM CopiaLibro as C WHERE Estado="Disponible" AND Signatura=%signatura 5: new() ResultadoSQL 6: next() 7 [Resultado no vacío]: get("NumCopia") 8: destroy() 9: [no hay copia libre]: registrarReserva(signatura:String, numSocio:String) C2: INSERT INTO Reserva 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 2 7