Utilizar um datastore remoto
Um datastore exposto em uma aplicação 4D pode ser acessado simultaneamente através de diferentes clientes:
- As aplicações 4D remotas usando ORDA para acessar o datastore principal com o comando
ds
. Note que a aplicação 4D remota ainda pode acessar o banco de dados no modo clássico. Esses acessos são tratados pelo servidor de aplicações 4D. - Other 4D applications (4D remote, 4D Server) opening a session on the remote datastore through the
Open datastore
command. Esses acessos são transmitidos pelo servidor HTTP REST. - As petições 4D for iOS para atualizar aplicações iOS. Esses acessos são transmitidos pelo servidor HTTP.
Quando você trabalha com um datastore remoto referenciado por chamadas para o comando Open datastore
, a conexão entre os processos solicitantes e o datastore remoto é tratada por sessões.
Abertura de sessões
When a 4D application (i.e. a process) opens an external datastore using the Open datastore
command, a session in created on the remote datastore to handle the connection. This session is identified using a internal session ID which is associated to the localID
on the 4D application. Essa sessão gerencia automaticamente o acesso a dados, seleções de entidades ou entidades.
O localID
é local para a máquina que conecta ao datastore remoto, o que significa:
- Se outros processos da mesma aplicação precisam acessar o mesmo datastore remoto, eles podem usar o mesmo
localID
e, assim, 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:
Para sessões abertas por solicitações REST, consulte Usuários e sessões.
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:
- nome: "REST Handler: <process name>"
- type: type Worker Server HTTP
- session: o nome da sessão é o nome de usuário passado para o comando Open datastore.
No exemplo a seguir, dois processos estão sendo executados na mesma sessão:
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 Bloqueio de entidades). 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()
edataStore.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 pords
). 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.
Fechamento das sessões
Uma sessão é automaticamente encerrada por 4D quando não há atividade durante seu período de tempo 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, lembre-se de que o contexto da sessão em relação a bloqueios e transações é perdido (veja acima).