Usuários mais ativos no mês 12/2019
  1. henrique.muller

    844 Pontos

  2. paulo.silva

    842 Pontos

  3. maicon.pereira

    582 Pontos

  4. juliano.pezzini

    472 Pontos

  5. leandro.piscke

    428 Pontos

  6. diuari.molinari

    400 Pontos

  7. dirceu.schlickmann

    347 Pontos

  8. Camila

    288 Pontos

  9. bruno.cardoso

    272 Pontos

  10. Rafael Leonhardt

    253 Pontos

Tags mais populares

Tem como disparar um BTL apenas se a transação se completar?

+2 votos
24 visitas
No meu cenário, estou disparando um BTL para processamento assincrono de um registro que acabei de inserir.

O que acontece, é que as vezes o BTL começa a processar antes que a transação (de onde foi disparado) tenha finalizado.

Logo, o BTL falha pois o registro ainda não existe.

Neste sentido, pergunto se na tecnologia tem alguma forma de disparar o BTL apenas se o contexto transacional for "comitado"?
perguntou Nov 8 por maicon.pereira (582 pontos)
Estou usando BTL + ActiveMQ

1 Resposta

+1 voto
 
Melhor resposta
Fala Maicon, até onde sei o Worker do BTL está totalmente alheio ao contexto transacional de quem está enfileirando requisições. São processos distintos, então a resposta objetiva seria não, nesse momento não.

Uma forma de minimizar problemas, mas imagino que já estás fazendo algo parecido seria: salvar todos os registros de negócio antes e somente disparar a requisição do BTL imediatamente antes do commit.

Ou ainda, se no teu cenário tiveres controle da transação, qual seria o impacto de "comitar" todas as alterações de negócio, e somente enfileirar a requisição do BTL após esse commit?
respondida Nov 11 por joao.melo (169 pontos)
selecionada Nov 11 por maicon.pereira
Um caso que tenho aqui, o disparo do BTL está no Saved de um registro.

Disparo um BTL para processamento desse registro.

Esse registro atualmente pode ser criado por várias origens: serviço, integrator, ....

Então eu não tenho um ponto final claro para fazer o disparo apenas nesse ponto ou avaliar se houve commit da transação.

Nesse cenário, a grande questão não é apenas se houverá ou não commit da transação, e sim que as vezes o processo gerado é um EDI (integrator) grande e demorado, e o processamento do BTL ocorre antes do complete da transação. Logo, o BTL não encontrará o registro que precisa ser processado.

Perguntas relacionadas

...