Duvida venda com EJB3

3 respostas
marcostrb

Olá pessoal

Tenho um trabalho de faculdade na qual tenho que desenvolver um tela de venda onde tenho seguinte caso de uso:

O usuário deverá informar dados na capa da venda tais como cliente e condição de pagamento.

Após informar a capa o usuário poderá informar itens para a venda, no caso uma lista de itens, cada item terá uma chave numérica, uma chave estrangeira transação, produto, quantidade e valor.

Após informar a capa e os itens o usuário terá três opções:

Salvar → Será gravado a capa e os itens, sendo possível o usuário editar essa venda posteriormente, incluindo e excluindo itens.

Fechar compra → Será gravado a capa e os itens e gerado contas a receber com base na condição de pagamento, não será permitido alterar essa venda posteriormente.

Cancelar → Não grava nada e retorna a listagem.

Como devo proceder ao gravar a capa e os itens?

1 - Posso ao ir incluir um item já gravar a capa no banco, e a cada item que incluir persisti-lo no banco.

*      Vantagem: se der problema ao incluir um item, os outros poderão ser persistidos.
*      Desvantagem: se o usuário clicar em cancelar, não deveria gravar nada, mas a capa e os itens  foram gravador no banco O que fazer?

2 ? Ao usuário clicar em salvar, gravar a capa e percorrer os itens gravando um a um, mas em caso de edição de uma venda eu teria de buscar todos os itens jogar em uma lista para que o usuário desse manutenção, depois excluir os itens do bancos e gravar novamente a lista editada.

*      Vantagem: O cancelar funciona pq  será gravado no banco se o usuário salvar
*      Desvantagem: Ao editar, o sistema terá de apagar os registros no banco e incluir novamente, pq não saberei se o usuário apagou ou incluiu outro item.

3 ? Fazer como item 1, mas commitar a transação somento quando o usuário clicar em salvar, caso clique em cancelar em dou rollback.

*      Vantagem: Parece que funcionaria em todos os casos
*      Desvantagem: Ao ler sobre transação com EJB, vi que é altamente não aconselhável tratar transação manualmente, deixando isso com o container.

Estou usando EJB3, e tenho um único SessionBean para venda que está anotado com Stateful

Utilizo duas entidades Venda(Capa) e ItemVenda.

Se alguem poder me dizer qual seria a melhor solução ou dizer outra que resolva, agradeço!

No aguardo!

3 Respostas

P

Não entendi muito bem aonde está o problema. Você não está contente com a solução? Porque me parece estar Ok, porque pelo o que entendi, você está desenvolvendo uma espécie de “carrinho de compras”, que pode ser resolvida com stateful mesmo. Você vai colocando os teus itens de vendas no EJB stateful, coloca ele na sessão e http e deixa o usuário “brincar”. Quando ele estiver pronto para efetuar a compra, o salvar persiste os dados e fecha a compra. Me parece bem tranquilo.

marcostrb

Sim, é mais ou menos isso.
Mas no carrinho de compra, eu só fecho a compra, mas nesse caso o usuario pode gravar essa venda e depois alterar os itens, só que por exemplo:

O cara cria a venda 1 e adicionado os itens 1, 2, 3, 4 e salva;
Depois ele abre essa venda e remove o item 2 e adiciona os itens 5, 6 e 7 na lista de itens mais ou menos como um orçamento.

Nesse ponto a lista de item em tela esta diferente da tabela no banco, e eu nao sei oq o cara vez com os itens dele. Me resta apagar oq tem em banco e gravar os itens 1,3,4,5,6,7 que estavam na tela.

Minha duvida é, se por um acaso ocorrer uma exception no loop para gravar o item eu perco tudo correto?

P

Cara, o ideal seria evitar essas alterações após fechar uma venda. Ou você cancela ela ou você cria outra com o restante dos itens. Por isso é carrinho de compra, enquanto você tem o carrinho, pode adicionar. Se fechou e quer mais produtos, faça outro!

Sobre a exceção, você pode fazer a exceção executar um rollback na transação ou não. Da forma que melhor atender, é só configurar o EJB.

Criado 4 de maio de 2010
Ultima resposta 4 de mai. de 2010
Respostas 3
Participantes 2