Java数据库连接池C3P0-0.9.2-pre3 发布
jopen 12年前
<p>C3P0是一个开放源代码的JDBC连接池,Hibernate的发行包中默认使用此连接池。<span style="font-weight:bold;">传</span><span style="color:#ff0000;"><strong>说</strong></span>性能最好。<br /> <br /> C3P0在沉寂了多年之后,终于迎来了更新,目前常用的稳定版是:0.9.1.2,现在最新版本: 0.9.2-pre2(开发版 0.9.2-pre3),C3P0的最新代码已经迁移到GitHub上了:<a href="/misc/goto?guid=4958342294625112423">https://github.com/swaldman/c3p0</a></p> <p><img style="width:588px;height:395px;" alt="Java数据库连接池C3P0-0.9.2-pre3 发布" src="https://simg.open-open.com/show/47e0cde93eec21ed008463a157bcbab1.jpg" width="644" height="433" /></p> <p>0.9.2-pre2下载地址:<a href="/misc/goto?guid=4958342295494718052">http://sourceforge.net/projects/c3p0/files/c3p0-bin/</a></p> <p>0.9.3-pre3下载地址:<a href="/misc/goto?guid=4958342296281742048">https://oss.sonatype.org/content/repositories/snapshots/com/mchange/c3p0/0.9.2-pre3-SNAPSHOT/</a></p> <p><img style="width:572px;height:347px;" alt="Java数据库连接池C3P0-0.9.2-pre3 发布" src="https://simg.open-open.com/show/ac62fc418064addabe0bc7cd20e14f3c.jpg" width="954" height="580" /></p> <p><strong> Changelog:</strong></p> <p> </p> <pre class="brush:html; toolbar: true; auto-links: false;">c3p0-0.9.2-pre3 Some highlights: + Some JDBC drivers freeze up if cached Statements are close()ed while their parent Connections are in use. Previously users of these drivers (Oracle, JTDS) generally had to forego Statement caching to avoid deadlocks. C3P0's statement cache can now be set to cautiously close Statements only when the parent Connections are known to be idle. If you experience "APPARENT DEADLOCKS" due to StatementCloseTasks, set c3p0.statementCacheNumDeferredCloseThreads=1 and they should go away! + There are some other minor improvements and fixes: -- the more granular and efficient "scattered" Connection acquisition algorithm that was "experimental" in the previous release is enabled by default -- unreturned Connections that are timed out (bad! bad!) are either rolled back (default) or committed before close(), respecting your unresolved transaction configuration. (see config parameter unresolvedConnectionTimeout in docs). + You must now include two jar files (c3p0 and mchange-commons-java) in your CLASSPATH rather than just one. Both can be found in the lib directory of the binary distribution. (Please provide feedback; if this is very inconvenient I can bundle it all up into a unified jar.) Some structural changes: + Development of c3p0 and mchange-commons-java have migrated to github: https://github.com/swaldman/c3p0 https://github.com/swaldman/mchange-commons-java Note that c3p0 depends (heavily) on the mchange-commons library. c3p0-0.9.2-pre2 -- Added support for deployment to Maven central repository to build.xml, and noted this version's coordinates in the repository. -- Added a src directory to the distribution, containing jarred java sources (including codegenerated sources) intended for debuggers/IDEs. As a convenience, mchange-commons-java sources are included as well. -- Fixed issue where idle Connections being tested by the pool were not properly marked with the statement cache as "in-use". -- Updated the build file to make it easy to update versions and dates on source code headers. -- ResultSets are now automatically closed and their proxies dereferenced as soon as parent Statements are closed, rather than waiting for the parent Connection to close as we did before. Thanks to jo-hennig and soronthar for calling attention to this issue. -- Modified (in mchange commons library) ThreadPoolAsynchronousRunner to occasionally (stochastically) call Timer.purge() when maxAdministrativeTaskTime settings leads to frequent cancellations of TimerTasks. Thanks to Kevin Conaway, who observed memory issues from the piling up of canceled but unpurged TimerTasks. -- Modified (in mchange commons library) VersionUtils to be more tolerant of unusual version Strings. Thanks to martyhu for the suggestion. -- When a ProxyConnection is marked closed, we now fire a connectionClosed event even if an Exception occurred during cleanup, to be sure that proxies detach. We still fire a connectionErrorOccurred prior to connectionClosed, so that listeners (especially C3P0PooledConnectionPool) can invalidate the can't-be-cleaned-up PooledConnection. -- Modified GooGooStatementCache to call clearBatch on PreparedStatement checkin, so that stale batches from prior use of Statements are never visible to new users. Many thanks to David Carr for pointing out the problem and the fix. -- getWarnings and clearWarnings no longer set the txn_known_resolved flag to false. Thanks to Manuel Darveau for pointing out the unnecessary caution. -- Gave C3P0PooledConnectionPoolManager's timer a name. Thanks to Matt Kusnierz for the suggestion. -- Fixed an infinite loop in ComboPooledDataSource, which occurred following some Exceptions, which provoked calls to toString() to build the Exception message, which call itself provoked an Exception, ad infinitum. All potentially Exception-provoking attribute lookups are now excluded from toString(). Many thanks to Svante v. Erichsen for calling attention to this problem and suggesting a fix. -- Modified the build so that JDK 1.4 compatible versions of c3p0-0.9.2 can be generated easily. (c3p0-0.9.2 will be the last version of c3p0 to support JDK 1.4 builds.) -- Moved development onto github. See https://github.com/swaldman/c3p0, with a dependency against https://github.com/swaldman/mchange-commons-java c3p0-0.9.2-pre1 -- Rationalized management of the ConnectionEventListener that checks in PooledConnections on proxy Connection close(). Now added on check-out and removed on check-in, rather than being always present but temporarily removed during administrative tasks. -- Implemented asynchronous Statement destroyer, hopefully completing the task of making the statement cache robust to drivers that cannot deal with Statements being closed underneath Connections still in use (e.g. Oracle, JTDS). Note that this implementation requires at least one dedicated Thread for statement destruction (if we used the common Thread pool, there will be deadlocks as Statement close tasks await not-in-use Connections, while Connection-related tasks can't be completed because the Thread pool is saturated with Statement close tasks. Stats about the asynchronous Statement destroyer are available via the JMX MBean, prefixed statementDestroyer. Setting the new config parameter c3p0.statementCacheNumDeferredCloseThreads enables the fix. -- Resolved a potential race condition that could lead to pool freezes, especially when acquisitions occasionally fail and acquireIncrement is set to 1. [Many thanks to Brendan Dougherty for carefully describing this issue.] -- Added a guard to BasicResourcePool.doAcquire() to ensure that the pool has not been closed or broken before assimilating a task [Many thanks to Sean Rohead for tracking down this issue and suggesting the fix.] -- Made SCATTERED_ACQUIRE_TASK default to true. This provides much better overall performance for Connection acquisition from potentially unreliable sources -- Modifed to ensure that unresolved transaction settings apply to expired unreturned Connections. (see config params autoCommitOnClose and forceIgnoreUnresolvedTransactions) [Thanks to Matthew Lieder for calling attention to this issue.] -- Cleaned up Statement cache fix that ensures no statements are closed while their parent Connection is in use. By default, the fix is not enabled, because it's extra work that most databases don't need. [Most drivers support Statement close() while a parent Connection is in use, so the extra work is unnecessary.] -- Separated traditional build into two libraries, mchange-commons and c3p0. -- Modified GooGooStatementCache and C3P0PooledConnectionPool to ensure that 1) the Statement cache knows which Connections are currently in use by outside clients; and 2) the Statement cache refuses to cull Statements belonging to Connections in use. Theoretically, drivers should support asynchronous statement close. In practice, some drivers don't do so nicely, or block pending completion of other (potentially long) operations, leading to APPARENT DEADLOCKS. (Oracle users in particular have reported deadlocks in which all pool threads are blocked on Statement close tasks.) [Many, many thanks to Ovidiu Feodorov for a very detailed account of problems that occur under c3p0 when very long queries are executed under Oracle!] -- Defined a NullMLogger, and modified Log4jMLog to use that, instead of a broken log4j MLogger, if c3p0's logging library fails to acquire a non-null Log4j logger. Thanks to Oli Glimmer for calling attention to this issue. (Strange NPEs due to apparently null log4j loggers have been encountered before, and previous attempts to resolve apparently weren't adequate.) -- Fixed a problem whereby ThreadPoolAsynchronousRunner was not robust to Errors provoked during task execution. [Thanks to George Khoshy for reporting this issue.] -- Made VersionUtils more robust to cases where some components of the java.version system property are non-integral [Thanks to Dirk Weigenand for calling attention to this problem, and suggesting a solution!]</pre> <p> </p> <p> </p> <p> 虽然C3P0-0.9.2 还不是稳定版,但是很值得期待,希望性能更好,更稳定。</p>