jboss seam

7 views
Skip to first unread message

Gabriel Aguena

unread,
Jul 2, 2010, 7:45:29 AM7/2/10
to hibernat...@googlegroups.com
Olá galera.
Seguinte, alguém sabe pq se eu utilizar no Jboss seam um Dao generico
e compor ele em um Dao especifico q utiliza a injection, não funciona?
Por exemplo tenho um UsuarioDao, que será injetado pelo Seam, neste
UsuarioDao tb será injetado a session do hibernate, e ai crio na mão
uma instancia de um Dao generico e passo a session para ele:

veja:

import java.util.List;
import org.hibernate.Session;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import br.com.egs.incidencias.model.Usuario;

@Name("usuarioDao")
public class UsuarioDao {
@In(create = true)
private Session hibernateSession;

private Dao<Usuario> dao = new Dao<Usuario>(hibernateSession, Usuario.class);

public void persist(Usuario user) {
this.dao.persist(user);
}

public void saveOrUpdate(Usuario user) {
this.dao.saveOrUpdate(user);
}

public void delete(Usuario user) {
this.dao.delete(user);
}

public void update(Usuario user) {
this.dao.update(user);
}

public List<Usuario> getList() {
return this.dao.getList();
}
}


import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;

public class Dao<T> {

private Session hibernateSession;
@SuppressWarnings("unchecked")
private Class classe;

@SuppressWarnings("unchecked")
public Dao(Session hibernateSession, Class classe) {
this.hibernateSession = hibernateSession;
this.classe=classe;
}

public void persist(T t) {
hibernateSession.save(t);
}

public void saveOrUpdate(T t) {
this.hibernateSession.saveOrUpdate(t);
}

public void delete(T t) {
this.delete(t);
}

public void update(T t) {
this.hibernateSession.update(t);
}

@SuppressWarnings("unchecked")
public List<T> getList() {
Criteria criteria = hibernateSession.createCriteria(classe);
return criteria.list();
}
}

Mas isso dara NullPointerException na Session bem no Dao generio.

Agora se eu utilizar sem Dao o generico, no caso só um DAO especifico
com a injection do SEam funciona. alguem pode me ajudar?

--


hibernate Brasil

http://groups.google.com.br/group/hibernate-brasil

Hedley Luna

unread,
Jul 2, 2010, 6:31:31 PM7/2/10
to hibernat...@googlegroups.com
Pra que usar DAO se o SEAM já te dá os Entities List e Query?

--
Hedley Luna
Graduando Ciência da Computação - UECE
Laboratório de Computação Científica - LCC - UECE

Davi

unread,
Jul 3, 2010, 7:58:20 PM7/3/10
to Hibernate Brasil
Gabriel,
o que Hedley falou faz muito sentido, mas se mesmo assim
vc ainda querer continuar com essa arquitetura, aqui vai uma solução:

Nas duas classes vc coloca:

@In(value="hibernateSession",create = true)
@Out(scope = ScopeType.CONVERSATION, value="hibernateSession" ,create
= true)
private Session hibernateSession;

Tem que colocar em UsuarioDao e em Dao<T>,
como opção vc também pode colocar dentro das duas anotações:

@In(value="hibernateSession",create = true, required="false")
@Out(scope = ScopeType.CONVERSATION, value="hibernateSession" ,create
= true, required="false")

Se não funcionar posta o erro aqui.
Espero ter ajudado.

Att

Davi Gomes da Costa
Desenvolvedor

WebSite: http://www.ivia.com.br

IVIA ® Inovação e Tecnologia
[ CMMI 2 + ISO 9001:2008 + MPS.BR E ]


Reply all
Reply to author
Forward
0 new messages