Sei sulla pagina 1di 17

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN

FACULTAD DE INGENIERIA DE PRODUCCION Y SERVICIOS


ESCUELA PROFESIONAL INGENIERÍA DE SISTEMAS

ARQUITECTURA
V1.0
________________________________________________________________________

PROYECTO: MiniERP(Mini Enterprise Resource Planning)


EQUIPO:

Arequipa, 2017

CONTROL DE LA DOCUMENTACIÓN
MiniERP Arquitectura
V2.0

________________________________________________________________________

CONTROL DE LA CONFIGURACIÓN

Título: Arquitectura V2.0

Referencia: Arquitectura V2.0

Autores: Grupo de Arquitectura

Fecha: 14 de Junio de 2017

HISTÓRICO DE VERSIONES

Versión Fecha Estado Responsable Nombre de archivo

1.0 19/06/17 Finalizado Grupo de Arquitectura Arquitectura Final

2.0 11/07/17 Finalizado Prototipo de Arquitectura Arquitectura V2.0

HISTÓRICO DE CAMBIOS

Versión Fecha Cambios

1.0 18/06/17 Modificación de contenido

2.0 11/07/17 Prototipo de Arquitectura

CONTENIDO

_______________________________________________________________Página 1 de 17
MiniERP Arquitectura
V2.0

1. Introducción 2

2. Herramientas Tecnológicas 2

3. Arquitectura Propuesta 5

4. Prototipo 6

5. Bibliografía 16

1. Introducción

El presente documento nos mostrará la arquitectura propuesta para el sistema MiniERP


haciendo uso de diferentes vistas para así mostrar las características correspondientes
al sistema.

2. Herramientas Tecnológicas

_______________________________________________________________Página 2 de 17
MiniERP Arquitectura
V2.0

Desarrollaremos capa por capa de la arquitectura v2.0, con perspectiva a nuevas


tecnologías y nuevos componentes.

Capa de Persistencia:

Hibernate + JPA (Java Persistence)

Hibernate: Como todas las herramientas de su tipo, Hibernate busca solucionar el


problema de la diferencia entre los dos modelos de datos coexistentes en una aplicación:
el usado en la memoria de la computadora (orientación a objetos) y el usado en las bases
de datos (modelo relacional). Para lograr esto permite al desarrollador detallar cómo es
su modelo de datos, qué relaciones existen y qué forma tienen. Con esta información
Hibernate le permite a la aplicación manipular los datos en la base de datos operando
sobre objetos, con todas las características de la POO (Programación Orientada a
Objetos). Hibernate convertirá los datos entre los tipos utilizados por Java y los definidos
por SQL. Hibernate genera las sentencias SQL y libera al desarrollador del manejo
manual de los datos que resultan de la ejecución de dichas sentencias, manteniendo la
portabilidad entre todos los motores de bases de datos con un ligero incremento en el
tiempo de ejecución.
Hibernate está diseñado para ser flexible en cuanto al esquema de tablas utilizado, para
poder adaptarse a su uso sobre una base de datos ya existente. También tiene la
funcionalidad de crear la base de datos a partir de la información disponible.
Hibernate ofrece también un lenguaje de consulta de datos llamado HQL (Hibernate
Query Language), al mismo tiempo que una API para construir las consultas
programáticamente (conocida como "criteria").
Hibernate para Java puede ser utilizado en aplicaciones Java independientes o en
aplicaciones Java EE, mediante el componente Hibernate Annotations que implementa
el estándar JPA, que es parte de esta plataforma.
Fuente: http://hibernate.org/orm/
Java Persistence API: proporciona un modelo de persistencia POJO para la asignación
de objetos relacional. El Java Persistence API fue desarrollado por el grupo de expertos
de software EJB 3.0 como parte de JSR 220, pero su uso no se limita a componentes de
software EJB. También puede ser utilizado directamente por aplicaciones web y clientes
de aplicaciones, e incluso fuera de la plataforma Java EE, por ejemplo, en aplicaciones
Java SE.
Fuente: http://www.oracle.com/technetwork/java/javaee/tech/persistence-jsp-140049.html
Spring-data: La misión de Spring Data es proporcionar un modelo de programación
familiar y consistente basado en Spring para el acceso a los datos, al mismo tiempo que
conserva los rasgos especiales del almacén de datos subyacente.
Facilita el uso de tecnologías de acceso a datos, bases de datos relacionales y no
relacionales, marcos de reducción de mapas y servicios de datos basados en la nube.
Este es un proyecto paraguas que contiene muchos subproyectos que son específicos de
una base de datos determinada. Los proyectos se desarrollan trabajando junto con

_______________________________________________________________Página 3 de 17
MiniERP Arquitectura
V2.0

muchas de las empresas y desarrolladores que están detrás de estas tecnologías


emocionantes.
Fuente: http://projects.spring.io/spring-data/

Capa Negócio:
Java: Java fue diseñado para tener la apariencia de la C ++ lenguaje, pero es más fácil
de usar que C ++ y hace cumplir una programación orientada a objetos lo cual nos
ofrece ventaja para el diseño y mantenimiento del programa(flexible). Java nos permite
el funcionamiento de los programas en distintos Sistemas Operativos sin ningún
cambio(multiplataforma). Permite crear programas multitareas(formados por varios hilos
de ejecución) lo que ayuda al aprovechamiento de los modernos procesadores con
múltiples núcleos, incluye control de excepciones, como una alternativa para manejar
errores inesperados, como un fichero inexistente o una conexión de red perdida.
Librerías:
Jdk (Conjunto de herramientas (programas y librerías) que permiten desarrollar (compilar
ejecutar, generar documentación, etc) programas en lenguaje java).
spring-core(Es un framework para el desarrollo de aplicaciones y contenedor de
inversión de control(inyección de dependencias), de código abierto para la plataforma
java).

Capa de controladores:

spring-web (servicio REST)(Permite facilitar una capa de servicios que son ideales para
este tipo de programación como auditoría, o gestión de transacciones).

spring-webmvc(El modelo vista controlador de spring está diseñado en torno a los


servlets que envían peticiones)

Cliente Rest
rest Template(spring-web, spring-webmvc)
Servicios Front
java, spring-core
Controladores
spring-web, spring-webmvc
Capa Web
JSP: La tecnología Java Server Pages (JSP) proporciona una forma simplificada, rápida
para crear contenido web dinámico. La tecnología JSP permite el desarrollo rápido de
aplicaciones basadas en web que son en servidor y la plataforma independiente. Con
JSP podemos crear aplicaciones web que se ejecuten en variados servidores web, de
múltiples plataformas, ya que Java es en esencia un lenguaje multiplataforma. Las
páginas JSP están compuestas de código HTML/XML mezclado con etiquetas especiales
para programar scripts de servidor en sintaxis Java. Por tanto, las JSP podremos
escribirlas con nuestro editor HTML/XML habitual

_______________________________________________________________Página 4 de 17
MiniERP Arquitectura
V2.0

JQUERY: jQuery es una biblioteca rápido, pequeño y rico en funciones de JavaScript. Se


hace cosas como documento HTML recorrido y la manipulación, manejo de eventos,
animación, y Ajax mucho más simple con un API fácil de usar que funciona a través de
una multitud de navegadores. Con una combinación de versatilidad y capacidad de
ampliación, jQuery ha cambiado la forma en que millones de personas escriben
JavaScript.

BOOTSTRAP:Bootstrap es el framework más popular de HTML, CSS y JS para el


desarrollo de proyectos en la web responsivos.

SPRING MVC: El framework MVC (Model-View-Control) de Spring Web está diseñado


alrededor de un DispatcherServlet que distribuye peticiones a manejadores, con
asignaciones de manejadores configurables, resolución de vistas, locale, zona horaria y
resolución de temas, así como soporte para cargar archivos. El manejador
predeterminado se basa en las anotaciones @Controller y @RequestMapping,
ofreciendo una amplia gama de métodos de manejo flexibles. Con la introducción de
Spring 3.0, el mecanismo @Controller también le permite crear sitios y aplicaciones
RESTful a través de la anotación @PathVariable y otras características.

Capa Seguridad
SPRING-SECURITY:Spring Security es un framework que se centra en la autenticación y
la autorización de las aplicaciones Java. Brinda el soporte integral y extensible tanto para
autenticar como para autorizar, la protección contra ataques como la fijación de sesión,
clickjacking , Falsificación de solicitud de sitio cruzado, etc.Integración API Servlet e
integración opcional con Spring Web MVC.

3. Arquitectura Propuesta

_______________________________________________________________Página 5 de 17
MiniERP Arquitectura
V2.0

Figura 1: Image de la Arquitectura propuesta


Fuente: Desarrollada para el Informe

4. Prototipo
Probaremos con el siguiente modelo de ER

_______________________________________________________________Página 6 de 17
MiniERP Arquitectura
V2.0

Figura 2: Modelo ER de tabla general, Persona y pago


Fuente: Desarrollado para el Informe

Tenemos 3 tablas:
● Tabla:general
● Persona
● Pago
Software usado:
- Tomcat 7
- Jdk 8
- Eclipse Neon
- MySql
- Notaciones de Spring

Son tablas básicas para probar la arquitectura en la figura 3, mostramos las carpetas que
necesitamos tener,

Figura 2: Carpetas necesarias para la Arquitectura


Fuente: Desarrollado para el Informe
minierp-dom: se encuentra nuestras clases dominio
minierp-ear: esta carpeta sirve para desplegar el proyecto siempre y cuando tengamos un
servidor con glasfish o superior

minierp-prx: Carpeta para consumir el servicio

minierp-web: es el BackEnd o la lógica de negocio

_______________________________________________________________Página 7 de 17
MiniERP Arquitectura
V2.0

minierp-webapp: aquí se ubicará la parte de fronEnd

Explicaremos carpeta por carpeta:


minierp-web:
Ubicación: /minierp-web/src/main/resources/spring/application-
context-dao.xml

Figura : Application context dao


Fuente: Desarrollado para el Informe

Explicación:

<context:component-scan base-package="pe.edu.unsa.minierp.persistencia" />;


esta linea pedimos que se carge la carpeta persistencia

<context:annotation-config />; esta línea nos permite trabajar con anotaciones.


<tx:annotation-driven transaction-manager="transactionManager" />; esta línea nos permite
administrar las transacciones.

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/minierp" />

_______________________________________________________________Página 8 de 17
MiniERP Arquitectura
V2.0

<property name="username" value="root" />


<property name="password" value="root" />
</bean>
En este bean esta la configuracion de la base de datos o de otra cualquier base de datos que
vayamos a usar.
La url 127.0.0.1 es la direccion localhost o tambien funciona si es que ponemos nuestra dirección
ip, recomendamos no cambiar la configuración.

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:packagesToScan="pe.edu.unsa.minierp.dominio"
p:dataSource-ref="dataSource">
<property name="jpaVendorAdapter">
Es la administración de las entidades
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="true" />
<property name="databasePlatform"
value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
</bean>

<!-- Transactions -->


<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"
/>
</bean>
Es nuestro administrador de Transaction que se usará para apuntar correctamente en la
dirección donde se ubica.

<jpa:repositories base-package="pe.edu.unsa.minierp.persistencia" />


JPA para comunicarnos con la Base de Datos

minierp-dom:

_______________________________________________________________Página 9 de 17
MiniERP Arquitectura
V2.0

Figura 3: Clase TablaGeneral


Fuente: Desarrollado para el Informe

Los import necesarios son:


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType; /*usaremos esencialmente usaremos el eager*/
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; /*usada para la primary key*/
import javax.persistence.JoinColumn; /*Para los match*/
import javax.persistence.ManyToOne; /*Muchos a 1*/
import javax.persistence.Table;

En la clase Tabla General Generamos los Getter y Setters:


@Id
@Column(name = "id_codigo")
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getIdCodigo() {
return idCodigo;
}

public void setIdCodigo(Integer idCodigo) {


this.idCodigo = idCodigo;
}
Recordemos que estamos usando notaciones e inyecciones para simplificar bastante en la etapa
de programación. por eso no tenemos los constructores ni la superclase.

_______________________________________________________________Página 10 de 17
MiniERP Arquitectura
V2.0

En el caso de relación, observemos la clase Pago, observemos cómo se construye:


@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TIPO_MONEDA")
public TablaGeneral getTipoMoneda() {
return tipoMoneda;
}

public void setTipoMoneda(TablaGeneral tipoMoneda) {


this.tipoMoneda = tipoMoneda;
}

Observemos la siguiente línea,


@ManyToOne(fetch = FetchType.EAGER)
Aquí nos estamos obteniendo el objeto completo
@JoinColumn(name = "TIPO_MONEDA")
Hacemos un Match con la tabla general para obtener el campo correspondiente

Pero si queremos guardar en cascada, tomemos el ejemplo de pago, si no también queremos


guardar a cliente. Tendriamos que decirle en la notación que el tipo es cascade y agregar a la
Persona.

@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST,


CascadeType.MERGE })
@JoinColumn(name = "ID_PERSONA")
public Persona getPersona() {
return persona;
}

public void setPersona(Persona persona) {


this.persona = persona;
}

Ahora revisemos el POM, en las siguientes líneas le estamos indicando como se debe llamar el
projecto,
<build>
<finalName>minierp</finalName>
</build>
lo construimos para ser usado en los servicios.

En Resumen,
- Lo primero es crear nuestro dominio,
- Luego debemos crear su clase en persistencia, en el paquete minierp-web
- Crear la interfaz del servicio, en el paquete minierp-web
- Crear la implementación de interface, en el paquete minierp-web
- y luego crear su controller, en el paquete minierp-web

_______________________________________________________________Página 11 de 17
MiniERP Arquitectura
V2.0

hasta aquí tenemos el servicio creado pero para respetar la arquitectura tenemos que crearle un
proxy para comunicarse con los servicios y sea mucho más desacoplable.
- Crear la clase correspondiente en Proxy, en minierp-prx
ahora para

En la figura 4, vemos las carpetas que se deben de modificar para realizar y llegar a tener
servicios.

Figura 4: Carpetas para tener el primer nivel de servicios


Fuente: Desarrollado para el Informe
Ejemplo si tomamos el ejemplo de guardar pago usando servicios. Tendríamos como en la figura
5, vemos como ingresamos un pago con la tabla general, el resultado debe ser como se muestra
en la figura 6 y 7 como se guarda en las tablas correspondientes a persona y a pagó (en el caso
que la persona que no existe en la base de datos),

_______________________________________________________________Página 12 de 17
MiniERP Arquitectura
V2.0

Figura 5: Ejemplo de Pago


Fuente: Desarrollado para el Informe

_______________________________________________________________Página 13 de 17
MiniERP Arquitectura
V2.0

Figura 6: Datos de Pago


Fuente: Desarrollado para el Informe

Figura 7: Datos de Persona


Fuente: Desarrollado para el Informe

Lista de servicios disponibles, todos fueron probados con postma, una aplicación proporcionada
por Google chrome, :
http://localhost:8080/minierp/articulos/consultar/
http://localhost:8080/minierp/articulos/nuevo
{
"codigo" : "ART001",
"descripcion" : "Articulo 001",
"stock" : "100",
"precio" : "1.10"
}
http://localhost:8080/minierp/articulos/eliminar/ART001
http://localhost:8080/minierp/tablaGeneral/consultar
http://localhost:8080/minierp/pagos/nuevo/
{

_______________________________________________________________Página 14 de 17
MiniERP Arquitectura
V2.0

"monto" : "14.50",
"tipoDocumento" : {
"idCodigo" : "1",
"flag" : "2"
},
"tipoMoneda" : {
"idCodigo" : "2"
}
}

http://localhost:8080/minierp/pagos/consultar
http://localhost:8080/minierp/pagos/consultar/4
http://localhost:8080/minierp/pagos/eliminar/1
http://localhost:8080/minierp/personas/nuevo
{
"tipoDocumento" : {
"idCodigo" : "1"
},
"numeroDocumento" : "13241234",
"nombres" : "Henry",
"tipoZona" : {
"idCodigo" : "2"
},
"descripcionZona" : "simon bolivar",
"sexo" : {
"idCodigo" : "1"
}
}
http://localhost:8080/minierp/pagos/nuevo/
{
"monto" : "1234.50",
"tipoDocumento" : {
"idCodigo" : "1",
"flag" : "2"
},
"tipoMoneda" : {
"idCodigo" : "2"
},
"persona" : {
"tipoDocumento" : {
"idCodigo" : "1"
},
"numeroDocumento" : "13241234",
"nombres" : "Heddnry",
"tipoZona" : {
"idCodigo" : "2"
},
"descripcionZona" : "simosn bolivar",
"sexo" : {
"idCodigo" : "1"
}
}
}
http://localhost:8080/minierp/personas/consultar

_______________________________________________________________Página 15 de 17
MiniERP Arquitectura
V2.0

5. Bibliografía
https://desarrolloweb.com/directorio/programacion/java/jsp/
http://www.oracle.com/technetwork/java/javaee/jsp/index.html
https://jquery.com/
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#what-is-acegi-
security
https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html
http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-example/
http://keylesson.com/index.php/2015/12/14/spring-mvc-data-binding-list-example-2458/
http://terasolunaorg.github.io/guideline/5.0.x/en/Overview/FirstApplication.html

_______________________________________________________________Página 16 de 17

Potrebbero piacerti anche