Salve galera do guj, estou com um probleminha aqui na configuraçao do hibernate com o log4j, acabei de fazer meu primeiro teste com hibernate, fiquei uns 2 dias procurando tutoriais (inclusive tem um post meu logo abaixo), consegui configurar certinho, estou conseguindo persistir na minha tabela e tudo mais, o problema ocorre quando eu tento incluir o log4j na minha aplicaçao, tava vendo uns tutoriais e fiz certinho, porem ocorre um Warn na minha aplicaçao. Abaixo estao os codigos que eu usei:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="">
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver
</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/hello
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<mapping class="com.User"/>
</session-factory>
</hibernate-configuration>
log4j.properties
# Sample ResourceBundle properties file
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=info
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
log4j.logger.org.hibernate.cache=info
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
ConexaoHibernate
package conexao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ConexaoHibernate {
private static final SessionFactory sessionFactory;
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static{
try{
sessionFactory = new Configuration().configure("persistence.xml").buildSessionFactory();
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
public static Session getInstance() {
return sessionFactory.openSession();
}
}
User
package com;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column
private String name;
@Column
private String password;
@Override
public boolean equals(Object obj) {
if(obj instanceof User){
User user = (User) obj;
return user.getId() == this.getId();
}
return false;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDAO
package dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.User;
import conexao.ConexaoHibernate;
public class UserDAO {
private Session session;
public void salvar(User user) {
session = ConexaoHibernate.getInstance();
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save(user);
tx.commit();
} catch(Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
}
Main
package com;
import dao.UserDAO;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
User user = new User();
user.setName("Gustavo Torquato");
user.setPassword("123");
UserDAO udao = new UserDAO();
udao.salvar(user);
}
}
O erro que ocorre aparece no meu terminal:
10:12:07,679 INFO Version:37 - Hibernate Commons Annotations 3.2.0.Final
10:12:07,687 INFO Environment:603 - Hibernate 3.6.8.Final
10:12:07,688 INFO Environment:636 - hibernate.properties not found
10:12:07,691 INFO Environment:814 - Bytecode provider name : javassist
10:12:07,695 INFO Environment:695 - using JDK 1.4 java.sql.Timestamp handling
10:12:07,760 INFO Configuration:2156 - configuring from resource: persistence.xml
10:12:07,760 INFO Configuration:2175 - Configuration resource: persistence.xml
10:12:07,809 WARN DTDEntityResolver:73 - recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
10:12:07,842 INFO Configuration:2297 - Configured SessionFactory:
10:12:07,896 INFO AnnotationBinder:532 - Binding entity from annotated class: com.User
10:12:07,934 INFO EntityBinder:530 - Bind entity com.User on table user
10:12:07,984 INFO Configuration:1676 - Hibernate Validator not found: ignoring
10:12:07,988 INFO HibernateSearchEventListenerRegister:75 - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
10:12:07,995 INFO DriverManagerConnectionProvider:64 - Using Hibernate built-in connection pool (not for production use!)
10:12:07,995 INFO DriverManagerConnectionProvider:65 - Hibernate connection pool size: 20
10:12:07,996 INFO DriverManagerConnectionProvider:68 - autocommit mode: false
10:12:08,003 INFO DriverManagerConnectionProvider:103 - using driver: org.gjt.mm.mysql.Driver at URL: jdbc:mysql://localhost/hello
10:12:08,003 INFO DriverManagerConnectionProvider:109 - connection properties: {user=root, password=****}
10:12:08,282 INFO Dialect:135 - Using dialect: org.hibernate.dialect.MySQLDialect
10:12:08,293 INFO SettingsFactory:126 - Database ->
name : MySQL
version : 5.5.16
major : 5
minor : 5
10:12:08,294 INFO SettingsFactory:132 - Driver ->
name : MySQL-AB JDBC Driver
version : mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
major : 5
minor : 1
10:12:08,296 INFO TransactionFactoryFactory:62 - Using default transaction strategy (direct JDBC transactions)
10:12:08,297 INFO TransactionManagerLookupFactory:83 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
10:12:08,297 INFO SettingsFactory:179 - Automatic flush during beforeCompletion(): disabled
10:12:08,297 INFO SettingsFactory:183 - Automatic session close at end of transaction: disabled
10:12:08,297 INFO SettingsFactory:190 - JDBC batch size: 15
10:12:08,297 INFO SettingsFactory:193 - JDBC batch updates for versioned data: disabled
10:12:08,298 INFO SettingsFactory:198 - Scrollable result sets: enabled
10:12:08,298 INFO SettingsFactory:206 - JDBC3 getGeneratedKeys(): enabled
10:12:08,298 INFO SettingsFactory:214 - Connection release mode: auto
10:12:08,299 INFO SettingsFactory:238 - Maximum outer join fetch depth: 2
10:12:08,299 INFO SettingsFactory:241 - Default batch fetch size: 1
10:12:08,299 INFO SettingsFactory:245 - Generate SQL with comments: disabled
10:12:08,299 INFO SettingsFactory:249 - Order SQL updates by primary key: disabled
10:12:08,299 INFO SettingsFactory:253 - Order SQL inserts for batching: disabled
10:12:08,299 INFO SettingsFactory:431 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
10:12:08,302 INFO ASTQueryTranslatorFactory:47 - Using ASTQueryTranslatorFactory
10:12:08,302 INFO SettingsFactory:261 - Query language substitutions: {}
10:12:08,302 INFO SettingsFactory:266 - JPA-QL strict compliance: disabled
10:12:08,302 INFO SettingsFactory:271 - Second-level cache: enabled
10:12:08,302 INFO SettingsFactory:275 - Query cache: disabled
10:12:08,302 INFO SettingsFactory:406 - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
10:12:08,303 INFO SettingsFactory:285 - Optimize cache for minimal puts: disabled
10:12:08,303 INFO SettingsFactory:294 - Structured second-level cache entries: disabled
10:12:08,308 INFO SettingsFactory:323 - Statistics: disabled
10:12:08,308 INFO SettingsFactory:327 - Deleted entity synthetic identifier rollback: disabled
10:12:08,308 INFO SettingsFactory:343 - Default entity-mode: pojo
10:12:08,308 INFO SettingsFactory:347 - Named query checking : enabled
10:12:08,308 INFO SettingsFactory:351 - Check Nullability in Core (should be disabled when Bean Validation is on): enabled
10:12:08,324 INFO SessionFactoryImpl:202 - building session factory
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [blob] overrides previous : org.hibernate.type.BlobType@88e2dd
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [java.sql.Blob] overrides previous : org.hibernate.type.BlobType@88e2dd
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [wrapper_characters_clob] overrides previous : org.hibernate.type.CharacterArrayClobType@e64686
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [clob] overrides previous : org.hibernate.type.ClobType@203c31
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [java.sql.Clob] overrides previous : org.hibernate.type.ClobType@203c31
10:12:08,336 INFO BasicTypeRegistry:150 - Type registration [materialized_clob] overrides previous : org.hibernate.type.MaterializedClobType@4fc156
10:12:08,337 INFO BasicTypeRegistry:150 - Type registration [materialized_blob] overrides previous : org.hibernate.type.MaterializedBlobType@1e2ca7
10:12:08,337 INFO BasicTypeRegistry:150 - Type registration [characters_clob] overrides previous : org.hibernate.type.PrimitiveCharacterArrayClobType@105bd58
10:12:08,337 INFO BasicTypeRegistry:150 - Type registration [wrapper_materialized_blob] overrides previous : org.hibernate.type.WrappedMaterializedBlobType@1d1e730
10:12:08,536 INFO SessionFactoryObjectFactory:109 - Factory name:
10:12:08,537 INFO NamingHelper:49 - JNDI InitialContext properties:{}
10:12:08,540 WARN SessionFactoryObjectFactory:121 - Could not bind factory to JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
at org.hibernate.util.NamingHelper.bind(NamingHelper.java:75)
at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:367)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at conexao.ConexaoHibernate.<clinit>(ConexaoHibernate.java:14)
at dao.UserDAO.salvar(UserDAO.java:14)
at com.Main.main(Main.java:16)
10:12:08,597 DEBUG SQL:111 - insert into user (name, password) values (?, ?)
Como eu falei, o registro é inserido no banco, porem ocorre este Warn.
Outra coisa que gostaria de pedir a voces é em relaçao ao meu codigo, estou fazendo certinho, tem algo que esqueci de fazer, ou uma boa pratica de programaçao que deveria seguir?, quem tiver um tutorial de configuraçao do log4j, por favor me passe.
ESTOU USANDO JAVA DESKTOP E NAO WEB, ou seja nao tenho nenhum servidor tipo jboss, tomcat e tals.
Muito Obrigado pessoal