Boa tarde, estou com algumas dúvidas referentes a arquitetura de um projeto que estou fazendo para a faculdade, que é um Leilão Virtual Reverso.Para quem não conhece ele é o oposto do leilão comum, em que os fornecedores vão dando seus preços e o menor ganha a venda.
Estou com uma dúvida na arquitetura do sistema, não queria usar ejbs nem um container ejb, pois acho que seria overkill.
Então estou procurando alternativas, queria fazer em 3 camadas, com o Struts no Web Tier, alguma coisa para o middleware e a persistência com o Hibernate e MySQL.
Atualmente estou pensando em usar as actions do struts, que chamam alguma coisa (aqui estou meio perdido) que chamam os DAOs que peristem os dados.
No meio aí eu não sei muito o que usar…Queria usar Spring mas não consigo pegar muito a idéia dele…Eu criaria Business Objects e chamaria eles direto das Actions? Eu sempre confundo Business Objects, Value Objects, Data Transfer Objects e tudo isso…Meu amigo me falou pra por a lógica de negócios nas actions mas acho que isso é meio porco não é não? Por favor me deem uma luz aonde posso enfiar minha lógica de negócios e o que posso usar aí no meio…
WebWork com Model-Driven Actions (onde faz sentido colocar regra de negocio), Spring (pra colar as Actions, as dependencias e ajudar a fazer a comunicacao com banco) e Hibernate.
Mas, antes de escolher a frameworkaiada toda, de uma boa estudada em Design Patterns, e em boas praticas de desenvolvimento. No fim das contas, elas sao mais importantes do que escolher o framework da moda
Neste caso não use Spring, afinal o Struts já vai resolver todos os seus problemas (com um pouco mais de trabalho e com bem menos elegãncia do que o modo aconselhado pelo CV). No futuro dê uma outra chance ao Spring.
Sim, é porco. Estude mais os links que lhe passaram sobre Design Patterns e evite conversar sobre arquitetura web com este seu amigo.
Então, decidi abandonar o Spring por enquanto, já que o prazo é curto…
Vou fazer algo assim:
As actions se comunicam via Transfer Objects com os Business Delegates que chamam minhas classes de negócios (POJOs) e usam os DAOs com o Hibernate para persistir os dados.
Acho que isso fica simples, eficiente e não muito porco não é?
Outra coisa…Como vcs me sugerem implementar a segurança de minha aplicação?
Queria a coisa mais simples e fácil possível, sem ter que aprender novas APIs pois o tempo é curto…
Vou precisar de logins de contratantes e fornecedores, que entrarão numa sessão que terá várias rodadas predefinidas no momento do cadastro da sessão pelo contratante.Em cada rodada cada um dos fornecedores poderá fazer um lance, tentando cobrir o lance dos outros fornecedores.No final são apresentadas relatórios e enviados relatórios por e-mail para os fornecedores e para o contratante.
Como poderia cuidar dessa parte de segurança e autenticação na sessão?
Existe algum modo também de controlar o tempo decorrido na sessão?
Desculpe por tantas perguntas é que sou relativamente novo em Java e este é meu primeiro projeto real…
Simplifique mais, você não precisa de transfer objects.
Para o login procure algum exemplo na web. Tente entender bem o que são sessions e como são usadas. Guarde nelas coisas pequenas e essenciais. Lembre-se que ficam na memória. Hoje mesmo no GUJ saiu um post sobre como medir o tempo entre uma requisição e a resposts em JSP. Mas isto é pura perfumaria, não gaste sua massa cinzenta com isto. Concentre-se no seu projeto que já é por demais ambicioso para quem diz que está começando. Aliás, se você realmente está começando este projeto não é o mais adequado. Mas já que decidiu encarar, vá em frente e corra os riscos.
Então, pensei que esse projeto seria pequeno pois o escopo é pequeno mas a dificuldade parece ser grande agora que analisei melhor…
Mas nem dá mais pra mudar porque já foi o primeiro semestre que era análise e agora é implementação…
Então, meu maior problema acho que vai ser controlar a segurança e a sessão de leilão virtual…Quando quis dizer sessão, não me referia aos escopos (page, request, etc…) mas a sessão de leilão virtual, que terá que ser em real-time com a participação de todos os fornecedores e o contratante…Isso é o que acho que vai dar mais trabalho…
Não estou tão começando assim, eu trabalho com Struts, java e J2EE mas queria uma coisa lightweight…Por isso pedi sugestões de como poderia proceder na arquitetura…Gostei da idéia do Spring mas como sou o único com mais conhecimento de Java no grupo, acho que não ia dar certo aprender uma nova tecnologia agora…Muito em cima da hora…
Alguém tem mais alguma sugestão de como possa facilitar as coisas?
O Tomcat tem suporte pra segurança não? Se não me engano por perfis etc e tal…Como poderia arquitetar um esquema de segurança pra sessão de leilão virtual? Alguma sugestão?
Todos estão vendo o lance de todos. Se for assim você poderia implementar como uma “sala de bate papo”, onde para entrar deve ser autenticado.
A tela do contratante pode ter a lista das rodadas cadastradas. Podia ser tipo um “painel de controle dos lances”, onde o contratante pode terminar a rodada, o que faz com que não possa ser postada nenhuma mensagem até o contratante iniciar uma nova rodada (escolhendo a rodada cadastrada na lista de rodadas e clicando no botão “Iniciar rodada”, por exemplo)
Você poderia logar o tempo decorrido da sessão, registrando o datetime do inicio da sessão e o datetime do termino da mesma.
A parte de segurança e autenticação, acho que não vai ter jeito… você vai ter que dar uma estudada, se não for em JAAS, na parte de Security Manager do Tomcat
Uma outra sugestão é você usar Filter e fazer a autenticação “no braço”! Mas não se acostume com isso, não. Vale mais a pena ver o que outros já fizeram!
Eu faria 2 controlers, um para cada tipo de usuário (contratante e fornecedor) onde cada um tem actions especificas controladas por eles que seriam filtrados por 2 filters (no caso de optar pela solução do Filter)
Então, quanto a sala de bate-papo, é mais ou menos isso…Só que cada forncedor pode dar um lance por rodada e o número de rodadas é definido pelo contrantante no momento de agendamento da sessão.Cada rodada vai durar (tempo total da sessão / número de rodadas) que é o tempo onde os fornecedores devem fazer seus lances.
No final o melhor ganha e relatórios simples vão para os fornecedores e relatórios completos vão para o contratante.
Outra coisa importante é que os fornecedores não vêem o lance de outros fornecedores.Somente ao final de cada rodada os fornecedores tem acesso ao maior lance atualmente e nele se baseiam para formar seus próximos lances.O único que tem acesso a todos os lances é o contratante.