- Criado por Deborah Melo de Carvalho, última alteração por Igor Andrade em 08/01/2024
Você está vendo a versão antiga da página. Ver a versão atual.
Comparar com o atual Ver Histórico da Página
« Anterior Versão 6 Atual »
Se ocorrer algum erro durante o ciclo da transação, o bloco Rollback da transação (rollback transaction
) retorna todas as ações realizadas desde o início da transação. Antes de utilizar este bloco, é necessário iniciar o ciclo da transação com o bloco Iniciar Transação.
Figura 1 - Bloco Rollback da Transação
Este bloco utiliza a interface Java TransactionManager. Ela define métodos para possibilitar que o servidor de aplicações gerencie os limites de transações na thread. 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.
Compatibilidade
- Bloco servidor: cronapi.database.Operations.rollbackTransaction()
Retorno
O bloco não possui retorno.
Parâmetros
O bloco não possui parâmetros.
Características do bloco
O bloco Rollback 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 1
Dividimos os exemplos desta documentação em duas partes: O Exemplo 1 mostrará como a função de transação se comporta na ausência do bloco Rollback da Transação e, em seguida, apresentaremos a função com o bloco adicionado.
Inicialmente criamos uma entidade denominada "carro" no Diagrama de dados, em seguida, criamos uma view, na qual inserimos dois componentes: entrada de texto e um botão, que será responsável por ativar a função. Para que o exemplo abaixo funcione, é necessário vincular um formulário de referência ao bloco. Acesse o tópico Propriedades do Blockly da documentação Bloco de programação para mais detalhes.
A função abaixo inicia uma transação antes de inserir dados na entidade "carro", os dados são obtidos através dos blocos Obter valor do campo na view. Utilizamos o bloco Lança exceção para simular um erro durante o fluxo de execução da função. Em seguida, mantemos o bloco Commit da Transação.
Caso ocorra algum erro na execução da entrada de comando try do bloco try catch, o fluxo da entrada de comando catch será executado e imprimirá o erro no console do depurador.
Figura 2.1 - Função que inicia uma transação de inserção no banco de dados
Execute o projeto e preencha os dados necessários.
Figura 2.2 - Inserindo dados do carro
O resultado pode ser conferido abaixo. Mesmo após a exceção ter sido lançada, o erro da exceção foi impresso no Console do Depurador e os dados foram inseridos no banco de dados. Isso aconteceu pois não incluímos o bloco Rollback da Transação na entrada de comando catch do bloco try catch, assim, o commit não foi executado por conta do bloco Commit da Transação na entrada de comando try, mas por conta do commit interno ao final da thread.
Figura 2.3 - Resultado da execução da função da figura 2.1
Exemplo 2
No exemplo anterior, mostramos o que acontece quando não incluímos o bloco Rollback da Transação ao trabalharmos com transações no banco de dados. Neste exemplo, apresentaremos a mesma função da figura 2.1 e incluiremos o bloco Rollback da Transação na entrada de comando catch do bloco try catch.
Figura 3 - Função de transação com o bloco Rollback da Transação
Agora adicionaremos um carro de outra marca e modelo na nossa entidade.
Figura 3.1 - Inserindo novos dados do carro
Observe que a exceção presente na função foi exibida no Console do Depurador, porém o dado não foi inserido no banco dados, graças ao bloco Rollback da Transação que impediu a conclusão da transação.
Figura 3.2 - Resultado do bloco Rollback da transação
Nesta página
- Sem rótulos