Padrao de Design para Struts + Hibernate

Olá a todos, venho novamente recorrer a este belo forum.

Estou com uma dúvida que esta tirando meu sono. Estou desenvolvendo um sistema utilizando Struts + Hibernate e eu gostaria que minha camada de negocios ficasse independente, assim como estou utilizando o Velocity para fazer a camada de apresentação independente. Ai, voltando a camada de negócios, eu pensei em implementar o Facade (que eu conheco e já utilizei em outros projetos sem o struts e com EJB), pra ligar os actions do Struts as minhas classes de negocio, mas muitas duvidas me surgiram

  1. Como vou fazer isso? eu não quero usar EJB, somente servlets, e JavaBeans.
  2. Eu achei muito estranho eu fazer uma chamada ao facade e criar uma classe de negocio pra fazer uma listagem de uma tabela com o hibernate, por exemplo, para fazer simplesmente
    Cat fritz = (Cat) sess.load(Cat.class, generatedId);
    e por o objeto fritz na sessao para o velocity eu ter que fazer uma chamada ao facade e a classe de negocios.

Alguem poderia me dar uma luz? :), eu acho que tenho os conceitos mas não to sabendo juntar tudo! hehe.

Outras dúvidas que eu tenho, onde eu iria pegar a sessao do hibernate, dentro do action do struts ou dentro das minhas classes de negocios? E a ultima pergunta, eu tenho minhas classes que são persistidas pelo hibernate, é certo eu colocar TODAS as regras do meu sistema junto com essas classes, por exemplo, na minha classe que será persistida chamada Cliente é certo eu ter toda a regra de negocio relacionada com cliente junto com ela? ou o certo é eu usar as classes de persistencia somente para isso e criar outras classes do tipo VerificaInadimplencia ao invéz de fazer um método verificaInadimplencia() dentro da classe Cliente?

bem… era “só” isso! agradeço ajuda

:smiley:

Marcelo Martins

o hibernate funciona legal com o pattern DAO e ThreadLocalSession…
http://www.hibernate.org/42.html

sobre a persistencia a classe do hibernate que contem os atributos para a tabela deve ter só os get/set…

a lógica fica fora desta classe, onde as classes de negócios farao o acesso ao hibernate através de um DAO.

e na Action do Struts chama-se uma classe de Negocios que contera os metodos da aplicação e que chamam os DAO’s para acesso a base.

no DAO vc usa o pattern ThreadLocalSession para utilizar sempre a mesma session do hibernate.

e eu tb nunca fecho a session no DAO, eu fecho apenas na Action do Struts… e como o pattern ThreadLocal me garante que eu sempre estarei utilizando a mesma session, fica perfeito.

Ai no fim da Action (eu tenho uma classe abstrata que minhas Actions implementam…), eu controle a Transação, fazendo rollback ou commit…