APXSESSION II INDICE 01 Introducción Arquitectura Online 1.1 Revisión de principales componentes 1.2 Transacciones 1.3 Librerías 1.4 Conexiones a BD 1.5 Desarrollo de documentos 02 Ejemplos OnLine 2.1 Data transfer object (DTO´s) 2.2 Creación de transaciones 2.3 Creación de librerías de lógica de negocio aplicativa 2.4 Uso de utilería de logs 2.5 Conexión Transacción --> Librería 2.6 Crear Librería JPA 2.7 Conexión Librería --> Librería CAPACITACIÓN APX | 2 Introducción Arquitectura Online CAPACITACIÓN APX | 3 ➔ DTO: Representación en forma de Bean de una Entidad de Negocio. ➔ Servicio Backend APX: Expone la interfaz RestFul de la API que representa. ➔ Transacción APX: Una transacción es la unidad aplicativa a ejecutar en APX Online. Publica su interfaz para poder ser utilizada por terceros.01 REVISIÓN DE PRINCIPALES COMPONENTS Componentes Online: ➔ Unidad Funcional: Corresponde con componente mínimo de despliegue en PaaS. ➔ Librería APX: Encapsula la lógica de negocio y el acceso a los datos. 4 CAPACITACIÓN APX | 4 . Define la Unidad Transaccional a nivel de lógica aplicativa. Srv.01 REVISIÓN DE PRINCIPALES COMPONENTS Online: La Aplicación dispone de utilidades de Arquitectura que facilitan el acceso a las fuentes de datos. Backend APX Utilidades APX TRX BBDD LIB LIB LIB Motor Reglas Otros PUBLIC LIB Estrategia de Desarrollo: Todo acceso a datos debe de encapsularse en una librería para facilitar su reutilización y control de acceso. 5 CAPACITACIÓN APX | 5 . sean del tipo que sean.01 REVISIÓN DE PRINCIPALES COMPONENTS Utilidades de la Arquitectura APX Online : La Arquitectura APX Online dispone de una serie de utilidades. Estas utilidades se verán en el apartado “utilidades comunes”: – Errores y Warnings – Recuperación/Salida información – … CAPACITACIÓN APX | 6 . 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. 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. Creación de Serv. Backend CAPACITACIÓN APX | 7 . asociando cada operación sobre una entidad en cada una de ellas. 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. Esta clase por tanto no debe modificarse directamente.01 CREACIÓN DE SERV. 8 CAPACITACIÓN APX | 8 . Creación de DTO CAPACITACIÓN APX | 9 . 10 CAPACITACIÓN APX | 10 . 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).01 CREACIÓN DE UN DTO MENÚ PRINCIPAL Un DTO es la representación Java de una Entidad de Negocio. Creación de Transacciones CAPACITACIÓN APX | 11 . 01 CREACIÓN DE TRANSACCIONES MENÚ PRINCIPAL Posibles formas de crear una Transacción a través de diferentes opciones de menú. 12 CAPACITACIÓN APX | 12 . 01 CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (I) La “T” debe mantenerse para La descripción debe tener un cumplir la nomenclatura sentido funcional 13 CAPACITACIÓN APX | 13 . – 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. – Nombre de la transacción: debe tener 4 caracteres (comenzando por “T” y tres números) – Versión: debe contener dos caracteres numéricos. • Si la transacción es14 CAPACITACIÓN APX | 14 . • El Paquete indica el nombre del paquete Java en el que se va a ubicar esta clase. Ambas etiquetas se autogeneran al ir completando los campos de texto.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. Desde ASO. Tipo (String. el protocolo de comunicación siempre será QP05. por tanto esto es transparente para el desarrollador 15 CAPACITACIÓN APX | 15 . Tamaño (valor distinto de 0) . Para ello es necesario indicar. simples o compuestos para las transacciones. Nombre . Long e Int) .01 CREACIÓN DE TRANSACCIONES ASISTENTE DE CREACIÓN (III) El asistente permite crear campos de entrada y de salida. Obligatoriedad (Opcional u obligatorio) Con el protocolo QP05 se permite anidamiento múltiple. de forma obligatoria: . campos de entrada y de salida.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. Códigos http. Query params…) 16 CAPACITACIÓN APX | 16 . 01 CREACIÓN DE TRANSACCIONES ASISTENTE 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 CAPACITACIÓN APX | 17 01 CREACIÓN DE TRANSACCIONES ESTRUCTURA DEL PROYECTO GENERADO: ESQUELETO • src\main\java.- Contiene el código fuente de la lógica aplicativa. El asistente 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 archivo de manifiesto - el archivo XML de parametrización de la transacción - El archivo de configuració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 paquete por defecto que contiene un único test definido que se usará para hacer las pruebas unitarias de la transacción. • src\test\resources.- Contiene los recursos y carpetas 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 CAPACITACIÓN APX | 18 01 CREACIÓN DE TRANSACCIONES ESTRUCTURA DEL PROYECTO GENERADO: PRUEBAS JUNIT (I) Las pruebas unitarias (JUnit) están definidas en la clase UUAAT00101ESTransactionTest, donde: - UUAA.- Identifica el código de la aplicación - T001.- Identifica el resto 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 defecto se creará un test que lanzará la transacción sin ningún parámetro de entrada. 19 CAPACITACIÓN APX | 19 Creación de Librerías CAPACITACIÓN APX | 20 . 01 CREACIÓN DE LIBRERÍAS MENÚ PRINCIPAL Posibles formas de crear una Librería a través de diferentes opciones de menú. 21 CAPACITACIÓN APX | 21 . 01 CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN • Todos los campos son obligatorios y tienen sus restricciones correspondientes. Esta etiqueta se autogenera al ir completando los campos de texto.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. – Nombre de la librería: debe tener 4 caracteres (comenzando por “R” y tres números) – Versión: recomendable con formato X. La “R” debe mantenerse para cumplir la nomenclatura 22 CAPACITACIÓN APX | 22 .Y. – Código de aplicación: debe ser de 4 caracteres. es que el desarrollador pueda codificar la lógica aplicativa de su transacción. sin que para ello sea necesario ningún . CAPACITACIÓN APX | 23 . acceso a datos. ni utilidad proporcionada por la Arquitectura • 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.01 CREACIÓN DE LIBRERÍAS GENERICO • El propósito de una librería. y la parte de la implementación donde estará localizada toda la lógica de negocio de las librerías. No tiene que ser modificado por el aplicativo. • 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. Creación de Conexiones a BD CAPACITACIÓN APX | 24 . 01 CAPA DE ACCESO A DATOS DESACOPLADA APX DATA ACCESS LAYER Conectores DECOUPLED IMS/CICS XA Driver ORACLE MongoDB Elastic Search ✓ Acceso a datos a través de JDBC o JPA ✓ La Arquitectura se encarga de gestionar la ejecución del commit/rollback REPLICACION ETL REPLICA CAPACITACIÓN APX | 25 . 01 CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (I) Pueden definirse varios nombres lógicos. cada uno asociado a una DB diferente 26 CAPACITACIÓN APX | 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. 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 CAPACITACIÓN APX | 27 . será necesario indicar un nombre para el recurso lógico de acceso a DB (se explicará más adelante) • Tras esto. createNamedQuery(query) this.jpaUtils.XXX() • Se recuperará el nombre del recurso lógico contra el que se quiera ejecutar la Query • Cada nombre de un recurso lógico. desde la clase de lógica de negocio: this. representará una conexión con una DB diferente 28 CAPACITACIÓN APX | 28 .jpaUtils.get("db1").get("db1").01 CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (III) • Para usar la utilidad de APX Online referente a 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 CAPACITACIÓN APX | 29 .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/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 CAPACITACIÓN APX | 30 .01 CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA (V) • Para las librerías de tipo JPA. 01 CREACIÓN DE LIBRERÍAS ASISTENTE DE CREACIÓN: LIBRERÍA JPA ( Y VI) 31 CAPACITACIÓN APX | 31 . 01 DESARROLLO DE DOCUMENTOS CAPACITACIÓN APX | 32 . Ejemplos OnLine CAPACITACIÓN APX | 33 . con las propiedades: long codigo String name long especialidad String nivelServicio String fechaAlta String fechaModifica CAPACITACIÓN APX | 34 .05 DATA TRANSFER OBJECT (DTO´S) Desarrollar el DTO. TipoBienDTO. 02 CREACIÓN DE TRANSACIONES Desarrollar las transacciones: MAPPT001 MAPPT002 Ver archivos: Transaccion_MAPPT001-01-MX.xlsx CAPACITACIÓN APX | 35 .xlsx y Transaccion_MAPPT002-01-MX. Ver archivos: MAPPR001*. MAPPR002.java CAPACITACIÓN APX | 36 . e implementar el método de alta y consulta de la información de tipos de bien. e implementar el método de alta y consulta de la información en la BD.java y MAPPR002*.02 CREACIÓN DE LIBRERÍAS DE LÓGICA DE NEGOCIO APLICATIVA Desarrollar librerías: MAPPR001. Z --> Nombre de la librería implementación.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 CAPACITACIÓN APX | 37 .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.Y. con: • UUAA: UUAA de la librería • R: Se añade por defecto para indicar que se trata de “rutina” • X. con: • UUAARXXXIMPL-X. 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.xml • Recupera todas las dependencias con otros proyectos 38 CAPACITACIÓN APX | 38 . existe una regla Sonar para su comprobación • Fichero de dependencias pom. impl : Para las clases de la librerías que implementan los métodos de las interfaces anteriormente indicadas.<uuaa>.rxxx: Para las interfaces de los métodos ofrecidos por las librerías.bbva. La longitud máxima del nombre del método es de 48 caracteres 39 CAPACITACIÓN APX | 39 .bbva. • com.01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: NOMENCLATURA • Nomenclatura de paquetes: • com. para su consumo por transacciones y otras librerías.lib.<uuaa>.lib. • 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.rxxx. mongoDBUtils = mongoDBUtils.applicationConfigurationService = applicationConfigurationService. } 40 CAPACITACIÓN APX | 40 .01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: CLASE ABSTRACTA • Para cualquier tipo de librería. por ejemplo para MongoDB: public void setMongoDBUtils(MongoDBUtils mongoDBUtils) { this. } • Para las librerías de tipos “especiales” se recuperará el servicio asociado a su tipo. 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. 01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: CLASE IMPLEMENTACIÓN • Para cualquier tipo de librería. • Esta clase se crea solamente con un método “execute” para que el desarrollador implemente la interfaz vista anteriormente. deberá ser implementado en esta clase. • Al ser una implementación de la interfaz anterior. cualquier nuevo método “execute” que se incluya en dicha interfaz. 41 CAPACITACIÓN APX | 41 . en el proyecto de implementación se generará la clase de implementación principal. JdbcUtilsFactory" /> • A su vez. Por ejemplo para JDBC: <osgi:reference id="jdbcUtilsFactory" bean-name="jdbcUtilsFactory“ interface="com.utility. también se define el servicio que exporta la librería como tal: <osgi:service id=“uuaaR001Osgi" ref=“uuaaT001“ interface="com.bbva.jdbc. llamado UUAAR001-arc-osgi.bbva.r001.factory.lib.configuration.UUAAR001" /> • Este fichero no debe modificarse 42 CAPACITACIÓN APX | 42 .connector.qwpu.ApplicationConfigurationServiceFactory" /> • Para las librerías “especiales” se importará su servicio asociado.elara.bbva.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.application.elara.factory. • 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 <osgi:reference id="applicationConfigurationServiceFactory“ bean-name="applicationConfigurationServiceFactory" interface="com.xml.manager. • Este fichero no deberá modificarse según se vayan creando interacciones entre las diferentes librerías aplicativas. • Sólo las librerías de infraestructura pueden publicar servicios de uso genérico 43 CAPACITACIÓN APX | 43 . • A su vez.xml.01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: OSGI APLICATIVO • Para todos los tipos de librerías se generará. también se definirán servicios que la librería recoja de otras librerías. llamado UUAAR001-app-osgi. • En este fichero se definen los servicios que se importan a la librería desde la otras librerías. en /src/main/resources/ un fichero de servicios OSGi de aplicativo. xml. • Este fichero no debe modificarse 44 CAPACITACIÓN APX | 44 . también se define el bean asociado a la clase. llamado UUAAR001-arc. • En este fichero se definen los beans que se asociarán a los servicios que se recupera de la arquitectura: • Para todas las librerías se generará el bean de configuración • Para las librerías “especiales” se generarán los beans asociados a su servicio correspondiente • A su vez.01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: BEANS ARQUITECTURA • Para todos los tipos de librerías se generará. para su exportación vía servicio OSGi. en /src/main/resources/ un fichero de beans de Spring de arquitectura. llamado UUAAR001-app.01 CREACIÓN DE LIBRERÍAS COMPONENTES DE LAS LIBRERÍAS: BEANS APLICATIVO • Para todos los tipos de librerías se generará.xml. • En este fichero se definen los beans que se asociarán a los servicios que se recuperan e importan de otras librerías aplicativas: • Por defecto se crea el bean asociado a la librería • Aquí también se definirán el resto de beans que el desarrollador necesite para desarrollar su lógica de negocio. 45 CAPACITACIÓN APX | 45 . en /src/main/resources/ un fichero de beans de Spring aplicativos. 02 USO DE UTILERÍA DE LOGS Desarrollar ver uso en la implementación de la librería: Ver archivos: MAPPR001*.java CAPACITACIÓN APX | 46 . Object … args) : Imprime información con el nivel máximo de detalle.slf4j: Logger LOGGER = LoggerFactory. los cuales no impiden que la aplicación continúe su flujo.class). Object … args) : Imprime advertencias o fallos de la aplicación no críticos.getLogger(UUAAR000Impl.trace(String msg. ● SL4FJ provee varios métodos para manejo de trazas. • LOGGER. Recibe un mensaje y n argumentos (opcionales) para complementar el mensaje a imprimir. • LOGGER. Object … args) : Imprime información útil que permite ver el progreso de la aplicación. por default genera la siguiente línea con la creación de un logger del paquete org. Object … args) : Permite imprimir datos informativos con detalle fino que son útiles para depurar la aplicación.debug(String msg.warn(String msg. 47 CAPACITACIÓN APX | 47 .info(String msg.01 UTILIDADES COMUNES MANEJO DE TRAZAS(I) LOGGER SLF4j ● Cuando se crea un nuevo componente con el IDE de Desarrollo. entre los cuales se encuentran: • LOGGER. • LOGGER. 01 48 CAPACITACIÓN APX | 48 . • Como concepto de desarrollo y gestión de los errores ocurridos durante el stack de ejecución de una transacción. Error o Aviso.01 UTILIDADES COMUNES ERRORES Y WARNINGS (II) • A nivel de transacciones y de librerías aplicativas. 49 CAPACITACIÓN APX | 49 . Esta tiene el contexto de las librerías que está invocando/orquestando y puede determinar si ante un Advice debe salir por Ok. sea del tipo que sea. Este método no fija la severidad del aviso. la severidad de la ejecución lo debe de determinar la propia Tx. puesto que ésta es contextual a la transacción y debe realizarse desde la misma mediante el método setSeverity o setHttpResponseCode. que añade el aviso a una lista. existe la posibilidad de crear errores y avisos controlados • En caso de querer mandar un aviso desde una librería o la transacción. se usará el método addAdvice. ENR 4. 422 → Severity.OK 2. Códigos de Retorno de la TX 1. ENR(“06”) → Rechazado + Código de error (sin Rollback) 4. 500 → Severity.ERROR Nota: La severidad ERROR(12) es de uso sólo en Arquitectura. 200. 206 → Severity. EWR(“08”) → Rechazado + Código de error (con Rollback) 5.01 INTRODUCCIÓN ERRORES Y WARNINGS (III) La Arquitectura proporciona los métodos “addAdvice() al Aplicativo para notificar un error o warning en el código de la transacción. ERROR(“12”)→ Rechazado (error grave) + Código de error Códigos HTTP vs Códigos de Transacción 1. 204. 409.WARN 3. 409. WARN(“04”) → OK + Código de aviso 3. 201. 204. 206 → Severity. 422 → Severity. OK (“00”) → OK 2. 404. 404.EWR 5. 201. las aplicaciones no pueden utilizarla 50 CAPACITACIÓN APX | 50 . 202. 202. Si quisieramos por ejemplo invocar a una librería UUAAR001.0</version> </dependency> CAPACITACIÓN APX | 51 .0.xml de la transacción invocadora debemos importar la dependencia de la librería a invocar.uuaa</groupId> <artifactId>UUAAR001</artifactId> <version>0.02 CONEXIÓN TRANSACCIÓN --> LIBRERÍA Para usar una librería online desde una transacción se tiene que seguir los siguientes pasos: En el pom. deberíamos incluir lo siguiente <dependency> <groupId>com.bbva. r001.*.manifest}".02 CONEXIÓN TRANSACCIÓN --> LIBRERÍA En el mismo pom. org.osgi.version="${osgi.version="0.lib.uuaa. com. spring.bbva.framework.elara. * </Import-Package> CAPACITACIÓN APX | 52 .bbva.version.xml tenemos que modificar el maven-bundle-plugin el tag Import-Packages para añadir el nombre del paquete donde está la interfaz: <Import-Package> com.0”. para nuestro ejemplo. incluiriamos la siguiente línea: UUAAR001 libUUAAR001 = this.bbva.uuaa.bbva.lib.class).uuaa. donde com.lib.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 CAPACITACIÓN APX | 53 .r001.UUAAR001.r001.02 CONEXIÓN TRANSACCIÓN --> LIBRERÍA Para obtener una instancia de la librería que queremos utilizar. en el método execute de la transacción.getServiceLibrary(com. java CAPACITACIÓN APX | 54 . Ver archivos: MAPPR002*.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. El pom.0.uuaa</groupId> <artifactId>UUAAR001</artifactId> <version>0. Tomaremos como ejemplo una librería llamada UUAAR001 que será invocada desde UUAAR002 En el pom.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. <dependency> <groupId>com.0.0</version> </dependency> CAPACITACIÓN APX | 55 .xml del invocador debemos importar la dependencia de la librería que contiene el interfaz.bbva.xml será el de UUAAR002IMPL-0.0. org.version.0 al igual que los paquetes com.bbva. spring. CAPACITACIÓN APX | 56 .framework.version="${osgi.*.bbva.version="0.lib.bbva.bbva. com.version.lib. * </Import-Package> NOTA: en caso de que la variable osgi.xml tenemos que modificar en el maven-bundle-plugin el tag Import-Packages para añadir el nombre del paquete donde está el interfaz <Import-Package> com.0”.02 CONEXIÓN LIBRERÍA --> LIBRERÍA En el mismo pom.osgi.manifest}".manifest no esté definida en el pom se establecen los paquetes com.elara con versión 0.uuaa.r001.r001.uuaa.elara. el siguiente /main/resources/META-INF/spring/UUAAR002-osgi..bbva. y nos lo debe indicar quien nos proporcione la librería. /> Interface la interface que buscamos...r001. Se tiene que definir indicando el nombre compleo. CAPACITACIÓN APX | 57 .xml para incluir la línea que recupera el servicio de la otra librería.xml o en caso de no existir.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. incluyendo el paquete. UUAAR001 en nuestro ejemplo <osgi:reference id="UUAAR001" bean-name="uuaaR001" interface="com.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.uuaa. XML Spring : <bean id="uuaaR001" class=.lib. 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. clase UUAAR002Impl.java. previa importación de la misma. del tipo del interfaz de la librería a invocar (UUAAR001 en nuestro ejemplo).02 CONEXIÓN LIBRERÍA --> LIBRERÍA En la implementación de la librería UUAAR002. debemos dar de alta una variable miembro privada.UUAAR001 = UUAAR001 } CAPACITACIÓN APX | 58 . que es el id que pusimos en el tag osgi:reference del paso 3 public void setUUAAR001(UUAAR001 UUAAR001){ this. private UUAAR001 UUAAR001. como se indica en el punto 3.lib.UUAAR002Impl" parent="uuaaR002Abstract" > <property name="UUAAR001" ref="UUAAR001"/> </bean> A partir de ese momento podremos invocar los métodos de UUAAR001 desde el código de la librería UUAAR002.impl. CAPACITACIÓN APX | 59 . UUAAR001. <bean id="uuaaR002" class="com.02 CONEXIÓN LIBRERÍA --> LIBRERÍA En el fichero <libreria>-app.uuaa.r002. 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.xml de la librería se debe inyectar el bean recuperado. via osgi en la implentacion de UUAAR002.bbva. Para ello se deberá añadir en el bean de la implementacion una nueva propiedad. Preguntas/Dudas CAPACITACIÓN APX | 60 .