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:
- Onde estou errando ?
- Como fazer para receber via argumento o usuário e a senha ?
- 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,
-
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 ?.
-
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.
- 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.