uaheaue, então, quando eu faço
no hiber, eu to fazendo oq? pedindo uma conexão do DataSource? …to fuçando no hibernate só agora haeuhauheua :oops: , ai eu vi na documentação q o bom era ter um singleton q te fornecesse sempre a mesma sessão… ai vi um código de um tutorial lá q o cara chamava openSession() a cada método do DAO q ele utilizava… ai, fiquei curioso, esse openSession() ta relacionado ao q??? :roll:
tipo… eu tenho o seguinte singleton q peguei da própria documentação do hiber…
[code]package br.com.develop.dao;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
public static final ThreadLocal session = new ThreadLocal();
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch ( HibernateException e ) {
e.printStackTrace();
}
}
private HibernateUtil() {
}
public static Session currentSession() {
Session s = ( Session ) session.get();
try {
if ( s == null ) {
s = sessionFactory.openSession();
session.set( s );
}
} catch ( HibernateException e ) {
e.printStackTrace();
}
return s;
}
public static void closeSession() {
Session s = ( Session ) session.get();
session.set( null );
try {
if ( s != null )
s.close();
} catch ( HibernateException e ) {
e.printStackTrace();
}
}
}[/code]
ta… a unica coisa q ela faz é te retornar uma session do hiber… ai, nos DAOs eu tenho algo como:
[code]package br.com.develop.dao;
import java.util.List;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.HibernateException;
import br.com.develop.model.User;
import br.com.develop.dao.UserDAO;
public class UserDAO {
public void insertUser( User user ) throws DAOException {
Session session = HibernateUtil.currentSession();
try {
session.save( user );
session.flush();
} catch ( HibernateException e ) {
e.printStackTrace();
throw new DAOException();
} finally {
HibernateUtil.closeSession();
}
}
public User findUserById( int id ) throws DAOException {
Session session = HibernateUtil.currentSession();
User user = null;
try {
user = ( User ) session.load( User.class, new Integer( id ) );
session.flush();
} catch ( HibernateException e ) {
e.printStackTrace();
throw new DAOException();
} finally {
HibernateUtil.closeSession();
}
return user;
}
public List findUserByName( String name ) throws DAOException {
Session session = HibernateUtil.currentSession();
List users = null;
try {
users = session.find( "from system_user in class User where system_user.name like ? ",
"%" + name,
Hibernate.STRING
);
} catch ( HibernateException e ) {
e.printStackTrace();
throw new DAOException();
} finally {
HibernateUtil.closeSession();
}
return users;
}
// continuação dos métodos do DAO
}[/code]
quero saber se esse é o jeito certo de se trabalhar com o hibernate! … ter um singleton q retorne uma session e todo mundo usa a mesma session… e ter aquele closeSession() lá… sei lá, eu não to ligado no qq o hiber faz por baixo desse código ai, quero desempenho!