环境:tomcat6+ hibernate2.1.jar
问题:在使用tomcat6自带的dbcp的jar包(tomcat-dbcp.jar,其中已经包含了commons-collections.jar,
commons-dbcp.jar, commons-pool.jar)来配置dbcp数据库连接池出现了各种莫名其妙的问题
解决:使用hibernate2.1自带的 commons-collections.jar,commons-dbcp.jar, commons-pool.jar来替换tomcat-dbcp.jar就ok了
1.jndi与dbcp有什么关系?
jndi是不是也是数据库连接池呢?--不是
不使用dbcp只是用jndi会出现什么情况呢?hibernate中也可以连接数据库
dbcp与c3p0是hibernate推荐使用的
在tomcat的context.xml下,添加
--dbcp连接池配置,这种方式配置可以使用JDNI <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="produsr" password="prod_777" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@10.72.240.31:1522:ffv2prod" factory="org.apache.commons.dbcp.BasicDataSourceFactory" --必须 />
在hibernate.cfg.xml中配置
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.datasource">java:comp/env/jdbc/test</property> <mapping resource="com/hsp/config/Cat.hbm.xml" /> <!-- 注释掉了 start <property name="connection.provider_class">net.sf.hibernate.connection.DBCPConnectionProvider</property> <property name="connection.url">jdbc:oracle:thin:@10.72.240.31:1522:ffv2prod</property> <property name="connection.provider_class">net.sf.hibernate.connection.DBCPConnectionProvider</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.username">produsr</property> <property name="connection.password">prod_777</property> end--> </session-factory> </hibernate-configuration>
编写hibernateUtil工具类
package com.hsp.util; import java.io.File; import java.net.URL; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); private static SessionFactory sessionFactory = null; static{ //create the SessionFactory try { /*1.配置读取"hibernate.cfg.xml"配置文件,默认读取时src目录下的 *2.hibernate.cfg.xml配置文件可以放置mapping,使用hibernate.properties配置 * 文件不行。hibernate.cfg.xml不是必须的 */ sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory(); } catch (HibernateException e) { log.error("Initial SessionFactory creation failed", e); throw new ExceptionInInitializerError(e); } } public static final ThreadLocal session = new ThreadLocal(); public static Session currentSession() throws HibernateException{ Session s = (Session)session.get(); if(s == null){ s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() throws HibernateException{ Session s = (Session)session.get(); session.set(null); if(s != null){ s.close(); } } }