Configuração Programatica Hibernate 3

Swing + MySql + Hibernate 3
hibernate.hbm.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/tremdados root admin true true thread [/code]

O hibernate.hbm.xml acima funciona 100%, mas se , for retirada a linha:

<property name="current_session_context_class">thread</property>

Passa a dar a seguinte exceção: ?No CurrentSessionContext configured!?

Usando configuração programática
?HibernateUtil.java?

package Persistencia; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new AnnotationConfiguration() .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect") .setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver") .setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/tremdados") .setProperty("hibernate.connection.username", "root") .setProperty("hibernate.connection.password", "admin") .setProperty("current_session_context_class", "thread") .setProperty("hibernate.show_sql", "true") .setProperty("hibernate.format_sql", "true") //---------------- c3p0 inicio ------------------------------------------------------------------- // .setProperty("hibernate.c3p0.acquire_increment", "1") // .setProperty("hibernate.c3p0.idle_test_period", "100") // .setProperty("hibernate.c3p0.max_size", "10") // .setProperty("hibernate.c3p0.max_statements", "0") // .setProperty("hibernate.c3p0.min_size", "5") // .setProperty("hibernate.c3p0.timeout", "100") //---------------- c3p0 fim------------------------------------------------------------------- .addResource("Persistencia/Cliente.hbm.xml") .addResource("Persistencia/Usuario.hbm.xml").buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
Retorna o mesmo erro, ou seja parece que:

.setProperty("current_session_context_class", "thread") 

Nâo é reconhecido

Aguem poderia me ajudar com as seguintes questões:

  1. Onde estou errando ?
  2. Como fazer para receber via argumento o usuário e a senha ?
  3. Como usar o c3p0, porque se descomentar as linha c3p0 dá essa exceção:
    Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/DataSources
    Exception in thread “main” java.lang.ExceptionInInitializerError

Grato.

Quando a aplicação é Swing ou Desktop, vc precisa usar essa configuração: <property name="current_session_context_class">thread</property>

sobre o C3P0, vc adicionou o jar dele no projeto?

Romarcio, cara muito obrigado pelas dicas,

  1. Realmente faltava c3p0. Jar, baixei do site http://sourceforge.net/projects/c3p0/ e vieram 3 JAR: c3p0-0.9.1.2.jar, c3p0-0.9.1.2-jdk1.3.Jar e c3p0-oracle-thin-extras-0.9.1.2.jar, instalei o c3p0-0.9.1.2.jar, e esta funcionando, o oracle-thin-extras-0.9.1.2.jar, eu desconsiderei uma vez que meu aplicativo usa MySql, mas estou em duvida sobre o c3p0-0.9.1.2-jdk1.3.Jar se ele me será necessário no futuro ? tipo quando for p/ produção ?.

  2. Eu quero configurar o hibernate programaticamente, para poder mudar a configuração em tempo de execução, (mudar usuario e senha), depois de varias pesquisa achei uma propriedade que tirou o erro No CurrentSessionContext configured! mas não sei qual a influencia que isso fará em meu programa, tipo performace, segurança, etc,

.setProperty("hibernate.current_session_context_class", "org.hibernate.context.ThreadLocalSessionContext") .setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory") .setProperty("current_session_context_class", "thread")
veja se tem alguma fragilidade redundância ou ambigüidade em meu código porque eu to configurando meu hibernate como um macaco que repete sem saber o que esta fazendo. Obs se tirar a 1 propriedade da erro, mas se tirar as 2 ultimas não.

  1. Eu ainda não descobri como passar ou pegar de uma tela de login o usuário e senha na hora de fabricar a sessão.

Segue minha classe HibernateUtil .java

[code]
package Persistencia;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration()
.setProperty(“hibernate.dialect”, “org.hibernate.dialect.MySQLDialect”)
.setProperty(“hibernate.connection.driver_class”, “com.mysql.jdbc.Driver”)
.setProperty(“hibernate.connection.url”, “jdbc:mysql://localhost:3306/Banco”)
.setProperty(“hibernate.connection.username”, “root”)
.setProperty(“hibernate.connection.password”, “admin”)
.setProperty(“hibernate.show_sql”, “true”)
.setProperty(“hibernate.format_sql”, “true”)

        .setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory")
        .setProperty("hibernate.current_session_context_class", "org.hibernate.context.ThreadLocalSessionContext")
        .setProperty("current_session_context_class", "thread")

        .setProperty("hibernate.c3p0.min_size", "5")
        .setProperty("hibernate.c3p0.max_size", "20")
        .setProperty("hibernate.c3p0.timeout", "300")
        .setProperty("hibernate.c3p0.max_statements", "50")
        .setProperty("hibernate.c3p0.idle_test_period", "150")
        .setProperty("c3p0.maxIdleTime", "1800")
        .setProperty("hibernate.c3p0.acquire_increment", "5")
        .addResource("Persistencia/Cliente.hbm.xml")
        .addResource("Persistencia/Usuario.hbm.xml").buildSessionFactory();
    } catch (Throwable ex) {
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}
public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

}
[/code]Grato por qualquer dica.

Vc só precisa do: c3p0-0.9.1.2.jar

.setProperty("hibernate.current_session_context_class", "org.hibernate.context.ThreadLocalSessionContext")
.setProperty("hibernate.transaction.factory_class", "org.hibernate.transaction.JDBCTransactionFactory")
.setProperty("current_session_context_class", "thread") 

// use apenas estas
.setProperty("hibernate.current_session_context_class", "thread")
.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider")

Não entendi a questão do usuario e senha. Vc precisa criar um usuario e senha para logar na aplicação ou vc que mudar o usuario e senha do banco de dados que é configurado no hibernate?

Novamente grato Romarcio.

Pretendo mudar o usuario e a senha da configuração do hibernate.

[quote=hlghelcio]Novamente grato Romarcio.

Pretendo mudar o usuario e a senha da configuração do hibernate.[/quote]

Humm, dai não sei como fazer isso. Se pensar em algo eu posto aqui.