Saltar para o conteúdo principal
Versão: 20 R6

Datastores remotos

Um datastore remoto é uma referência, em uma aplicação 4D local (4D ou 4D Server), a um [datastore] (dsMapping.md#datastore) armazenado em outra aplicação 4D.

O aplicativo 4D local se conecta ao datastore remoto e faz referência a ele por meio de uma chamada ao comando Open datastore.

Na máquina remota, 4D abre uma sessão para lidar com solicitações da aplicação que chamam Open datastore. As solicitações usam internamente a API REST, o que significa que elas podem exigir licenças disponíveis.

Usando sessões web

Quando você trabalha com um datastore remoto referenciado por meio de chamadas para o comando Open datastore, a conexão com os processos solicitantes é tratada por meio de web sessions na máquina remota.

A sessão web criada no datastore remoto é identificada usando uma ID de sessão interna que está associada a localID no lado do aplicativo 4D. Essa sessão gerencia automaticamente o acesso a dados, seleções de entidades ou entidades.

O localID é local para a máquina que se conecta ao repositório de dados remoto, o que significa:

  • Se outros processos do mesmo aplicativo precisarem acessar o mesmo repositório de dados remoto, eles poderão usar o mesmo localID e, portanto, compartilhar a mesma sessão.
  • Se outro processo da mesma aplicação abrir o mesmo datastore remoto, mas com outro localID, ele criará uma sessão no datastore remoto.
  • Se outra máquina se conectar ao mesmo datastore remoto com o mesmo localID, ela criará outra sessão com outro cookie.

Estes princípios são ilustrados nos gráficos seguintes:

Visionamento de sessões

Os processos que gerenciam sessões para acesso ao armazenamento de dados são mostrados na janela de administração do 4D Server:

  • nombre: "REST Handler: <process name>"
  • type: type Worker Server HTTP
  • sesión: el nombre de la sesión es el nombre de usuario que se pasa al comando Open datastore.

No exemplo a seguir, dois processos estão sendo executados na mesma sessão:

Fechamento das sessões

Conforme descrito no tempo de vida da sessão, uma sessão web é fechada automaticamente por 4D quando não há atividade durante seu período limite. O tempo limite padrão é de 60 minutos, mas esse valor pode ser modificado usando o parâmetro connectionInfo do comando Open datastore.

Se uma solicitação for enviada ao repositório de dados remoto depois que a sessão tiver sido fechada, ela será recriada automaticamente, se possível (licença disponível, servidor não parado...). No entanto, tenha em mente que o contexto da sessão sobre bloqueios e transações é perdido (veja abaixo).

Bloqueio e transacções

Os recursos do ORDA relacionados ao bloqueio de entidades e à transação são gerenciados no nível do processo em repositórios de dados remotos, assim como no modo cliente/servidor do ORDA:

  • Se um processo bloqueia uma entidade de um repositório de dados remoto, a entidade é bloqueada para todos os outros processos, mesmo quando esses processos compartilham a mesma sessão (consulte [Entity locking] (entities.md#entity-locking)). Se várias entidades que apontam para um mesmo registro tiverem sido bloqueadas em um processo, todas elas deverão ser desbloqueadas no processo para remover o bloqueio. Se um bloqueio tiver sido colocado em uma entidade, o bloqueio será removido quando não houver mais referência a essa entidade na memória.
  • As transações podem ser iniciadas, validadas ou canceladas separadamente em cada datastore remoto usando as funções dataStore.startTransaction(), dataStore.cancelTransaction() e dataStore.validateTransaction(). Não têm impacto noutros datastores.
  • Os comandos clássicos da linguagem 4D (START TRANSACTION, VALIDATE TRANSACTION, CANCEL TRANSACTION) só se aplicam ao datastore principal (retornado por ds`). Se uma entidade de um datastore remoto é segurada por uma transação em um processo, outros processos não podem atualizá-lo, mesmo que esses processos compartilhem a mesma sessão.
  • Os bloqueios nas entidades são removidos e as transações são anuladas:
    • quando o processo é eliminado.
    • quando a sessão é encerrada no servidor
    • quando a sessão é encerrada na janela de administração do servidor.