terça-feira, 14 de maio de 2013

Sincronismo com GxServer

Um pequeno detalhe que incomoda os que trabalham com GxServer e Genexus, é o sincronismo com o servidor quando ocorre a remoção de certo objeto e a inclusão de outro totalmente diferente, mas com o mesmo nome do objeto apagado, essa situação exige um pouco de atenção do desenvolvedor, caso contrário pode haver uma perda significativa de tempo para resolvê-la.

Primeiro a situação

Estaremos fazendo aqui um passo-a-passo da situação para que você entenda o problema, e nas próximas ocasiões, evite que a mesma ocorra e atrapalhe a vida dos demais desenvolvedores do projeto.

A causa do incomodo é que os objetos possuem um número do tipo GUID que é randômico e designado automaticamente pelo Gx para cada novo objeto criado, como, por exemplo, na Imagem abaixo e seu GUID associado (f5a88c30-db5b-012e-3dd2-1231380f2e23), que nesse exemplo se encontra perfeitamente sincronizada entre o GxServer e as máquinas dos Desenvolvedores 1 e 2.



O GxServer utiliza o nome da imagem e também o GUID para controlar eventuais modificações nos objetos.

1) Remoção do objeto

O problema ocorre quando a imagem é removida por certo Desenvolvedor, (o Desenv 2, no nosso exemplo) e que em seguida publica o ajuste no GxServer, com o commit. Se o Desenv1 não realizar o update do seu projeto, a imagem antiga ficará em sua kb e poderá ocorrer o erro.



2) Criação de outra imagem com o mesmo nome

Antes que o Desenvolvedor 1 realize o update de sua kb, o Desenvolvedor 2, apressadinho, criou um novo objeto e chamou-o com o mesmo nome do anterior removido (Imagem) e novamente subiu ao servidor, com o commit.  O GeneXus criou um novo GUID para esse novo objeto, e o que temos é o nome do antigo, mas com identificadores diferentes.


3) Tentativa frustrada de atualização

 Para completar a tragédia o Desenvolvedor 1, um dia acordou de seu sono profundo, e resolveu atualizar sua kb com o gxServer. O que aconteceu?  Erro!


Ao tentar sincronizar a sua kb, o Desenvolvedor 1 recebe uma mensagem de erro no objeto Imagem devido a diferença de GUID de sua maquina e a do GxServer, uma vez que são elementos completamente distintos.  Quem causou a situação, o Desenvolvedor 2, encontra-se tranquilo e nem percebe a tragédia, acho que até eu ouvi ele dizer 'aqui na minha máguina não tem problema, tá tudo certo!'


Agora a correção

Para que essa situação possa ser corrigida é necessário que o Desenvolvedor 2, (causador da lambança), saia de sua zona de conforto e suba uma correção para o GxServer renomeando a Imagem para qualquer outro nome, como Imagem1, por exemplo.

Essa situação ilustra bem a necessidade de comunicação e treinamento da equipe de desenvolvimento, principalmente nos termos de conduta do projeto, e talvez o primeiro item a ser registrado nesse termo seria:

Apagar um objeto e criar outro com o mesmo nome... Melhor não.