Taller1 generación codigopersistencia

50
Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software PRODUCCIÓN DE SOFTWARE VÍCTOR ARAVENA Septiembre 2013 Facultad de Ingeniería, Ciencias y Administración Departamento de Ingeniería de Sistemas Centro de Estudios de Ingeniería de Software Magíster en Ingeniería Informática

Transcript of Taller1 generación codigopersistencia

Page 1: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

PRODUCCIÓN DE SOFTWARE

VÍCTOR ARAVENA

Septiembre 2013

Facultad de Ingeniería, Ciencias y Administración

Departamento de Ingeniería de Sistemas

Centro de Estudios de Ingeniería de Software

Magíster en Ingeniería Informática

Page 2: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

2

OBJETIVOS

Modelar y diseñar sistema de registro transaccional web

utilizando un modelo de construcción basado en capa MVC

Conocer y utilizar los principios de programación dirigido por

Modelo

Utilizar patrones de diseño de software

Modelar y generar un componente de persistencia ORM

Implementar servicio web SOAP utilizando AXIS2

Diseñar un formulario web en Spring 3.0

Page 3: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

3

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación

Sincronizar un Diagrama de Clase ORM

Configurar el motor de datos

Generar el código de persistencia de Datos e integrar el código dentro de un proyecto en Eclipse

Implementar la lógica de negocio y servicio

Publicar los servicios web como protocolo SOAP (Axis2)

Implementar formulario web utilizando el patrón MVC en Spring 3.0

Page 4: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

4

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Construir proyecto Visual Paradigm. Importante NO colocar tilde y ñ.

Page 5: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

5

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Creamos un nuevo diagrama Entity Relationship Diagram ,al cual denominaremos

taller1

Page 6: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

6

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Arrastramos el objeto Entity y lo definiremos como contacto. Posteriormente

seleccionamos el nuevo elemento y hacemos click derecho. En el menú emergente seleccionamos la alternativa Open Specification

Page 7: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

7

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Seleccionamos la etiqueta Columns y posteriormente el botón add.

En el formulario de Column Specification agregaremos un campo con el nombre uid, de tipo integer, con valor length de 10 y seleccionaremos la opción incremente en ID generator. Documentamos y seleccionamos Include in Primary Key

Page 8: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

8

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Repetimos el paso previo agregando dos nuevos atributos: Nombre y Apellido. Los valores

se ilustran en las siguientes imágenes.

Page 9: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

9

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Finalizamos agregando dos nuevos atributos: mail y teléfono. Los valores se ilustran en las

siguientes imágenes.

Page 10: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

10

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Como paso de verificación debería aparecer los siguientes valores en el formulario Entity

Specification y en diagrama gráfico

Page 11: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

11

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación El siguiente paso consiste en que nuestro modelo de E-R pueda generar un diagrama en el

modelo de Clase. Seleccionamos cualquier parte blanca del diagrama, realizamos click derecho y en el menu emergente escogemos la opción Syncronize to Class Diagram. En el nuevo formulario emergente seleccionamos el botón ok.

Page 12: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

12

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Seleccionar el botón OK el formulario que presenta el mapping E-R y Objeto.

Finalmente , en el diagrama de clase resultante ,modificamos el valor de package por defecto a orm

Page 13: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

13

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación El siguiente paso es generar el

esquema de datos en el motor de base de datos. Seleccionamos en cualquier punto del espacio en blanco del diagrama de Clase, realizamos click derecho y seleccionamos la opción ORM->Generate Database.

Page 14: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

14

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Es necesario configurar los datos de conexión al motor de base de datos MySql. Debemos

seleccionar el botón Database Option y en el formulario Database Configuration se debe ingresar los valores de conexión. Previamente debemos crear la base de datos ejemplotaller1.

Page 15: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

15

PROCESO CONSTRUCCIÓN

Modelar un diagrama Entidad Relación Finalmente seleccionamos el botón Ok en el formulario de Database Code Generation.

Verificamos la creación de la tabla.

Page 16: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

16

PROCESO CONSTRUCCIÓN

Generar código de persistencia en lenguaje java Pasos previos

Abrir IDE Eclipse

Verificar que se encuentre instalado Java JDK 1.7 e correctamente configurado en el menú Window->Preferences->Java->Installed JREs

Verificar que tomcat 7.0 se encuentre configurado en el menú Window->Preferences->Server> server runtime environments

Verificar que axis2 se encuentre configurado en el menú Window->Preferences-> Web Services-> Axis 2 Preferences -> Axis2 Runtime

En Eclipse debemos crear Dynamic Web proyect

Page 17: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

17

PROCESO CONSTRUCCIÓN

Generar código de persistencia en lenguaje java Seleccionamos como Dynamic web module version 2.5. En la sección de Configuration

seleccionamos el botón Modify. En el formulario Project Facets seleccionamos la opción de Axis2. Finalmente seleccionamos el botón OK y el botón Finish.

Page 18: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

18

PROCESO CONSTRUCCIÓN

Generar código de persistencia en lenguaje java Volvemos a Visual Paradigm. Ahora se generará el código. Seleccionamos cual punto del espacio

en blanco del diagrama de Clase, realizamos click derecho y seleccionamos la opción ORM->Generate Code. En el formulario Database Code Generation en el campo Output Path colocamos la ruta donde se encuentra el proyecto creado en eclipse. Los valores se muestran en el formulario.

Page 19: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

19

PROCESO CONSTRUCCIÓN

Generar código de persistencia en lenguaje java Seleccionamos el botón Ok y esperamos la confirmación. Finalmente volvemos al IDE Eclipse,

actualizamos el proyecto. Para solucionar los problema de dependencia debemos copiar la carpeta lib dentro de del directorio WebContent->WEB-INF->Lib

Page 20: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

20

PROCESO CONSTRUCCIÓN

Verificación Para verificar el correcto funcionamiento debemos verificar los códigos y creación del siguiente

archivos

Page 21: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

21

PROCESO CONSTRUCCIÓN

Verificación Archivo de Configuración de Hibernate

Page 22: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

22

PROCESO CONSTRUCCIÓN

Verificación El Archivo ormmapping.orm.Contacto.hbm.xml se encuentra la vinculación entre la clase

Contacto y la tabla Contacto.

Page 23: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

23

PROCESO CONSTRUCCIÓN

Crear un Registro Editaremos el Archivo ormsample.CreateTaller1MagisterInformaticaDatase agregando el código

marcado en color azul. Posteriormente ejecutamos como aplicación java.

Page 24: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

24

PROCESO CONSTRUCCIÓN

Mostrar los Registros Editaremos el Archivo ormsample.ListTaller1MagisterInformaticaData agregando el código

marcado en color azul. Posteriormente ejecutamos como aplicación java.

Page 25: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

25

PROCESO CONSTRUCCIÓN

Verificamos la creación de los registros Ejecutamos los anteriores código y verificamos si el registro fue ingresado correctamente.

Page 26: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

26

PROCESO CONSTRUCCIÓN

Creación de 2 servicio Web SOAP Primero vamos a crear una clase dentro

del directorio SRC y contenida en package webservice

Primero hacemos click derecho en la carpeta src, seleccionamos New->Class

En el formulario New Java Class ingresamos como package webservice y la clase la llamamos ServicioContacto

Finalmente seleccionamos el botón Finish. El resultado se muestra en la imagen ubicada debajo de este texto.

Page 27: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

27

PROCESO CONSTRUCCIÓN

Creación de Clase ContactoVO Primero vamos a crear una clase dentro

del directorio SRC y contenida en package domain

Primero hacemos click derecho en la carpeta src, seleccionamos New->Class

En el formulario New Java Class ingresamos como package domain y la clase la llamamos ContactoVO

Finalmente seleccionamos el botón Finish. El resultado se muestra en la

imagen ubicada debajo de este texto.

Page 28: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

28

PROCESO CONSTRUCCIÓN

Creación de Clase ContactoVO

Se debe declarar cuatro atributos y generar los constructores y los métodos get-set mediante el asistente de eclipse package domain;

public class ContactoVO { private String nombre;

private String apellido;

private String mail;

private String telefono;

//generar get and setter

//generar constructor sin campo

// generar constructor con campo

}

Page 29: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

29

PROCESO CONSTRUCCIÓN

Construir método de agregar contacto en la Clase webservice.ServicioContacto

Importar las clases que sugiere el IDE de eclipse.

/**

* Ingreso de Registro

* @param oContactoVO

* @return

*/

public String agregarContacto(domain.ContactoVO oContactoVO){

PersistentTransaction t;

try {

t = orm.Taller1MagisterInformaticaPersistentManager.instance().getSession().beginTransaction();

try {

orm.Contacto lormContacto = orm.ContactoDAO.createContacto();

// Initialize the properties of the persistent object here

lormContacto.setNombre(oContactoVO.getNombre());

lormContacto.setApellido(oContactoVO.getApellido());

lormContacto.setMail(oContactoVO.getMail());

lormContacto.setTelefono(oContactoVO.getTelefono());

System.out.println("Ingreso Exitoso");

orm.ContactoDAO.save(lormContacto);

t.commit();

return "ingreso existoso";

}

catch (Exception e) {

t.rollback();

return "Error-Rollback";

}

} catch (PersistentException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

return "Error persistencia";

}

}

Page 30: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

30

PROCESO CONSTRUCCIÓN

Analicemos el código anterior. Construiremos un método que luego publicaremos como servicio Web. Este método recibe un objeto de la Clase ContactoVO y devolverá un valor string con el resultado de la operación del proceso. Internamente este método agregará un nuevo registro de contacto a la base de datos mediante el uso de la capa de persistencia.

public String agregarContacto(domain.ContactoVO oContactoVO

Primero, iniciaremos la gestión de transacción (PersistentTransaction t ) de datos. Asimismo, gestionamos la primera excepción (try/cath) en caso de no poder iniciar la gestión de transacción y mostraremos el mensaje de error.

PersistentTransaction t;

try{

t = orm.Taller1MagisterInformaticaPersistentManager.instance().getSession().beginTransaction();

}

} catch (PersistentException e1) {

e1.printStackTrace();

return "Error persistencia";

}

Page 31: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

31

PROCESO CONSTRUCCIÓN

El siguiente paso es solicitar a la capa de persistencia DAO (ContactoDAO) que no entregue un objeto no inicializado (clave de identificación y atributos se encuentran sin valor) de la clase Contacto. Finalizamos gestionando la excepción, en caso de obtener un error.

try {

orm.Contacto lormContacto = orm.ContactoDAO.createContacto();

….

}

catch (Exception e) {

t.rollback();

return "Error-Rollback";

}

Posteriormente, por cada uno de atributos obligatorios de la Clase orm.Contacto , ingresaremos su respectivo valor utilizando los métodos set

lormContacto.setNombre(oContactoVO.getNombre());

lormContacto.setApellido(oContactoVO.getApellido());

lormContacto.setMail(oContactoVO.getMail());

lormContacto.setTelefono(oContactoVO.getTelefono());

System.out.println("Ingreso Exitoso");

Page 32: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

32

PROCESO CONSTRUCCIÓN

Finalmente entregamos el objeto de la clase orm.Conctato a la capa de persistencia (orm.ContactoDAO.save() ) para que sea grabado en el motor de base de datos. La capa de persistencia se encargará de generar el sql respectivo.

orm.ContactoDAO.save(lormContacto);

Finalmente finalizamos la transacción y devolvemos el mensaje de éxito

t.commit();

return "ingreso existoso";

Page 33: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

33

PROCESO CONSTRUCCIÓN

Construir método de mostrar contacto en la Clase webservice.ServicioContacto

Importar las clases que sugiere el IDE de eclipse. /**

* Retorna un listado de objeto de la clase ContactoVO

* @return List<domain.ContactoVO>

*/

public List<domain.ContactoVO> mostrarContacto(){

List<domain.ContactoVO> contactos = new ArrayList<domain.ContactoVO>();

orm.Contacto[] ormContactos;

try {

ormContactos = orm.ContactoDAO.listContactoByQuery(null, null);

int length = ormContactos.length;

for (int i = 0; i < length; i++) {

System.out.println(ormContactos[i]);

contactos.add(new domain.ContactoVO(ormContactos[i].getNombre(),

ormContactos[i].getApellido(),

ormContactos[i].getMail(),

ormContactos[i].getTelefono()));

}

return contactos;

} catch (PersistentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}

Page 34: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

34

PROCESO CONSTRUCCIÓN

Creación de Servicio Web SOAP (UDDI, WSDL, SOAP)

Click derecho sobre la clase webservice.ServicioContacto

Seleccionar la opción de Webservice->Create Webservice

Page 35: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

35

PROCESO CONSTRUCCIÓN

Creación de Servicio Web SOAP (UDDI, WSDL, SOAP) Seleccionamos la opción webservice runtime y seleccionamos la opción Axis2

Seleccionamos el botón NEXT en el formulario Web Service

Page 36: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

36

PROCESO CONSTRUCCIÓN

Creación de Servicio Web SOAP (UDDI, WSDL, SOAP) Seleccionamos la opción generate a

default services.xml file

Finalmente seleccionamos el botón finish

Page 37: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

37

PROCESO CONSTRUCCIÓN

Verificar Servicio Web SOAP (UDDI, WSDL, SOAP) Realizamos click derecho en el nombre del proyecto.

Seleccionamos Run As -> Run on Server y en formulario Run On Server seleccionamos Finish

Page 38: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

38

PROCESO CONSTRUCCIÓN

Verificar Servicio Web SOAP (UDDI, WSDL, SOAP) Realizamos click derecho en el nombre del proyecto.

Seleccionamos Run As -> Run on Server y en formulario Run On Server seleccionamos Finish

Page 39: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

39

PROCESO CONSTRUCCIÓN

Verificar Servicio Web SOAP (UDDI, WSDL, SOAP) Seleccionamos el menu Service

Page 40: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

40

PROCESO CONSTRUCCIÓN

Verificar Servicio Web SOAP (UDDI, WSDL, SOAP) Seleccionamos el menu Service

Page 41: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

41

PROCESO CONSTRUCCIÓN

Verificar Servicio Web SOAP (UDDI, WSDL, SOAP) Seleccionamos el ServicioContacto y podemos ver el xml WSDL

http://localhost:8080/WebServiceTaller1/services/ServicioContacto?wsdl

Page 42: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

42

PROCESO CONSTRUCCIÓN

Crearemos un Cliente Java Crearemos un cliente en java seleccionando la opción

New->Java -> Dynamic Web Project

Page 43: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

43

PROCESO CONSTRUCCIÓN

Crearemos un Cliente Java Realizamos click derecho en la carpeta src, seleccionamos la opción New->Other

Buscamos Web Service Client

Page 44: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

44

PROCESO CONSTRUCCIÓN

Crearemos un Cliente Java Copiamos la URL de WS

http://localhost:8080/WebServiceTaller1/services/ServicioContacto?wsdl

Dentro de la sección de Configuration->Web Service Runtime se debe seleccionar Apache Axis2

Seleccionamos el botón Finish

Page 45: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

45

PROCESO CONSTRUCCIÓN

Crearemos un Cliente Java con método void Main dentro del package webservice

Page 46: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

46

PROCESO CONSTRUCCIÓN

Nos conectaremos al Cliente del WS package webservice;

import java.rmi.RemoteException;

import org.apache.axis2.AxisFault;

import webservice.ServicioContactoStub.AgregarContacto;

import webservice.ServicioContactoStub.AgregarContactoResponse;

import webservice.ServicioContactoStub.ContactoVO;

import webservice.ServicioContactoStub.MostrarContacto;

import webservice.ServicioContactoStub.MostrarContactoResponse;

public class Cliente {

public static void main(String[] args) throws AxisFault, RemoteException {

// TODO Auto-generated method stub

ServicioContactoStub oStub = new ServicioContactoStub();

// AGREGA

ContactoVO oContactoVO = new ContactoVO();

oContactoVO.setNombre("Monica");

oContactoVO.setApellido("Pereira");

oContactoVO.setMail("[email protected]");

oContactoVO.setTelefono("11111111");

AgregarContacto oAgregarContacto = new AgregarContacto();

oAgregarContacto.setOContactoVO(oContactoVO);

AgregarContactoResponse objResponse = oStub.agregarContacto(oAgregarContacto);

System.out.println("Resultado "+objResponse.get_return());

//Muestra Contacto

MostrarContacto oMostrarContacto = new MostrarContacto();

MostrarContactoResponse objResponde = oStub.mostrarContacto(oMostrarContacto);

ContactoVO[] contactos= objResponde.get_return();

int length = contactos.length;

for (int i = 0; i < length; i++) {

System.out.println(contactos[i]);

System.out.println("Nombre "+contactos[i].getNombre());

System.out.println("Apellido "+contactos[i].getApellido());

System.out.println("Mail "+contactos[i].getMail());

System.out.println("Telefono "+contactos[i].getTelefono());

}

}

}

Page 47: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

47

PROCESO CONSTRUCCIÓN

Verificaremos el funcionamiento ejecutando el código como una aplicación java

Page 48: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

48

PROCESO CONSTRUCCIÓN

Implementar formulario web utilizando el patrón MVC en Spring 3.0 Descargar del campus virtual el archivo war SpringMVCMagister.war

Importar a eclipse como proyecto

Revisar el archivo web.xml

Revisar el archivo spring-servlet.xml

Verificar archivos jsp

Verificar clases en spring3.controller y spring3.form

Revisar patrón idiomático

Revisar conector a Servicio Web

Verificar Funcionamiento

Page 49: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

49

PROCESO CONSTRUCCIÓN

Trabajo

– agregar validaciones en el servicio de agregar contacto.

– permitir filtrar búsqueda en el servicio de mostrar contacto

– Crear el servicio para eliminar contacto

– Crear el servicio para modificar contacto

– probar software servicio web mediante la aplicación soapui

– Seleccionar 4 servicios web http://www.webservicex.net/ws/default.aspx y construir su cliente en java

– agregar tres atributos a registro de contacto y incluir en la vistas

– agregar control de idioma a los jsp faltantes y botonera

Page 50: Taller1 generación codigopersistencia

Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software

PRODUCCIÓN DE SOFTWARE

VÍCTOR ARAVENA

Septiembre 2013

Facultad de Ingeniería, Ciencias y Administración

Departamento de Ingeniería de Sistemas

Centro de Estudios de Ingeniería de Software

Magíster en Ingeniería Informática