Capacita APX Session II
Short Description
Download Capacita APX Session II...
Description
APX
SESSION II
INDICE Intr trod oduc ucci ción ón Ar Arqu quit itec ectu tura ra On Onliline ne 01 In 1.1 Revisión de principales principales componen componentes tes 1.2 Transacciones 1.3 Librerías 1.4 Conexiones a BD 1.5 Desarrollo de documentos
Ejem empl plos os On OnLi Line ne 02 Ej 2.1 Data trans transfer fer object object (DTO (DTO s) ´
2.2 Cre Creaci ación ón de tra trans nsaci acione ones s 2.3 Creación de librerías de lógica de negocio negocio aplicativa aplicativa 2.4 Uso de utilería de logs 2.5 Conexión Transacción --> Librería 2.6 Crear Librería JPA
INDICE Intr trod oduc ucci ción ón Ar Arqu quit itec ectu tura ra On Onliline ne 01 In 1.1 Revisión de principales principales componen componentes tes 1.2 Transacciones 1.3 Librerías 1.4 Conexiones a BD 1.5 Desarrollo de documentos
Ejem empl plos os On OnLi Line ne 02 Ej 2.1 Data trans transfer fer object object (DTO (DTO s) ´
2.2 Cre Creaci ación ón de tra trans nsaci acione ones s 2.3 Creación de librerías de lógica de negocio negocio aplicativa aplicativa 2.4 Uso de utilería de logs 2.5 Conexión Transacción --> Librería 2.6 Crear Librería JPA
Intr ntroduc oducción ción Arqui A rquite tectur ctura a Onli nline ne
01
REVISIÓN DE PRINCIPALES COMPONENTS Componentes Online:
➔ Unidad Funcional: Corresponde ➔ Servicio Backend APX :
con componente mínimo de despliegue en PaaS.
Expone la interfaz RestFul de la API que representa.
➔ Transacción APX: Una
transacción es la unidad aplicativa a ejecutar en APX Online. Define la Unidad Transaccional a nivel de lógica aplicativa. Encapsula la lógica de negocio y el acceso a los datos. Publica su interfaz para poder ser utilizada por terceros.
➔ Librería APX:
➔ DTO: Representación
en forma de Bean de una Entidad de Negocio.
4
01
REVISIÓN DE PRINCIPALES COMPONENTS Online: La Aplicación dispone de utilidades de Arquitectura que facilitan el acceso a las fuentes de datos.
Srv. Backend APX
Utilidades APX
TRX BBDD LIB LIB LIB
PUBLIC LIB
Motor Reglas Otros
Estrategia de Desarrollo : Todo acceso a datos debe de encapsularse en una librería para facilitar su reutilización y control de acceso.
5
01
REVISIÓN DE PRINCIPALES COMPONENTS Utilidades de la Arquitectura APX Online :
La Arquitectura APX Online dispone de una serie de utilidades, como pueden ser: –
Utilidades expuestas por librerías “especiales”: Se tratan de librerías cuya utilidad puede ser recuperada por el usuario desde dicha librería. Estas librerías se verán en el apartado “Creación de librerías” – – – – –
Librerías de BD relacionales Librerías JPA Librerías Motor de Reglas Librerías MongoDB Librerías de Conectores » Interbackend » Gestor Documental » Generador de Documentos »
–
…
Utilidades comunes a todas las librerías: Estas utilidades pueden ser usadas desde cualquier librería, sean del tipo que sean. Estas utilidades se verán en el apartado “utilidades comunes”: – Errores y Warnings – Recuperación/Salida información – …
Creación de Serv. Backend
01
CREACIÓN DE SERV. BACKEND MENÚ PRINCIPAL
La creación de un Servicio Backend dentro de la Arquitectura APX Online se realiza mediante las opciones:
La implementación del servicio Backend se autogenera desde los editores de las transacciones que utiliza, asociando cada operación sobre una entidad en cada una de ellas. Esta clase por tanto no debe modificarse directamente. 8
Creación de DTO
01
CREACIÓN DE UN DTO MENÚ PRINCIPAL
Un DTO es la representación Java de una Entidad de Negocio. Se puede crear con las siguientes opciones:
Antes de crear un DTO hay que validar si este ya está disponible a nivel de Modelo Canónico de Datos (QMCD).
10
Creación de Transacciones
01
CREACIÓN DE TRANSACCIONES MENÚ PRINCIPAL
Posibles formas de crear una Transacción a través de diferentes opciones de menú.
12
01
CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (I)
La “T” debe mantenerse para cumpl ir la nomenclatura
La descripción debe tener un sentido funcional 13
01
CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (II) •
Todos los campos son obligatorios y tienen sus restricciones correspondientes. Código de aplicación: debe ser de 4 caracteres. Nombre de la transacción: debe tener 4 caracteres (comenzando por “ T” y tres números) debe contener dos caracteres – Versión: numéricos. – País: debe tener 2 caracteres. – Descripción: debe ser especificada y debe tener – –
un sentido funcional
•
La etiqueta Nombre de la transacción nos indica el nombre que tendrá la clase que implemente la transacción.
•
El Paquete indica el nombre del paquete Java en el que se va a ubicar esta clase. Ambas etiquetas se autogeneran completando los campos de texto.
al
ir
14
01
CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (III) El asistente permite crear campos de entrada y de salida, simples o compuestos para las transacciones. Para ello es necesario indicar, de forma obligatoria: -
Nombre Tipo (String, Long e Int) Tamaño (valor distinto de 0) Obligatoriedad (Opcional u obligatorio)
Con el prot oco lo QP05 se permite anidamiento múltiple. Desde ASO, el protoc olo de comun icación siempre será QP05, por tanto esto es transparente para el desarrol lador 15
01
CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (III) Cuando la transacción es consumida desde un servicio Backend se debe indicar un identificador descriptivo de la operación que va a implementar. El asistente permite definir en detalle todas las opciones para la exposición Restful de la transacción (Verbo http, campos de entrada y de salida, Códigos http, Query params…)
16
01
CREACIÓN DE TRANSACCIO TRANSA CCIONES NES ASISTENTE A SISTENTE DE CREACIÓN (Y IV) Al finalizar el asistente se construye un proyecto Java Maven con todas las dependencias necesarias para el desarrollo de la transacción desde su inicio. Por otro lado se abre para su edición el archivo Java generado por el asistente que define la transacción.
17
01
CREACIÓN DE TRANSACCIO TRANSA CCIONES NES ESTRUCTURA ESTRU CTURA DEL PROYE PROYECTO CTO GENERADO: GENERADO: ESQUE ESQUEL L ETO
• src\main\java.- Contiene el código fuente de la lógica aplicativa. El asistente genera genera el paquete por defecto de
la arquitectura conteniendo: -
la clase Java que implementa la transacción la clase abstracta de la que hereda esta.
• src\main\resources .- Contiene los recursos y carpetas
generados para su uso: -
el ar arcchi hivo vo de manifiesto el archivo XML de parametrización de la transacción El arc archiv hivo o de con config figura uració ción n multi-idioma
• src\test\java.- Contiene los paquetes que definen las
clases usadas para los test unitarios de la transacción, por defecto una vez ejecutado el asistente se encuentra el paq paque uete te po porr de defe fecto cto que co conti ntiene ene un úni único co tes testt definido que se usará para hacer las pruebas unitarias de la transacción.
Contie tiene ne los rec recur ursos sos y car carpe petas tas • src\test\resources.- Con necesarios para la ejecución de pruebas unitarias.
•
La carpeta target, almacenará el JAR de la transacción siempre que la transacción se compile.
18
01
CREACIÓN DE TRANSACCIO TRANSA CCIONES NES ESTRUCTURA ESTRU CTURA DEL PROYE PROYECTO CTO GENERADO: GENERADO: PRUEBAS PRUEB AS JUNIT J UNIT (I)
Las pruebas unitarias (JUnit) están definidas en la clase UUAAT00101ESTransactionTest,
donde:
- UUAA.- Identifica el código de la aplicación - T001.- Id Iden enti tifi ficca el res estto del código de la transacción - 01.- Es la versión de la transacción que queremos ejecutar - ES.- Identifica el país de la transacción - TransactionTest.- Es un sufijo indicativo de que se trata de un test Por de deffec ecto to se cr crea earrá un tes estt qu quee lan la nzará la transac acci ción ón sin nin inggún parámetro de entrada.
19
Creación de Librerías
01
CREACIÓN DE LIBRERÍAS MENÚ PRINCIPAL
Posibles formas de crear una Librería a través de diferentes opciones de menú.
21
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN
•
Todos los campos son obligatorios y tienen sus restricciones correspondientes. – –
Código de aplicación: debe ser de 4 caracteres. Nombre de la librería: debe tener 4 caracteres (comenzando por “R” y tres números)
– – –
•
Versión: recomendable con formato X.Y.Z Arquitectura: Online (para Jobs: Batch) Tipo: pueden seleccionarse varias (o ninguna)
La etiqueta Nombre de la librería nos indica el nombre que tendrá la clase que implemente la librería. Esta etiqueta se autogenera al ir completando los campos de texto.
La “R” debe mantenerse para cumpl ir l a nomenclatura 22
01
CREACIÓN DE LIBRERÍAS GENERICO • El propósito de una librería, es que el desarrollador pueda codificar la lógica aplicativa de su transacción, sin que para ello sea necesario ningún
. • El esqueleto básico de una librería está compuesto por un proyecto que contiene el interfaz que se usará desde las transacciones o librerías que la invoquen, y la parte de la implementación donde estará localizada toda la lógica de negocio de las librerías. • Los ficheros que componen la librería son los siguientes: UUAAR000Abstract la clase abstracta donde están definidos los servicios que usa la librería. No tiene que ser acceso a datos, ni utilidad proporcionada por la Arquitectura
Creación de Conexiones a BD
01
CAPA DE ACCESO A DATOS DESACOPLADA
APX IMS/CICS
DATA ACCESS LAYER DECOUPLED
Conectores XA Driver ORACLE
MongoDB
Elastic Search
✓
✓
REPLICACION
ETL
REPLICA
Acceso a datos a través de JDBC o JPA La Arquitectura se encarga de gestionar la ejecución del commit/rollback
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (I)
Pueden definirse varios no mbres lógi cos, cada uno asociado a una DB diferente
26
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (II)
•
El propósito de esta librería es que el desarrollador pueda acceder y manipular BD relaciones a través del API de persistencia JPA
•
Si se selecciona la opción de JPA, será necesario indicar un nombre para el recurso lógico de acceso a DB (se explicará más adelante)
•
Tras esto, se generará el esqueleto de la imagen. Cada uno de los puntos se explicará en los siguientes apartados.
•
Cabe destacar la creación de: La carpeta “Domain” para lógica de negocio • El fichero “persistence.xml” • La clase “JpaUtilsFactory” para las pruebas JUnit •
27
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (III)
•
Para usar la utilidad de APX Online referente a JPA, desde la clase de lógica de negocio: this.jpaUtils.get("db1").createNamedQuery(query) this.jpaUtils.get("db1").XXX()
• •
Se recuperará el nombre del recurso lógico contra el que se quiera ejecutar la Query Cada nombre de un recurso lógico, representará una conexión con una DB diferente
28
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA ( IV)
•
Para las librerías de tipo JPA, se creará en /src/main/java un paquete llamado “domain”
•
En este paquete se deberán incluir todas las clases de entidades JPA generadas
29
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (V)
•
Para las librerías de tipo JPA, se creará en /src/main/resources un fichero de persistencia llamado “persistence.xml” • •
En este fichero se deberán incluir todos los nombres de las entidades JPA usadas en la librería para acceder a DB El nombre de la unidad de persistencia no deberá ser modificado
30
01
CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA ( Y VI)
31
01
DESARROLLO DE DOCUMENTOS
Ejemplos OnLine
05
DATA TRANSFER OBJECT (DTO S)
Desarrollar el DTO, TipoBienDTO, con las propiedades:
long codigo String name long especialidad String nivelServicio String fechaAlta String fechaModifica
02
CREACIÓN DE TRANSACIONES
Desarrollar las transacciones:
MAPPT001 MAPPT002
Ver archivos: Transaccion_MAPPT001-01-MX.xlsx y Transaccion_MAPPT002-01-MX.xlsx
02
CREACIÓN DE LIBRERÍAS DE LÓGICA DE NEGOCIO APLICATIVA
Desarrollar librerías:
MAPPR001, e implementar el método de alta y consulta de la información de tipos de bien. MAPPR002, e implementar el método de alta y consulta de la información en la BD.
Ver archivos: MAPPR001*.java y MAPPR002*.java
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: PROYECTOS
•
Para todos los tipos de librerías se generarán dos proyectos: • •
•
Proyecto con la interfaz del servicio a publicar Proyecto con la implementación del servicio a publicar
Los nombres de dichas librerías serán: • •
UUAARXXX-X.Y.Z --> Nombre de la librería interfaz, con: UUAARXXXIMPL-X.Y.Z --> Nombre de la librería implementación, con: • • • •
•
UUAA: UUAA de la librería R: Se añade por defecto para indicar que se trata de “rutina” X.Y.Z: Versión de la librería IMPL: Se añade por defecto para indicar que se trata de la implementación
Ambas librerías tendrán que ser desplegadas para una correcta ejecución
37
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: LIBRERÍA INTERFAZ
•
Para cualquier tipo de librería, el proyecto interfaz solamente tendrá dos secciones importantes: •
Fichero de definición de servicios • • •
•
Por defecto se creará un método “void execute()” Se podrá modificar y crear nuevos métodos para recibir y devolver los datos necesarios Todos estos nuevos métodos deberán comenzar por “execute”. Esto es obligatorio, existe una regla Sonar para su comprobación
Fichero de dependencias pom.xml •
Recupera todas las dependencias con otros proyectos
38
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: NOMENCLATURA •
Nomenclatura de paquetes: • com.bbva..lib.rxxx: Para las interfaces de los métodos ofrecidos por las librerías, para su consumo por transacciones y otras librerías. • com.bbva..lib.rxxx.impl : Para las clases de la librerías que implementan los métodos de las interfaces anteriormente indicadas.
•
Nomenclatura de métodos de la interfaz: • execute[Nombre_elegido_por_app] donde [Nombre_elegido_por_app] es opcional Como se observa la palabra "execute" es de uso obligado como prefijo para cualquier nombre de método.
La longitud máxima del nombre del método es de 48 caracteres
39
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: CLASE ABSTRACTA
•
Para cualquier tipo de librería, en el proyecto de implementación se generará la clase abstracta: •
Esta clase es autogenerada y no debe modificarse
•
En todos los tipos de proyectos aquí se define el servicio de recuperación de configuración
public void setApplicationConfigurationService( ApplicationConfigurationService applicationConfigurationService)
{ this.applicationConfigurationService = applicationConfigurationService;
}
•
Para las librerías de tipos “especiales” se recuperará el servicio asociado a su tipo, por ejemplo para MongoDB: public void setMongoDBUtils(MongoDBUtils mongoDBUtils) { this.mongoDBUtils = mongoDBUtils;
} 40
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: CLASE IMPLEMENTACIÓN
•
Para cualquier tipo de librería, en el proyecto de implementación se generará la clase de implementación principal.
•
Esta clase se crea solamente con un método “execute” para que el desarrollador implemente la interfaz vista anteriormente.
•
Al ser una implementación de la interfaz anterior, cualquier nuevo método “execute” que se incluya en dicha interfaz, deberá ser implementado en esta clase.
41
01
CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: OSGI ARQUITECTURA •
Para todos los tipos de librerías se generará, en /src/main/resources/ un fichero de servicios OSGi de arquitectura, llamado UUAAR001 -arc-osgi.xml .
•
En este fichero se definen los servicios que se importan a la librería desde la arquitectura: •
Para todas las librerías se importará el servicio de configuración
•
A su vez, también se define el servicio que exporta la librería como tal: LIBRERÍA
Para obtener una instancia de la librería que queremos utilizar, en el método
execute de la transacción, para nuestro ejemplo, incluiriamos la siguiente línea:
UUAAR001 libUUAAR001 this.getServiceLibrary(com.bbva.uuaa.lib.r001.UUAAR001.class);
=
donde com.bbva.uuaa.lib.r001.UUAAR001 es la interfaz de la librería a invocar, la cual habrá que incluir en los import de la clase de la transacción
02
CREAR LIBRERÍA JPA
Crear la librería
MAPPR002, e implementar el método de alta y consulta de la información en la BD.
Ver archivos: MAPPR002*.java
02
CONEXIÓN LIBRERÍA --> LIBRERÍA
Para poder invocar a una librería desde otra librería se tiene que seguir los
siguientes pasos. Tomaremos como ejemplo una librería llamada UUAAR001 que será invocada desde UUAAR002
En el pom.xml del invocador debemos importar la dependencia de la librería que contiene el interfaz. El pom.xml será el de UUAAR002IMPL-0.0.0.
com.bbva.uuaa UUAAR001 0.0.0
02
CONEXIÓN LIBRERÍA --> LIBRERÍA
En el mismo pom.xml tenemos que modificar en el maven-bundle-plugin el
tag Import-Packages para añadir el nombre del paquete donde está el interfaz
com.bbva.elara.*;version="${osgi.version.manifest}", com.bbva.uuaa.lib.r001;version="0.0 ”, org.osgi.framework, spring, * NOTA: en caso de que la variable osgi.version.manifest no esté definida en el pom se establecen los paquetes com.bbva.elara con versión 0.0 al igual que los paquetes com.bbva.uuaa.lib.r001.
02
CONEXIÓN LIBRERÍA --> LIBRERÍA Se tiene que modificar el siguiente archivo que se encuentra en el proyecto de la librería invocadora (UUAAR002 en nuestro ejemplo)
/main/resources/META-INF/spring/UUAAR002-app-osgi.xml o en caso de no existir, el siguiente /main/resources/META-INF/spring/UUAAR002-osgi.xml para incluir la línea que recupera el servicio de la otra librería, UUAAR001 en nuestro ejemplo
bean-name="uuaaR001"
Donde: El id es el nombre del bean que se va a crear en el contexto spring. Bean-name se usa en la búsqueda de servicio y tiene que coincidir con la referencia (ref) del servicio que se publica. Este id uuaaR001 es con el que se ha indicado en spring en la librería invocada, y nos lo debe indicar quien nos proporcione la librería. XML Spring : Interface la interface que buscamos. Se tiene que definir indicando el nombre compleo, incluyendo el paquete.
02
CONEXIÓN LIBRERÍA --> LIBRERÍA
En la implementación de la librería UUAAR002, clase UUAAR002Impl.java,
debemos dar de alta una variable miembro privada, del tipo del interfaz de la librería a invocar (UUAAR001 en nuestro ejemplo), previa importación de la misma.
private UUAAR001 UUAAR001;
En la implementación de la librería debemos generar un setter público para un campo que deberá llamarse UUAAR001 de acuerdo a nuestro ejemplo, que es el id que pusimos en el tag osgi:reference del paso 3
public void setUUAAR001(UUAAR001 UUAAR001){ this.UUAAR001 = UUAAR001 }
02
CONEXIÓN LIBRERÍA --> LIBRERÍA
En
el fichero -app.xml de la librería se debe inyectar el bean recuperado, UUAAR001, via osgi en la implentacion de UUAAR002. Para ello se deberá añadir en el bean de la implementacion una nueva propiedad. Donde name debe coincidir con el nombre del metodo set pero sin contener la clausula set del mismo. La propiedad ref se deberá rellenar con valor del campo id del servicio osgi importado, como se indica en el punto 3.
A partir de ese momento podremos invocar los métodos de UUAAR001 desde el código de la librería UUAAR002.
View more...
Comments