Transações de negócio

9 respostas
J

Pessoal, estou com uma grande duvida e nem sei por onde começar a resolvê-la.

Preciso fazer o seguinte: o cliente deseja comprar creditos para adquirir produtos no site, ele informa o email, valido esse email, depois vejo se o mesmo esta logado, depois peço o tipo de pagamento, a quantidade de creditos, peço pra confirmar alguns dados, etc., mas preciso fazer isso em jsps separados (a principio, pois na verdade tem que ser telas diferentes, como um passo a passo) e caso aconteça algum problema, como fechar a janela, email errado, um erro qualquer, devo dar um rollback, mas ainda nao sei como resolver isso nesse eskema de passo a passo: primeiro email, depois verifico a sessao, depois confirmo dados, forma de pagamento, e só depois disso tudo é que aumento os creditos do cliente.
Alguma ideia?

9 Respostas

A

Voce nao precisa para cada fluxo do processo, persistir as informacoes do cliente em banco de dados. Caso a ideia seja realizar uma wizard de cadastro, armazene as informacoes dentro da Session. Somente no ultimo passo da wizard voce recupera o objeto da sesison, revalide realizando qualquer tipo de regra de negocio que for preciso e soh depois que voce faz a inclusao no banco de dados.

Que tecnologia vc esta utilizando no momento? Eh aplicacao Web, Dektop? JSF, Hibernate, EJB??? Passa mais detalhes por favor…

Abracos

J

Alex,

Eu não quero persistir as informações a cada fluxo, quero persistir apenas uma vez, no final, quando tudo tiver correto.
Então eu tenho que criar uma session, logo na validação de email, depois eu vou adicionando as outras informações nessa session e só no final dou commit, seria isso?
Tem como voce me exemplificar?

Estou fazendo uma aplicação web, usando hibernate e struts

A

Faz muito tempo que não mexo com Struts, mas o conceito não muda nada entre os frameworks MVC.

Você já possue actions configurada no seu projeto, que gerencia esse fluxo, correto? No metodo execute, se não me engano vc possue acesso ao objeto HttpServletRequest.
Obtenha dele a sessão (request.getSession, se nao me engano), e manipule dentro deste objeto o Bean que você quer trafegar entre as navegacoes para que no final voce o revalide e persiste-o novamente.

Com isso, vc consegue ter o comportamento que deseja.

J

Nao entendi muito bem.
Ainda nao tenho todas as actions nao, só para validar email, pois eh a primeira, fiz essa e percebi a necessidade de fazer esse passo a passo, aí vim pedir a ajuda de voces e nao fiz mais nada, parei na primeira action, pois nao sabia como fazer.

A

Então jeffjcosta.

Vamos la. Vou tentar exemplificar pra voce.

Action1.java - Mapeada para pagina1.jsp - o findForward desta action, irá encaminhar para a pagina2.jsp
Action2.java - Mapeada para pagina2.jsp - o findForward desta action, irá encaminhar para a pagina3.jsp
Action3.java - Mapeada para pagina3.jsp - o findForward desta action, irá encaminhar para a pagina de sucesso.

Para cada action declarada, vc recupera o objeto HttpServletRequest da assinatura do execute. Até onde lembro, neste ponto vc tem acesso a ela.

Feito isso, você recupera do seu FormBean, as informações digitadas pelo usuario e os armazena dentro do seu VO que quer persistir na base. Reassocie-o na Session atravez da request.getSession().setAttribute(“meuVO”, vo). Para cada action que você chegar, vc faz o processo inverso, recuperando da Session o atributo, e manipulando o vo com as informações que vem da tela.
Na ultima action, vc invoca o seu servico, e persiste esse VO.

Pronto, com isso acredito que você consiga resolver o teu problema.

J

Eu pensei em fazer isso, mas estava achando que era pra fazer no struts-config.xml, então eu posso colocar no findForward a minha proxima action? Nao preciso colocar um varlo qualquer e depois no xml redirecionar, posso fazer direto, eh isso?

A

Nao. Isso continua sendo configurado no XML…

O que disse foi apenas um cenário de exemplo. Abstraia isso e transforme em código com o framework que está utilizando.

J

Pessoal,

Voces tem alguma outra ideia de transaçao de negocio? Onde posso usar isso? Pensei nesse exemplo que falei, mas está me dando um certo trabalho e estou sem tempo, como se trata de um projeto simples e apenas para apresentar como trabalho de disciplina, gostaria de saber se tem ideia de onde posso colcoar transações de negocios completas, uma das exigencias desse trabalho que preciso entregar é ter no minimo 3 transações, só falta isso, ateh agora nao consegui fazer nenhuma, alguem pode me ajduar?
Estou tentando fazer essa q falei, mas estou sem tempo.

J

Pessoal, nao consegui evoluir muito e surgiu uma duvida agora: desse jeito que expliquei e pelo exemplo do alex, daria rpa fazer algo parecido com o site da dell, quando voce vai montar seu notebook, vc vai escolhendo as opções e no final decide comprar ou nao? Isso seria um transação de negocio né?

Criado 26 de abril de 2010
Ultima resposta 28 de abr. de 2010
Respostas 9
Participantes 2