Realizar diversas transações e depois efetuar um commit

6 respostas
A

Olá Pessoal tudo bem!!!

Tenho um formulário que realiza um Pedido de Venda de um estabelecimento comercial.

Estou utilizando JDBC para acessar o Banco de Dados e utilizo Servlets e JSP

Para cada item deste Pedido eu vou até a Servlets que se encarrega de efetuar uma transação, onde realizo um insert na Tabela Pedido e um insert
na Tabela itemPedido e depois disso volto para o formulário web para que o usuário caso queira adicionar mais itens ao Pedido.

Quando o usuário adiciona mais um item ao Pedido eu apenas realizo um insert na Tabela itemPedido, pois o seu Pai (Pedido) já está criado.

A minha regra de negócio é para cada itemPedido criado eu tenho que atualizar a Tabela de estoque, por esse motivo não posso efetuar os inserts
no final do Pedido.

O que eu preciso saber é como posso realizar diversas transações, onde para cada itemPedido adicionado pelo usuário, uma Servlet é chamada
para inserir esses dados no Banco sem efetuar o commit.

No final do Pedido um botão é acionado para finalizar a Venda, onde este botão chama a Servlet que se encarrega de efetuar um commit
nessas operações referentes ao mesmo Pedido de Venda.

Ou seja, dado uma pagina JSP tenho que ir no Servidor efetuar operações no Banco de Dados, voltar na mesma pagina JSP e fazer isso diversas vezes sem efetuar um commit para essas operações, caso um botão na tela JSP seja acionado um commit é efetuado para essas operações.

Caso alguém possa me ajudar ficarei grato!!!

6 Respostas

L

Tudo bem aversi?

Recomendo ler o padrão de arquitetura unidade de trabalho do Martin Fowler. Nas nossas aplicações, temos utilizado com sucesso. Evita de você ficar mantendo longas transações abertas no BD.

O padrão usa o conceito de “transação de negócio”. As alterações feitas dentro desta transação ficam em memória e são gerenciadas pela WorkUnit. Quando é dado um “commit” na WorkUnit, ela abre uma transação no BD, salva tudo e faz commit. Assim, não há risco dos usuários começarem a cadastrar pedidos, sairem pro almoço, deixando centenas de transações de BD abertas, trancando tudo.

Abraços

A

Obrigado pela atenção!!!

Caso tenha algum link sobre o assunto de sua preferência, por favor post aqui.

H

muito legal esse assunto, se alguém puder postar algo mais sobre esse padrão eu agradeço.

D

Também gostei muito deste assunto, da mesma forma ficaria grato se postasse mais sobre ele.

saoj

Deixar transação aberta por muito tempo é furada. Tu vai ter que ir salvando esses pedidos na sessão ou numa tabela temporária.

:arrow: Sessão

Fácil de fazer, mas não muito aconselhado se estiver usando um cluster de sessão. Se estiver usando um memcache da vida então tudo bem. É que geralmente vc tem load balance in-place.

:arrow: Banco

O problema é ter que ficar limpando essa tabela. Tirando isso funciona também e vc não tem que ficar se preocupando com replicação.

L

aversi:
Obrigado pela atenção!!!

Caso tenha algum link sobre o assunto de sua preferência, por favor post aqui.

http://books.google.com.br/books?id=vpHqYZcmeKsC&pg=PA21&lpg=PA21&dq="unidade+de+trabalho"+martin+fowler&source=bl&ots=oFATF8qYO5&sig=PtVFQqvxhCG2mZ-nwpJu7bncOIQ&hl=pt-BR&ei=D75aTLGqEciruAfJjpnRAQ&sa=X&oi=book_result&ct=result&resnum=3&ved=0CCIQ6AEwAg#v=onepage&q="unidade%20de%20trabalho"%20martin%20fowler&f=false

Página 187

Abraços

Criado 4 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 6
Participantes 5