Hibernate & Webwork

6 respostas
smota

Eu de novo :shock:

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).

Isso está correto?

6 Respostas

cv1

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… :smiley:

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 :slight_smile:

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:

public interface DAO{

    public void insert(Object o);
    public void update(Object o);
    public void delete(Object o);
    public Object get(Object pk);
    public java.util.List query(String query);
//... outros métodos...
}

public class MyDAO implements DAO{
//.. implementações dos métodos
}

// usando o DAO em qualquer lugar...
DAO d = new MyDAO();
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"
public intarface DAO {
 insert(Object o)
 delete(Object o)
....
}

public class DAOFactory{
       private static SessionFactory factory = ...;/inicializa aqui a session factory ou em um bloco estatico para evitar problemas de sincronização, ...
       private Session session;
        
       public  DAOFactory(){
            session = factory.getSession();
        }

         public getXXXDAO(){
               return new XXXDAO(session) ou instancia ja criada de XXXDAO().setSession(session) ou uma instancia de XXXDAO do cache, ou ...
          }

         public getYYYDAO(){
               return new YYYDAO(session) ou instancia ja criada de YYYDAO().setSession(session) ou uma instancia de YYYDAO do cache, ou ...
          }

}

ai tu escolhe se usa um interceptor para criar este cara ai, ou então da um new nele dentro da action ou qualquer coisa assim

desta maneira tu tem um sessionFactory unico para a aplicação e ta uma camada DAO para acesso aos dados, se resolver trocar de Hibernate para qualquer outra coisa depois, basta alterar daqui para baixo, as tuas actions não serão alteradas

e mesmo por que, a maioria das actions deve ter codigo de acesso a dados repetido que poderia ter sido refatorado em um DAO :-)
Criado 17 de setembro de 2003
Ultima resposta 24 de set. de 2003
Respostas 6
Participantes 4