Olá Pessoal!
Tenho percebido que a sessionFactory do back end é compartilhada entre todos os usuários logados.
Há algum meio de fazer com que ela seja individual por usuário??
Muito Obrigado!
Olá Pessoal!
Tenho percebido que a sessionFactory do back end é compartilhada entre todos os usuários logados.
Há algum meio de fazer com que ela seja individual por usuário??
Muito Obrigado!
Sem resposta.
Não entendi o que vc está querendo.
Ops!
Foi mal.
[quote=andre07041989]Cara a sua duvida é muito generalizada, para que o pessoal responda precisa ser mais especifico, por que senão ai velho fica dificil.
Vlw.[/quote]
Olá André!
Desculpe, vou tentar ser mais claro e colocar um exemplo de como ela está configurada:
hoje tenho a seguinte configuração da HibernateUtil:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.caelum.model.Account;
import br.com.caelum.model.Category;
import br.com.caelum.model.Transaction;
import br.com.caelum.model.User;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static final AnnotationConfiguration annotationConfiguration;
static {
try {
annotationConfiguration = new AnnotationConfiguration();
annotationConfiguration.addAnnotatedClass(User.class);
annotationConfiguration.addAnnotatedClass(Account.class);
annotationConfiguration.addAnnotatedClass(Category.class);
annotationConfiguration.addAnnotatedClass(Transaction.class);
sessionFactory = annotationConfiguration.configure(
"conf/hibernate.cfg.xml").buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
private static Session session;
public static Session getSession() throws HibernateException {
try {
if (session == null || session.isOpen() == false) {
session = sessionFactory.openSession();
}
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
return session;
}
public static void closeSession() throws HibernateException {
try {
if (session != null) {
session.close();
}
session = null;
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
}
private static org.hibernate.Transaction tx;
public static org.hibernate.Transaction beginTransaction()
throws HibernateException {
try {
if (tx == null) {
tx = getSession().beginTransaction();
}
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
return tx;
}
public static void commit() throws HibernateException {
try {
if (tx != null) {
tx.commit();
}
tx = null;
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
}
public static void rollBack() throws HibernateException {
try {
if (tx != null) {
tx.rollback();
}
tx = null;
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
}
public static AnnotationConfiguration getConfig() {
return annotationConfiguration;
}
}
Serviço que chama a session:
public class AutenticacaoServices {
public Adm_Usuario logar(Adm_Usuario user, String hibernateCfg ) {
setDataBaseConfigOnSession(hibernateCfg);
Session session = HibernateUtil.getSession();
Adm_UsuarioDAO dao = new Adm_UsuarioDAO(session);
Adm_Usuario admUsuario = dao.logar(user);
session.close();
setLoggedUserOnSession(admUsuario);
return admUsuario;
}
}
A primeira pessoa que se loga no sistema instacia a sessionFactory.
Já a segunda, não instacia novamente, ela simplesmente utiliza a que já foi criada.
Eu precisaria que cada usuário instaciasse sua própria sessionFactory.
Testa agora com o método closeSession(), que eu fiz uma alteração, se não der certo, ai velho eu não sei o que pode ser, mas tenta assim, se avisa.
public static void closeSession() throws HibernateException {
try {
if (session != null) {
session.close();
sessionFactory.close(); // Fechar o sessionFactory também
}
session = null;
} catch (HibernateException e) {
e.printStackTrace();
throw (e);
}
}