Árvore de páginas

01. DADOS GERAIS

Produto:

TOTVS Agro API Hub


Linha de Produto:

Linha PIMS

Segmento:

Agroindústria

Módulo:

Framework

Função:Todas
País:Brasil
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DAGROFRAME-4860

02. SITUAÇÃO/REQUISITO

Adequar o sistema para suportar múltiplas bases de dados externas, permitindo que os serviços da API trabalhem com diferentes produtos (ex: Bioenergia, Indústria-MI, Indústria-PI) de forma dinâmica, conforme o contexto da requisição.
E também adaptar o instalador .bat do API-Hub para tratar múltiplas bases.

03. SOLUÇÃO

  • Alteração do application.yml para utilizar a propriedade ta-api-hub.products, possibilitando configuração de múltiplos produtos e seus respectivos datasources: 
    • Como era/ficou:

      Propriedade ta-api-hub:
      (Antes)
      ta-api-hub:
        credentials:
          client-id:
          client-secret:
        product:
          name:
          default-instance:
          default-company-ind:
          datasource:
            driver-class-name:
            url:
            username:
            password:
            test-connection:
      
      (Depois)
      ta-api-hub:
        default-instance:
        default-company:
        products:
          bioenergia:
            enabled:
            name:
            datasource:
              driver-class-name:
              url:
              username:
              password:
              test-connection:
          industria-mi:
            enabled:
            name:
            datasource:
              driver-class-name:
              url:
              username:
              password:
              test-connection:
          industria-pi:
            enabled:
            name:
            datasource:
              driver-class-name:
              url:
              username:
              password:
              test-connection:
    • As propriedades default-instance e default-company pertencem ao escopo de instância do produto ta-api-hub;
    • É obrigatório preencher pelo menos as propriedades do produto Bioenergia.
  • Criação das classes ExternalProductContext, ProductDataSourceConfig, ExternalProductFilter e da anotação ExternalProductAware para controle dinâmico do contexto de produto externo por requisição;
  • Modificação da DataSourceUtil para gerenciar múltiplos datasources, templates e named templates conforme o produto ativo;
  • Foi necessário revisar e atualizar todos os pontos do código que utilizavam @Value para injeção de propriedades, especialmente nas classes BO, devido à nova estrutura do application.yml. Isso garantiu que as configurações fossem corretamente lidas conforme o novo padrão de organização do arquivo de propriedades;
  • Adição da chave de cabeçalho X-Product para utilizar os endpoints dos controladores anotados com @ExternalProductAware (atualmente, MigrationsController e FunctionsController, ou seja, /admin/migrations e /functions). Nesses casos, o cabeçalho é obrigatório para identificar explicitamente o produto externo da requisição, garantindo o isolamento e a seleção correta da base de dados. Para os demais controladores, o produto é resolvido automaticamente pelo contexto interno da API, por meio do método getProduct presente em classes como EntityHe, QueryHe e MobileServices, não sendo necessário informar o cabeçalho.
  • Alteração do install.bat para tratar as propriedades ta-api-hub.products, default-instance e default-company nos argumentos passados para a estrutura do arquivo ta-api-hub.xml.
    • Ainda sendo obrigatório preencher pelo menos as propriedades do produto Bioenergia.
    • Podendo habilitar ou não o preenchimento das propriedades dos produtos Industria-MI e Industria-PI.


Se o produto já estiver instalado e deseja configurar uma nova base ou ajustar a instalação existente, siga esses passos:

  • Pare o serviço do ta-api-hub;

  • Abra o arquivo ta-api-hub.xml:

 

    • Adeque a estrutura do <arguments></arguments> conforme necessário:
      • Como Fazer? para cada propriedade que deseja configurar, faça uma análise do (Antes) e o (Depois) referenciado na primeira imagem após o início da SOLUÇÃO;
      • Exemplo de DE:  -Dta-api-hub.product.name=BIOENERGIA PARA: -Dta-api-hub.products.bioenergia.name=BIOENERGIA;
      • Se houver necessidade de inserir uma nova conexão com o banco de dados do INDUSTRIA_PI ou INDUSTRIA_MI, esse bloco de código abaixo é um exemplo do que deve ser inserido/ajustado nos argumentos:

        Exemplo de arguments modificado
        <arguments>
        ...
        	-Dta-api-hub.products.industria-mi.enabled=true
        	-Dta-api-hub.products.industria-mi.name=INDUSTRIA_MI
        	-Dta-api-hub.products.industria-mi.datasource.driver-class-name=oracle.jdbc.OracleDriver
        	-Dta-api-hub.products.industria-mi.datasource.url=jdbc:oracle:thin:@localhost:1521:TESTE
        	-Dta-api-hub.products.industria-mi.datasource.username=TESTE
        	-Dta-api-hub.products.industria-mi.datasource.password=TESTE
        	-Dta-api-hub.products.industria-mi.datasource.test-connection="SELECT 1 FROM DUAL"
        ...
        </arguments>
  • Salve o XML modificado e inicie novamente o serviço que foi parado.

Observação: Este procedimento só é necessário se o produto foi instalado apenas com a base do BIOENERGIA e não houve configuração do INDUSTRIA_PI ou INDUSTRIA_MI, ou se algum argumento foi configurado incorretamente. Alternativamente, uma nova desinstalação seguida de instalação também resolve o problema.


Resumo / Considerações

1. APIs de Entity: Tabela "entity_he" = revisar preenchimento de coluna "product" para as APIs, validando se estão corretamente catalogadas como "BIOENERGIA", "INDUSTRIA_PI" ou "INDUSTRIA_MI";

2. APIs de Query: Mesmo conceito do item 1, porém para a tabela "query_he" e coluna "product";

3. APIs de Mobilidade (descontinuação Portal Mobile): Mesmo conceito dos itens 1 e 2, porém para a tabela "mobile_services" e coluna "product";

4. Por fim, o uso do header "X-Product" aplica-se a endpoints (APIs) anotados com @ExternalProductAware (atualmente, MigrationsController e FunctionsController, ou seja, /admin/migrations e /functions).


04. DEMAIS INFORMAÇÕES

Não se aplica.

05. ASSUNTOS RELACIONADOS

Arquitetura e Tecnologia - TOTVS Agro API Hub


  • Sem rótulos