Taller1 generación codigopersistencia
-
Upload
victor-aravena -
Category
Documents
-
view
189 -
download
1
Transcript of 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
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
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
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 ñ.
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
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
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
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.
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.
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
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.
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
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.
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.
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.
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
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.
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.
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
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
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
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.
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.
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.
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.
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.
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.
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
}
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";
}
}
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";
}
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");
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";
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;
}
}
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
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
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
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
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
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
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
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
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
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
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
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
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());
}
}
}
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
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
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
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