inakiglez.files.wordpress.com  · web view2018-05-21 · estas son las últimas versiones...

30
Su Satisfacción, Nuestro motor Arquitectura Intranet Cikautxo Cikautxo 1.0 www.certiorem.com www.certiorem.com La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Upload: duongkhanh

Post on 07-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Su Satisfacción, Nuestro motor

Arquitectura IntranetCikautxo

Cikautxo

03/01/2018

1.0 www.certiorem.com www.certiorem.com

La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

ÍNDICETabla de ContenidosÍndice.................................................................................................2

Tabla de Contenidos..................................................................................................2

1.1. Estructura y Mapa de arquitectura................................................41.1.1.1. Estructura del proyecto.............................................................................41.2.1.2. Arquitectura...............................................................................................4

2.2. Estructura de clases.....................................................................72.1.2.1. Paquetes java principales..........................................................................7

2.1.1. Presentation (com.certiorem.cwf.web)....................................................................................7

2.1.2. Bussines (com.certiorem.cwf.service).....................................................................................7

2.1.3. Dao (com.certiorem.cwf.dao)..................................................................................................7

2.1.4. Reports (com.certiorem.cwf.reports).......................................................................................8

2.1.5. Util (com.certiorem.cwf.util)....................................................................................................8

2.2.2.2. Javascript...................................................................................................8

3.3. Librerías utilizadas.....................................................................103.1.3.1. Librerías...................................................................................................10

3.1.1. En el servidor........................................................................................................................10

3.1.2. En el cliente...........................................................................................................................11

4.4. Capas existentes y tecnologías...................................................124.1.4.1. API...........................................................................................................124.2.4.2. Lógica de negocio....................................................................................124.3.4.3. Persistencia.............................................................................................12

5.5. Entornos....................................................................................135.1.5.1. Producción...............................................................................................135.2.5.2. Pre Producción.........................................................................................14

6.6. Configuración y propiedades de los diferentes elementos de los entornos....................................................................................156.1.6.1. Ficheros de configuración de la aplicación...............................................156.2.6.2. Web.xml...................................................................................................166.3.6.3. Configuración de spring...........................................................................196.4.6.4. Configuración del api rest.......................................................................24

1.0 www. certiorem .com

Cikautxo 03/01/2018 2 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

6.5.6.5. Mapeos de hibernate (JPA).......................................................................24

7.7. Otra documentación...................................................................26

8.8. Referencias y bibliografía...........................................................27

1.0 www. certiorem .com

Cikautxo 03/01/2018 3 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

1.1. ESTRUCTURA Y MAPA DE ARQUITECTURA

1.1.1.1. Estructura del proyectoEl proyecto está desarrollado usando el framework de desarrollo web de Certiorem “CWF”.

La gestión de dependencias y construcción del proyecto se hace mediante maven i lo que hace el proyecto independiente del IDE utilizado (en nuestro caso Eclipse).

La compilación del proyecto mediante maven que se encarga de:

Compilar los fuentes

Según el entorno especificado en el fichero de propiedades reescribe los properties.

Genera el war.

El proyecto compila con la versión 1.8 de java y la versión 3.0 del java servlet api ii. Estas son las últimas versiones estables, utilizadas para un mayor rendimiento y seguridad.

El código fuente, está en un repositorio de código (GIT iii) que permite gestionar versiones o recuperar versiones anteriores.

1.2.1.2. ArquitecturaLa arquitectura utilizada se muestra en la siguiente imagen y se detalla a continuación.

La aplicación está compuesta de una parte cliente (servida por el tomcat iv) creada en html y javascript y una parte servidor realizada en java mediante api rest v (ejecutada en el tomcat).

La parte cliente se ejecuta en el browser del usuario y es adaptable (responsive) a distintos tamaños de dispositivos.

1.0 www. certiorem .com

Cikautxo 03/01/2018 4 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

BROWSER TOMCAT

CLIENT SERVER

ACTIVE DIRECTORY

HTML/JS/CSSJQuery

PLUG

INS JQ

uery

RESTJSON

BACKBON

E JS

FILTER

API

SERVICE

DAOViews

Models

REALM

JPAHIBERNATE

CKCertiorem

IZARO

Arquitectura Intranet Cikautxo

0. Índice

La infraestructura está compuesta por las siguientes partes.

Client: Es una navegador que se ejecuta en el dispositivo del usuario (pc, tablet, móvil).

Server: Es la maquina en la que ejecutamos el servidor de aplicaciones (tomcat) en él se ejecuta la aplicación principal.

Active Directory: este servidor contiene el directorio activo y es el utilizado para autenticar a los usuarios de la aplicación.

SQL-SERVER: el servidor de base de datos que contiene tanto la base de datos de CWF como de Izaro.

La estructura de la aplicación se divide en lo siguiente:

La parte cliente de la aplicación que se ejecuta en el navegador se divide en:

1.0 www. certiorem .com

Cikautxo 03/01/2018 5 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

SQL SERVER

Arquitectura Intranet Cikautxo

0. Índice

Javascript: toda la lógica del cliente está en javascript (el lenguaje soportado por defecto en los navegadores). En javascript están definidos los modelos de la parte cliente, las rutas, las vistas, validaciones y componentes visuales (grids, etc).

Html: en html y mediante anotación de mustachevi están definidas las templates de la interface.

Css: todos los estilos están definidos mediantes hojas de estilo css.

La parte servidor de la aplicación se divide en:

Realm: La autenticación de los usuarios se hace a través del tomcat. Para ello se ha implementado un realm que valida el login contra el directorio activo.

Filter: Todas las peticiones al servidor pasan por los filtros de la aplicación. Estos se encargan de autenticarlas y validarlas

API: Las peticiones son gestionadas por la capa del api.

Service: Esta parte incluye la lógica de negocio.

DAO: Toda la gestión de acceso a la capa de datos se hace desde aquí. Para ello se apoya en JPA e hibérnate.

1.0 www. certiorem .com

Cikautxo 03/01/2018 6 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

2.2. ESTRUCTURA DE CLASES

2.1.2.1. Paquetes java principales2.1.1. Presentation (com.certiorem.cwf.web)

Contienen la lógica de la presentación del api REST y el filtrado de seguridad de las llamadas al api. En él se encuentran:

api: Aquí se implementan Apis específicas que no entran dentro de los estándares del framework CWF. El paquete se divide en dos pub/priv que hacen referencia a si son Apis públicas o privadas (se pueden llamar sin autenticación o no).

framework: todas las Apis definidas para del framework están en este paquete. Existen algunas genéricas que generan de forma automática las Apis para los distintos modelos del DAO.

filter: filtran todas las llamadas a las Apis y se encargan de validar la autenticación, la sesión o el origen de la llamada. Además existe un filtro para trazar las respuestas de las Apis.

interceptors: existe un interceptor que comprime las respuestas de las Apis para que estas pesen menos.

converter: en este paquete están los conversores específicos de JSON a JAVA y al revés que Jackson no da por defecto.

errorhadling: excepciones específicas de la aplicación. Transforma excepciones de java a formato JSON para devolver la respuesta al cliente Javascript.

util: Es un paquete de utilidades para la parte de presentación.

2.1.2. Bussines (com.certiorem.cwf.service)

Recogen la lógica de negocio. Entre otras clases contienen:

service: Son las clases que contienen la lógica de negocio. Todos los procesos de negocio que engloben cierta lógica compleja están implementados en este paquete.

2.1.3. Dao (com.certiorem.cwf.dao)

Contiene:

1.0 www. certiorem .com

Cikautxo 03/01/2018 7 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

dao: los Daovii (Data Access Object) que se encargan implementar para cada modelo las operaciones necesarias sobre la base de datos, estas son: querys, inserts, updates, deletes.

model: los modelos, que son la representación java de las entidades de la base de datos.

converters. para poder transformar ciertos tipos de la base de datos a objetos java y al revés se usan los conversores.

util: este paquete contiene algunas clase de utilidades para la gestión de los daos.

2.1.4. Reports (com.certiorem.cwf.reports)

Este paquete contiene la clase para la gestión de los informes. Además contiene los jrxml (formato de informes en jasper report) de la aplicación.

2.1.5. Util (com.certiorem.cwf.util)

Contiene algunas clases de utilidades entre las que se incluyen algunos las constantes, una clase para el envío de correos, etc.

2.2.2.2. JavascriptLos ficheros javascript del framework cwf se encuentran en el directorio webapp/cwf/js. Este directorio contiene varios subdirectorios organizados por funcionalidad de la app.

cwf.js: Contiene distintas funcionalidades implementadas por el CWF como notificaciones, validaciones, carga de combos, etc.

index.js: Contiene la gestión de las urls en la app cliente. Cada url de la parte cliente ejecuta una función recogida en este fichero.

app.js: Este fichero inicializa la parte cliente y guarda el estado de la app al tratarse de una aplicación SPAviii

models/*.js: Los modelos de la parte cliente están definidos usando backbone y se encuentran en esta carpeta.

views/*.js: Las vistas de la parte cliente están definidas usando backbone y se encuentran en esta carpeta. Además existen componentes visuales encapsulados en vistas de backbone para hacerlos reutilizables, como el caso de GridView o el DropZoneFileUpload,

1.0 www. certiorem .com

Cikautxo 03/01/2018 8 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

ModalConfirmView, GenericView, etc. Todas se encuentran dentro de la subcarpeta Generic.

1.0 www. certiorem .com

Cikautxo 03/01/2018 9 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

3.3. LIBRERÍAS UTILIZADAS

3.1.3.1. LibreríasAlgunas de las librerías del proyecto son:

3.1.1. En el servidor

Spring ix en su versión 4.3.7. De todas las funcionalidades que incluye spring se está usando la inyección de dependencias del core, la integración con JAP/hibernatex, la gestión de transacciones, el envío de correos. El uso de Spring IoC xipermite el desacoplamiento de los componentes y la inyección de dependencias.

Jerseyxii: es una implementación de la especificación JAX-RS para implementar servicios REST. Es la librería usada para la parte del api. Mediante anotaciones las clases permite especificar las URLs que escucha el servidor, los métodos httpxiii de las peticiones en incluso los tipos de datos recibidos y devueltos (en este caso JSON en su mayoría).

Jacksonxiv: La parte del servidor de la aplicación funciona en java y la parte cliente en javascript. Como formato de intercambio de información se usa JSON y para facilitar la transformación de los objetos entre un lenguaje y jersey se apoya en la librería de Jackson.

Quartzxv: Para las tareas ejecutadas de forma periódica se usa esta librería que permite definir trabajos que se ejecutan con diferente frecuencia usando una especie de cronxvi.

Jaspert Reportsxvii. Esta librería se utiliza para generar informes. La salida del informe puede ser en distintos formatos como por ejemplo el pdf. En este proyecto se usa por ejemplo para exportar los datos de los grids. En estos casos los informes son generados de forma dinámica usando la librería dynamicreports

JPA / Hibernate. Para la persistencia de la información se usa la especificación JPA mediante la implementación de hibernate. El uso de este motor de persistencia permite la abstracción de la base de datos utilizada.

3.1.2. En el cliente

Los ficheros de javascript de librerías de terceros se encuentran en el directorio webapp/assets/js. Este contiene varios subdirectorios con las librerías y plugins necesarios para ejecutar el cliente javascript.

1.0 www. certiorem .com

Cikautxo 03/01/2018 10 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

Algunos de estos plugins y librerías son:

Jqueryxviii: Es una librería javascript de uso genérico. Tiene varios plugins que se usan en la app y backbone la utiliza en las vistas para modificar el DOMxix.

moment.jsxx: Librería utilizada para el manejo de fechas en javascript.

underscore.jsxxi: Librería de utilidades javascript usada en backbone.

bootstrap.jsxxii: Framework de maquetación web

hogan.jsxxiii: Motor de templates javascript basado en mustache. Se usa para las templates de las vistas de backbone.

Jquery-validation.jsxxiv: Plugin de jquery usado para las validaciones en el cliente

i18next.jsxxv: Libería javascript de internacionalización.

datatables.jsxxvi: Componente grid javascript

page.jsxxvii:Gestión de las rutas de javascript.

backbone.js: Esta librería permite aplicar el patrón MVVM xxviiien la parte cliente separando así la lógica de los modelos de la interface. Con Backbone definimos por un lado nuestros modelos y colecciones y la librería nos da la lógica para gestionarlos (altas,bajas ,etc). Por otro lado definimos nuestras vistas y templates. En este caso Backbone, mediante diferentes eventos, mantiene la interface y los modelos sincronizados.

1.0 www. certiorem .com

Cikautxo 03/01/2018 11 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

4.4. CAPAS EXISTENTES Y TECNOLOGÍAS

4.1.4.1. APIEsta capa engloba todo lo referente a la parte del api. Para ello se ha utilizado la especificación jax-rsxxix con su implementación en Jersey.

Está capa además se encarga de la comunicación con la parte cliente. Lo que implica transformar los objetos Java a JSONxxx y al revés ya que la comunicación con el cliente se hace mediante este formato. Para hacer esta tarea se apoya en la librería de Jackson.

4.2.4.2. Lógica de negocioEsta capa contiene los componentes de negocio.

4.3.4.3. PersistenciaLa persistencia de los datos se hace en una base de datos Sql Server. Para ello se utiliza la especificación de JPAxxxi mediante su implementación con hibernatexxxii como motor de persistencia.

1.0 www. certiorem .com

Cikautxo 03/01/2018 12 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

5.5. ENTORNOSExiste un entorno de producción y otro de preproducción (pruebas) virtualizados, donde se despliega el aplicativo para realizar las pruebas antes de pasarlo a producción. El despliegue se hace de forma remota. En principio los entornos son idénticos y comparten el directorio activo. Cada uno dispone de su propio tomcat y base de datos.

A continuación se detallan algunos datos de los entornos.

5.1.5.1. ProducciónSERVIDOR DE APLICACIONES

Procesador Xeon 2.0

RAM 8 GB

IP 192.168.1.150

Host sr-be-150

Servidor de aplicaciones Tomcat 8

Sistema operativo Windows Server 2012 R2

SERVIDOR DE BASE DE DATOS SQL SERVER

Procesador ¿???

RAM ¿???

IP 192.168.0.197

Host

Servidor de base de datos MS SQL Server

Sistema operativo ¿????

SERVIDOR AD

IP ¿???

Host sr-be-009

Servidor LDAP Active Directory

Sistema operativo Windows Server

1.0 www. certiorem .com

Cikautxo 03/01/2018 13 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

5.2.5.2. Pre ProducciónSERVIDOR DE APLICACIONES

Procesador Xeon 2.00

RAM 8 GB

IP 192.168.1.151

Host sr-be-151

Servidor de aplicaciones Tomcat 8

Sistema operativo Windows Server 2012 R2

1.0 www. certiorem .com

Cikautxo 03/01/2018 14 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

6.6. CONFIGURACIÓN Y PROPIEDADES DE LOS DIFERENTES ELEMENTOS DE LOS ENTORNOS

La aplicación dispone de diferentes ficheros de configuración en el que se definen diferentes propiedades para el funcionamiento de la aplicación.

6.1.6.1. Ficheros de configuración de la aplicaciónLos siguientes ficheros de propiedades contienen las principales propiedades de configuración que son dependientes del entorno. Estos ficheros son empaquetados en la aplicación, mediante maven, en el momento de la compilación con la configuración apropiada para el entorno. Algunas de las propiedades que contiene son:

config.properties.

database.properties.

jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc.url=jdbc:sqlserver://localhost:1433;instance=SQLEXPRESS;DatabaseName=CIKAUTXO#jdbc.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSourcejdbc.username=cikautxo

mail.properties

path.properties

context.xml

1.0 www. certiorem .com

Cikautxo 03/01/2018 15 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<?xml version="1.0" encoding="UTF-8"?><Context path="/cwf" docBase="/cwf-web" debug="0" reloadable

<Realm className="com.certiorem.cwf.CWFRealm"

digest="MD5"

driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

connectionURL="jdbc:sqlserver://localhost:1433;instance=SQLEXPRESS;DatabaseName=CIKAUTXO"

6.2.6.2. Web.xmlEs el fichero de configuración del war. Entra dentro del estándar y lo usa el servidor de aplicaciones para poder hacer el arranque y configuración de la aplicación. Siempre se encuentra en web-inf/web.xml. Alguna de las cosas que en él se definen son:

Los ficheros de spring que deben inicializarse. Esto inicializa el contexto de Spring

<context-param><param-name>contextConfigLocation</param-name><param-value>

classpath:springUtil-config.xmlLos servlet y mapeos que deben inicializarse. Se definen 4 servlets:

Servlet para el api publica. public-api

Servlet para el api privada. private-api

Servlet para el api del framewrok. framework

Servlet para el pooling de notificaciones. pooling . Usado para enviar notificaciones del server al cliente.

1.0 www. certiorem .com

Cikautxo 03/01/2018 16 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<servlet><servlet-name>private-api</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class<init-param> …..</init-param> <load-on-startup>1</load-on-startup>

</servlet><servlet> <servlet-name>public-api</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class <init-param>

… </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>framework</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class <init-param> ….. </init-param> <load-on-startup>1</load-on-startup></servlet><servlet> <servlet-name>polling</servlet-name>

Los mapeos de las urls a las apis

<servlet-mapping><servlet-name>private-api</servlet-name><url-pattern>/private/api/v1/*</url-pattern>

</servlet-mapping>

<servlet-mapping> <servlet-name>public-api</servlet-name> <url-pattern>/public/api/v1/*</url-pattern></servlet-mapping>

<servlet-mapping> <servlet-name>framework</servlet-name>

La seguridad y las url que protege

1.0 www. certiorem .com

Cikautxo 03/01/2018 17 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<security-constraint> <display-name>General Restriction</display-name> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <description>All resources in this application are protected.</description <url-pattern>/index.jsp</url-pattern> <url-pattern>/choosePlant.jsp</url-pattern> <url-pattern>/private/api/*</url-pattern>

<url-pattern>/framework/*</url-pattern> <url-pattern>/polling/*</url-pattern>

</web-resource-collection> <auth-constraint> <role-name>Login</role-name> </auth-constraint> </security-constraint> <!-- <login-config>

<auth-method>BASIC</auth-method></login-config>

--><login-config>

<auth-method>FORM</auth-method>El timeout de la sesión

Algunos parámetros para cargar en el contexto

<context-param> <param-name>icpWebSphereSecurePort</param-name> <param-value>443</param-value> </context-param>

<context-param> <param-name>icpWebSpherePort</param-name> <param-value>8080</param-value> </context-param>

Los ficheros de index por defecto en caso de que no se especifiquen en la url

Las páginas de error a las que se redirigirá al usuario en caso de que ocurra uno

1.0 www. certiorem .com

Cikautxo 03/01/2018 18 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<error-page> <error-code>500</error-code> <location>/error500.jsp</location></error-page><error-page> <error-code>404</error-code>

6.3.6.3. Configuración de springspringUtil-config.xml. Aquí se mapean los properties, se inicializa en bean del correo y los bean de utilidades y quartz.

1.0 www. certiorem .com

Cikautxo 03/01/2018 19 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd">

<bean id="placeholderConfig"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"<property name="locations"> <list>

<value>classpath:mail.properties</value> <value>classpath:database.properties</value><value>classpath:path.properties</value>

</list></property>

</bean> <bean id="mappedProperties"

class="org.springframework.beans.factory.config.PropertiesFactoryBean"<property name="locations"><list>

<value>classpath:mail.properties</value> <value>classpath:database.properties</value><value>classpath:path.properties</value>

<value>classpath:config.properties</value> </list>

</property> </bean>

<bean id="properties" class="com.certiorem.cwf.util.Properties"><property name="mappedProperties" ref="mappedProperties"

</bean> <bean id="mailSender"

class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"><value>${mailserver}</value></property> <property name="port"><value>${mailport}</value></property> <property name="username"><value>${mailuser}</value></property <property name="password"><value>${mailpassword}</value></property

quartz_contest.xml. Existen dos tareas programadas que se lanzan periódicamente mediante quartz. Los beans de quartz se definen en este fichero.

1.0 www. certiorem .com

Cikautxo 03/01/2018 20 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

<bean name="complexJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" <property name="targetObject" ref="procesoAutomatizadoService" <property name="targetMethod" value="procesoAutomatizado" <property name="concurrent" value="false" /> </bean>

<!-- Run the job every 5 seconds only on weekends --><bean id="cronTrigger"

class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail" ref="complexJobDetail" /><property name="cronExpression" value=" 0 0 2 ? 12 SUN#1 *"

<!-- <property name="cronExpression" value="0 55 2 ? * *"/> --><!-- <property name="cronExpression" value="* 0/5 * * * ?"/> -->

</bean>

<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler -->

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"<property name="jobDetails">

<list><!-- <ref bean="simpleJobDetail" /> -->

<ref bean="complexJobDetail" /></list>

</property>

<property name="triggers">

springDao-config.xml. Aquí se inicializan los bean Dao que tienen la lógica de los modelos y sus operaciones con la base de datos. Spring escanea el paquete de daos y hace la inyección de dependencias según las anotaciones de las clases.

1.0 www. certiorem .com

Cikautxo 03/01/2018 21 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd">

DataSource.xml Fichero de donde se define el datasource, en este caso la conexión jdbc con la BD, de la aplicación para la inyección de la dependencia en los beans necesarios.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource"

Hibernate.xml Fichero de donde se define la configuración de hibernate, se le inyecta el datasource y se define el Transacction Manager para la gestión de transacciones mediante la anotación @Transactional.

1.0 www. certiorem .com

Cikautxo 03/01/2018 22 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<!-- Hibernate session factory --><bean id="sessionFactory"

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource">

<ref bean="dataSource" /></property><property name="hibernateProperties">

<props><prop key="hibernate.dialect">${hibernate.dialect}<prop key="hibernate.show_sql">$

{hibernate.show_sql}</prop><prop key="hibernate.hbm2ddl.auto">$

{hibernate.hbm2ddl.auto}</prop><prop key="hibernate.format_sql">$

{hibernate.format_sql}</prop><prop key="hibernate.use_sql_comments">$

{hibernate.use_sql_comments}</prop></props>

</property> <property name="packagesToScan" value="com.certiorem.cwf.dao.model"

springService-config.xml. Aquí se inicializan los bean service que tienen la lógica de negocio. Spring escanea el paquete de service y hace la inyección de dependencias según las anotaciones de las clases.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans

springWeb-config.xml. Aquí se inicializan los bean service que tienen la lógica de negocio. Spring escanea el paquete de service y hace la inyección de dependencias según las anotaciones de las clases.

1.0 www. certiorem .com

Cikautxo 03/01/2018 23 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context

6.4.6.4. Configuración del api restLas urls de mapeo del api rest se configuran mediante anotaciones en las clases del api. A continuación se muestra un ejemplo:

@Path("/find")@POST@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)public Finder<E> find(Finder<E> finder) throws AppException;

/** * List all entities.

6.5.6.5. Mapeos de hibernate (JPA)Los modelos que se encuentran en el paquete com.certiorem.cwf.dao.model están anotados para definir el mapeo de los modelos java a sus tablas correspondientes. A continuación se muestra un ejemplo:

1.0 www. certiorem .com

Cikautxo 03/01/2018 24 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

@Entity@Table(name = "ens_result", schema = "dbo", uniqueConstraints = {

@UniqueConstraint(columnNames = "ID_RESULT")})@EntityListeners({

UpdatedListener.class})public class EnsResult implements Serializable, Updatable{

//columnas y campos de la tabla//id@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "ID_RESULT", unique = true, nullable = false)private Long idResult;

@Column(name = "ID_RANGE_DETAIL", columnDefinition = "BIGINT")private Long idRangeDetail;

@Column(name = "TYPE_RESULTS", columnDefinition = "BIGINT")private Long typeResults;

//versionado@Version@Column(name = "VERSION", columnDefinition = "DATETIME")private Date version;

@Column(name = "DATE_RESULTS", columnDefinition = "DATETIME")private Date dateResults;

@Column(name = "DATE_INTROD", columnDefinition = "DATETIME")private Date dateIntrod;

@Column(name = "RESULT_VALUE", columnDefinition = "NVARCHAR(20)"private String resultValue;

@Column(name = "BATCH", columnDefinition = "NVARCHAR(20)")private String batch;

@Column(name = "REMOVED")private Integer removed;

@Column(name = "LAST_USER")private Long lastUser;

@Column(name = "LAST_UPDATE")private Date lastUpdate;

@OneToOne@JoinColumn(name="ID_RANGE_DETAIL", insertable=false,

1.0 www. certiorem .com

Cikautxo 03/01/2018 25 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

7.7. OTRA DOCUMENTACIÓNCon este documento se adjunta en la misma carpeta la siguiente documentación:

Javadocs: la última versión de las javadocs. Documentación técnica de las clases.

Documentación CWF: Varios ficheros con documentación del framework CWF.

1.0 www. certiorem .com

Cikautxo 03/01/2018 26 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

Arquitectura Intranet Cikautxo

0. Índice

8.8. REFERENCIAS Y BIBLIOGRAFÍA

1.0 www. certiorem .com

Cikautxo 03/01/2018 27 - 28La información contenida en este documento es propiedad exclusiva de CERTIOREM. Estos contenidos no podrán ser divulgados total o parcialmente sin la autorización escrita de CERTIOREM.

i https://maven.apache.org/ii https://jcp.org/en/jsr/detail?id=340iii https://git-scm.com/iv http://tomcat.apache.org/v https://es.wikipedia.org/wiki/Transferencia_de_Estado_Representacionalvi https://mustache.github.io/vii http://es.wikipedia.org/wiki/Data_Access_Objectviii https://es.wikipedia.org/wiki/Single-page_applicationix http://www.springsource.org/x http://www.hibernate.org/xi https://es.wikipedia.org/wiki/Inversi%C3%B3n_de_controlxii https://jersey.github.io/xiii https://developer.mozilla.org/es/docs/Web/HTTP/Methodsxiv https://github.com/FasterXML/jacksonxv http://www.quartz-scheduler.org/xvi https://es.wikipedia.org/wiki/Cron_(Unix)xvii http://es.wikipedia.org/wiki/JasperReportsxviii http://jquery.com/xix https://es.wikipedia.org/wiki/Document_Object_Modelxx https://momentjs.com/xxi http://underscorejs.org/xxii https://getbootstrap.com/xxiii http://twitter.github.io/hogan.js/xxiv https://jqueryvalidation.org/xxv https://www.i18next.com/xxvi https://datatables.net/xxvii https://visionmedia.github.io/page.js/xxviii https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodelxxix https://es.wikipedia.org/wiki/JAX-RSxxx https://es.wikipedia.org/wiki/JSONxxxi https://es.wikipedia.org/wiki/Java_Persistence_APIxxxii http://hibernate.org/