Corrigindo um aplicativo web para utilizar JPA + Hibernate!

2 respostas
V

Bom dia galera, primeiramente desculpa, por esse tópico parecer repetitivo, mas achei tanta informação em diversos tópicos que acabei me perdendo.

Gostaria da ajuda de vocês para em dizer quais são os erros ou má-praticas que possuo nos seguintes códigos e me ajudassem com uma alternativa para criar uma nova solução utilizando JPA com Hibernate, eu conheço o básico dos 2.

Os códigos são de um Connection e um DAO, meu sistema é utilizado por umas 20 pessoas em média, li mto a respeito sobre o pool de conexão do hibernate com o C3P0, mas não entendi quais são as vagentes de utilizalo.

public class Connection {
	
	static BasicDataSource ds = null;
	private static int connPool = 0; 
	
	private static void carregaBase(){
		String database = "teste";
		String server = "localhost";
		String username = "root";
		String password = "";
		
		String url = "jdbc:mysql://" + server + "/" + database + "?user=" + username + "&password=" + password;
		String driver = "com.mysql.jdbc.Driver";
		int totConnections = 20;
		
		ds = new BasicDataSource();
	  	ds.setDriverClassName(driver);
	  	ds.setUsername(username);
	  	ds.setPassword(password);
	  	ds.setUrl(url);
	  	ds.setMaxActive(totConnections);
	 }
	 
	public static Connection getConnection() throws SQLException{
		connPool++;
		if (ds == null){ carregaBase(); }
		return ds.getConnection();
	}

	public static void freeConnection(Connection conn){
		connPool--; 
		if (conn != null){
			try{
				conn.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
			conn = null; 	 
		}
	}
		
}

Sobre o DAO, sei perfeitamente q falho, pq praticamente utilizo um DAO para cara entidade do sistema, vi que normalmente é feito um DAO genérico, mas não entendi, porque criar uma Infernate, depois outra classe abstrata, para então se criar um DAO para um Entidade que utiliza os outras 2 classes.

Tenho um exemplo de um DAO onde utilizando apenas o Hibernate, que utiliza Session do Hibernate instanciada atraves da classe HibernateUtils, mas qndo estou usando JPA junto com o Hibernate, tem como eu utilizar a Sessao?

public class UsuarioDAO {

	public int insere(Usuario usuario) throws SQLException {
		int idUsuario = 0;

		Connection cn = null;
		PreparedStatement stmt = null;
		try{
			cn = Connection.getConnection();
			String sql = "insert into usuario(idUsuario, nome, email, senha) values (?, ?, ?, ?)";
			stmt = cn.prepareStatement(sql);

			// setando os valores
			stmt.setInt(1, usuario.getId());
			stmt.setString(2, usuario.getNome());
			stmt.setString(3, usuario.getEmail());
			stmt.setString(4, usuario.getSenha());

			// executa
			stmt.execute();
			idUsuario = getLastId(cn);
		} finally {
			stmt.close();
			Conn.freeConnection(cn);
		}
		return idUsuario;
	}
}

Obrigado.

2 Respostas

fantomas

Aqui http://www.devmedia.com.br/articles/viewcomp.asp?comp=5869 no tópico Para que serve fala das maiores vantagens no uso de um pool de conexões.

Sobre a interface: É sempre bom escrever códigos pensando na abstração, isso reduz a dependencia aumentando bastante a flexibilidade.

Sim! Na EntityManager vc pode executar o seguinte método (Session) entityManager.getDelegate();

Diria para vc considerar o Spring (mais uma coisa para estudar rsrsrsrsr) neste seu projeto, ele irá lhe ajudar bastante ao fazer a injeção de dependencias e o mais importante O CONTROLE DAS TRANSAÇÔES.

P.S Estude o mais que puder, faça teste, prototipos etc… porque vc provavelmente vai dizer que foi fácil apenas depois que estiver pronto.

flws

V

Obrigado pela a resposta fantomas!!

Vou estudar mais, pelo menos algumas coisas já começo a entender melhor.

abs

Criado 8 de abril de 2009
Ultima resposta 8 de abr. de 2009
Respostas 2
Participantes 2