Como vcs tem trabalhado com a dupla Hibernate + Webwork?
No geral toda tela vai manipular um dado (exibir, atualizar, deletar, etc.) … entao pensei em fazer (soh pensei, ainda nao tenho ideia de como fazer :oops: ) um interceptor pra inicializar a sessão do Hibernate e aplica-lo a minha action tendo assim sempre uma sessao do Hibernate na ValueStack (ou no que for).
Tah certinho, sim… eu estou comecando a usar o WW2 hoje, entao posso estar errado sobre os interceptors… mas no WW1, eu bolei uma interface HibernateAware e fiz o WW passar pra minhas actions uma sessao inicializadinha, o que me parece ser exatamente o que vc quer fazer aqui…
urubatan
eu ja prefiro sempre criar uma camada de DAOs para utilizar o Hibernate, para o caso de ser alterada a engine de acesso a dados as actions não precisarem ser alteradas
e mesmo por que na maioria das vezes existe mais de uma action compartilhando boa parte do codigo de acesso aos dados
smota
Pensei nisso tb … mas ai para cada DAO terei uma session do hibernate (e consequentemente conexões e flushs) , como vc trabalha com isso?
Esta rolando uma disucssao sobre essa abordagem na lista do WW, mas eu queria ver como os brazucas tao usando …
[]s
Daniel_Quirino_Olive
Uma idéia meio simples, mas que ajuda na maioria dos casos:
publicinterfaceDAO{publicvoidinsert(Objecto);publicvoidupdate(Objecto);publicvoiddelete(Objecto);publicObjectget(Objectpk);publicjava.util.Listquery(Stringquery);//... outros métodos...}publicclassMyDAOimplementsDAO{//.. implementações dos métodos}// usando o DAO em qualquer lugar...DAOd=newMyDAO();d.insert(o);// etc e tal
smota
Retomando a dúvida … na hora da mão na massa não achei legal o esquema do Interceptor, conferi tb os componentes mas ainda nao me convenceu.
Então resolvi fazer assim: na Action -> peço um DAOFactory e nele eu inicio a conexao -> ao pedir um DAO especifico a DAOFactory instancia esse DAO jah com a conexão aberta.
:arrow: O que acharam, comentários?
Bem, achei legal pq em cada action vou ter uma conexao (teria de qq jeito) que vai ser compartilhada por cada DAO (tb acho que seria de qq jeito) … e de um modo mais facil/transparente do q as opcoes de cima.
Soh to pensando quando tiver um Action Chain nao vou querer abrir conexoes consecutivas, se colocar o DAOFactory no stack as actios subsequentes podem usa-lo neh? :lol:
urubatan
é mais ou menos isto que eu faço :-)
normalmente utilizo tipo uma factory, e alguma coisa de IoC :-)
explicando
"codigo inventado agora, com certeza tem erros, mas a ideia é esta"
publicintarfaceDAO{insert(Object o)delete(Object o)
....
}publicclassDAOFactory{privatestaticSessionFactoryfactory=...;/inicializa aqui a session factory ou em um bloco estatico para evitar problemas de sincronização, ...privateSessionsession;publicDAOFactory(){session=factory.getSession();}publicgetXXXDAO(){returnnewXXXDAO(session) ou instancia ja criada de XXXDAO().setSession(session) ou uma instancia de XXXDAO do cache, ou ...}publicgetYYYDAO(){returnnewYYYDAO(session) ou instancia ja criada de YYYDAO().setSession(session) ou uma instancia de YYYDAO do cache, ou ...}}aituescolheseusauminterceptorparacriarestecaraai,ouentãodaumnewneledentrodaactionouqualquercoisaassimdestamaneiratutemumsessionFactoryunicoparaaaplicaçãoetaumacamadaDAOparaacessoaosdados,seresolvertrocardeHibernateparaqualqueroutracoisadepois,bastaalterardaquiparabaixo,astuasactionsnãoserãoalteradasemesmoporque,amaioriadasactionsdevetercodigodeacessoadadosrepetidoquepoderiatersidorefatoradoemumDAO:-)