marcioa1:
Thiago,
Não entendi a história do ThreadLocal. No meu projeto (Swing com poucos usuários ) eu uso uma classe de conexão (implementando um singleton) e sempre que preciso de uma conexão, eu uso um método getconnection() que retorna a variável de conexão estática.
private static Connection conn = null;
public static Connection getConnection(){
if (conn==null){
try{
Class.forName(nomeDoDriver);
conn = DriverManager.getConnection(url,username,password);
} catch ...
}
try {
if (conn.isClosed()){
try{
Class.forName(nomeDoDriver);
conn = DriverManager.getConnection(url,username,password);
} catch ...
}
return conn;
}
Isto pode ser melhorado ?
Obrigado,
Márcio
Você precisa de apenas uma conexão para a aplicação Inteira??
Então eu manteria como está.
Quanto ao ThreadLocal, é o seguinte. Eu não tenho nenhum exemplo sobre ThreadLocal comigo agora! Mas da documentação do Hibernate tem uma classe chamada HibernateUtil. Ele armazena os sessions em um objeto do tipo ThreadLocal.
A minha sugestão seria você pegar este código por exemplo, dar uma estuda e aplicar no seu código.
Desta forma, cada thread da aplicação usuário sua própria connection. (Considere que cada thread é um usuário que está utilizando a aplicação naquele momento, certo!! :wink: )
O endereço na net que tem o exemplo é este:
http://www.hibernate.org/hib_docs/v3/reference/en/html/quickstart.html#quickstart-persistentclass
mas para facilitar, vou colocar o código aqui em baixo. É para hibernate, mas não se deixe assustar por isso :wink: .
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() {
Session s = (Session) session.get();
if (s != null)
s.close();
session.set(null);
}
}
Abraços!
Thiago