sorry Im a little new...
I mean a class that create a connection with the db,
and returns you a Session...
I got one class of these, with singleton, but not using the struts' hibernate plugin, here it is:
Code:
/*
* HibernateSessionFactory.java
*
* Created on 30 de Janeiro de 2005, 01:13
*/
package controller;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
/**
*
* @author Realm
*/
/**
* Encapsula a criação de sessões para o Hibernate.
* Utiliza uma política ThreadLocal para fornecer as sessões.
*
* @author Paulo Silveira
*/
public class HibernateSessionFactory {
private static HibernateSessionFactory instance;
private SessionFactory sessionFactory;
private LocalSessionManager sessionManager = new LocalSessionManager();
/**
* Pega uma sessão do Hibernate.
* Talvez essa sessão seja aberta agora, caso a Thread.currentThread() nunca tenha
* pedido uma sessão ainda.
*
* @return uma sessão do hibernate.
*/
public Session getSession() {
Session session = (Session) this.sessionManager.get();
return session;
}
/**
* Construtor privado para o singleton
*
* @throws IOException
* @throws HibernateException
*/
private HibernateSessionFactory(Object sf) throws HibernateException {
Configuration cfg = new Configuration();
cfg.addClass(fotolog.model.Comentario.class);
cfg.addClass(fotolog.model.Confirmacao.class);
cfg.addClass(fotolog.model.Favorito.class);
cfg.addClass(fotolog.model.Foto.class);
cfg.addClass(fotolog.model.Preferencia.class);
cfg.addClass(fotolog.model.Usuario.class);
if(sf == null) {
this.sessionFactory = (SessionFactory)sf;
} else {
this.sessionFactory = cfg.buildSessionFactory();
}
}
/**
* Acesso ao singleton
* @return o singleton desta classe
*/
public static HibernateSessionFactory getFactory() {
if (instance == null) {
try {
instance = new HibernateSessionFactory(null);
}
catch (Exception e) {
e.printStackTrace(System.err);
throw new RuntimeException("problems while instantiating the singleton", e);
}
}
return instance;
}
/**
* Acesso ao singleton
* @return o singleton desta classe
*/
public static HibernateSessionFactory getFactory(Object sf) {
if (instance == null) {
try {
instance = new HibernateSessionFactory(sf);
}
catch (Exception e) {
e.printStackTrace(System.err);
throw new RuntimeException("problems while instantiating the singleton", e);
}
}
return instance;
}
/**
* Classe utilizada para cuidar das sessões do hibernate, de uma maneira local a cada Thread.
* Isto é, cada Thread usa apenas uma sessão.
* @todo tirar essa classe do interior?
* @author Paulo Silveira
*/
protected class LocalSessionManager extends ThreadLocal {
/**
* Devolve o valor inicial que deve ser dado a uma Thread quando
* ela pedir uma Session. No nosso caso, esse valor nunca muda, é sempre
* a mesma sessão para a mesma Thread.
*/
protected Object initialValue() {
Session session;
try {
session = HibernateSessionFactory.this.sessionFactory.openSession();
}
catch (HibernateException e) {
throw new RuntimeException("Problems while opening a new thread local hibernate session", e);
}
return session;
}
}
}