Colegas,
Estou migrando uma (A) aplicação JSF 1.2 + Spring 2 + Hibernate 3 para uma solução (B) JSF 1.2 + EJB3/JPA + Hibernate e estou com dúvidas quanto a definição da arquitetura. Na aplicação (A) o projeto está divido na seguinte estrutura : - Dá Página até o banco faço o seguinte caminho: 1) Minhas páginas XHTML + o Framework Faceletes para montar os templates. 2) A página acessa ManagedBeans do JSF 3) Esse ManagedBean tem uma classe "Manager" (uma abstração para uma camada de serviços) injetada. Exemplo:public class UsuarioBean {
public UserManager mgr;
.
.
get and sets
}
public class UserManagerImpl implements UserManager{
private UserDAO dao;
public void setUserDAO(UserDAO dao) {
this.dao = dao;
}
public User login(User user) {
return this.dao.login(user);
}
}
public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO {
public User login(User user) {
DetachedCriteria c = DetachedCriteria.forClass(User.class);
c.add(Restrictions.eq("userName",user.getUserName()));
c.add(Restrictions.eq("password",user.getPassword()));
List results = getHibernateTemplate().findByCriteria(c);
if (results == null || results.isEmpty()){
return null;
}
return (User)results.get(0);
}
public class UsuarioBean {
private void listUsuarios() {
UsuarioFacadeLocal usuarioFacade = (UsuarioFacadeLocal) lookupUsuarioFacade();
List usuarios = usuarioFacade.findAll();
for (Iterator it = usuarios.iterator(); it.hasNext();) {
Usuario elem = (Usuario) it.next();
System.out.println(elem.getNome());
}
}
private UsuarioFacadeLocal lookupUsuarioFacade() {
try {
Context c = new InitialCon text();
return (UsuarioFacadeLocal) c.lookup("ModuloEAR/UsuarioFacade/local");
}
catch(NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
throw new RuntimeException(ne);
}
}
@Stateless
public class UsuarioFacade implements UsuarioFacadeLocal {
@PersistenceContext
private EntityManager em;
/** Creates a new instance of UsuarioFacade */
public UsuarioFacade() {
}
public void create(Usuario usuario) {
em.persist(usuario);
}
public void edit(Usuario usuario) {
em.merge(usuario);
}