Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
ada:howto:sicoferp:factory:migracionsicoferp:process:backend:guiaaccesoadatos [2020/05/12 20:30] carlos.torres |
ada:howto:sicoferp:factory:migracionsicoferp:process:backend:guiaaccesoadatos [2020/05/12 22:43] (actual) carlos.torres |
||
---|---|---|---|
Línea 13: | Línea 13: | ||
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: | 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: | ||
- | <code> | + | <code xml> |
<dependency> | <dependency> | ||
<groupId>co.ada.models</groupId> | <groupId>co.ada.models</groupId> | ||
Línea 21: | Línea 21: | ||
</code> | </code> | ||
- | El desarrollador debe utilizar la versión más reciente del proyecto la cual puede ser consultada en la sección | + | 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]] |
- | ==== Configuración Centralizada ==== | + | ==== Como usar el Dominio de Clases de Entidades Comunes ==== |
- | * Configuración de Registro y Descubrimiento (Cloud Config / Eureka) | + | Para usar el Dominio de Clases de Entidades Comunes siga los siguientes pasos: |
- | * Configuración de Routing (Zuul) | + | |
- | * Base de Datos Centralizada | + | |
- | ==== Configuración Local ==== | + | * Registre la dependencia actualizada del Dominio de Clases de Entidades Comunes. |
- | * Lógica del Negocio | + | * 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. |
+ | * Importe las clases que desea utilizar en las clases del microservicio. | ||
- | ==== Archivos de Configuración ==== | + | ==== Implementar soporte de bases de datos ==== |
- | Se define los siguientes tipos de archivos de configuración | + | Para implementar el soporte de bases de datos realice lso 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 ==== | + | === Paso 1 === |
- | * 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 la dependencia actualizada del Dominio de Clases de Entidades Comunes. |
- | * El nombre del archivo de configuración centralizada debe ser **bootstrap.yml** | + | |
- | * 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) ===== | + | === Paso 2 === |
- | 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. | + | cree un paquete llamado dbconnect |
- | 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. | + | |
+ | === Paso 3 === | ||
+ | Cree el datasource interceptor como se muestra continuación. | ||
- | * Cada clase/entidad no debe tener lógica de negocio. | + | <code java> |
- | * Cada clase/entidad debe describir la estructura en su totalidad | + | package co.ada.test.microservice.prueba.dbconnect; |
- | * 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 ==== | + | import org.springframework.stereotype.Component; |
- | 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): | + | |
- | * 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): | + | |
- | * Producción (prod): | + | |
- | ==== Dependencia Maven ==== | + | import co.ada.db.config.DataSourceInterceptor; |
- | Esta es la dependencia que debe agregar en el POM del microservicio. | + | |
- | <code> | + | @Component |
- | <dependency> | + | public class MyDataSourceInterceptor extends DataSourceInterceptor {} |
- | <groupId>co.ada.models</groupId> | + | |
- | <artifactId>ModelsClassesADA</artifactId> | + | |
- | <version>0.0.1-SNAPSHOT</version> | + | |
- | </dependency> | + | |
</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]] |