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. Caso ocorra algum erro na execução da entrada de comando try do bloco try catch finally, o fluxo da entrada de comando catch será executado e imprimirá o erro no console do depurador. Por fim, confirmamos as alterações através do bloco bloco Commit da Transação


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 finally, assim, o commit não foi executado por conta do bloco Commit da Transação na entrada de comando finally, 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 finally.


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