Lab 02 - Modelo Dominio - II
Lab 02 - Modelo Dominio - II
LABORATORIO N 02
Alumno(s)
Nota
Nro. DD-106
Pgina 1 de 10
II.- SEGURIDAD:
Advertencia: En este laboratorio est prohibida la manipulacin del hardware, conexiones elctricas o de red; as como la ingestin de alimentos o bebidas.
V.- RECURSOS:
En este laboratorio cada alumno trabar con un equipo con Windows XP. Software NetBeans Base de datos Oracle, MySQL, PostgreSQL o SQL Server (elija un producto) Software de creacin de bases de Datos Servidor de aplicaciones Java EE (GlassFish 3.0)
VII.- PROCEDIMIENTO:
CREACIN DE LA BASE DE DATOS 1. A continuacin se muestra el script para crear las tablas de la base de datos en Oracle en un esquema denominado delifood:
CREATE TABLESPACE TS_DELIFOOD LOGGING DATAFILE 'delifood.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; CREATE USER "DELIFOOD" PROFILE "DEFAULT" IDENTIFIED BY "XPTecsup2" DEFAULT TABLESPACE "TS_DELIFOOD" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "TS_DELIFOOD" ; GRANT RESOURCE, CONNECT, DBA TO DELIFOOD; CREATE TABLE delifood.customer ( id NUMBER(5) NOT NULL , name VARCHAR2(45) NOT NULL , email VARCHAR2(45) NOT NULL , phone VARCHAR2(45) NOT NULL , address VARCHAR2(45) NOT NULL , city_region VARCHAR2(2) NOT NULL , cc_number VARCHAR2(19) NOT NULL , CONSTRAINT PK_CUSTOMER PRIMARY KEY (id) ); CREATE TABLE delifood.category ( id NUMBER(2) NOT NULL , name VARCHAR2(45) NOT NULL , CONSTRAINT PK_CATEGORY PRIMARY KEY (id) );
Nro. DD-106
Pgina 2 de 10
CREATE TABLE delifood.customer_order ( id NUMBER(8) NOT NULL, amount NUMBER(6,2) NOT NULL , date_created DATE NOT NULL , confirmation_number NUMBER(8) NOT NULL , customer_id NUMBER(5) NOT NULL , CONSTRAINT PK_CUSTOMER_ORDER PRIMARY KEY (id) , CONSTRAINT fk_customer_order_customer FOREIGN KEY (customer_id ) REFERENCES delifood.customer (id ) ); CREATE TABLE delifood.ordered_product ( customer_order_id NUMBER(8) NOT NULL , product_id NUMBER(5) NOT NULL , quantity NUMBER(4) DEFAULT 1 NOT NULL, CONSTRAINT PK_ORD_PRD_CUST_ORD PRIMARY KEY (customer_order_id, product_id) , CONSTRAINT fk_ord_prd_cust_ord FOREIGN KEY (customer_order_id) REFERENCES delifood.customer_order (id ), CONSTRAINT fk_ord_prd_prd FOREIGN KEY (product_id ) REFERENCES delifood.product (id ) ); create or replace trigger delifood.TBI_CATEGORY before insert on delifood.category for each row declare xcant number; begin select count(*) into xcant from delifood.category; if xcant <= 0 then :new.id := 1; else select max(id) + 1 into xcant from delifood.category; :new.id := xcant; end if; end; create or replace trigger delifood.TBI_PRODUCT before insert on delifood.product for each row declare xcant number; begin select count(*) into xcant from delifood.product; if xcant <= 0 then :new.id := 1; else select max(id) + 1 into xcant from delifood.product; :new.id := xcant; end if; end; create or replace trigger delifood.TBI_CUSTOMER before insert on delifood.customer for each row declare xcant number; begin select count(*) into xcant from delifood.customer; if xcant <= 0 then :new.id := 1; else select max(id) + 1 into xcant from delifood.customer; :new.id := xcant; end if; end; create or replace trigger delifood.TBI_CUSTOMER_ORDER before insert on delifood.customer_order for each row declare xcant number; begin
Nro. DD-106
Pgina 3 de 10
2.
Registrar el Servidor Oracle en NetBeans A travs del panel Services en Netbeans podemos conectar a cualquier servidor de base de datos, iniciar el servidor, detenerlo, ver las instancias de la base de datos y los datos que ellas contienen as como tambin ejecutar una herramienta de administracin externa de la base de datos. 2.1. Inicio del programa NetBeans Inicie el programa NetBeans Seleccione la ficha Services 2.2. Registro del driver de la base de datos Oracle Click derecho en el nodo Drivers New Driver Click en el botn Add Ubique en su equipo el driver ojdbc6.jar Click en Abrir Click en OK Nota: Solicite al instructor el archivo ojdbc6.jar
Verifique que debajo del nodo Drivers, se muestre el nuevo driver que acaba de agregar
2.3. Crear una nueva conexin a la base de datos Oracle Click derecho sobre el nuevo Driver Oracle XE Connect Using Complete los datos como se indica en la figura de la siguiente pgina. Nota: Modifique el valor de la direccin IP con la direccin IP asignado al equipo donde se ha instalado el servidor de base de datos Oracle Para verificar que los datos de conexin son correctos presione el botn Test Connection, la prueba debe ser satisfactoria:
Nro. DD-106
Pgina 4 de 10
Click en el botn Next. En la ventana Seleccin de esquema, elija el esquema delifood (nuestra base de datos) Click en el botn Finish Verifique que en el nodo databases se ha agregado un nuevo nodo para la nueva conexin a nuestra base de datos:
Para ver los datos de la tabla CATEGORY. Click derecho en la tabla CATEGORY View Data
De esta manera hemos verificando que tenemos acceso a nuestra base de datos !
Nro. DD-106
Pgina 5 de 10
En esta seccin implementaremos las tareas requeridas para conectar nuestra aplicacin web delifood creada en la gua de laboratorio anterior con la base de datos. Para ello se realizarn las siguientes actividades: Adicionar algunos registros de prueba a la base de datos. Empleando la herramienta NetBeans SQL Editor. Configurar una fuente de datos Datasource y un connection pool en el servidor GlassFish Implementaremos un documento JSP de prueba para verificar que nuestra aplicacin puede acceder a la informacin de la base de datos a travs del DataSource y el Pool Connection anterior. 3.1. Adicionar registros a la tabla PRODUCTS Desde la conexin creada a nuestra base de datos en NetBeans. Click derecho a la tabla PRODUCT Execute Command. Copie los registros indicados en la ventana SQL Command generada y ejecute dichos comandos con la herramienta RUN SQL
INSERT INTO delifood.product (name, price, ('milk', 1.70, 'semi skimmed (1L)', 1); INSERT INTO delifood.product (name, price, ('cheese', 2.39, 'mild cheddar (330g)', INSERT INTO delifood.product (name, price, ('butter', 1.09, 'unsalted (250g)', 1); INSERT INTO delifood.product (name, price, ('free range eggs', 1.76, 'medium-sized description, category_id) VALUES description, category_id) VALUES 1); description, category_id) VALUES description, category_id) VALUES (6 eggs)', 1);
INSERT INTO delifood.product (name, price, description, category_id) VALUES ('organic meat patties', 2.29, 'rolled in fresh herbs<br>2 patties (250g)', 2); INSERT INTO delifood.product (name, price, description, category_id) VALUES ('parma ham', 3.49, 'matured, organic (70g)', 2); INSERT INTO delifood.product (name, price, description, category_id) VALUES ('chicken leg', 2.59, 'free range (250g)', 2); INSERT INTO delifood.product (name, price, description, category_id) VALUES ('sausages', 3.55, 'reduced fat, pork<br>3 sausages (350g)', 2); INSERT INTO delifood.product (name, price, description, category_id) ('sunflower seed loaf', 1.89, '600g', 3); INSERT INTO delifood.product (name, price, description, category_id) ('sesame seed bagel', 1.19, '4 bagels', 3); INSERT INTO delifood.product (name, price, description, category_id) ('pumpkin seed bun', 1.15, '4 buns', 3); INSERT INTO delifood.product (name, price, description, category_id) ('chocolate cookies', 2.39, 'contain peanuts<br>(3 cookies)', 3); INSERT INTO delifood.product (name, price, description, ('corn on the cob', 1.59, '2 pieces', 4); INSERT INTO delifood.product (name, price, description, ('red currants', 2.49, '150g', 4); INSERT INTO delifood.product (name, price, description, ('broccoli', 1.29, '500g', 4); INSERT INTO delifood.product (name, price, description, ('seedless watermelon', 1.49, '250g', 4); VALUES VALUES VALUES VALUES
Nro. DD-106
Pgina 6 de 10
En esta seccin buscamos establecer una conexin entre el servidor Oracle y nuestra aplicacin web delifood a travs del servidor GlassFish el cual ya se encuentra instalado en nuestro equipo. Aplicacin Web delifood Servidor GlassFish
Oracle
Esta comunicacin se realizar via JDBC. Empezaremos creando un connection pool en el servidor GlassFish. Este componente va a requerir el driver JDBC especfico de la base de datos a la que vamos a conectarnos. Un pool de conexiones es un grupo de conexiones reusable a una base datos. Sabemos que el proceso de abrir una conexin a una base de datos requiere mucho tiempo y esto genera un problema de rendimiento en una aplicacin empresarial. Un pool de conexiones nos permite mantener un conjunto de conexiones abiertas y disponibles. Cuando una aplicacin solicita una conexin, se le asigna una de estas conexiones disponibles del pool. Cuando la aplicacin cierra la conexin, esta conexin es devuelta al pool pero sin ser cerrada. Un pool de conexiones utiliza un driver JDBC para crear las conexiones fsicas a la base de datos. Un Datasource es un mecanismo que le permite a las aplicaciones conectarse a una base de datos a travs de un pool de conexiones, para ello las aplicaciones deben localizar un datasource utilizando la interface JNDI (Java Naming and Directory Interface) y una vez se haya encontrado el objeto pueden solicitar una conexin. Por lo tanto un Datasource tiene asociado un connection pool para poder suministrar una conexin de una base de datos a una aplicacin. El connection pool y el Datasource deben ser creados en el servidor de aplicaciones (en nuestro caso es GlassFish). Netbeans provee herramientas que facilitan esta tarea. 4.1. Creacin del Connection Pool y el Datasource en nuestra aplicacin Web 4.1.1. Desde el panel Projects. Click derecho en el nombre de la aplicacin Web delifood New Other 4.1.2. En la ventana New File elija: Categories: GlassFish File types: JDBC Resource Click Next 4.1.3. En la ventana New JDBC Resource en el panel General Attributes, elija la opcin Create New JDBC Connection Pool, ingrese en la parte inferior de la ventana los siguientes datos: JNDI Name: jdbc/delifood Nota: Por convencin, el nombre JNDI para un recurso JDBC debe empezar con 'jdbc/' Object Type: user Enabled: true Click Next 4.1.4. En la ventana Additional Properties Click Next 4.1.5. En la ventana Choose Database Connection ingrese los siguientes datos: JDBC Connection Pool Name: delifoodPool Seleccione la opcin: Extract from Existing Connection. Adems seleccione de la lista desplegable la conexin a la base de datos Oracle que hemos creado previamente a nuestro esquema DELIFOOD Click Next 4.1.6. En la ventana Add Connection Pool Properties, ingrese los siguientes datos: Datasource Classname: oracle.jdbc.pool.OracleDataSource Resource Type: javax.sql.ConnectionPoolDatasource Description: Permite conectar a la base de datos Oracle al esquema DELIFOOD Verifique que NetBeans ha cargado correctamente los valores de URL, User, Password Click Next 4.1.7. En la ventana Specify Optional Properties for Connection Pool Click Finish 4.1.8. El asistente debe haber creado en el nodo del proyecto: Server Resources el archivo denominado: glassfish-resources.xml con el siguiente contenido:
Nro. DD-106
Pgina 7 de 10
4.1.9. Procederemos a registrar el Connection Pool y el Datasource en el servidor GlassFish. Click derecho en el proyecto delifood Deploy Seleccione el panel Services. Expanda el nodo Servers Expanda el nodo GlassFish Server JDBC JDBC Resources, verifique que exista el Datasource: jdbc/delifood Expanda el nodo GlassFish Server JDBC Connection Pools, verifique que exista el connection pool: delifoodPool Nota: En caso se tenga que modificar la direccin IP donde esta la base de datos, o se desea modificar los datos del usuario con el que se va a conectar al Oracle, puede presionar click derecho sobre el Connection Pool delifoodPool y elegir la opcin Properties, la cual nos dar acceso a los detalles de conexin y se pueden cambiar en cualquier momento. 5. Prueba del Connection Pool y el Datasource Para poder probar el Connection Pool y el Datasource, realizaremos las siguientes tareas: Asegrese que el servidor GlassFish est en ejecucin Asegrese que tiene acceso a la base de datos. Desde la consola de administracin GlassFish ejecutaremos el comando ping para probar el connection pool Adicionaremos en nuestro proyecto una referencia al datasource en el archivo de configuracin web.xml Crearemos un documento JSP de prueba que visualizar informacin de la base de datos en una tabla en una pgina web. 5.1. Prueba del connection pool delifood Acceder a la consola de administracin de GlassFish En el panel Services. Expanda el nodo Servers Click derecho sobre GlassFish Elija View Domain Admin Console El usuario/clave por defecto es: admin/adminadmin En el panel izquierdo de la interfaz web de la consola de administracin de GlassFish expanda el nodo: Resources JDBC Connection Pools Click en el connection pool denominado: delifoodPool En el panel derecho click en el botn ping ubicado en la parte superior. Verifique que el resultado de la prueba del Connection pool sea satisfactoria.
5.2. Adicionar a la aplicacin web delifood una referencia al datasource creado Seleccione el panel Projects, click derecho en el nombre del proyecto delifood New Other En la ventana Choose File Type elija:
Nro. DD-106
Pgina 8 de 10
o Categories: Web o File types: Standard deployment descriptor (web.xml) o Click Next En la ventana Name and Location. Click Finish Expanda el nodo del proyecto delifood Configuration Files Doble click sobre el archivo web.xml Del panel derecho. Elija la vista References. Expanda la seccin Resource References Click en Add Ingrese los siguientes datos: o Resource Name: jdbc/delifood o Resource Type: javax.sql.DataSource o Authentication: Container o Sharing Scope: Shareable o Description: Permite conectar al esquema DELIFOOD en Oracle o Click en el botn OK
5.3. Documento JSP para probar el Datasource Crear un nuevo documento JSP: o Click en el nodo delifood Web Pages New Other Categories: Web File Types: JSP Click Next o En el panel Name and Location indique: File Name: testDatasource Folder: test Click Finish o Verifique que dentro de Web Pages se ha creado una carpeta de nombre test y dentro de ella se ha creado nuestro nuevo documento JSP Habilitar JSTL en el proyecto o Click derecho en el nodo Libraries del proyecto delifood Add library o En la ventana Available Libraries elija JSTL 1.1 Click en Add Library Editar el documento JSP o Abrir el documento JSP creado en el paso anterior o Modifique el contenido como se muestra a continuacin
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <sql:query var="result" dataSource="jdbc/delifood"> SELECT * FROM delifood.category, delifood.product WHERE category.id = product.category_id </sql:query> <table border="1"> <!-- column headers --> <tr> <c:forEach var="columnName" items="${result.columnNames}"> <th><c:out value="${columnName}"/></th> </c:forEach> </tr> <!-- column data --> <c:forEach var="row" items="${result.rowsByIndex}"> <tr> <c:forEach var="column" items="${row}"> <td><c:out value="${column}"/></td> </c:forEach> </tr> </c:forEach> </table>
Nro. DD-106
Pgina 9 de 10
Ejecute el documento JSP o Click derecho en el proyecto delifood Clean and Build o Click derecho en el proyecto Deploy o Click derecho en el archivo testDatasource.jsp Run File Visualizacin de datos. Verifique que se muestren los datos de productos en el navegador Web:
VI.- TAREA:
1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. Elaborar un script para implementar la base de datos de su proyecto. Elaborar un script para adicionar registros de prueba a las principales tablas de su base de datos. Crear la base de datos. En el nodo DataBases en NetBeans crear una conexin Oracle a su base de datos Crear un Connection pool en GlassFish para acceder a su base de datos Crear un Datasource en GlassFish Crear uno o ms documentos JSP que permitan visualizar el contenido de una o ms tablas de su base de datos en el navegador Web. Se debe emplear las libreras JSTL y el recurso Datasource creado. 1.8. Presentar el avance la siguiente sesin de clases
Nro. DD-106
Pgina 10 de 10
OBSERVACIONES:
__________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________
CONCLUSIONES:
__________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________ __________________________________________________________________________________________