`
yangyiqian
  • 浏览: 117613 次
  • 来自: ...
社区版块
存档分类
最新评论

c3p0 no bug but the windows xp have

    博客分类:
  • JAVA
阅读更多
5月30日,用了一天的时间在找一个c3p0的bug,但没有找到。31日突然想起来可能是某个原因,于是配置环境->运行,OK 问题解决。

---
经过:最近做了一个SSH2项目,想在项目中使用c3p0连接池,于是就在本地机搭起了项目,配好了spring管理的连接池c3p0,将项目中用到的mysql数据库放在vmware虚拟机中运行。

可是运行项目的时候,报错,但数据库表却能够生成。
此时,我的主机操作系统是windows xp ,数据库服务器的操作系统也是windows xp.数据库mysql 5.0.22 ,所用用户test1的远程权限已经开通。

报错信息如下:
2010-05-30 12:07:19,046 INFO [org.hibernate.tool.hbm2ddl.SchemaUpdate] - Running hbm2ddl schema update
2010-05-30 12:07:19,046 INFO [org.hibernate.tool.hbm2ddl.SchemaUpdate] - fetching database metadata
2010-05-30 12:07:32,875 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@18105e8 -- [color=red]APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks![/color]
2010-05-30 12:07:32,875 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@18105e8 -- APPARENT DEADLOCK!!! Complete Status: 
	Managed Threads: 3
	Active Threads: 3
	Active Tasks: 
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@16d8196 (C3P0PooledConnectionPoolManager-Helper Thread-#2)
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@56b93a (C3P0PooledConnectionPoolManager-Helper Thread-#0)
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@19abd2b (C3P0PooledConnectionPoolManager-Helper Thread-#1)
	Pending Tasks: 
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@1f98d58
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@aea710
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@5a2eaa
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@adae91
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@9fe84e
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@4c71d2
		com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask@c4bc34
Pool thread stack traces:
	Thread[C3P0PooledConnectionPoolManager-Helper Thread-#2,5,main]
		java.net.SocketInputStream.socketRead0(Native Method)
		java.net.SocketInputStream.read(SocketInputStream.java:129)
		com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
		com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
		com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
		com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2500)
		com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:600)
		com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1079)
		com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2186)
		com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
		com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
		sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
		sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
		sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
		java.lang.reflect.Constructor.newInstance(Constructor.java:513)
		com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
		com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
		com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
		com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
		com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:152)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1074)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1061)
		com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1796)
		com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:620)
	Thread[C3P0PooledConnectionPoolManager-Helper Thread-#1,5,main]
		java.net.SocketInputStream.socketRead0(Native Method)
		java.net.SocketInputStream.read(SocketInputStream.java:129)
		com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
		com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
		com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
		com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2500)
		com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:600)
		com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1079)
		com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2186)
		com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
		com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
		sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
		sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
		sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
		java.lang.reflect.Constructor.newInstance(Constructor.java:513)
		com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
		com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
		com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
		com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
		com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:152)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1074)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1061)
		com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1796)
		com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:620)
	Thread[C3P0PooledConnectionPoolManager-Helper Thread-#0,5,main]
		java.net.SocketInputStream.socketRead0(Native Method)
		java.net.SocketInputStream.read(SocketInputStream.java:129)
		com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
		com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
		com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
		com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2500)
		com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:600)
		com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1079)
		com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2186)
		com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
		com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
		sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
		sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
		sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
		java.lang.reflect.Constructor.newInstance(Constructor.java:513)
		com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
		com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
		com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
		com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
		com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
		com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:152)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1074)
		com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1061)
		com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
		com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1796)
		com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:620)


2010-05-30 12:07:32,921 INFO [org.hibernate.tool.hbm2ddl.SchemaUpdate] - updating schema
2010-05-30 12:07:33,015 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] - table found: testDB.employee
2010-05-30 12:07:33,015 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] - columns: [username, gender, password]
2010-05-30 12:07:33,015 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] - foreign keys: []
2010-05-30 12:07:33,015 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] - indexes: [primary]
2010-05-30 12:07:33,015 INFO [org.hibernate.tool.hbm2ddl.SchemaUpdate] - schema update complete
2010-05-30 12:07:33,125 INFO [org.springframework.orm.hibernate3.HibernateTransactionManager] - Using DataSource [com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge13i881s7ax0b2yw8gy|17494c8, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.gjt.mm.mysql.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge13i881s7ax0b2yw8gy|17494c8, idleConnectionTestPeriod -> 60, initialPoolSize -> 10, jdbcUrl -> jdbc:mysql://192.168.1.165:3306/testDB?useUnicode=true&characterEncoding=UTF-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 60, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 30, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, statementDestroyerNumActiveThreads -> -1, statementDestroyerNumConnectionsInUseAllUsers -> -1, statementDestroyerNumConnectionsInUseDefaultUser -> -1, statementDestroyerNumConnectionsWithDeferredDestroyStatementsAllUsers -> -1, statementDestroyerNumConnectionsWithDeferredDestroyStatementsDefaultUser -> -1, statementDestroyerNumDeferredDestroyStatementsAllUsers -> -1, statementDestroyerNumDeferredDestroyStatementsDefaultUser -> -1, statementDestroyerNumIdleThreads -> -1, statementDestroyerNumTasksPending -> -1, statementDestroyerNumThreads -> -1, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]] of Hibernate SessionFactory for HibernateTransactionManager


不管怎样调整c3p0的运行参数,都没办法找到错误的所在,表面看就是无法获得连接。
但我把项目拷贝到数据库服务器上,让程序和数据库处于同一机器上时,再运行,错误没有了,运行速度很快。

从上面的情况来看,有两种可能:一是网络这个环节上出了问题,不能正常处理数据库的请求数据。二是c3p0有问题,在本地机可以很好地运行,在网络协议上的处理上有不正常的的地方。但这两种可能我都觉得不太可能,因为无论是网络还是c3p0都不是一天两天的东西了,存在这种低级问题的可能很小。

可问题依然存在,夜不能寐....。

第二日,猛然想起来,记得当年windows xp sp3发布以后,曾经限制过TCP/IP的连接,会不会是这个东东在作怪呢?赶紧在vmware 的windows 2003 server服务器上安装上mysql 5.0.22,配置好帐号的远程访问权限。项目运行OK

至此,问题终于得到解决。

原因:因为windows xp限制了TCP/IP的并发数量,如果我们用xp做服务器,单机开发是没有问题的,这时,我们登录数据库都是一个用户,一个连接。但用了连接池以后,就是一个用户,多个连接了,这时候xp的限制作用就生效了。
所以,在项目中使用数据库服务器的时候,其操作系统最好选择server版本的,否则,出现问题很不好查。

我在网上查错误的时候,发现好多人都说这是c3p0的bug,在此特更正一下,出现这种错误,多数是环境问题,尤其是windows xp作服务器的情况下。
C3p0 no bug but the windows xp have

顺便说一下,c3p0的0.9.2-pre1版也在5月27日发布了。


分享到:
评论

相关推荐

    c3p0-0.9.0.4_fix.zip 修正c3p0线程池崩溃BUG

    c3p0存在严重bug,解决AcquireTask占用了内部线程池的所有线程,没有线程可以来执行BasicResourcePool$6对应的任务,而这个任务的作用就是把池外使用完的连接放回池内的,c3p0被挂起了问题。

    c3p0所依赖的jar包

    C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种管理数据库连接的方式,使得在多用户并发访问时能够有效地利用和管理数据库资源,提高系统的性能和稳定性。C3P0的主要功能是为应用...

    C3P0相关的JAR包

    - `c3p0.jar`:包含了C3P0的核心连接池功能。 - `mchange-commons-java.jar`:Mchange Commons Java库,提供了一些通用工具类和异常处理。 - `mysql-connector-java.jar`(或其他数据库驱动JAR):根据你的数据库...

    c3p0-0.9.5.1

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。标题中的"c3p0-0.9.5.1"指的是C3P0的一个特定版本,即0.9.5.1版。这个版本可能包含了对早期版本的修复、性能优化或新功能...

    C3P0用到的jar包和配置文件.zip

    这个版本号表示的是C3P0的特定发行版,0.9.1.2,可能包含了该版本修复的一些bug和改进的功能。C3P0的主要功能包括自动管理数据库连接的创建、分配、回收和销毁,以及在数据库连接空闲时进行检测和维护,确保连接的...

    C3P0连接池配置需要的jar包

    C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`hibernate-c3p0-4.0.0.Final[1].jar`以及`mchange-commons-java-0.2.3.4.jar`。 1. **c3p0-0.9.2.1.jar**: 这是C3P0的主要库文件,包含了C3P0的...

    C3P0的jar包

    C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接管理中的高效、稳定和扩展性良好的解决方案。C3P0的主要目标是通过提供自动的资源管理和故障恢复功能,来帮助Java...

    C3p0c3p0-0.9.5.5三个包

    C3p0c3p0-0.9.5.5三个jar包使用,匹配mysql8.0等信息,包含mchange-commons-java-0.2.19.jar、c3p0-oracle-thin-extras-0.9.5.5.jar、c3p0-0.9.5.5.jar

    c3p0连接池jar包

    C3P0连接池是Java开发中常用的数据库连接池组件,它由M-Fenyes创建并维护,旨在提供一个高效、灵活且稳定的数据库连接管理工具。数据库连接池在多线程应用中扮演着重要角色,它能有效地管理和复用数据库连接,避免...

    c3p0需要的所有的jar包(完整)

    在描述中提到的三个jar包,c3p0-0.9.1.jar、c3p0-0.9.1.2.jar和c3p0-0.9.1-pre6.jar,都是C3P0的不同版本。通常,你需要的是最新版本,以获取最新的功能和修复的bug。例如,c3p0-0.9.1.2.jar比c3p0-0.9.1.jar更新,...

    C3P0-jar包和依赖包.zip

    C3P0库主要服务于那些需要频繁创建和关闭数据库连接的应用程序,通过连接池技术,可以有效地减少数据库连接的创建和销毁过程,从而降低了系统资源的消耗。 在给定的压缩包"C3P0-jar包和依赖包.zip"中,包含了两个...

    c3p0的jar包

    C3P0是一个广泛使用的开源Java JDBC连接池,它的全称是Comprehensive Connection Pooling Package。这个库的主要目的是提供数据库连接的高效管理,以优化数据库应用程序的性能和资源利用。C3P0的设计目标是为了满足...

    C3P0使用所需要的jar包

    C3P0是一款开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助我们更有效地管理和使用数据库连接,避免频繁创建和关闭连接导致的性能损失。下面将...

    c3p0用法步骤

    标题:"c3p0用法步骤" 描述:"这是我学习过程中积累的学习笔记,希望对大家有用" 标签:"c3p0" 知识点详述: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC连接池的特性,如:自动重连、自动...

    C3P0使用,C3P0源码及实例

    **C3P0详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java的Web应用中,数据库连接的创建、分配、管理和释放是相当耗时的,而C3P0通过管理这些连接,提高了...

    c3p0所需jar包

    C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...

    springMVC整合C3P0连接池

    整合SpringMVC与C3P0能有效地优化数据库操作,提高应用的性能和稳定性。 首先,我们需要了解C3P0的基本概念。C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其...

    c3p0-0.9.2.1 jar包.rar

    C3P0是一款开源的Java连接池,全称为Comming Soon Connection Pool,它是一个支持JDBC的数据库连接池组件。这个组件的主要作用是提高数据库访问的效率,通过复用已经建立的数据库连接,减少频繁创建和关闭连接所造成...

    c3p0-0.9.2-pre1

    **c3p0-0.9.2-pre1:数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.2-pre1是其在2007年发布的一个版本,尽管现在有更新的版本,但这个老...

Global site tag (gtag.js) - Google Analytics