1. 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
PRODUCCIÓN DE SOFTWARE
VÍCTOR ARAVENA
Septiembre 2013
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
2
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
3
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 ñ.
4
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
5
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
6
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
7
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.
8
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.
9
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
10
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.
11
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
12
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.
13
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.
14
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.
15
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
16
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.
17
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.
18
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
19
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
20
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
21
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.
22
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.
23
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.
24
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.
25
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.
26
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.
27
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
}
28
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().getSess
ion().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";
}
}
29
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";
30
}
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");
31
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";
32
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;
}
}
33
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
34
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
35
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
36
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
37
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
38
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
39
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
40
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
41
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
42
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
43
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/WebService
Taller1/services/ServicioContacto
?wsdl
Dentro de la sección de
Configuration->Web Service
Runtime se debe seleccionar
Apache Axis2
Seleccionamos el botón Finish
44
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
45
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("correo@gmail.com");
oContactoVO.setTelefono("11111111");
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());
}
}
}
AgregarContacto oAgregarContacto = new AgregarContacto();
46
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
47
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
48
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
49
Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software
50. 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
PRODUCCIÓN DE SOFTWARE
VÍCTOR ARAVENA
Septiembre 2013
Magíster en Ingeniería Informática-Especialidad en Ingeniería de Software