问题一:org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thre
分析及解决:
错误信息:
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
错误原因:
所需要开事务的地方都@Transactional注解了,排除结果是spring管理hibernate4 transaction getCurrentSession出现的问题,hibernate4不支持你用hibernate3的 getcurrentSession换用openSession就没问题了。
问题二:java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
错误消息:
严重: Servlet /nssh threw load() exception
java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getDataSource(SessionFactoryUtils.java:129)
at com.ywx.tiles.dic.dao.DicConfigDao.findDicDataList(DicConfigDao.java:37)
at com.ywx.tiles.dic.service.DicConfigManager.findDicDataList(DicConfigManager.java:190)
at com.ywx.tiles.dic.service.DicConfigManager.loadDic(DicConfigManager.java:113)
at com.ywx.tiles.dic.service.DicConfigManager.loadAllDic(DicConfigManager.java:90)
at com.ywx.tiles.common.servlet.ConfigServlet.init(ConfigServlet.java:27)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
分析及解决:
错误原因:在用SessionFactoryUtils.getDataSource( )方法的时候,导报要注意看了,因为我这里是Spring4+Hibernate4,由于导了Hibernate3的SessionFactoryUtils(Hibernate3中是没有SessionFactoryImplementor这个实现的),所以换成Hibernate4的就没问题,因为我程序中我用的都是Hibernate4的操作方法操作数据库。
问题三:log日志在控制台不显示问题(先不考虑在本地文件输出log)
配置log4j日志步骤:
1、导入一下jar文件(slf4j的版本要对应):
log4j.jar
slf4j-api-1.5.0.jar
sle4j-log4j12-1.5.0.jar
2、配置log4j.properties文件:
配置的基本格式为:
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
#配置日志信息输出目的地Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
#配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
配置文件log4j.properties:
### 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
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
log4j.logger.com.ywx=info