Integraciones

SDK

Este documento es un kit de desarrollo de plugins para la plataforma Anjana Data.
Requisitos: Java 17  ·  Spring Boot 3.5.x

Estructura del proyecto

Fichero / Clase

Descripción

Ejemplo en tot-plugin-example

pom.xml

Modelo de objeto del proyecto. Define versión, dependencias y configuración de build. Desde v6.0.0 usa anjana-jdk-parent como parent — gestiona versiones vía BOM, sin declararlas explícitamente.

tot-plugin-example/pom.xml
Ref: Apache Maven

application.yaml

Configuración de arranque: puerto, SSL/TLS, Eureka, logging.

src/main/resources/application.yaml
Ref: Spring.io

application-default.yaml

Configuración de conexiones y ARIs. Se despliega junto al jar.

external/application-default.yaml

Clase principal

Anotada con @SpringBootApplication y @TotPlugin. Declara los paquetes base necesarios para arrancar e interactuar con tot.

TotPluginExampleApplication.java

Clase de configuración

Carga propiedades desde YAML. Ver patrón Multi / Única conexión más abajo.

configuration/

Controlador

Anotado con @TotPluginController. Implementa las interfaces de operaciones requeridas y delega en los servicios.

controller/OperationsController.java

Servicios (@Service)

Contienen toda la lógica de integración con la tecnología. Uno por operación.

service/

Árbol de directorios

tot-plugin-example/
├── external/
│   └── application-default.yaml       <- conexiones y ARIs
├── src/main/
│   ├── java/com/anjana/tot/plugin/example/
│   │   ├── configuration/
│   │   │   ├── ExampleMultiConnectionConfiguration.java
│   │   │   ├── ExampleUniqueConnectionConfiguration.java
│   │   │   └── ExampleTechnology.java
│   │   ├── controller/
│   │   │   └── OperationsController.java
│   │   ├── service/
│   │   │   ├── ExtractMetadataService.java
│   │   │   ├── ObjectService.java
│   │   │   ├── PermissionService.java
│   │   │   └── SampleDataService.java
│   │   └── TotPluginExampleApplication.java
│   └── resources/
│       └── application.yaml
└── pom.xml

Patrón de configuración: Multi conexión vs. Única conexión

Las dos estrategias son mutuamente excluyentes. Se elige una en función de si el plugin gestiona una sola conexión o varias.


Múltiples conexiones

Conexión única

Clase base

PluginMultiConnectionProperties

PluginUniqueConnectionProperties

Clase ejemplo

ExampleMultiConnectionConfiguration

ExampleUniqueConnectionConfiguration

Estructura YAML

Array totplugin.connection[]

Propiedades directamente bajo totplugin

Binding de tecnología

En @PostConstruct, vía Spring Boot Binder, al tipo ExampleTechnology

Campo ExampleTechnology technology en la clase

ExampleTechnology (implementa la interfaz Technology) es donde se declaran las propiedades específicas de la tecnología: credenciales, driverClassName, connectionTimeout, etc. Añadir aquí los campos que necesite la integración.

Operaciones disponibles

El controlador implementa las interfaces de la librería tot-plugin-lib. La tabla siguiente resume todas las operaciones:

Operación

Interfaz

Endpoint

DTOs

Cuándo se invoca

Crear grupo (createGroup)

IdentityManagementControllerInterfaceV2

POST /permission/create

DSAFullInfoDTO, DSAOperationResultDTO

Al crear o versionar un DSA con datasets gobernados

Eliminar grupo (deleteGroup)

IdentityManagementControllerInterfaceV2

POST /permission/delete

DSAFullInfoDTO, DSAOperationResultDTO

Al expirar un DSA con datasets gobernados

Eliminar objeto de un grupo (removeObject)

IdentityManagementControllerInterfaceV2

POST /permission/object/remove

ObjectOperationDTO, ObjectOperationResultDTO

Al expirar un dataset gobernado

Asignar usuario (addUser)

IdentityManagementControllerInterfaceV2

POST /permission/user/add

DSAFullInfoDTO, DSAOperationResultDTO

Al adherirse un usuario a un DSA con datasets gobernados

Desasignar usuario (removeUser)

IdentityManagementControllerInterfaceV2

POST /permission/user/remove

DSAFullInfoDTO, DSAOperationResultDTO

Al desadherirse un usuario de un DSA con datasets gobernados

Editar objeto (editObject)

ManagementControllerInterface

POST /object/edit

EditFullInfoDto, ObjectOperationResultDTO

Al reactivar permisos sobre un objeto que vuelve a incluirse en un DSA

Muestreo de datos (sample)

SampleDataControllerInterface

POST /structure/sample

MetadataInfoDTO, SampleDataDTO

Al acceder a la pestaña de muestreo en un dataset gobernado

Listar objetos (metadataList)

ExtractMetadataControllerInterface

POST /metadata/metadataList

ResourceDTO, ResourceStructureDTO

Al solicitar el listado de objetos disponibles en la tecnología

Extraer metadatos (metadataExtract)

ExtractMetadataControllerInterface

POST /metadata/metadataExtract

ResourceMetadataRequestDTO, MetadataImportedDTO

Al extraer los metadatos de un objeto específico de la tecnología

Se recomienda implementar metadataList y metadataExtract de forma asíncrona — las tecnologías externas pueden introducir latencia significativa.

Librerías

Librería

Qué ofrece

Ruta principal

tot-lib

DTOs de mapeo de datos. Utilidades: TotConstants, TotUtils.

tot-lib/src/main/java/com/anjana/tot/core/model

customers-lib

DTOs adicionales y enumeradores tipados.

customers-lib/src/main/java/com/anjana/core/customers/model

tot-plugin-lib

Interfaces de endpoints (interfaces/), clases base de configuración (PluginMultiConnectionProperties, PluginUniqueConnectionProperties), TotPluginException y utilidades para leer Avro, Parquet, Excel y CSV.

tot-plugin-lib/src/main/java/com/anjana/tot/plugin/core

Cómo crear un plugin

1. Parent y dependencias

Usar anjana-jdk-parent como <parent>. Las dependencias comunes están gestionadas por el BOM — no declarar versiones explícitas.

Dependencias opcionales: Avro, Parquet, Excel, CSV

Si el plugin necesita leer estos formatos (como los plugins nativos de Anjana), añadir las siguientes dependencias e incluir el paquete com.anjana.tot.plugin.core.container en el @ComponentScan de la clase principal:

XML
<!-- Apache Avro -->
<dependency>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro</artifactId>
</dependency>

<!-- Apache Parquet -->
<dependency>
  <groupId>org.apache.parquet</groupId>
  <artifactId>parquet-common</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.parquet</groupId>
  <artifactId>parquet-hadoop</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
</dependency>

<!-- Excel -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
</dependency>

<!-- CSV -->
<dependency>
  <groupId>commons-validator</groupId>
  <artifactId>commons-validator</artifactId>
</dependency>

2. Configuración mínima

Con múltiples conexiones (ExampleMultiConnectionConfiguration):

YAML
totplugin:
  server:
    urls:
      - https://yourserver:15000/tot/
    keep-alive-seconds: 60
  connection:
    - name: instance-1
      aris:
        - ari: "anja:totplugin:extract:/infra/tech/zone/"
        - ari: "anja:totplugin:sample:/infra/tech/zone/"
        - ari: "anja:totplugin:im:/infra/tech/zone/"

Con conexión única (ExampleUniqueConnectionConfiguration):

YAML
totplugin:
  server:
    urls:
      - https://yourserver:15000/tot/
    keep-alive-seconds: 60
  aris:
    - ari: "anja:totplugin:extract:/infra/tech/zone/"
    - ari: "anja:totplugin:sample:/infra/tech/zone/"
    - ari: "anja:totplugin:im:/infra/tech/zone/"

Propiedad

Descripción

server.urls

URL de tot, necesaria para registrarse y mantenerse activo en sus registros

server.keep-alive-seconds

Frecuencia de re-registro en tot

connection[].name

Nombre único de la conexión (solo en modo multi-conexión)

connection[].aris / aris

Tripletas (infraestructura, tecnología, zona) con las funcionalidades ofrecidas: extract (extracción de metadatos), sample (muestreo de datos), im (gobierno activo de permisos)

3. Servicios

Los servicios del ejemplo vienen vacíos: es donde se desarrolla toda la lógica de integración con la tecnología. Los nombres de métodos y la estructura se pueden adaptar libremente; lo importante es que sean invocados desde el controlador.