Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: DI-1718

O bloco Flush da Transação

O flush de transação (flush Transaction) confirma transaction) descarrega da memória para o disco todas as ações realizadas ações realizadas desde o início da transação na memória, mas elas não são persistidas , liberando espaço da memória. Nesse momento, os dados não serão persistidos no banco de dados até que haja um commit ou até chegar ao final da thread, não é visível para as outras operações que estão ocorrendo na transação e também não finaliza a transação.influenciando nas demais operações do ciclo de transação. Como a transação ainda não foi confirmada pelo commit, o usuário tem a flexibilidade de retornar a transação ao estado original (rollback), caso ocorra uma exceção ou decida que as alterações feitas até o momento não devam ser persistidas.


Image Added

Figura 1 - Bloco Flush da Transação


Nota

Este bloco utiliza a interface EntityManager, que é responsável por gerenciar as entidades persistentes em um ambiente JPA. Ela oferece métodos para realizar operações de persistência, consultas e transações em entidades persistentes. Deve-se previamente utilizar o

bloco iniciar transação

bloco Iniciar Transação para utilizar o bloco

flush da transação.
Nota
titleAtenção

O bloco flush de transação somente funciona com blocos do tipo banco de dados.

Compatibilidade

Image Removed Servidor

Exemplo

A função abaixo inicia a transação sobre a entidade música, no qual vai inserir dados nessa entidade e caso não haja nenhum problema no decorrer, ela será salva na memória até que algum commit seja realizado e os dados sejam persistidos no banco e a transação seja finalizada.

Image Removed

Figura 1 - Configurando flush da transação

Sobre o bloco

Ao clicar no ícone da engrenagem (seta da Figura 1), será aberto a janela de configuração (Figura 2), onde é possível selecionar a entidade que será usada na transação.

Image Removed

Figura 2 - Janela de configuração do bloco

  1. "...": abre a janela para selecionar a entidade (Figura 3);
  2. Recarrega a lista de entidades exibida na janela (Figura 3).

Image Removed

Figura 3 - Janela de seleção da entidade

Flush da Transação, comumente acompanhado dos blocos Commit da transação e Rollback da Transação, esses blocos são baseados na interface TransactionManager, que trabalha com threads, dessa forma, o Cronapp oferece um serviço de controle de transação que aguardará o final da thread para definir se irá atualizar o banco de dados (commit) ou não realizar nenhuma ação (rollback). Por isso é importante entender a necessidade do projeto e saber quando utilizar os blocos de transação, evitando, por exemplo, fechar um ciclo de transação fora do escopo da função de bloco de programação. 

Dica

O uso do bloco Flush da Transação proporciona benefícios como consistência em tempo real entre o banco de dados e o contexto persistente, além de contribuir para um gerenciamento eficiente de recursos. No entanto, seu uso inadequado pode levar a problemas como conflitos no banco de dados, bloqueios e impasses. Para mais detalhes, acesse os tópicos seis e sete da documentação Correct Use of flush() in JPA.


Compatibilidade

  • Bloco servidor: cronapi.database.Operations.flushTransaction()

Retorno

O bloco não possui retorno.

Parâmetros

O bloco não possui parâmetros.

Características do bloco

O bloco Flush da Transação  é vinculado ao namespace da aplicação. Por padrão o Cronapp possui o namespace "app", o qual será utilizado neste exemplo. Para configurá-lo clique no ícone de engrenagem (seta da figura 2), em seguida, será aberta a janela com uma caixa de seleção solicitando a escolha do namespace.


Image Added

Figura 2 - Seleção do namespace

Exemplo

Para este exemplo, criamos uma entidade denominada "registro" no diagrama de dados, em seguida, criamos uma página com um botão para executar essa função. 

A função abaixo inicia uma transação antes de inserir dados na entidade "registro". Um laço de repetição fará com que 1001 registros seja inseridos. Os dados em questão são números inteiros aleatórios entre 1 e 5000. Em seguida, estabelecemos uma condição para aplicar um Flush da Transação toda vez que o que número do loop for múltiplo de 500.

Neste ponto da função, utilizamos o bloco Flush da Transação para descarregar os dados armazenados na memória para o disco. Porém, a utilização deste bloco não é o suficiente para persistir os dados no banco de dados, para que isso ocorra, precisamos inserir o bloco Commit da Transação na função.

Caso a operação não ocorra de forma correta, o erro será impresso no console do depurador e a operação será desfeita através do bloco Rollback da Transação, do contrário, a operação será finalizada no campo "finally", pelo bloco Commit da Transação. O bloco try catch finally foi utilizado para garantir o fluxo de execução.


Image Added

Figura 2.1 - Função que inicia uma transação de inserção no banco de dados e a confirma no final


O resultado pode ser conferido abaixo


Image Added

Figura 2.2 - Resultado após a inserção dos dados


Nesta página

Índice

Sobre transação em banco de dados

Transação é uma operação (ou um conjunto de operações) executada na sua totalidade - ou seja, se houver alguma falha dentro de alguma das operações, tudo será desfeito; se não, tudo será persistido no banco de dados.

Informações

Para saber mais sobre transação, acesse esse link: 

Transação (banco de dados)