Ambiente não gerenciado com Hibernate

2 respostas
J

Olá amigos,

Dúvida cruel…

  1. Estou construindo uma aplicação web utilizando JSF e Hibernate no conteiner Tomcat, e no entando, algumas dúvidas surgiram e acho que é a de vários outros iniciantes como eu.

  2. Para a aplicação que estou construindo, será necessário uma conexão por usuário, ou seja, cada usuário deverá logar com seu id e senha respectivamente.

  3. Em função disso, procurei construir uma classe para conexão com o banco de dados utilizando o Hibernate como demonstrado abaixo:

package demo;

import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateHelper {
	
	/**
	* Reference to SessionFactory.
	*/
	private static SessionFactory sf;
	public static final ThreadLocal session = new ThreadLocal();
	
	public static synchronized void init() {
		
		if (sf != null) 
			return;
		System.out.println("Initializing Hibernate");
		try {
		   
			Configuration cfg = new Configuration().configure();
			Properties p = new Properties();
			p = cfg.getProperties();
		    p.setProperty( "hibernate.connection.username", "root" );
		    p.setProperty( "hibernate.connection.password", "1234" );
			cfg.setProperties(p);
			
  	        //Configuration conf = new Configuration().setProperties( p );			
			
			sf = cfg.buildSessionFactory();
		} catch (Exception he) {
			System.err.println("Unable to create session factory from configuration");
			he.printStackTrace();
			throw new RuntimeException("Unable to create session factory from configuration", he);
		}
		System.out.println("Hibernate initialized");
	}
	
	/**
	* Return the SessionFactory.
	* @return The SessionFactory for this application session
	*/
	public static SessionFactory sessionFactory() {
		if (sf == null) 
			init();
		return sf;
	}
	
	public static void destroy() {
		if (sf != null) {
			try {
				sf.close();
			} catch (HibernateException he) {
				he.printStackTrace();
			}
		}
		sf = null;
		System.out.println("Hibernate resources released");
	}
	
	/**
	* Closes an hibernate {@link Session}, releasing its resources.
	* @throws HibernateException if an hibernate error occurs
	*/
	public static void closeSession() throws HibernateException {
		Session s = (Session)session.get();
		session.set(null);
		if (s != null) {
			s.close();	

		}
	}
	
	/**
	* Returns an hibernate {@link Session} from the session factory.
	* @return an hibernate {@link Session}
	* @throws HibernateException if an error occurs
	*/
	public static Session openSession() throws HibernateException {
		if (sf == null) 
			init();
		Session s = (Session)session.get();
		
		if (s == null) {
			s = sf.openSession();
			session.set(s);
		}
		return (s);
	}			
}
  1. Esta classe irá criar uma session factory por aplicação e compartilhará a mesma com todas as outras sessions que forem solicitadas (me corrijam se eu estiver errado).

  2. Cada conexão (Requisição) com o banco utilizará a mesma session factory.

  3. Eu preciso fazer minha classe criar uma session factory independente por sessão (httpsession) do usuário (onde cada um entrará com seu id e senha), para ai sim compartilhar a mesma com as sessions da sessão criada pelo usuário.

  4. Não sei se consegui me expressar adequadamente, porém, gostaria da ajuda dos “feras” da comunidade no sentido de exclarecer e colocar suas opiniões sobre o assunto, tenho certeza de que outros se beneficiarão da colaboração de todos vocês.

  5. Agradeço desde já,

jukinha :!:

2 Respostas

_fs

Tenho certeza que JSF tem suporte a componentes colocados no escopo da sessão. Pode começar a pesquisa por aí.

O21

t@ fraco esse forum…
Este topico do “JUKINHA” está mostrando a difucade de inicianntes em programação com Hibernate e JSF…
Estou com o mesmo problema q ele se alguem conseguir desvendar o problema postem o mais rapido possivel se não terei q procurar uma lampada com um “GENIO” para resolver os meus problemas…

:?: :arrow: :idea:

Criado 11 de outubro de 2006
Ultima resposta 18 de out. de 2006
Respostas 2
Participantes 3