Bom dia pessoal sou novo na tecnologia Java e gostaria de uma ajuda sobre a divisão de papéis correta para um projeto.Nos meus estudos estou utilizando Tomcat, Hibernate e Struts. Como IDE escolhi o Eclipse e coloquei alguns plugins como o Lomboz.
Criei uma classe para obter minhas conexões com o banco de dados
package br.com.controle.uteis;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class ConnectionFactory {
private static ConnectionFactory instance = null;
private SessionFactory sessionFactory = null;
private ConnectionFactory() {
try {
Configuration cfg = new Configuration();
cfg.configure("/hibernate.cfg.xml");
sessionFactory = cfg.buildSessionFactory();
} catch (MappingException e) {
System.err.println("Mapping Exception" + e.getMessage());
throw new RuntimeException(e);
} catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
}
}
public static synchronized ConnectionFactory getInstance() {
if (instance == null) {
instance = new ConnectionFactory();
}
return instance;
}
public Session getSession() {
try {
Session s = sessionFactory.openSession();
return s;
} catch (HibernateException e) {
System.err.println("Hibernate Exception" + e.getMessage());
throw new RuntimeException(e);
}
}
}
Criei uma classe onde mantenho os principais métodos que irei utilizar Inserir, Atualizar, Salvar, Excluir e Pesquisar…
package br.com.controle.uteis;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.Criteria;
import net.sf.hibernate.expression.Criterion;
import net.sf.hibernate.type.Type;
import java.util.List;
public abstract class BaseDAO {
public BaseDAO() {
}
public boolean inserir(Object obj) throws DAOException {
Transaction tx = null;
try {
Session session = ConnectionFactory.getInstance().getSession();
tx = session.beginTransaction();
session.save(obj);
session.flush();
tx.commit();
session.close();
} catch (HibernateException e) {
try {
tx.rollback();
} catch(HibernateException ex) {
}
throw new DAOException(e);
}
return true;
}
// Demais métodos ATUALIZAR, EXCLUIR...
}
Agora estou criando para cada um dos meus “controles” o seguinte.
- Estou criando um DynaActionForm no meu arquivo struts-config.xml.
- Criei um JavaBean com meus métodos Get/Set e também o mapeamento do Hibernate.
- Uma classe DispatchAction onde nela estou criando os meus métodos Inserir, Excluir, Salvar…
- Uma classe DAO onde do um extends BaseDAO e implemento alguns métodos que não estão implementados na minha BaseDAO.
Agora vem uma grande duvida conversando com algumas pessoas na net, vendo alguns exemplos verifiquei que algumas pessoas criam uma classe aonde existe uma implementação de todos os DAO costumam chamar ela de “Broker” gostaria de saber se isso é uma boa pratica ou é algo desnecessário…
Pessoal não sei se coloquei todas as informações mais acredito que consegui passar a minha duvida…