这几天一直在学习JTA,考虑到之前用的Hibernate 3.1版本有些老了,就下载了最新的Hibernate Core 3.3.1GA,Hibernate Annotation 3.4.0GA和Hibernate Entity Manager 3.4.0GA。在MyEclipse中导入相关的包,代码编译的时候完全没问题,直到运行的时候,提示:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".        
SLF4J: See http: //www.slf4j.org/codes.html#StaticLoggerBinder for further details.        
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder        
        at org.slf4j.LoggerFactory.(LoggerFactory.java:60)        
        at org.hibernate.cfg.Configuration.(Configuration.java:151)        
        at org.hibernate.ejb.Ejb3Configuration.(Ejb3Configuration.java:107)        
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)        
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)        
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)        
        at com.jpa.util.JPAUtil.(JPAUtil.java:18)        
        at com.jpa.JPATest.addSystemUser(JPATest.java:34)        
        at com.jpa.JPATest.main(JPATest.java:27)    
      提示信息中多次提到SLF4J,google了一下,才发现这是现在的Hibernate使用SLF4J API记录日志,所以在Hibernate的lib中,不再提供Log4J的包,而大部分框架依然使用Log4J记录日志,这样导致了兼容性问题。
      解决办法,两步:一、在编译路径中添加Log4J的包,比如我一直在用的Log4J 1.2.14;二、再添加一个叫做slf4j-log4j12 1.5.2的包进行转换,注意到这里的log4j12,可能对应的是log4j 1.2版本。解决!
 
      本文部分内容参考: [url]http://bbs.chinaunix.net/viewthread.php?tid=1266419[/url]
      slf4j-log4j12 API可到以下地址下载: [url]http://mirrors.ibiblio.org/pub/mirrors/maven2/org/slf4j/slf4j-log4j12/1.5.2/[/url]
 
      博主原文2008年11月5日发表于 [url]http://feichangcai.javaeye.com/admin/blogs/262848[/url]