论坛首页 Java企业应用论坛

『出错』hibernate3配置c3p0遇到的问题

浏览 53231 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-30  
软件环境:
windows 2000+tomcat5.0+hibernate3.0+SQL Server2000
配置文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>

    <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
    <property name="show_sql">true</property>
    <property name="current_session_context_class">thread</property>
    <!--Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数-->
    <property name="jdbc.fetch_size">20</property>
    <!--Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思-->
    <property name="jdbc.batch_size ">20</property>
    <property name="connection.username">HNMC</property>
    <property name="connection.password">sundy</property>
    <property name="connection.url">jdbc:oracle:thin:@192.168.0.20:1521:ora9</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

    <!--C3P0 setting-->

    <property name="c3p0.max_size">20</property>
    <property name="c3p0.min_size">5</property>
    <!--获取连接的等待时间-->
    <property name="c3p0.timeout">3600</property>
    <property name="c3p0.max_statements">100</property>
    <!--每隔3600毫秒测试连接是否可以正常使用-->
    <property name="c3p0.idle_test_period">3600</property>
    <property name="c3p0.acquire_increment">2</property>

    <mapping resource="com/sundy/hnmc/beans/AccountBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/AlertBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/ConfigBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/PartitionBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/DateStatBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/FormulaBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/FunctionBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/HotelBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/IpUseBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/LogBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/MonthStatBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/NetLogBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/RoleBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/RsendBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/RuleBean.hbm.xml"/>
    <mapping resource="com/sundy/hnmc/beans/ModuleBean.hbm.xml"/>

  </session-factory>
</hibernate-configuration>
错误提示信息:
当我启动tomcat,运行程序后,空闲一个小时后出现下列异常:我怀疑跟我配置的c3p0有关,但我又没查出来,谁知道帮我看看,谢谢!
2006-08-29 17:09:00 [com.mchange.v2.async.ThreadPoolAsynchronousRunner:429]-[WARN] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@184a4f -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2006-08-29 17:09:00 [com.mchange.v2.async.ThreadPoolAsynchronousRunner:435]-[WARN] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@184a4f -- APPARENT DEADLOCK!!! Complete Status: [num_managed_threads: 3, num_active: 3; activeTasks: com.mchange.v2.resourcepool.BasicResourcePool$5@5ad36d (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0), com.mchange.v2.resourcepool.BasicResourcePool$5@eeb372 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2), com.mchange.v2.resourcepool.BasicResourcePool$5@47098a (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1); pendingTasks: com.mchange.v2.resourcepool.BasicResourcePool$5@c3432a, com.mchange.v2.resourcepool.BasicResourcePool$5@6e96ff, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7b7b11, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@cc9d70, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@7456bc, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@ea85b4, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@efeff8, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@738a71, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@86167d, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@2e6c66, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@ced821, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@cf68af, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@e1f305, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@19ee8a, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@7bbfb8, com.mchange.v2.c3p0.stmt.GooGooStatementCache$2@67ec28]


你的分析:
<property name="c3p0.idle_test_period">3600</property>
是跟这个设置有关吗?
   发表时间:2006-08-30  
<!-- 使用C3PO连接池程序 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">2</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">50000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">false</property>
0 请登录后投票
   发表时间:2006-08-30  
谢谢上面的回答!
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
这个必须得有吗?
还有就是其它值的设置,具体大小根据什么情况来设?它们之间有什么关连吗?我的程序出现的异常可能是有哪个设置产生的呢?
最后就是hibernate3.0好象没有这个参数?
<property name="hibernate.c3p0.validate">false</property>
0 请登录后投票
   发表时间:2006-08-30  
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

必须要有,具体可看hibernate.property。
另<property name="hibernate.c3p0.validate">false</property>确实在hibernate中不可设置
包含它的其它属性要用c3p0.property设定。
0 请登录后投票
   发表时间:2006-08-30  
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
我加了这个还是出现啊,谁知道错在哪了,帮忙看一下,谢谢了!
0 请登录后投票
   发表时间:2006-08-30  
哦,闲置后出现的问题。
检查是否数据库或网络有会话的时间限制。

再不行可能要设置c3p0的无效连接检验了。
0 请登录后投票
   发表时间:2006-08-30  
检查是否数据库或网络有会话的时间限制
什么意思?
再不行可能要设置c3p0的无效连接检验了
hibernate3里的c3p0源文件里没有这个参数啊,除非修改源文件
0 请登录后投票
   发表时间:2006-08-30  
1.我认为可能是因为网络中断的错误,所以叫你检查是否数据库或网络有会话的时间限制。
一些服务器会在你空闲一段时间后断开你的连接。

但细看你的错误信息,似乎说是死锁,这个要你自己仔细看看E文了。如果真是死锁,注意事务的问题。

2.可以加个c3p0.property去设定的,你可以查查c3p0网站的说明。
0 请登录后投票
   发表时间:2006-08-30  
谢谢你耐心的解答!
不是网络中断啊
但细看你的错误信息,似乎说是死锁,这个要你自己仔细看看E文了。如果真是死锁,注意事务的问题。
对于这个我有点不明白了,我也知道那个好象是死锁,但是我是在空闲时出现的啊?为什么啊?
0 请登录后投票
   发表时间:2006-08-31  
我去掉c3p0就不会有这个问题了
请问谁遇到过这样的问题,怎么解决的啊?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics