FwLock
Lock distribuido (cross-AppServer) baseado em banco. Garante que um trecho de codigo so execute por um node por vez. Essencial em cluster.
Assinatura: oLock := FwLock():New(cChave) / :acquire(timeoutMs) / :release()
Retorna: FwLock
Em cluster (varios AppServers), FwLock garante exclusividade cross-process. Usa tabela do banco como mediador — qualquer no que adquirir, outros esperam.
Sintaxe
oLock := FwLock():New("job-fechamento-mensal")
If oLock:acquire(30000) // espera ate 30s
try
U_FechamentoMensal()
finally
oLock:release()
endtry
Else
FwLogger():Info("Outro no esta processando")
EndIf
Quando usar
- JOB que so deve rodar em 1 no do cluster
- Geracao de numero unico (proxima NF) cross-server
- Processamento de fila — so 1 consumer por vez
Pegadinhas
- release() obrigatorio — esquecer trava recurso. Use try/finally.
- Timeout muito baixo = retentar; muito alto = espera longa em deadlock.
- Em base sem suporte (release antiga), usar mutex custom via tabela Z.