Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
|
ada:howto:sicoferp:factory:migracionsicoferp:process:backend:guiaaccesoadatos [2020/05/12 20:25] carlos.torres creado |
ada:howto:sicoferp:factory:migracionsicoferp:process:backend:guiaaccesoadatos [2020/05/12 22:43] (actual) carlos.torres |
||
|---|---|---|---|
| Línea 11: | Línea 11: | ||
| ===== Configuraciones del Microservicio ===== | ===== Configuraciones del Microservicio ===== | ||
| - | Todo microservicio debe tener su configuración centralizada en el repositorio git definido en la fabrica, sin embargo existen situaciones donde un microservicio puede requerir configuraciones particulares. A continuación se definen los escenarios donde aplicarán cada tipo de configuración: | + | Todo microservicio que realice persistencia de datos o que consuma servicios que devuelvan entidades debe incluir en su archivo de configuración Maven **POM**((https://www.tutorialspoint.com/maven/maven_pom.htm)) la dependencia del proyecto del Dominio de clases y entidades Comunes el cual se describe a continuación: |
| - | ==== Configuración Centralizada ==== | + | <code xml> |
| - | * Configuración de Registro y Descubrimiento (Cloud Config / Eureka) | + | <dependency> |
| - | * Configuración de Routing (Zuul) | + | <groupId>co.ada.models</groupId> |
| - | * Base de Datos Centralizada | + | <artifactId>ModelsClassesADA</artifactId> |
| + | <version>0.0.1-SNAPSHOT</version> | ||
| + | </dependency> | ||
| + | </code> | ||
| - | ==== Configuración Local ==== | + | El desarrollador debe utilizar la versión más reciente del proyecto la cual puede ser consultada en la sección [[ada:howto:sicoferp:factory:migracionsicoferp:process:backend:apiversion | Versionamiento de APIs]] |
| - | * Lógica del Negocio | + | |
| - | ==== Archivos de Configuración ==== | + | ==== Como usar el Dominio de Clases de Entidades Comunes ==== |
| - | Se define los siguientes tipos de archivos de configuración | + | Para usar el Dominio de Clases de Entidades Comunes siga los siguientes pasos: |
| - | * Configuración Centralizada: Archivos [[https://es.wikipedia.org/wiki/YAML|Yaml]] | + | |
| - | * Configuración Local: Archivos [[https://en.wikipedia.org/wiki/.properties|Properties]] | + | |
| - | ==== Reglas de Nombre del Microservicio y Archivo de Configuración ==== | + | * Registre la dependencia actualizada del Dominio de Clases de Entidades Comunes. |
| - | * El nombre de la aplicación del microservicio debe ser definido de acuerdo al nombre exacto del paquete principal **Ejemplo**: //co.ada.sicof.terceros// | + | * Registre en la clase principal del Microservicio la anotación <code java>@EntityScan({"array de clases o paquetes"}) </code>con las clases o paquetes que desea utilizar. |
| - | * El nombre del archivo de configuración centralizada debe ser **bootstrap.yml** | + | * Importe las clases que desea utilizar en las clases del microservicio. |
| - | * El nombre del archivo de configuracion local debe ser **application.properties** | + | |
| - | * Deben existir configuraciones por cada ambiente de despliegue en el repositorio de configuración y cada archivo de configuración debe indica el perfil los cuales son dev: desarrollo - test: QA - prod: producción **Ejemplo:** Microservicio: Terceros, Paquete Principal: //co.ada.sicof.terceros//, Nombre del Microservicio spring.application.name=co.ada.sicof.terceros, perfil de ambiente de despliegue de desarrollo: dev, Nombre del archivo de configuración: **co.ada.sicof.terceros-dev.yml** | + | |
| - | * La creación de los archivos de configuración centralizada deben ser solicitados al administrador del repositorio de configuración (Pablo Quintana / Carlos Torres). | + | |
| - | ===== Dominio de Clases de Entidades Comunes (Models) ===== | + | ==== Implementar soporte de bases de datos ==== |
| - | En la arquitectura propuesta es muy común que existan microservicios que proveen información y otros que la procesan, por esta razon hace necesario el conocimiento de las estructuras en las cuales se transportan los datos ya que en muchos escenarios persisten en el sistema. | + | Para implementar el soporte de bases de datos realice lso siguientes pasos: |
| - | Teniendo presente esta situación recurrente se crea un domino de clases y entidades comunes (proyecto spring) donde se van a registrar todas la entidades que puedan ser requeridas por microservicios. A ontinuación se definen las reglas a considerar para incluir una entidad. | + | |
| - | * Cada clase/entidad no debe tener lógica de negocio. | + | === Paso 1 === |
| - | * Cada clase/entidad debe describir la estructura en su totalidad | + | Registre la dependencia actualizada del Dominio de Clases de Entidades Comunes. |
| - | * Cada clase/entidad debe estar agrupada según la estructura de definición de su parque principal teniendo presente que el nombre base empezará con la estrucutra base del domino de clases y entidades comunes Ejemplo: Para el microservicio **co.ada.sicof.contabilidad.tercero** su agrupación de entidades en el proyecto de dominio de clases de entidades comunes debe ser **co.ada.models.sicof.contabilidad.tercero** | + | |
| - | * Se puede inlcuir definiciones resumidas de una entidad. | + | |
| - | * La inclusión de esas entidades debe ser validada y aprobada por el administrador del dominio de clases y entidades comunes. | + | |
| - | ==== Como utilizar el proyecto Models ==== | + | === Paso 2 === |
| - | De acuerdo al ambiente de despliegue el proyecto domino de clases y entidades comunes estará en uno de los siguientes repositorios (versión compilada .jar): | + | cree un paquete llamado dbconnect |
| - | * Desarrollo (dev): http://adacsc.co:1443/svn/repository/ADA/SICOFERP/fuentes/branches/development/core/ModelsClassesADA/target/CommonsClassesADA-0.0.1-SNAPSHOT.jar | + | |
| - | * Pruebas/calidad (qa): | + | === Paso 3 === |
| - | * Producción (prod): | + | Cree el datasource interceptor como se muestra continuación. |
| - | ==== Dependencia Maven ==== | + | <code java> |
| - | Esta es la dependencia que debe agregar en el POM del microservicio. | + | package co.ada.test.microservice.prueba.dbconnect; |
| - | <code> | + | import org.springframework.stereotype.Component; |
| - | <dependency> | + | |
| - | <groupId>co.ada.models</groupId> | + | import co.ada.db.config.DataSourceInterceptor; |
| - | <artifactId>ModelsClassesADA</artifactId> | + | |
| - | <version>0.0.1-SNAPSHOT</version> | + | @Component |
| - | </dependency> | + | public class MyDataSourceInterceptor extends DataSourceInterceptor {} |
| </code> | </code> | ||
| - | Es responsabilidad del desarrollador utilizar la versión más reciente las cual será publica en la sección correspondiente de la wiki. | + | === Paso 4 === |
| + | Cree la clase de configuración como se muestra continuación. | ||
| - | Para utilizar el dominio de clases y entidades comunes en los micoservicios siga los siguientes pasos: | + | <code java>package co.ada.test.microservice.prueba.dbconnect; |
| - | - Identifique el ambiente dev, qa o prod a utilizar | + | import org.springframework.context.annotation.Configuration; |
| - | - Identifique la versión actual (muy importante para evitar versiones obsoletas) | + | |
| - | - Importe la dependencia en Maven | + | |
| - | - Agregue la dependencia @EntityScan con el array de los paquetes o clases que necesita en la clase principal del microservicio. | + | |
| - | + | import co.ada.db.config.WebConfig; | |
| - | [[ada:howto:sicoferp:factory:migracionsicoferp:process:backend|←Volver atrás]] | + | |
| + | @Configuration | ||
| + | public class MyWebConfig extends WebConfig {} | ||
| + | </code> | ||
| + | |||
| + | === Paso 5 === | ||
| + | Cree la clase de configuración de repositorio teniendo presente el siguiente ejemplo: | ||
| + | |||
| + | <code java> | ||
| + | package co.ada.test.microservice.prueba.dbconnect; | ||
| + | |||
| + | import org.springframework.beans.factory.annotation.Autowired; | ||
| + | import org.springframework.beans.factory.annotation.Qualifier; | ||
| + | import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; | ||
| + | import org.springframework.context.annotation.Bean; | ||
| + | import org.springframework.context.annotation.Configuration; | ||
| + | import org.springframework.data.jpa.repository.config.EnableJpaRepositories; | ||
| + | import org.springframework.orm.jpa.JpaTransactionManager; | ||
| + | import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; | ||
| + | import org.springframework.transaction.annotation.EnableTransactionManagement; | ||
| + | |||
| + | import co.ada.db.config.DataSourceConfigBase; | ||
| + | import co.ada.db.config.IDataSourceConfig; | ||
| + | |||
| + | @Configuration | ||
| + | @EnableJpaRepositories( | ||
| + | basePackages = "co.ada.test.microservice.prueba.repo",//Ver Nota 1 | ||
| + | transactionManagerRef = "transcationManager", | ||
| + | entityManagerFactoryRef = "entityManager") | ||
| + | @EnableTransactionManagement | ||
| + | public class MyDataSourceConfig extends DataSourceConfigBase { | ||
| + | |||
| + | @Bean(name = "entityManager") | ||
| + | public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder) { | ||
| + | return builder.dataSource(dataSource()).packages("co.ada.models.microservicio.usuario").build();//Ver Nota 2 | ||
| + | } | ||
| + | |||
| + | @Bean(name = "transcationManager") | ||
| + | public JpaTransactionManager transactionManager(@Autowired @Qualifier("entityManager") LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) { | ||
| + | return new JpaTransactionManager(entityManagerFactoryBean.getObject()); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | == Nota 1 == | ||
| + | Registre el paquete local donde tiene los repositorios / dao de acceso a datos. | ||
| + | |||
| + | == Nota 2 == | ||
| + | Registre el paquete de entidades del Dominio de Clases de Entidades Comunes que utilizará con los repositorio. | ||
| + | |||
| + | ==== Repositorios ==== | ||
| + | Se define en el Dominio de Clases de Entidades Comunes el repositorio estandar para acceso a datos el cual debe ser utilizado en todos los microservicios que requieran esa funcionalidad. El repositorio esta ubica en el paquete co.ada.db.config.repository y contiene la clase que a continuación se describe: | ||
| + | |||
| + | <code java> | ||
| + | package co.ada.db.config.repository; | ||
| + | |||
| + | import org.springframework.data.jpa.repository.JpaRepository; | ||
| + | import org.springframework.stereotype.Repository; | ||
| + | |||
| + | @Repository | ||
| + | public interface JpaAdaRepository<T, ID> extends JpaRepository<T, ID> {} | ||
| + | </code> | ||
| + | |||
| + | [[ada:howto:sicoferp:factory:migracionsicoferp:process:backend|←Volver atrás]] | ||