O bloco Flush da Transação (flush transaction) descarrega da memória para o disco todas as ações realizadas desde o início da transação, 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 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.


Figura 1 - Bloco Flush da Transação


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 para utilizar o bloco 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. 

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.


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.


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


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


Nesta página