Permalink
-- Properly implement the JDBC 4.1 abort method. Thanks to Andrew Johnson for calling attention | |
to this issue. | |
c3p0-0.9.5.4 | |
-- Disabling entity expansions, as we did in v.0.9.5.3 turns out not to be sufficient to prevent all | |
XML-config parsing related attacks (if an attacker can control the XML config file that will be | |
parsed). We now make XML parsing much more restrictove by default, but allow users to revert to the | |
old, permissive pre-0.9.5.3 behavior by setting config property 'com.mchange.v2.c3p0.cfg.xml.usePermissiveParser' | |
to true. That property replaces and leaves deprecated the 'com.mchange.v2.c3p0.cfg.xml.expandEntityReferences' | |
property introduced on 0.9.5.3. Many thanks to Aaron Massey (amassey) at HackerOne for calling attention | |
to the continued vulnerability of XML parsing to these kinds of attacks. | |
-- Address situation where a throwable during forceKillAcquires() left the force_kill_acquires flag | |
set to true, making it impossible for the pool to restart acquisition attempts on recovery. We | |
now unset the flag under any circumstance, but log interrupts or unexpected throwables, and make | |
a best effort to complete the intended expiration of waiting clients by throwing InterruptException | |
Many thanks to Stefan Cordes (rscadrde on github), Vipin Nair (swvist on github), and Łukasz Jąder | |
(ljader on github) for their work on this issue. | |
c3p0-0.9.5.3 | |
-- Address CVE-2018-20433, https://nvd.nist.gov/vuln/detail/CVE-2018-20433 re liberal parsing of | |
XML config. By default, c3p0 no longer expands entity references in XML config files. This | |
behavior can be overridden via config property 'com.mchange.v2.c3p0.cfg.xml.expandEntityReferences' | |
by applications that understand the security concerns but wish to make use of entity references. | |
Thanks to user zhutougg on GitHub for calling attention to and suggesting a fix for this issue. | |
-- Upgrade dependency to mchange-commons-java 0.2.15, which includes support for log4j2 (implemented | |
in mchange-commons-java by GitHub user fireandfuel. Many thanks! | |
c3p0-0.9.5.2 | |
-- Fix a bug in MLog bridge to slf4j logging, in which loggability of levels of wrapped loggers | |
was misreported, leading to useless allocation of log Strings below the logging threshold. Grr. | |
[change is in mchange-commons-java 0.2.11]. Many thanks to Lewis Wong on Stack Exchange for calling | |
attention to this issue. | |
-- Embed last acquistion failure as nested Exception in CannotAcquireResourceException. Thanks to | |
nigam on github for this addition. | |
c3p0-0.9.5.1 | |
-- Implemented configuration property com.mchange.v2.c3p0.impl.DefaultConnectionTester.isValidTimeout | |
to define timeouts on tests based on Connection.isValid(...). Many thanks to james-hu on github | |
for suggesting this. | |
-- Added a forceSynchronousCheckins config param, which can be a significant performance boost | |
if no tests are performed on checkin and no long work is performed in ConnectionCustomizer.onCheckIn(...). | |
The parameter is particularly useful for installations in which the Thread pool is under stress, | |
as it permits prompt checkins without use of the Thread pool, and helps reduce Thread pool congestion. | |
Many thanks to Vamsi Krishna for calling attention to this issue. | |
-- Removed embarrassingly frivolous nested locking in C3P0Registry which provoked rare deadlocks | |
when users lookup extensions. Many thanks to Vlad Skarzhevskyy for calling attention to this | |
issue. | |
-- ScatteredAcquireTask now tests to see if a BasicResourcePool has already been closed before | |
attempting an acquisition. Thanks to kenicky on github for calling attention to this issue. | |
c3p0-0.9.5 | |
-- Fixed small typo in log message, thanks Jaran Nilsen | |
-- DriverManagerDataSource: Added synchronization missing for the very rare case of an on-the-fly | |
reset of 'driverClass'; minor optimization, properly marked driver class loaded if an instantiation | |
of the driver has succeeded. | |
c3p0-0.9.5-pre10 | |
-- Removed support for try-with-resources (implementation of marker interface java.lang.AutoCloseable) | |
as it breaks Java6 support. I'll save it for 0.9.6 (unless I get a lot of complaints). | |
Thanks again to dwscott on github. | |
-- Added config parameter com.mchange.v2.c3p0.management.ExcludeIdentityToken that allows users to | |
have c3p0 generate predictable, reproducible full JMX ObjectNames (at the cost of extra user | |
responsibility in ensuring the uniqueness of those names). Updated and expanded documentation | |
with respect to JMX support. Thanks to dwscott on github for suggesting this improvement. | |
c3p0-0.9.5-pre9 | |
-- In mchange-commons-java, modified log library to consider slf4j library unfound if it gets bound to its | |
no-op ('NOP') back-end. | |
-- Gave proxies a toString() method that embeds the toString() method of the objects they are wrapping, including | |
Statement text if the underlying driver supports that. Thanks to Ketan Padegaonkar for the suggestion. | |
-- Added API [in mchange-commons-java] to make it easier for users to create a MultiPropertiesConfig object from a | |
Properties object, which will enable use of the new C3P0Config.refreshMainConfig( overrides, overridesDescription ) | |
method, which may enable some useful dynamic configuarion possibilities, see e.g. https://sourceforge.net/p/c3p0/bugs/121/ | |
Thanks to Vlad Skarzhevskyy on SourceForge for the proposed use case. | |
-- Modified mchange-commons-java (and c3p0 docs) to prioritize slf4j over log4j if both are available in the application | |
classpath and com.mchange.v2.log.MLog has not been explicitly set. Thanks to Steve Ramage for the suggestion. | |
-- If a problem occurs while acquiring a cached Statement from the Statement pool, the Exception we throw includes | |
both the actual problem (which occurs in a helper thread) and the stack trace of the client which provoked the | |
failed acquisition. The problem that occurred within the helper thread is captured as the root cause Throwable. | |
Many thanks to Michele Rossi for the suggestion. | |
-- Finally wrapped StackOverflowError that comes in the rare, pathological case when every attempt to checkout | |
a resource fails some test or check until eventually recursive retries blow the stack. A NoGoodResourcesException | |
is now thrown in this case. Thanks to Ibenda on github for calling attention to the issue (and others annoyed by | |
it long ago). [Note: The StackOverflowError remains accessible, wrapped as the root cause Exception. So I expect | |
continuing bug reports / complaints about a StackOverflowException from users who don't notice it is caught and | |
handled.] | |
-- Some documentation updates and fixes. | |
-- Made PooledDataSource AutoCloseable, so that try with resources can be used to clean up after them. | |
-- Added some warnings in BasicResourcePool's constructor if min, max, and start are misordered. | |
Misordered values are reordered. Thanks to bronzenose on github for the suggestion. | |
-- Overloaded AbstractPoolBackedDataSource / AbstractComboPoolBackedDataSource toString, | |
so we've a toString( boolean show_config ). The full reflective config is now shown only when logging | |
pool manager initialization. Otherwise we revert to a fast, nonreflective toString(). We'll see whether anyone | |
minds the abbreviation. Thanks to kibertoad and Xerosigma on github for the suggestion. | |
-- Fixed implementations of wrap( ... ) / isWrapperFor( ... ) to properly conform to spec when given an interface implemented | |
directly by the receiver of the wrap( ... ) call. Many thanks to baracil on github for calling attention to this issue. | |
c3p0-0.9.5-pre8 | |
-- Resolved a Serialization problem introduced in c3p0-0.9.5-pre7 (Broke serializability of DefaultConnectionTester | |
and therefore typical instances of WrapperConnectionPoolDataSource.) Many thanks to Petar Tachiev for calling attention to this issue. | |
-- [in mchange-commons-java] Fixed a latent issue where decoding of JNDI References would fail if the Object factory | |
was not loaded by the System ClassLoader. (This issue was revealed when Serialization failures provoked fallback | |
to a Reference Serialization strategy.) Many thanks to Petar Tachiev for calling attention to this issue. | |
c3p0-0.9.5-pre7 | |
-- Cleaned up (and exposed a configuration property to tweak) selection of Connection tests when | |
no query is provided. Do we use Connection.isValid(...), the traditional DatabaseMetaData-based test, | |
something else? Now, by default we try isValid(...) but we back-off to the traditional test on error. | |
But this behavior is configurable via the property 'com.mchange.v2.c3p0.impl.DefaultConnectionTester.querylessTestRunner' | |
(which is documented with 'Other Properties'). | |
-- Added config parameter 'forceUseNamedDriverClass', which ensures that an instance of the class named in | |
'driverClass' is used as the JDBC driver, rather than simply preloading the named class and then | |
relying upon DriverManager to determine which driver to use. Thanks to Martin Coene and meinc on SourceForge | |
for calling attention to this issue. | |
-- We now support the parentLogger property of DataSources (rather than just throwing an SQLFeatureNotSupportedException). | |
This should resolve the issue identified by Maarten Coene (thanks!), where JMX clients repeatedly see | |
Exceptions as they try to read the parentLogger property. | |
-- [in mchange commons java] MLog levels WARNING and SEVERE were misordered due to bad copy/paste of | |
the integer value of levels. Many thanks to Martin Coene for discovering and tracking down the problem. | |
-- [in mchange commons java] An error in MLog logging to log4j caused an IllegalArgumentException | |
at log level OFF. This problem was identified and fixed by Sebastian Baumhekel | |
-- [in mchange commons java] Defines a jdk14logging ForwardingLogger that adapts MLog Loggers into | |
JDK14 (java.util.logging) Loggers | |
-- Unused resources cleaned up on BasicResourcePool close() are properly added to the formerResources | |
WeakHashMap, to prevent multiple checkins of those resources from triggering foreign resource warnings. | |
Thanks again to Brett Wooldridge for calling attention to this issue. | |
-- Guarded marking of transactions as maybe dirty in Statement proxies, so that they don't trigger NPEs | |
then Exceptions for illegal operation on a closed Connection for methods like Connection.isClosed. | |
Many thanks to Brett Wooldridge for calling attention to this issue. | |
-- Prevent JMX clients from updating properties on underlying pools (and therefore potentially | |
triggering a wind-down / reconstruction of internal pools) if the new value of the property | |
is the same as the original value. Thanks to ask-dev on Stack Overflow for calling attention | |
to this issue. | |
-- Guard against case where connectionCustomizerClassName is an empty or blank String. | |
Thanks to ask-dev on Stack Overflow for calling attention to this issue. | |
-- Fixed typos is docs where testConnectionOnCheckout and testConnectionOnCheckin | |
erroneously included excess capital letters, testConnectionOnCheckOut and testConnectionOnCheckIn. | |
Thanks to Usman Mutawakil for finding and reporting this issue. | |
-- For drivers that support JDBC4 Connection.isValid(), this becomes the default | |
Connection test if no preferredTestQuery / automaticTestTable is specified. | |
HOWEVER, for older drivers that do not support Connection.isValid(), the already | |
slow default test becomes EVEN SLOWER than its already legendary slowness. If | |
you are using a driver that you know supports Connection.isValid(), you can skip | |
setting preferredTestQuery or automaticTestTable. But if you are not sure, better | |
set one of these or endure painfully slow tests. | |
c3p0-0.9.5-pre6 | |
-- Fixed a rare problem caused when some JDBC drivers are simultaneously autoloaded | |
on initialization of DriverManager.class and by DriverManagerDataSource. | |
DriverManagerDataSource's class init now preloads DriverManager.class | |
-- Fixed a ClassCastException in some codepaths of BasicResourceFactory construction. | |
Thanks to petrjanata on SourceForge for reporting and tracking down the issue. | |
-- Modified mlog logging library to permit dynamic refresh if config (again, for | |
integration with dynamically-reloading appservers). | |
-- Refactored C3P0Config to permit refreshing of config information on-demand at | |
runtime, plus imposing overrides. (This is in preperation for integration with | |
application servers, whose native config files might be used to configure c3p0, | |
and might change more frequently than a VM or ClassLoader recycle). | |
-- Improvements to loading of resources for hocon/typesafe-config. We now properly | |
load and merge multiple resources (if found), and use typesafe conventions for | |
merging xxx.conf, xxx.json, and xxx.properties files. [mchange-commons-java] | |
-- Cleaned up reflection of default properties, such that only coercible properties | |
get Stringified (since Stringifying non-coercible properties render them useless | |
for setting as bean params), and to eliminate treating C3P0Defaults.getKnownProperties | |
as itself a default. Many thanks to wuSam on github for exercising the library in an | |
unusual way and revealing these issues. | |
c3p0-0.9.5-pre5 | |
-- Made JMX names of C3P0Registry customizable via the config property | |
'com.mchange.v2.c3p0.management.RegistryName', so that multiple installations/ClassLoaders | |
can be managed by a single MBean server. Many thanks to Vlad Skarzhevskyy for | |
calling attention to this issue. | |
-- Fixed a rare Connection leak in WrapperConnectionPoolDataSource that occurs | |
when Connection acquisition succeeds but construction of a PooledConnection | |
to wrap it fails with an Exception. Many thanks to Edward Chan for reporting | |
the issue. | |
-- Fixed an error introduced in the 0.9.2 series, which caused MBeans | |
for PooledDataSources to be unregistered on close() under names different | |
from that under which they were registered, creating a memory leak. | |
Many thanks to Vlad Skarzhevskyy for reporting this issue. | |
c3p0-0.9.5-pre4 | |
-- Updated documentation with user-defined configuration extensions and | |
information on how to define named configuration, per-user overrides, | |
and user-defined extensions in all three supported config file formats. | |
-- Implemented user-defined configuration extensions. | |
-- Implemented properties file and HOCON definition of named configurations | |
and per-user overrides. | |
-- Added privilegeSpawnedThreads config parameter, mostly to detach caller's | |
AccessControlContext from Threads that provoke the init, to prevent references from | |
c3p0 Threads to app server (esp tomcat) ClassLoaders that ought to be garbage- | |
collectable on hot undeploy. Might also be useful for helping c3p0 run from less | |
trusted code, although that has not come up yet. Thanks to Claudio D'angelo for | |
calling attention to the issue. | |
-- Added new config parameter 'contextClassLoaderSource', which can be set to one of | |
'caller', 'library', or 'none'. By default, the Thread that provokes pool initialization | |
passes its ContextClassLoader to c3p0-spawned Threads, which makes it impossible to garbage | |
collect those classloaders in e.g. application server undeploys. Setting this parameter to | |
'library' (rather than the default 'caller') forces c3p0-spawned Threads to use the | |
ClassLoader that loaded c3p0 as the contextClassLoader. | |
-- clone() System.getProperties() when reading config, to avoid potential | |
ConcurrentModificationExceptions if other Threads are messing with System properties. | |
Thanks Keith Amling! [mchange-commons-java] | |
-- Access to EncounterCounter in C3P0ImplUtils ought to have been synchronized. It was | |
not. Fixed, by placing the counter underneath an sync'ed wrapper. Many thanks to | |
Keith Amling and Dan Berindei for calling attention to this issue. | |
c3p0-0.9.5-pre3 | |
-- For reasons that remain obscure, the published build of c3p0-0.9.5-pre2 is missing | |
JDBC4 methods (many thanks to edysli on github for pointing this out). Apparently | |
it was accidentally built against JDBC3 libraries. Added a compile-time check | |
for JDBC4 api in generated code to C3P0ImplUtils. | |
-- Divided ComboPooledDataSource into final implementation class and an abstract class | |
which can be extended to derive debugging filters. Created two such filters, | |
com.mchange.v2.c3p0.debug.AfterCloseLoggingComboPooledDataSource and | |
com.mchange.v2.c3p0.debug.CloseLoggingComboPooledDataSource | |
-- C3P0PooledConnectionPool destroyResource() calls are now protected by in-use resource | |
locks to prevent rare deadlocks during simultaneous test / destroy. | |
-- HOCON resources are now loaded as a single group, so that resolution of substitutions | |
works across multiple files. | |
-- Fixed bug in HOCON support where files that include substitutions like ${myScope.varName} | |
would throw a ConfigException.NotResolved. These substitutions are now resolved. Many thanks | |
to Stjepan Buljat for calling attention to this issue. | |
-- Support standard HOCON config files application.properties and application.json as well | |
as application.conf | |
-- Fixed ClassCastException when (now deprecated!) usesTraditionalReflectiveProxies is set to | |
true. Many thanks to Konrad Garus for reporting the issue. | |
-- NewProxyConnectionGenerator has been modified so that Connections only mark transactions | |
as known-resolved after the putatively resolving operation has successfully completed, | |
rather than when it is merely attempted. | |
-- With FINEST/TRACE debug logging, full JVM stack traces are now emitted during any | |
ThreadPoolAsynchronousRunner APPARENT DEADLOCKS, to help debug any deadlocks within the JVM. | |
-- Made constructors of delegated proxies package-visible rather than public. Many thanks to | |
Oliver Zemann for calling attention to this issue. | |
-- Some fixes and improvements to cfg and log libraries, so that fewer superfluous warnings | |
get emitted on startup. | |
c3p0-0.9.5-pre2 | |
-- Modified unwrap / isWrapperFor methods in proxies to be more permissive, to accept class | |
objects for superinterfaces of the wrapped interface as well as of implementation | |
classes. | |
-- Added support for SLF4J / logback logging, defined short aliases for adapters to | |
the various logging libraries, updated documentation with new logging features | |
-- Added and documented HOCON / typesafe-config libary support, available if (and only if) | |
the typesafe-config library is included with the application. | |
-- Refactored mchange-commons-java to eliminate very rare potential deadlocks under simultaneous | |
ClassLoading of file in cfg and log packages, and defined a facade into the cfg library use of | |
which should eliminate the possibility of such deadlocks if it is used assiduously. | |
-- actually documented 'com.mchange.v2.log.jdk14logging.suppressStackWalk'. i said i had earlier | |
but apparently not | |
-- set 'com.mchange.v2.log.jdk14logging.suppressStackWalk' to true by default in mchange-commons-java | |
c3p0-0.9.5-pre1 | |
-- Included 'com.mchange.v2.log.jdk14logging.suppressStackWalk' in c3p0 docs. | |
-- In mchange-commons: Added a config property for jdk14 logging users: | |
'com.mchange.v2.log.jdk14logging.suppressStackWalk' allows clients to speed up logging | |
by suppressing analyzing the stack trace for the caller. (Only the name of the logger will | |
be given.) | |
-- Modified DataSource to include an (unsupported) getParentLogger() method for JDK7 builds | |
-- Handle JDBC4 Connection.isValid properly | |
-- Lots of updates to get c3p0 to proxy and compile JDBC4 | |
-- Removed some jdk14 support stuff from build.properties | |
c3p0-0.9.2.1 | |
-- Dual licensed c3p0, LGPL v.2.1 and EPL 1.0. Modified license files, source headers, etc. | |
c3p0-0.9.2 | |
-- Updated documentation re hibernate configuration. (Documentation was several years stale.) | |
-- Merged John Sumsion's remarkable integration of c3p0's full SourceForge history into the | |
git repository. (Enormous, huge thanks to John Sumsion!) | |
c3p0-0.9.2-pre8 | |
-- Added logging (at level FINE, in com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager) when | |
a pool is initialized for a new authentication within a DataSource. | |
-- We now allow users to place an XML formatted config file in arbitrary locations under | |
the classpath (i.e. as ClassLoader resource), including jar file META-INF directories. | |
If the config property com.mchange.v2.c3p0.cfg.xml begins with "classloader:", the remainder of | |
the String will be interpreted as a ClassLoader resource path. Thanks to Sam Razialruh for | |
suggesting this feature. | |
-- In DataSources.pooledDataSource( DataSource unpooledDataSource, Properties props ), switched | |
from using keySet().iterator() to the propertyNames() Enumeration to properly capture keys | |
set in the Properties object's defaults. Thanks to Jisakiel in SourceForge for calling attention | |
to this issue. | |
-- Modified DelegatorGenerator [in mchange-commons-java] to delegate reflectively at | |
runtime via the main delegation interface (by default, and in c3p0's proxies), rather | |
than via the runtime class, which may not be public. (Added a bit of API to DelegatorGenerator | |
so that users can specify whether reflective delegation should be via the main | |
delegation interface, some other expected superclass or interface, or the actual | |
runtime class.) Many thanks to Kiran Kollipara for pointing out the risk of IllegalAccessExceptions | |
under the previous implementation. | |
c3p0-0.9.2-pre7 | |
-- Added hooks [in mchange-commons-java] to com.mchange.v2.codegen.intc.DelegatorGenerator | |
to permit reflective delegation of methods not declared by the main interface. Added | |
some unproblematic JDBC4 methods to generated PreparedStatement proxies in order (hopefully) | |
to workaround hibernate issues. (see https://hibernate.onjira.com/browse/HHH-7801 and | |
https://hibernate.onjira.com/browse/HHH-7778 ) | |
-- Added some extra logging (at level FINER [or DEBUG] to NewPooledConnection, in hopes | |
that it will be helpful in tracking down Exceptions that occur during automatic cleanup | |
of unclosed Statements and ResultSets. | |
c3p0-0.9.2-pre6 | |
-- Added some logic that continues to enforce sequential (i.e. nonsimultaneous) use of | |
PooledConnections in Connection tests, without requiriing Threads to use NewPooledConnection's | |
lock. Clients of NewPooledConnection should not hold its lock directly, to avoid | |
potential deadlocks due to Connection eent handlers. [Many thanks to Jan Zuchhold | |
for calling attention to this problem.] | |
-- Added a DEBUG STACK TRACE at log level FINEST in BasicResourcePool for tracking the cause | |
of resource exclusion. | |
-- Added a README.md file for github. | |
-- Updated documentation to include dataSourceName as a config parameter, and to describe | |
its use in generating stable JMX identifers. | |
-- Made dataSourceName a first-class config parameter, configurable in all the usual ways, | |
to help support its use for stable JMX names. | |
-- Included (excellent, very lightweight) patch by Bryan Varner [ https://github.com/bvarner ] | |
that includes the property dataSourceName in the registered name of c3p0 | |
JMX mbeans. As Varner writes, "This allows you to query mbeans by stable name patterns, | |
allowing for reliable instrumentation via JMX between VM instances." Many thanks | |
to Bryan Varner. | |
-- Updated RELEASE_NOTES | |
c3p0-0.9.2-pre5 | |
-- Some fixes of issues with per-user config overrides, verified and | |
updated docs with respect to per-user configs. | |
-- Unsynchronized access to identityToken in the various identityTokenized | |
beans, marking the property volatile instead. This should resolve an | |
occasional deadlock. Many thanks to Phillip Henry, see | |
https://sourceforge.net/tracker/?func=detail&atid=383690&aid=3552097&group_id=25357 | |
-- Fixed a bug whereunder PoolBackedDataSources threw an Exception | |
trying to bind per-user overrides that properly should be bound | |
only to WrapperConnectionPoolDataSource (or to ComboPooledDataSource, | |
which wraps that). Many thanks to Walter Marcelo Pedrozo Barboza | |
for calling attention to this issue. | |
-- Factored out VMID generation into mchange-commons-java. | |
c3p0-0.9.2-pre4 | |
-- Fixed broken version on Maven dependency to mchange-commons-java. | |
Version was hardcoded, now uses version number that c3p0 was built | |
against. | |
c3p0-0.9.2-pre3 | |
-- Added workaround for bug in Maven 2.2.1 that sometimes leads to corruption | |
of deployed artifacts. See http://jira.codehaus.org/browse/MNG-4301 | |
-- Eliminated bead RELEASE suffix from use in staging to Maven repository, | |
which should fix managed dependency problems for Maven users. | |
-- Required tests of PooledConnections to own the locks associated with those | |
PooledConnections in order to prevent occasional deadlocks when PooledConnection.close() | |
coincides with a Connection test. Many thanks to an anonymous SourceForge user for | |
calling attention to this issue. | |
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!] | |
c3p0-0.9.1.2 | |
-- Fixed a variety of latent, hidden bugs discovered by "findbugs". Many thanks to Carsten Heyl | |
for running this utility and reporting the issues. | |
-- Added lastAcquisitionFailureDefaultUser to ComboPooledDataSource's TO_STRING_IGNORE_PROPS, | |
as some moments' Exception doesn't belong in a DataSource's toString(), and as trying to | |
find this when stringifying close()ed DataSources provoked an infinte recursion (as an Exception | |
was triggered trying to get the last failure info, which tries to include the stringified | |
DataSource in its message, again provoking an Exception, ad infinitum.) Many thanks to Santiago | |
Aguiar for finding and diagnosing this problem. | |
-- Added better documentation of the com.mchange.v2.c3p0.cfg.xml configuration property. | |
[Thanks to Legolas Wood for calling attention to this shortcoming.] | |
-- Calling getHoldability() to find the default Connection holdability provokes an Error | |
on some DB2 drivers. Added a "careful" check which catches and works around this. | |
[Thanks to Lari Hotari for finding the problem, and providing a solution!] | |
-- Refactored NewPooledConnection to not call event multicaster methods while holding | |
the NewPooledConnection's lock. Holding locks while firing events is an old-fashioned | |
way of provoking deadlocks, and it turns out c3p0 was not immune. Whoops! Another | |
embarrassing one. Many thanks to Rhythm Tyagi and Pappu Sharadavani for finding this | |
deadlock! | |
c3p0-0.9.1.1 | |
-- Marked variable "logger" in Log4jMLogger. Rare null pointer exceptions apparently | |
result from a stale value of the previously set variable. Did the same for | |
Log4jMLogger, although no analoguous issue has thus far been reported. [Thanks to | |
Noa Resare and Denis on sourceforge for calling attention to this issue.] | |
-- Hid the attribute "properties" from access via JMX, since it often contains password | |
information. I don't think properties is particularly useful via JMX, and this seems | |
like a better solution than returning properties with a hidden/modified password | |
property, since users might break things unintuitively by resetting a property to | |
a value that, according to the mbean, was the original value. [Thanks to John Sumsion | |
for calling attention to this issue.] | |
-- Fixed bug whereby setting any positive unreturnedConnectionTimeout forced c3p0's default | |
effectivePropertyCycle down to 1 second. [Many thanks to Luke Dang for tracking down | |
this bug.] | |
-- Fixed an embarrassing bug whereby c3p0 was reflectively testing for methods (setHoldability | |
and setReadOnly) whose argument types are primitive int and boolean, by looking for | |
Integer.class instead of int.class and Boolean.class instead of boolean.class. [Many | |
thanks to John Kristian for tracking down this subtle, and embarrassing issue very | |
precisely and suggesting the fix.] | |
c3p0-0.9.1 | |
-- Modified logging of uncleared SQLWarnings, so that warnings are emitted at INFO rather | |
than WARNING, and via a dedicated logger [com.mchange.v2.c3p0.SQLWarnings], so that users | |
can easily turn this behavior off. [Thanks to Oleksandr Alesinskyy for calling attention | |
to the annoyingness of unconditionally logging all of this at WARNING.] | |
c3p0-0.9.1-pre12a | |
-- Fixed a NullPointerException in DoubleWeakHashMap that showed up thanks to the newly | |
implemented canonicalization of Jdk14MLog instances. [Many thanks to Carlos Cajina for | |
finding and reporting this bug.] | |
c3p0-0.9.1-pre12 | |
-- Modified Jdk14MLog to canonicalize named MLogger instances. In doing so, put the getLogger() | |
method behind a synchronization barrier, which hopefully will resolve an odd visibility issue | |
bug reported by a user (wherein the underlying jdk Logger appeared occasionally to be null | |
in threads that might have initialized prior to the logger) [Thanks to Denis on Sourcefore | |
for reporting this subtle and interesting issue.] | |
-- Added a lastAcquisitionFailure property to PooledDataSource (and the JMX view thereof). | |
Thanks to Troy Whittier for the suggestion, and the patch! | |
-- SQL Warnings present at Connection acquisition, or uncleared upon Connection checkin | |
are now logged (at WARNING level) and cleared prior to being made available as part | |
of the pool. This is necessary to sustain the invariant that all pooled Connections | |
are identical and interchangible; warnings are Connection state that must be managed | |
and homogenized. [Thanks to Naxe on the hibernate forums for calling attention to this | |
issue!] | |
-- Resolved a rare NullPointerException which occurs when a Statement cache is closed | |
beneath an active, checked out Connection. A client tries to prepare a Statement, | |
but the closed Statement cache throws an NPE. Resolved this by having the closed | |
Statement cache throw a ResourceClosedException, and having c3p0's proxy Statement | |
recover by generating an uncached PreparedStatement. [Thanks to Sven / ford_perfect | |
on sourceforge for finding and calling attention to this issue.] | |
-- Added c3p0 version to C3P0RegistryManagerMBean [Thanks to Sven / ford_perfect | |
on sourceforge for the suggestion.] | |
c3p0-0.9.1-pre11 | |
-- Documentation updates, and style-sheet fixes for FireFox. | |
-- Despite the ugliness, added logic to prepend a VMID to identity | |
tokens generated for c3p0 DataSources. See the docs (Appendix A, | |
other configuration properties) for more information. Though there's | |
little harm in the longer, uglier identityTokens, users who dislike | |
them can turn them off using the property com.mchange.v2.c3p0.VMID. | |
-- Wrote ScatteringAcquireTask, which represents a significant change to | |
how c3p0's underlying resource pool deals with Connections acquisition | |
failures. c3p0 is designed to retry Connection acquisition up to | |
"c3p0.acquireRetryAttempts" times (30 by default) with a delay of | |
"c3p0.acquireRetryDelay" milliseconds (1000 by default) between tries. | |
Should no Connection be successfully acquired after acquireRetryAttempts, | |
c3p0 gives up, logs an error, and frees clients waiting to check out | |
a Connection with an Exception (declaring the pool permanently broken | |
iff c3p0.breakOnAcquireFailure is set to true). | |
Connection acquisition is performed asynchronously by c3p0's thread | |
pool. Under the old implementation, when database Connections could | |
not be acquired, a single task dispatched to the thread pool would | |
hog a thread for the full length of the cycle -- 30 seconds by | |
default -- spending most of that time sleeping between retries. | |
Under the new implementation, each acquisition attempt is its own | |
separate task, and if an acquire attempt fails, a timer is used to | |
schedule a retry adter acquireRetryDelay without hogging any thread. | |
I think the new implementation is unambiguously superior to the old, | |
as it permits clients to use smaller thread pools (c3p0.numHelperThreads) | |
and diminishes the likelihood of apparent thread pool deadlocks. | |
However, it is too significant a change to introduce this late | |
in the "mature" c3p0-0.9.1 series, so the old implementation is enabled | |
by default until the c3p0-0.9.2 development cycle begins. | |
TO USE THE NEW IMPLEMENTATION WITH c3p0-0.9.1, set... | |
com.mchange.v2.resourcepool.experimental.useScatteredAcquireTask=true | |
in a c3p0.properties file or as a system property. Users are strongly | |
encouraged to set this property. You'll see better resource utilization, | |
and I'll get to hear issue reports if I've screwed anything up in | |
the implementation. | |
-- Modified BasicResourcePool so that checkin (and removal) of resources | |
is always synchronous if the pool is marked broken. [Otherwise the | |
check-ins to a closed or broken pool may fail, as they try to use an | |
already close()ed asynchronous task runner.] | |
-- Modified BasicResourcePool.AcquireTask so that an interrupt always | |
forces the whole task to end, not just a single acquisition | |
attempt. | |
-- Exposed numThreadsAwaitingCheckout in PooledDataSource interface | |
and its associated MBean. [Thanks to John Sumsion for suggesting | |
this property.] | |
-- Prevented password from being exposed via | |
DynamicPooledDataSourceManagerMBean. [Thanks to John Sumsion | |
for calling attention to this oversight!] | |
-- Fixed an error whereby DataSources.pooledDataSource( ... ) methods | |
failed to properly set configuration properties defined on | |
PoolBackedDataSource [e.g. numHelperThreads]. Many thanks to | |
John Sumsion for noticing the problem and sending the fix! | |
-- Fixed AbstractConnectionCustomizer to implement (with no-op) methods | |
the current definition of the ConnectionCustomizer interface. (Failed | |
to update after modifying an early version of this interface.) | |
-- Modified NewPooledConnection to only collect stack trace information | |
on close() when we are debugging at FINEST or DEBUG (log4j) level. | |
Previously, stack trace information was collected anytime a | |
c3p0 PooledConnection was close()ed. This was unnecessary, although | |
the performance cost was probably small to negligible, since | |
PooledConnections are typically reused many times before they are | |
close()ed. Stack trace information is still captured when | |
PooledConnections are destroyed due to an error, rather than an | |
ordinary call to close(). | |
-- Hid the getLastXXXFailure(user, password) from the operations list of | |
DynamicPooledDataSourceManagerMBean. The stack traces of failures | |
are visible via the sampleLastXXXFailureStackTrace(); there's no | |
need to expose the Throwbales as well via JMX. | |
-- Added convenience methods getNumPooledDataSources() and getNumPoolsAllDataSources() | |
to C3P0Registry and the related MBean. [Thanks to lukeda on hibernate | |
forums for calling attention to the need for a pool count, since | |
DataSources can wrap multiple pools associated with different | |
authentications.] | |
-- Eliminated the "trial Connection acquisition" added to c3p0-0.9.1-pre10 | |
when PooledDataSources construct the pool with their default authentification | |
information. Effectively we trust that the default auntentification is | |
good, while we distrust client-specified (or JMX-queried) username/password | |
combinations, and perform the extra check. This is a compromise, as users | |
who frequently create and destroy DataSources don't like the extra overhead | |
of the trial Connection acquisition, but we really want to avoid the initialization | |
of bad pools when users misspecify authentification information. We've also prevented | |
mere queries of pool status from triggering the initialization of a | |
non-default-authentification pool. Only calls to getConnection(user, password) | |
will provoke the initialization of a non-default-auth pool. Querying | |
a non-default pool -- e.g. getNumBusyConnections( "steve", "test" ) -- will | |
throw an Exception if no Conections have ever been requested for ("steve", "test") | |
rather than initializing a new pool. [Thanks to Jiji Sasidharan for calling | |
attention to this issue.] | |
-- Finally rationalized C3P0Registry's Object retention policy. C3P0Registry | |
retains references to all C3P0 DataSources, to provide a central | |
point of client access for users, and to ensure that multiple JNDI | |
lookups within a single VM result in the same DataSource instance. | |
This is both intuitive, and avoids multiplying Threads and pools. | |
In previous versions of c3p0, hard references were retained indefinitely. | |
Closed DataSources hold no non-memory resources, and are small Objects, | |
but in unusual scenarios wherein very many c3p0 DataSources are created | |
and destroyed within the lifetime of a single VM, this amounts to a | |
memory leak. C3P0Registry now retains hard references to DataSources | |
so long as they have not been close()ed (or DataSources.destroy()ed). | |
When they have been close()ed, only weak references to c3p0 DataSources | |
persist, and they are eligible for garbage collection. [Thanks to | |
Jeremy Grodberg for calling attention to this as a real-world issue.] | |
-- Removed some of the new pool stat params which distractingly appear in | |
ComboPooledDataSource's toString() method (and c3p0 pools' config dump). | |
c3p0-0.9.1-pre10 | |
-- Exposed statement pool stats via PooledDataSource interface and MBean. | |
Added accessors to the statement cache, pool, pool manager, and | |
AbstractPoolBackedDataSource. | |
-- Fixed a bug whereby multiple near-simultaneous Connection requests failed | |
to provoke sufficient pool growth/Connection acquisition. This is a bug | |
reintroduced in c3p0-0.9.1-pre4, and is a duplicate of an early issue, | |
resolved under the old pool size management scheme. c3p0 must (and does) | |
keep track not only of its current size and pending growth, but also the | |
number of potentially unserved recent Connection requests. c3p0-0.9.1-pre4 | |
thru c3p0-0.9.1-pre9 failed to make use of the incoming request count when | |
deciding whether and how much to grow the pool. Many thanks to John Kristian | |
for calling attention to this subtle issue. | |
-- Exposed information about Connection test failures (failure count of | |
each type of test, stack trace of last failure and last failure of each | |
type) via the PooledDataSource interface and its assiciated MBean. | |
-- Fixed a rare situation where a Connection test on check-out could | |
be performed by a Thread holding the pool's lock, if an initial | |
attempt to checkout a Connection failed and a second checkout attempt | |
is initiated internally. The recursive checkout is now performed | |
without the pool's lock. | |
-- Established a consisent policy re logging of Connection test failures. | |
They are now logged at FINE level (DEBUG under log4j). Previously tests | |
on checkin and checkout were logged at FINE, but idle tests were logged | |
at INFO. Is it worth letting this be configurable, as some users may prefer | |
to see test failures under normal operation? | |
-- Modified C3P0PooledConnectionPoolManager to perform a trial Connection | |
acquisition before trying to establish a pool, as pools established | |
on bad database or authentification information churn indefinitely trying | |
to acquire minPoolSize Connections, clogging up the thread pool and | |
sometimes leading to "APPARENT DEADLOCKS" if users touch a pool with | |
bad authentification information. | |
-- Defined UnifiedConnectionTester (and AbstractConnectionTester) so that | |
ConnectionTesters can provide any Exception associated with a failure, | |
which will show up as the "root cause" of the Exception eventually | |
thrown to signal the failure. | |
-- Added logging at WARNING level when a Connection tester reports the | |
database is invalid, triggering a reset of the Connection pool. | |
c3p0-0.9.1-pre9 | |
-- Updated the documentation. It is now fully current. | |
-- Changed the name of the jboss configuration mbean from | |
com.mchange.v2.c3p0.mbean.C3P0PooledDataSource to com.mchange.v2.c3p0.jboss.C3P0PooledDataSource, | |
in order to distinguish the jboss configuration stuff from the normal management | |
beans, which really are quite different. The old com.mchange.v2.c3p0.mbean.C3P0PooledDataSource | |
still exists, so that existing users don't see anything break, but only the new version will | |
be updated to support new parameters. | |
-- Added a means by which users can suppress JMX MBean registration if they | |
wish. Setting the property com.mchange.v2.c3p0.management.ManagementCoordinator | |
to com.mchange.v2.c3p0.management.NullManagementCoordinator will | |
prevent mbean registration. (Advanced users can also use this to install | |
their own implementations of the ManagementCoordinator interface, though | |
I doubt many people will find this useful.) | |
-- Fixed infinitely loop in ComboPooledDataSource.setFactoryClassLocation( ... ) [introduced with | |
the reorganization of ComboPooledDataSource to inherit from AbstractPoolBackedDataSource (?)] | |
-- Added some code to warn on common spelling errors of c3p0.properties | |
and c3p0-config.xml (Users have frequently mistaken the digit 0 for | |
the letter O in c3p0.) | |
-- Wrote a DynamicMBean for PooledDataSources. It seems to work, | |
covers both ComboPooledDataSource and "wrapping" PoolBackedDataSources, | |
and should cover new config parameters and accessors automatically. | |
-- More refinements to connection test logic. We test proxy Connections | |
when there's a statement cache and a test query (to save time, since | |
the test query is likely cached), we test physical connections if we'll | |
need to do the slow, default test (statement caching doesn't help), or | |
if there is no statement cache. | |
-- Removed the stub servlet I'd previously added. Although it jdk1.5+, the | |
JMX approach is a better one for monitoring and modifying c3p0 pools at | |
runtime, and I'm going to focus on that for now. (If there's a lot of | |
clamor for it, I'll add back and flesh out the servlet. It just doesn't | |
seem like a great use of my time for now.) | |
-- Modified build to create a separate jdk1.3 compatable jar by stripping | |
source of lines beginning with "assert". I want to start using assertions, | |
but will keep them to recognizable, strippable one-liners. | |
-- Modified DriverManagerDataSource to handle its driverClass parameter | |
in a less fragile way. Rather than attempting to load the driverClass on | |
property set, DriverManagerDataSource now lazily tries to load the class | |
upon its first call to getConnection() after the property is initialized | |
or updated. | |
c3p0-0.9.1-pre8 | |
-- Fixed bug whereby jdbcUrl and driverClass were not initialized properly | |
if set in config files rather than in code. [Thanks to Felipe Dominguez | |
for calling attention to this problem!] | |
-- Changed AbstractPoolBackedDataSource from a non-public class in | |
com.mchange.v2.c3p0 to a public class in com.mchange.v2.c3p0.impl to | |
workaround fragilities associated with sun bug id #6342411, wherein | |
reflective invocation of public methods on a non-public class fail, | |
even when involed via a public base-class. | |
-- Fixed NullPointerException (introduced on -pre7) on initializing with | |
a named config. | |
-- Continuing along the same lines, modified C3P0Registry and | |
C3P0ManagementCoordinator to unregister (both from C3P0Registry and | |
associated MBeans on DataSource close. When all PooledDataSources | |
are unregistered, the C3P0RegistryManager MBean unregisters as well. | |
-- Modified ActiveManagementCoordinator to check for, and unregister, the | |
C3P0Registry mbean prior to registration, to prevent conflicts on | |
undeploy/redepoloy cycle. [Thanks to Ben Groeneveld for calling attention | |
to this problem, and suggesting the fix.] | |
-- Modified C3P0PooledConnectionPool to perform Connection tests on the raw | |
physical Connection rather than the proxy Connection, when possible (i.e. | |
when we're using a C3P0 PooledConnection implementation that we know how to | |
get underneath of). This is better because 1) it's slightly faster; 2) it's | |
significantly faster on failure, as C3P0 PooledConnections test Connections | |
after a failure with statusOnException(), leading to an unnecessary | |
double-check; and 3) authors of custom ConnectionTesters can use vendor-specific | |
API to test Connections if they wish. | |
c3p0-0.9.1-pre7 | |
-- Defined the ConnectionCustomizer interface as a hook through which clients | |
can "set up" newly acquired or checked out connections (and clean up prior | |
to check-in or destruction). Added config param connectionCustomizerClassName. | |
-- Formerly unused config parameter propertyCycle now controls how frequently | |
c3p0 checks timestamps against expiration parameters (maxIdleTime, | |
maxIdleTimeExcessConnections, maxConnectionAge, unreturnedConnectionTimeout) | |
-- Added config parameters unreturnedConnectionTimeout and | |
debugUnreturnedConnectionStackTraces, reluctantly but by popular demand. | |
If unreturnedConnectionTimeout is set, Connections will be automatically | |
destroyed and removed from the pool if not returned in the given number | |
of seconds. If debugUnreturnedConnectionStackTraces is also set, stack | |
traces will be captured on check-out of any Connection, and the stack traces | |
that were unreturned and cleaned up by the pool will be logged. Any clean-up | |
of an unreturned Connection is logged at INFO level, in hopes of annoying | |
people into cleaning up their code and close()-ing their Connections reliably. | |
-- Added config parameter maxIdleTimeExcessConnections. Connections in excess of | |
the pool's minimum size will be expired out if they remain idle for longer | |
than maxIdleTimeExcessConnections. [Thanks to Navin M. and Ben Groeneveld for | |
the suggestion.] | |
-- Added configuration parameter maxConnectionAge to limit the absolute age | |
of Connections (age in seconds from acquisition, rather than in seconds | |
form last check-in). | |
-- Put more status accessors in ThreadPoolAsynchronousRunner and exposed | |
thread pool state via JMX (PooledDataSourceManagerMBean). | |
-- Preliminary support for management via mbeans/jmx under jdk1.5+ is | |
implemented. (These mbeans are distinct from the mbean designed for | |
configuring c3p0 under jboss, and are in the package | |
com.mchange.c3p0.management.) Currently, pool statistics are instrumented, | |
as well as pool reset operations, but viewing and modifying the pool | |
configuration parameters is not supported. (I'll write a dynamic mbean to | |
capture this stuff; there are too many config properties I'm already | |
updating by hand in too many places. Later.) [Thanks to Ben Groeneveld for | |
the suggestion, including some nice sample code!] | |
-- Added configuration parameter maxAdministrativeTaskTime, which forces | |
interrupt() to be called on pool administrative tasks (Connection acquisition, | |
destruction and testing; prepared statement destruction) if these tasks seem | |
to hang. This is one strategy for dealing with database that hang and lead to | |
deadlock messages and eventually large memory footprints. It's useful only if | |
the hanging operations respond to interrupt()s, not thread-monitor related | |
deadlocks (which hopefully don't ever happen). c3p0 should recover from any | |
Exceptions provoked by the interrupt() calls. (Hopefully improvements to | |
GooGooStatementCache have rendered this parameter largely unnecessary by | |
resolving the most common source of deadlocks.) | |
-- Major revision to GooGooStatementCache that may eliminate most APPARENT | |
DEADLOCK messages. c3p0-0.9.0 introduced a complicated implementation | |
of closeAll(), in order to ensure that Statement and Connection close did | |
not happen simultaneously. Upon review, there was a significant bug in the | |
implementation, and even when corrected, the strategy is itself prone to | |
deadlocks should the ThreadPool become saturated with destroy tasks, which | |
block awaiting statement remove tasks. Rewrote closeAll() as a simple | |
synchronous method, rather than simulating synchrony with wait()/notifyAll(), | |
but with care not to hold the StatementCache's lock during Statement.close() | |
calls. There is a slight loss of asynchrony, as Statement.close() methods | |
are executed sequentially rather than simultaneously, but as a practical | |
matter, since the sequential destruction occurs asynchronously in the | |
thread pool and is invisible to clients, both client-observed and over-all | |
performance should not suffer. (It may even be improved, as the 0.9.0.x | |
strategy was complicated and had some overhead.) Note: This revision should | |
also eliminate occasional ConcurrentModificationExceptions associated | |
with the Statement cache. | |
-- Changed asynchronous tasks implemented as anonymous inner classes to named | |
inner classes, so that users reviewing active and pending tasks (usually | |
in trying to make sense of an APPARENT DEADLOCK) have a better idea of | |
what's going on. | |
-- Major revision to GooGooStatementCache that may eliminate most APPARENT | |
DEADLOCK messages. c3p0-0.9.0 introduced a complicated implementation | |
of closeAll(), in order to ensure that Statement and Connection close did | |
not happen simultaneously. Upon review, there was a significant bug in the | |
implementation, and even when corrected, the strategy is itself prone to | |
deadlocks should the ThreadPool become saturated with destroy tasks, which | |
block awaiting statement remove tasks. Rewrote closeAll() as a simple | |
synchronous method, rather than simulating synchrony with wait()/notifyAll(), | |
but with care not to hold the StatementCache's lock during Statement.close() | |
calls. There is a slight loss of asynchrony, as Statement.close() methods | |
are executed sequentially rather than simultaneously, but as a practical | |
matter, since the sequential destruction occurs asynchronously in the | |
thread pool and is invisible to clients, both client-observed and over-all | |
performance should not suffer. (It may even be improved, as the 0.9.0.x | |
strategy was complicated and had some overhead.) | |
-- Users still occasionally report seeing "APPARENT DEADLOCK" messages | |
from ThreadPoolAsynchronousRunner. Previously, most reports had to | |
do with cached PreparedStatements that hang when closed. Previous | |
fixes (in 0.9.0) seemed to resolve these problems. Most new reports | |
have to do with Connection acquisition or Connection close() tasks | |
hanging indefinitely, with statement cacheing not necessarily involved. | |
It's unclear whether these reports stem from a c3p0 bug, or rare | |
situations in which various JDBC driver hangs hang c3p0. (If the | |
condition is temporary, c3p0 recovers after the "APPARENT DEADLOCK" | |
warning. In any case, ThreadPoolAsynchronousRunner has been modified | |
to provide much better debug information, particularly in jdk1.5 | |
environments, where hung Thread stack traces are dumped. | |
-- Modified the build file and refactored C3P0Config / C3P0ConfigUtils / C3P0ConfigXmlUtils | |
to make sure that c3p0 still runs under jdk1.3, even though it only builds | |
under jdk 1.5. JMX support is 1.5 only, and XML config depends on the | |
availability of standard XML extensions under jdk 1.3. (This is going to get harder, | |
as I hope to start using assertions. For the moment, assertions are | |
commented out. I think I'll have ant filter away the assertions for 1.3 | |
builds and leave them in otherwise, based on a build property. | |
-- Significantly reorganized (hopefully simplified) of C3P0Registry and | |
ComboPooledDataSource. Much of the complication of all this is supporting | |
the most annoying, least used, but nevertheless very important feature | |
of supporting JNDI lookups across JVM boundaries via Serialization or JNDI | |
References. | |
-- Reorganized ComboPooledDataSource to inherit from PoolBackedDataSource. | |
In doing so, changed setConnectionPoolDataSource() of PoolBackedDataSource | |
to throw a PropertyVetoException. (It is a "constrained property" now.) | |
The very, very few users who call this method directly may have to update | |
their code to handle the potential Exception. This change does not affect | |
compatability for clients that use ComboPooledDataSource or who create | |
PoolBackedDataSources via the c3p0's factories (e.g. DataSources). | |
-- Fixed bug whereby config parameter breakAfterAcquireFailure did not take | |
effect at the ResourcePool level. | |
-- Fixed bug whereby initialPoolSize parameter failed to take effect at the | |
ResourcePool level. | |
-- Fixed a bug whereby Connection tests on checkout held the pool's lock, | |
preventing other activity during the Connection test. [Thanks to John | |
Sumsion for calling attention to this subtle problem.] | |
-- ThreadPoolAsynchronousRunner has seen some minor efficiency improvements | |
(a task that calls interrupt() long-running tasks on post-deadlock blocked, | |
replaced threads no longer runs when there are no post deadlock blocked, | |
replaced threads). | |
-- Previous versions used a Stringified identityHashCode() as a unique ID | |
for various C3P0 objects. This was not correct (and bit at least one | |
user in practice), as identityHashCode()s are not guaranteed unique, | |
and in practice are not on 64-bit VMs. c3p0 now checks identityHashCodes | |
to make sure they are not reused, and if seen before appends a count to | |
keep unique IDs unique. [Many thanks to Prishan Makandurage for calling | |
attention to this issue.] | |
-- Fixed fact that statusOnException() in NewPooledConnection() ignored | |
preferredTestQuery parameter, always using the very slow default | |
connection test rather than the user-defined test. [Thanks to Andrea | |
Luciano for calling attention to this issue.] | |
-- C3P0PooledConnection (part of the "traditionalReflectiveProxies" | |
codebase that's largely been superceded, but that is still nominally | |
supported) held a static reference to a ClassLoader, in some cases | |
preventing the ClassLoader from being garbage collected (for example | |
when webapp contexts, with context specific Classloaders are | |
undeployed by some app servers). This was entirely unnecessary, as | |
the cached reference was used exactly once in the lifecycle of the | |
class. The reference to the ClassLoader is no longer stored. [Many | |
thanks to Michael Fortin for very specifically tracking down this | |
subtle problem!] | |
-- Added logic to log individual acquisition failures at INFO level | |
if acquireRetryAttempts <= 0. if num_acq_attempts <= 0, we try to | |
acquire forever, so the end-of-batch log message below will never | |
be triggered if there is a persistent problem so in this case, | |
it's better flag a higher-than-debug-level message for | |
each failed attempt. [Thanks to Eric Crahen for calling attention | |
to this issue.] | |
c3p0-0.9.1-pre6 | |
-- Wrote a stub of a status-monitoring servlet. Not yet documented, or | |
even usefully functional, but hopefully will be soon. | |
-- Updated documentation to include new config file format, including | |
named and per-user config. Docs could still use some work, but the | |
functionality is now described. | |
-- For consistency, the parameters user and password are now configurable | |
via config files and System properties. | |
-- Modified DefaultC3P0ConfigFinder to properly give greater precedence to | |
System properties than to XML-defined unspecified user, default config | |
values. | |
-- Added WARNING logging of create SQL and original database Exception when | |
creation of an automaticTestTable fails. [Thanks to Alexander Grivnin.] | |
-- Added logic so that the Exception assoicated with the last failed acquisition | |
attempt in a round of attempts is logged along with the failure if the | |
acquisition attempts. [Thanks to Barthel Steckemetz and Patrick Eger for | |
calling attention to this issue.] | |
-- Fixed a problem whereby modifying the config of a ComboPooledDataSource | |
programmatically, while in use, causes previously checked-out Connections | |
to be close()ed underneath the user. Changing configs midstream still | |
causes a complete resetting of the pool (because the pool holds most | |
config params as immutable to avoid having to synchronized for every | |
config param read), but old Connections from superceded pools will remain | |
valid until they are rechecked into the pool. [Thanks to hhu for noticing | |
this problem!] | |
-- Fixed a resource leak whereby Connections which could not be reset after | |
client-initiated close() were properly "excluded" from future inclusion | |
in the pool, but never checked back into the pool to be destroyed. (Excluded | |
resources are simply marked for destruction rather than reassimilation on | |
checkin.) [Many thanks to Levi Purvis for tracking this down!] | |
c3p0-0.9.1-pre5a | |
-- "test-classpath" was erroneously specified in build.xml to include some | |
extra jar files, which rendered undetectable (to my tests) the fact | |
that com.mchange.v1.lang.BooleanUtils was not jarred up into | |
c3p0-0.9.1-pre5.jar as it needed to be. Very, very embarrrassing. [Thanks | |
to Goksel Uyulmaz for calling attention to this gaffe.] | |
c3p0-0.9.1-pre5 | |
-- reorganized synchronization of getConnection() in DriverManagerDataSource, | |
so that a lock-up in one Connection acquisition attempt does not prevent | |
other threads from accessing the DataSource. [Thanks to Fabian Gonzalez | |
for calling attention to this occasional deadlock.] | |
c3p0-0.9.1-pre4 | |
-- added overrideDefaultUser and overrideDefaultPassword parameters, and | |
a pooledDataSource( ) factory method which specifies override | |
authentification info, regardless of the user and password properties | |
set on the DataSource. | |
-- Reimplemented resource acquisition in BasicResourcePool so that each | |
Connection acquisition is a separate asynchronous task, to avoid tying | |
up the pool with very long, multiple acquisition tasks. Ended up being | |
a total rewrite of pool size management. Pools should be much more | |
conservative in acquiring new Connections. They won't grow to maxPoolSize | |
as easily as before. This is a big change. We'll see how it holds up as | |
people beat the crap out of it. | |
c3p0-0.9.1-pre3 | |
-- Added some extra logging of resource destruction, to help debug cases | |
where the resources are removed from the pool, but appear not to have | |
been properly cleaned up. | |
-- Finished implementation of new C3P0Config, added constructor methods to | |
various DataSource implementations that accept a configName parameter for | |
named configurations, and modified the DataSources class to use the new | |
configuration approach instead of PoolConfig wherever possible. | |
c3p0-0.9.1-pre2 | |
-- Continued implementation of new C3P0Config, including XML parsing | |
and setting of default values. Still have to test XML config, and | |
implement named and per-user configs. | |
-- Changed policy of BasicResourcePool to keep accidentally overacquired | |
resources so long as the pool is kept below maxPoolSize, rather than | |
immediately discarding Connections beyond the number we intended to | |
acquire. | |
-- Fixed two issues whereby checking in resources to closed pools (both | |
Connection and Statement pools) provoked Exceptions. Check-ins should | |
succeed, even to close()ed pools, with resources silently destroyed if | |
the pools ae closed. [Thanks to Chris Kessel for finding both of these | |
issues.] | |
-- Modified to a one-statement-cache-per-pool model, rather than a | |
global-statement-cache-for-all-pools, consistent with the general | |
philosophy that config parameters are on a per-auth-pool basis. | |
-- Fixed a deadlock which could occur if a pool is closed at the same time as | |
one of its Connections is closed. One thread gets the pool's lock, then tries | |
to get a PooledConnections lock to close it. An ordinary client closes a | |
Connection, which acquires the PooledConnection's lock, and then tries to | |
check back in to the pool, requiring the pool's lock. Broke the deadlock by | |
making the destruction of resources on pool close asynchronous, by a Thread | |
without the resource pool's lock.. [Many thanks to Roger Westerlund for | |
sending a full thread-stack dump capturing this deadlock!] | |
-- Completed transformation to one C3P0PooledConnectionPoolManager per | |
PoolBackedDataSource model. | |
c3p0-0.9.1-pre1 | |
[This is a half-assed internal release... it compiles and works, but mostly | |
it's just a checkpoint as c3p0 undergoes significant transformations.] | |
-- Deprecated PoolConfig, and began implementation of new C3P0Config approach | |
to configuration. | |
-- Partial transformation of C3P0PooledConnectionPoolManager from shared-manager | |
for several DataSources model to simple one-pool-per-DataSource model enabled | |
by canonicalization of DataSources. | |
c3p0-0.9.0.4 | |
-- In a subtle but major modification of BasicResourcePool, changed checkin/checkout | |
behavior from FIFO to LIFO to increase the likelihood that unnecessary Connections | |
pooled at peak times idle long enough to expire. [Many thanks to Vlad Ilyushchenko | |
and hontvari on sourceforge for noticing this important issue and suggesting the | |
fix.] | |
c3p0-0.9.0.3 | |
-- Added code to mbean C3P0PooledDataSource to automatically create JNDI | |
subcontexts if a JNDI name is specified for which the full path has not | |
been created (analogous to mkdir -p in UNIX). [Thanks to David D. Kilzer | |
for noticing the issue, and for submitting the fix!] | |
-- Added logic to GooGooStatementCache to ensure that multiple threads do not | |
try to close the same PreparedStatement, in order to try to resolve longstanding | |
PreparedStatement.close() freeze issues. [Thanks to cardgames on sourceforge for | |
noticing that the freezes seem to occur when several threads are trying to close() | |
just one statement!] | |
-- Added some checks in DriverManagerDataSource (as well as WrapperConnectionPoolDataSource) | |
so that a mismatch between JDBC URL and driver does not lead to null Connection | |
references and downstrem NullPointerExceptions. [Thanks to Richard Maher for | |
calling attention to this issue.] | |
-- Undid some unnecessary synchronization in WrapperConnectionPoolDataSource, | |
which would cause deadlocks when the acquisition of a Connection from the | |
underlying driver froze for some Thread. (Other threads would then block | |
trying to access the WrapperConnectionPoolDataSource.) [Thanks to Fabian | |
Gonzales for calling attention to this issue, and for providing a VM thread | |
stack dump to help chase it down!] | |
-- modified BasicMultiPropertiesConfig to never attempt to read the resource "/", | |
representing (in this case) System properties, as a stream, which under some | |
classloaders caused ClassCastExceptions. [Thanks to Joost Schouten for calling | |
attention to this issue.] | |
-- fixed initial check of the readOnly and typeMap properties of Connections, | |
so that users don't see disconcerting Exceptions at debug log levels if their drivers don't | |
support these parameters. | |
-- Added jar attributes Extension-Name, Specification-Vendor, Specification-Version, | |
Implementation-Vendor-Id, Implementation-Vendor, and Implementation-Version | |
[per request of Pascal Grange]. | |
-- Added some extra debugging information for peculiar situation where an IdentityTokenized | |
is constructed and registered with C3P0Registry, but coalesces to a different Object. | |
This should never happen, as freshly constructed IdentityTokenizeds should have String | |
versions of their identity hashcodes as tokens, and upon their registration, no copies | |
should yet have been created and registered. [Thanks to Jose Rodriguez for noting this | |
issue.] | |
c3p0-0.9.0.2 | |
-- added debug-level logging of connection tests and results | |
-- tightened up means by which the readOnly and typeMap properties of Connections are reset, | |
so that users don't see disconcerting Exceptions at debug log levels if their drivers don't | |
support these parameters. | |
-- fixed problem in BasicResourcePool that left the immediately-close-checked-out-connections option | |
in the close() method ineffective, meaning Connections checked-out from a pool would | |
leak unless clients remembered to check them into pool for destruction. | |
-- fixed bug wherein connection-testing on checking occured in a thread holding the pool's | |
lock, leading to pool hangs or deadlocks if a connection hangs. [Thanks to Tobias Jenkner | |
for calling attention to this problem!] | |
c3p0-0.9.0.1 | |
-- modify BasicPropertiesConfig to not throw class cast Exceptions in the rare case that | |
a Properties object (presumably System properties rather than a file derived props Object) | |
contains (via the Map/Hastable API) non-String keys or values. [Thanks to Prima Upot for | |
calling attention to this issue.] | |
-- fixed a build issue where some classes required for code generation were not necessarily | |
compiled prior to the code generation step, causing builds to fail. [Thanks to James | |
Neville for calling attention to this issue.] | |
c3p0-0.9.0 | |
-- under some circumstances, the current list of ThreadPoolAsynchronousRunner's deadlock detector | |
seems to hold onto a lot of memory... presumably this is when long pending task lists build up | |
for some reason... nevertheless, we now dereference the "current" list in between deadlocker detector | |
invocations. The "last" list has to be retained between invocations, but the "current" list need | |
not be. [Thanks to Venkatesh Seetharamaiah for calling attention to this | |
issue, and for documenting the apparent source of object retention.] | |
-- modified log4j and jdk14logging MLog implementations to test for library classes upon | |
classload (MLog class only tests for the presence of the mlog implementations, which | |
doesn't notice if their dependant classes aren't there -- dependent classes must test | |
for the presence of the libraries.) | |
-- Modified GooGooStatementCache to warn as INFO (and with a descriptive message in debug) | |
of multple PreparedStatement preparation. [Thanks to mxnmatch on hibernate's forum for | |
calling attention to this issue.] | |
-- Modified BasicResourcePool to not warn on expected InterruptExceptions that occur if | |
clients are waiting for a Connection when the pool is closed. [Thanks to Blunted on | |
hibernate's forum for calling attention to this issue.] | |
c3p0-0.9.0-pre6 | |
-- Modified thread pool's strategy for dealing with deadlocks to prevent OutOfMemoryErrors | |
from sudden spawning of multiple threads to clear backlogged tasks. [Thanks to Greg Whalin | |
for calling attention to this problem.] | |
-- Fixed bugs in debug reporting of nested Exceptions/Warnings when converting or | |
rethrowing SQLExceptions [thanks to an anonymous sourceforge poster for finding this] | |
-- modified BasicResourcePool to shorten the period during which the pool's lock | |
is held during resource acquisition | |
-- maxIdleTime is generally enforced every (maxIdleTime / 8) seconds. Added logic to ensure that | |
even for very long maxIdleTimes, the longest maxIdleTime will ever go unenforced is 15 minutes. | |
-- Very tentative initial support in build for JUnit tests | |
-- Fixed documentation typos and added sample config for Tomcat 5.5. [Thanks to David Newcomb | |
for finding the typos and to Carl F. Hall for the sample config!] | |
-- ProxyConnections were not properly resetting readOnly, holdability, catalog, and typeMap | |
properties on Connection close. Fixed. [Thanks to Andy (bjorkmann?) for calling attention | |
to this bug.] | |
-- Added a complicated workaround to issues that may occur when a Connection | |
and its child statements simultaneously try to close. GooGooStatementCache's closeAll(Connection c) | |
method now wait()s for all Statements to close prior to returning, avoiding such issues (Oracle deadlock, | |
mysql NullPointerException), though dramatically complicating the code. Grrr. Theoretically, drivers should | |
be robust to the simultaneous closing of Statements and Connections, but they're not, so | |
my code gets to be more complicated. [Thanks to Juan Perez, Daniel Edberg, and Damien Evans for calling | |
attention to this issue.] | |
c3p0-0.9.0-pre5 | |
-- Proxy classes were overaggressively invalidating themselves in response to a signalled | |
Connection error. This problem was very similar to the problem fixed in 0.8.5-pre9, except | |
for rather than the PooledConnection too quickly closing its inner Connection, the proxies | |
too quickly detached themselves from the pooled Connection, considering themselves broken, | |
after a Connection error event. Users expect to be able to work with their Connections even | |
after c3p0 has in its conservatism decided they no are no longer worthy of a place in the | |
pool. [Thanks to "Geoff Fortytwo" for finding and helping to track down this issue.] | |
-- Fixed issue that prevented user-defined ConnectionTesters from being used. | |
c3p0-0.9.0-pre4 | |
-- Fixed NullPointerException on double-close of proxy Statements. [Thanks to Stephen Waud | |
for finding this bug and tracking it down.] | |
-- Modified C3P0PooledConnectionPool to generate a more informative Exception (one that | |
includes the stack trace of the initial problem) when a Connection test fails. [Thanks | |
to novotny from the hibernate forums for calling attention to this issue.] | |
` -- PooledDataSources now set SQLState 08001 on SQLExceptions resulting from a determination | |
by the pool that the database is down or unavailable. [Thanks to ml2709 on the hibernate | |
forums for calling attention to this issue.] | |
-- Modified ThreadPoolAsynchronousRunner to enforce its max task time even on one-off | |
"emergency threads" used to flush the pool of tasks after an apparent deadlock. | |
Hopefully this will help to eliminate the OutOfMemoryErrors that users occasionally | |
see if some Database operation starts to fail by blocking indefinitely, and is attempted | |
many many times. As long as these operations are susceptable to interrupt(), this should | |
resolve the problem. (If tasks block in a way that is immune to interrupt(), there is | |
little c3p0 can do to recover the Threads and prevent the number of blocked Threads | |
from growing until memory runs out.) [Thanks to Jean-Christophe Rousseau and Arup Vidyerthy | |
for calling attention to this issue.] | |
-- Wrapped System.getProperties() calls in try / catch blocks that catch and log | |
the SecurityExceptions, and ignore System properties if access to them is forbidden. | |
c3p0.properties configuration should work fine in security-controlled apps, but you | |
won't be able to configure c3p0 using "java -Dc3p0.xxxx=yyy ..." Since most users use | |
c3p0.properties for configuration, I don't think this will be a major problem. In the | |
future, I may be able to work around the restriction by having ask only for c3p0-specific | |
System properties, rather than calling the unrestricted System.getProperties() method. | |
[Thanks to zambak on SourceForge for calling attention to this issue.] | |
c3p0-0.9.0-pre3 | |
-- Modified generated proxy classes to properly report the type of the closed Object | |
if used after call to close(). | |
-- Fixed a really embarrassing oversight, wherein cached PreparedStatements | |
were being physically close()ed prior to their return to the cache! Tests | |
on psql failed to reveal this, because psql-7.4 Statement.close() does nothing | |
to invalidate the Statement! [Many thanks to tbayboy on hibernate's forum for | |
discovering this issue, and to fassev, also on hibernate's forum, for correctly | |
deducing the cause!] | |
-- Fixed an embarrassing oversight where operations of proxy Statements | |
and ResultSets failed to mark transactions as potentially dirty, leading | |
to the possibility that Connections with unresolved transactional work could | |
be checked into the pool. | |
-- Modified c3p0 Statements to no longer permit calls to getConnection() | |
after Statement close, and to null out the backreference to the | |
parent Connection. [Thanks to Edward Bridges for pointing out the issue.] | |
-- NewPooledConnection threw a NullPointerException on close() of | |
a ResultSet whose creating Statement had already been closed. | |
Fixed. [Thanks to Edward Bridges for pointing out the problem.] | |
-- Modified PoolConfig to trim() read-in c3p0.properties to avoid | |
NumberFormatExceptions if there is extra spacing in the file. | |
[Thanks to johnchan for calling attention to this issue.] | |
c3p0-0.9.0-pre2 | |
-- Documentation updates and improvements | |
-- Integrated configurable wrapper logging library, so that | |
c3p0 can log to log4j or jdk14logging. | |
c3p0-0.9.0-pre1 | |
-- First pass at documentation of JBoss integration. | |
-- Better one-per-JVM canonicalization (IdentityTokenized, | |
IdentityTokenResolvable, C3P0Registry) | |
-- First implementation of MBean for JBoss compatability | |
-- Fixed JNDI ref-based DataSources | |
c3p0-0.8.5.1 | |
-- Fixed a really embarrassing bug that made Statement pooling worse than | |
useless where users have set maxStatements but not maxStatementsPerConnection. | |
maxStatementsPerConnection -- that is, 0 -- was being used in place of maxStatements | |
on Statement cache initialization. [Thanks to Gwendal Tanguy for not only, | |
calling attention to this issue, but tracking down the precise location of | |
the bug!] | |
c3p0-0.8.5 | |
-- Documentation updates and improvements | |
-- Fixed an issue where failures on reset() of a pooled Connection caused | |
a Connection error to be signalled, without updating the status of the | |
PooledConnection to indicate that it is broken. Thanks to Henry Le for | |
calling attention to this issue. | |
c3p0-0.8.5-pre9 | |
-- Modified c3p0's behavior on detecting an apparently broken Connection. | |
Previously c3p0 would very aggressively close any Connections that, after | |
an Exception, failed to pass a Connection test. This sometimes surprised | |
and confused users, when Conections they expected to remain open were | |
closed from underneath them. Under normal circumstances, a Connection | |
which has failed its Connection test is broken anyway, so closing it | |
does no harm. But under some circumstances, a Connection may fail its | |
Connection test, but still be partly functional from the application's | |
point of view. So, now c3p0 simply marks Connections that fail their | |
Connection test following an Exception as broken, and excludes them from | |
future re-entry into the pool, but leaves those Connections open for users | |
to continue working with them prior to their explicit close() of the | |
Connection. [Thanks to Julian Legeny for calling attention to this issue.] | |
-- Modified c3p0's logging behavior to be a little bit less annoying. Rather than | |
frequently printing duplicate stack traces to be sure root cause Exceptions are | |
logged as well as converted, rethrown Exceptions, c3p0 now checks the Java | |
version, and uses the initCause() method to log the root cause in versions 1.4 | |
and above. Also, some Exceptions that were expected and thrown without information | |
as to the cause now use the initCause() method to provide this in JDK 1.4 and | |
above. [Thanks to Ruslan Gainutdinov, Anthiny Pereira, Carsten ????, and | |
Eric Hsieh for calling attention to these issues.] | |
-- Fixed bug whereby proxy wrappers were sometimes placed around null return values | |
from native Objects, particularly Statement's getResultSets() method. [Thanks to | |
Ruslan Gainutdinov for calling attention to this issue.] | |
-- Fixed bug in NewProxyConnection whereby setTransactionIsolation was called even | |
if the Connections' isolation level had not been changed from its default. [Thanks | |
to Levent Aksu for reporting this bug.] | |
c3p0-0.8.5-pre8 | |
-- Added C3P0ProxyStatement and rawStatementOperations for accessing vendor-specific | |
Statement API. | |
-- Fixed bug whereby recently added properties could not be configured properly | |
via a PoolConfig Object passed to the DataSources factory method. [Thanks to | |
Julian Legeny for finding this bug.] | |
-- Undid new behavior whereby c3p0 warns when it detects that a transaction | |
has not been comitted or rolled-back prior to close and must be automatically | |
rolled-back. Because c3p0 autorollsback conservatively, whenever it is possible | |
that there may be any transactional resources held by the Connection being | |
checked in, users who make read-only queries, then close without commit or | |
rollback, saw the warning, and became annoyed. Warning when it's "right" is hard, | |
and would involve paying attention to the substance of user-queries, as well | |
as the transaction's isolation level. In the future, when c3p0 offers better | |
control over logging, we'll make the warning optional. Note that this release | |
only undoes the warning -- the new logic that detects potential transactional work | |
and only rollsback when there has been some remains. [Thanks to David Graham for | |
calling attention to this issue.] | |
-- Synchronized StatementCacheKey.find( ... ) method. Subclasses of StatementCacheKey | |
have always explicitly relied upon this method being synchronized in the parent class, | |
but somehow it was not... [Thanks to Manfred Hutt for reporting this bug.] | |
-- Modified both PooledConnection implementations to reset the transaction | |
isolation level on PooledConnection.reset() | |
-- Finalized PooledDataSource api for pool stats and resets. | |
c3p0-0.8.5-pre7a | |
-- Fixed some bugs in new Proxy classes relating to close(), methods, | |
especially NullPointerExceptions on duplicate close() operations. | |
-- Fixed some misleading documentation re: testConnectionOnCheckin and | |
automaticTestTable vs. preferredTestQuery | |
-- Changed wording of warning message on purge of idle-test-failing | |
resource to no longer suggest that some user action is required. | |
[Thanks to Krishna Kuchibhotla for calling attention to this | |
issue.] | |
-- Modified GooGooStatementCache so that its close() is synchronous, | |
since when the Statement cache is closed, it's asynchronous | |
runner has often been closed already underneath it. (Actually | |
changed as of c3p0-0.8.5-pre7, but forgot to log it.) | |
c3p0-0.8.5-pre7 | |
-- Added flag (in both new and tradional reflective proxies) to | |
prevent automatic rollbacks on Connection close()es immediately post- | |
commit(), rollback(), or setAutoCommit(). | |
-- DatabaseMetaData now properly returns proxy rather than naked | |
raw Connection. [Thanks to jhoeller on the hibernate forums] | |
-- In response to an apparent BEA WebLogic specific problem with | |
DriverManager.getConnection( ... ), DriverManagerDataSource now | |
caches its driver and uses Driver.connect( ... ) rather than | |
DriverManager.getConnection() when acquiring Connections. Thanks to | |
Lars Torunski for calling attention to this issue. | |
-- Fixed some missing synchroniztion that really should be provided for accessors | |
and mutators of DataSource bean properties. | |
-- Added config parameter automaticTestTable, which takes the name of a table | |
that c3p0 will create and use as the basis for Connection tests. It's easier | |
to use than preferred test query, because you don't have to ensure the existance | |
of any tables in the schema prior to using a Pooled data source. | |
-- Fixed idiotic oversight whereby Connections didn't get their transaction status | |
resolved and reset on check-in... | |
c3p0-0.8.5-pre6 | |
-- Modified resource pools to only conditionally support async ResourcePoolEvent | |
generation. Since c3p0 doesn't use ResourcePoolEvents, we can do without the | |
superfluous CarefulRunnableQueue, and its associated Thread, which was serving | |
as an event queue. | |
-- Fixed bug where asynchronous refurbishment (testing) of resources would be | |
attempted even on check-in to a closed pool, whose async threads had terminated. | |
-- c3p0 now supports the following new configuraion parameters: preferredTestQuery, | |
testConnectionOnCheckin, checkoutTimeout, and maxStatementsPerConnection. | |
preferredTestQuery should allow c3p0 to test Connections (whether on checkout, | |
checkin, or after a specified idle time) much more efficiently than with | |
it's default test [a call to getTables(...) on the Connection's DatabaseMetaData.]. | |
checkoutTimeout allows clients to break out of a getConnection() call after a | |
a specified time period, rather than waiting (potentially indefinitely) for | |
a new Connection to be acquired from the database, or a checked-out Connection | |
to be rechecked in. testConnectionOnCheckin should be self-explanatory. | |
maxStatementsPerConnections allows users to specify how many statements to cache | |
on a per-connection base instead of, or in addition to, the global limit maxStatements. | |
-- Fixed various bugs relating to the referenceMaker and getReference() method of | |
ComboPooledDataSource. | |
-- Added TestUtils class to util package (modified from an old C3P0TestUtils | |
class now removed from the test directory), which now contains facilities | |
for establishing the identity of the physical Connection beneath a proxy, | |
so that tests can check to see when they are seeing the same physical | |
Connections recycled. [Thanks to Julian Legeny for calling attention to this | |
issue.] | |
-- Modified code generators so that inner objects of all NewProxy classes | |
go to null on object close(). Closed proxies should be hopelessly broken. | |
-- Added missing parameter "usesTraditionalReflectiveProxies" | |
to ComboPooledDataSource | |
-- Fixed bug whereby CarefulRunnableQueue threads linger indefinitely, even | |
though their close() method has been called. [Thanks to muirwa on the | |
hibernate forums for calling attention to this issue.] | |
c3p0-0.8.5-pre5 | |
-- added utility class for Oracle users who wish to access vendor specific | |
Connection API relating to BLOBs and CLOBs. [Thanks to Dave Smith for calling | |
attention to this issue.] | |
-- modified ThreadPoolAsynchronousRunner to provide more information should an | |
"apparent deadlock" occur, and fixed that class' recovery strategy from such | |
an event. [Thanks to Damien Evans for calling attention to this issue.] | |
c3p0-0.8.5-pre4 | |
-- added config parameter usesTraditionalReflectiveProxies, which defaults to false, | |
and stitched in the 'new' codegenerated, non-reflective proxy implementation for | |
the default case. | |
c3p0-0.8.5-pre3 | |
-- Added new config parameters breakAfterAcquireFailure, acquireRetryAttempts, and | |
acquireRetryDelay to ComboPoolBackedDataSource (forget to modify this class when | |
I added the params earlier.) | |
-- Added description of raw connection operations to docs. | |
c3p0-0.8.5-pre2 | |
-- Defined AuthMaskedProperties object, and used this to prevent usernames | |
and passwords from being dumped to logs (a security issue). [Thanks to Zac Jacobson | |
for calling attention to this issue.] | |
-- Made BasicResourcePool's refurbishment of checked-in resources | |
asynchronous, and used this to add a test of the resource on check-in. | |
But since the extra test may slow stuff down substantially, I've disabled it | |
pending a testConnectionsOnCheckin config parameter. | |
-- Fixed NullPointerException in C3P0ImplUtils.findAuth(Object o) which | |
occurred when the Object at issue had write-only properties. [Thanks to | |
mrfekson for calling attention to this issue.] | |
-- Added acquireRetryAttempts, acquireRetryDelay, and breakAfterAcquireFailure | |
as configurable properties. Supporting breakAfterAcquireFailure == false | |
required substantial changes to BasicResourcePool. [Thanks to Zac Jacobson | |
for suggesting the behavior for breakAfterAcquireFailure == false.] | |
-- Added poolOwnerIdentityToken property to PoolBackedDataSource, | |
which becomes part of the state of C3P0PooledConectionPoolManager, | |
to avoid possibility that multiple, identically configured pools | |
that users create separately and consider distinct would be closed | |
if any one of them were closed. This parameter ensures that for | |
each user-created DataSource, there will be a distinct | |
C3P0PooledConectionPoolManager. Multiple copies, as often arise | |
via deserialization and/or dereferencing JNDI DataSources, will | |
still share a single pool and configuration. | |
-- Added reset methods, hard and soft, to PooledDataSource and | |
its implementations. Also added some extra aggregate pool statistics | |
methods. [Thanks to Travis Reeder for suggesting the hardReset() behavior.] | |
-- Fixed bug that PoolBackedDataSource always provided statistics for the | |
default authentication pool, even when alternate usernames and passwords | |
were provided. | |
c3p0-0.8.5-pre1 | |
-- Defined the C3P0ProxyConnection interface, and modified both reflective and unreflective | |
proxy Connection code to implement it. The interface provides a method through which | |
advanced users can work with the raw, unproxied database Connection. This was motivated | |
by some Oracle-specific API that could not be passed through the generic Connections | |
returned by c3p0 pools. Thanks to Dave Smith for calling attention to this issue. | |
-- Fixed a NullPointerException that resulted when users called DriverManagerDataSource's | |
getConnection( username, password ) with either username or password as null. Users | |
will now see the SQLException provided by their database for bad authentication, which | |
should make the problem more obvious. | |
c3p0-0.8.4.5 | |
-- Modified all variants of StatementCacheKey, as well as C3P0PooledConnection (proxy Statements) | |
to support jdbc3.0 API for autogenerated keys and ResultSet holdability. All jdbc 3.0 API | |
is now supported. | |
c3p0-0.8.4.2 | |
-- Fixed bug in which proxy Statements and ResultSets returned their | |
naked, unproxied parents from their getConnection() / getStatement() | |
methods. Thanks to Christian Josefsson for noticing this! | |
-- Added check to ensure that ResourcePools are not broken prior to | |
posting asynchronous events. It'd be better to factor the (as yet | |
unutilized async event stuff into a subclass to simplify | |
BasicResourcePool). | |
-- Fixed documentation typo that said default numHelperThreads was "false"... | |
now it's correctly set to "3". | |
-- Added extra System.err information to instrument the causes of broken | |
resource pools. | |
-- finalize() method of BasicResourcePool checks to be sure user has not | |
already closed the pool before closing, to avoid spurious multiple | |
close warnings. Thanks to Gavin King. | |
c3p0-0.8.4.1 | |
-- Added (hopefully not too annoying) dump of DataSource configuration | |
on pool initialization to assist user debugging. | |
-- Added methods to force destroy all resources used by a PooledDataSource, | |
even if other DataSource instances are sharing those resources. This is | |
intended primarily for applications that wish to discard the ClassLoader that | |
loaded c3p0, regardless of whatever's currently going on. | |
-- Turned off annoying trace messages when a C3P0PooledConnection closes. | |
-- Fixed issue in statement cache whereby statements that fail to check-in | |
properly (that throw an exception in "clearParameters") cause an exception | |
in removeStatement, because removeStatement sees a statement that appears | |
neither to be checked-out, nor in the deathmarch for checked-in statements. | |
Resolved by re-adding truculent statement to the checkedOut set, and then | |
destroying using removeStatement's codepath for removing and (force-)destroying | |
checked-out statements. Thanks to Zach Scott for calling attention to | |
this issue. | |
c3p0-0.8.4 | |
-- Updated and HTML-ized documentation, updated READMEs. | |
c3p0-0.8.4-test5 | |
-- Includes, but does not yet use, cleaner, nonreflective | |
reimplementation of C3P0PooledConnection and all of the | |
JDBC proxy wrappers. (c3p0-0.8.4 will stick with the old, | |
tested implementation, c3p0-0.8.5 will replace.) | |
-- Removed temporary debug wrapper around acquired Connections | |
added in c3p0-0.8.4-test4-3. | |
c3p0-0.8.4-test4-3 | |
-- Fixed race condition in BasicResourcePool close(), whereby | |
pooled resources were to be destroyed by an asynchronous thread | |
that itself was shut down by the close() method, so the resource | |
closures did not necessarily occur. Pooled resources are now | |
destroyed synchronously in BasicResourcePool.close() | |
-- Fixed erroneous call to C3P0PooledConnection reset() even when | |
the PooledConnection is known to be broken. | |
-- Added temporary debug wrapper that dumps a stack trace on physical | |
Connection close() to help Adrian track down a stubborn issue. | |
c3p0-0.8.4-test4 | |
-- Made sure PooledConnection's that are known to be broken are not reset() | |
when the ProxyConnection that noticed the break cleans itself up. | |
-- Fixed a problem in C3P0PooledConnection's ProxyConnectionInvocationHandler | |
when Connection-invalidating exceptions occurred inside the factored-out | |
doSilentClose() method rather than in the invoke() method. This could lead to | |
broken PooledConnections not being noticed and expunged from the pool | |
prior to recheck-out. | |
-- Ensured stack-trace of any Connection-invalidating Exceptions are | |
logged. (Previously only the messages were logged.) | |
-- Access to ProxyConnections is now synchronized to avoid a possible | |
race condition where a Connection could close while another method | |
was in progress. | |
-- Cleaned up C3P0PooledConnection a bit, got rid of no longer used | |
reflective code, modified to use new SQL interface filter classes. | |
-- Reorganized bean generation stuff to sit under com.mchange.v2.codegen | |
-- Added com.mchange.v2.sql.filter package, and code generation stuff so | |
that abstract filter classes that implement JDBC interfaces can be | |
easily regenerated from current versions. (This is preparation for | |
JDK 1.4.x build support.) | |
c3p0-0.8.4-test3 | |
-- Reorganized C3P0PooledConnection and C3P0PooledConnectionPool so that | |
PooledConnections only fire connectionErrorOccurred events on errors that | |
signal the Connection is invalid. (Previously we fired the event in all | |
cases, then tested the validity of the connection in the event handler.) | |
-- Fixed a bug where SQLExceptions that do not signal invalid Connections | |
(such as an exception on transaction commit under optimistic concurrency) | |
caused Connections to be closed, but still returned to the pool, leaving | |
the pool corrupt. [Thanks to Adrian Petru Dimulescu for discovering and | |
reporting this subtle problem!] | |
c3p0-0.8.4-test2 | |
-- Backed off a binary incompatible change to DataSources API. Users | |
interested in statistics about running DataSources will need to | |
cast the result of DataSources.pooledDataSource() to a | |
com.mchange.v2.c3p0.PooledDataSource object. Other users should | |
be able to use DataSources without recompilinbg libraries that | |
depend upon it. | |
-- Defined com.mchange.v2.c3p0.ComboPooledDataSource, a single, directly-instantiable | |
JavaBean-style DataSource backed by a c3p0 pool, which makes integration | |
with various app servers easier (e.g. works with Tomcat), and which may | |
provide a more straightforward API for users than DataSources and PoolConfig. | |
c3p0-0.8.4-test1 | |
-- Switched various classes from using RoundRobinAsynchronousRunner | |
to a new ThreadPoolAsynchronousRunner. | |
-- Defined PoolingDataSource interface, which permits clients to access | |
statistics about the state of underlying pools, and made C3P0 pool-backed | |
DataSources implement that interface. | |
-- fixed a subtle bug with respect to ownership of shared resources in which | |
finalize() methods for discarded DataSources could cause helper threads and | |
other resources to be cleaned up prematurely, while they are still in use | |
by other DataSources. | |
-- major reorganization of code generation for DataSources and the | |
resulting objects. | |
-- reorganization of Serializable and Referenceable code of DataSources | |
for JNDI Binding | |
-- made PoolConfig defaults (which are set by system properties, a | |
c3p0.properties file, or else hardcoded defaults) apply to DataSources | |
that are directly instantiated rather than created via the | |
com.mchange.v2.c3p0.DataSources factory class. | |
-- organized scattered stuff into a self-contained, distributable build | |
directly, and divided source and binary distributions | |
-- relicensed library; now available under LGPL. | |
-- THERE ARE SOME MAJOR REORGANIZATIONS IN THIS RELEASE. ANY HELP IN | |
TESTING AND FEEDBACK WOULD BE APPRECIATED! THANKS! | |
c3p0-0.8.3.1 | |
-- take greater care to abort if a helper thread wakes from wait() | |
inside of a broken resource pool | |
-- log more debug information if a pool unexpectedly breaks | |
c3p0-0.8.3 | |
-- resolved a deadlock arising from ConnectionEventSupport objects | |
calling event listener methods while holding the ConnectionEventSupport's | |
lock. (Thanks to an anonymous Sourceforge bug submitter for tracking this | |
down.) | |
-- added two configuration parameters to modify how c3p0 deals with | |
potentially unresolved transactions on transaction close -- | |
autoCommitOnClose and forceIgnoreUnresolvedTransactions. c3p0's | |
default behavior is as it always was (and as I think it nearly | |
always should be) -- by default we roll back any uncommitted work | |
on close. See PoolConfig class for complete documentation. | |
-- fixed stupid build error that made unzipping c3p0 archives messy | |
since c3p0-0.8.2. (SORRY!) | |
c3p0-0.8.3-pre-travis | |
-- fixed problem with c3p0 trying endlessly to connect to a database | |
that is down or not present. c3p0 now tries thirty time, once per | |
second, then gives up. if there's demand, I'll make the delay and | |
number of attempts user configurable. Thanks to Alfonso da Silva | |
for calling attention to this problem. | |
-- modified RoundRobinAsynchronousRunner to die more gracefully if, | |
somehow, one of its CarefulAsynchronousRunners somehow dies. Thanks to | |
Travis Reeder for calling attention to this issue. | |
-- modified ResourcePools to allow resources to be tested periodically | |
and asynchronously while they are idle in the pool. | |
-- added to a new configuration property to PoolConfig and related | |
classes, idleConnectionTestPeriod, which if set to a greater-than-zero | |
value will cause c3p0 to periodically test idle, pooled connection, | |
and remove them from the pool if they are broken. Thanks to | |
Travis Reeder for calling attention to this issue. | |
-- removed SQLState 08S01 from the set of SQL states presumed to mean | |
all connections in the pool have become invalid. Apparently MySQL | |
uses this SQLState to indicate the timing out of idle, individual | |
connections. Thanks to Travis Reeder for calling attention to this issue. | |
-- many (!) bug-fixes, small tweaks and improvements. | |
-- temporarily sprinkled some debugging output prefixed "c3p0-TRAVIS" to | |
try to resolve some issues for Travis Reeder | |
c3p0-0.8.2 | |
-- Addressed a rare problem that ocurred when application servers or | |
other external code calls interrupt() on c3p0 helper threads. Thanks | |
to Travis Reeder for reporting this issue! The endless cascade of | |
ArrayIndexOutOfBoundsException that would occasionallY result has | |
been fixed, and c3p0 helper threads now ignore interupts, | |
which should almost completely prevent such interrupts() | |
from leaving c3p0 pools in a corrupt state. [In the very, very | |
unlikely event that multiple, well-timed interrupts() cause | |
a pool to diagnose itself broken, c3p0 will start throwing clear | |
exceptions to indicate that -- there shouldn't be any deadlock or | |
any subtle kind of corruption.] | |
-- Deprecated PoolBackedDataSourceFactory and DriverManagerDataSourceFactory | |
in favor of the newer DataSources class. | |
-- Updated example code and documentation. | |
-- Moved constants from DataSources to PoolConfig where they belong! | |
c3p0-0.8.2-pre10 | |
-- Removed use of properties default mechanism in setting up JDBC | |
properties for DriverManagerDataSource, as some drivers use get() | |
rather than getProperties(), and the Properties.get() method ignores | |
defaults. [Thanks go to Michael Jakl <mj@int-x.org> for both finding | |
and fixing this problem!!!] | |
-- Fixed subtle problem whereby the introspective constructor of | |
C3P0PooledConnectionPoolManager would inadvertently check out an | |
extra pooled connection, by treating the getPooledConnection() as | |
a simple property read and invoking it. [Thanks go to Michael Jakl | |
<mj@int-x.org> for both finding and fixing this bug!!!] | |
c3p0-0.8.2-pre9 | |
-- Finished DataSources static factory for, um, DataSources. | |
-- Added PoolConfig class to encapsulate all configuration | |
information from factories | |
-- Set up PoolConfig to pay attention to (in order): | |
1) explicit, user-defined parameters | |
2) parameters defined as System properties | |
3) parameters defined in a Properties file resource, at | |
resource pasth /c3p0.properties in PoolConfig's classloader | |
4) Hardcoded defaults from the C3P0Defaults class | |
-- Defined a new pool configuration property, "testConnectionOnCheckout". | |
If set to true (it defaults to false), each pooled Connection will be | |
verified at checkout time, before being supplied to clients. THIS SLOWS | |
CONNECTION CHECKOUT DRAMATICALLY (by an order of magnitude on my machine), | |
but some folks may want it. The expensive, verified Connections are still | |
faster to acquire than brand new ones. | |
-- If a Connection experiences an SQLException with a defined SQL State of | |
08001, 08007, or 08S01, the entire database is considered to have been | |
shutdown, and the pool whose connection experienced the problem is reset | |
-- i.e. all existing Connections are discarded, and new Connections are | |
acquired for the pool. (Thanks! to Gavin King for suggesting the SQL State | |
approach to detecting disconnects.) | |
-- ConnectionTester interface and its default implementation were modified | |
to support reporting DATABASE_IS_INVALID (rather than simply testing a | |
disconnected, individual Connection). | |
c3p0-0.8.2-pre8 | |
-- Fixed some really stupid bugs from pre-7, in particular | |
the static factory methods of the DataSources class were | |
not declared static. Oops. | |
c3p0-0.8.2-pre7 | |
-- Major reorganization of data source implementations. These | |
are now generated from XML templates, because it was becoming | |
difficult to keep multiple versions of multiple types of | |
datasources in sync with one another | |
-- a new factory / utility class has been added, | |
com.mchange.v2.c3p0.DataSources. | |
Soon the older factories (DriverManagerDataSourceFactory and | |
PoolBackedDataSourceFactory) will be deprecated in favor of this. | |
-- Began adding support for wrapper DataSources that lazily bind to | |
an unpooled DataSource specified via JNDI. (Current wrappers require | |
an actual instance, not a mere reference in order to construct a | |
PoolBacked or ConnectionPoolDataSource). | |
c3p0-0.8.2-pre6 | |
-- Fixed bug that led to ConcurrentModificationException | |
when Connection.close() iterates through and closes | |
its unclosed Statements. | |
-- Fixed bug that caused uncached Statements to sometimes | |
be closed twice, as they were not properly removed from | |
the set of Connection-associated statements on user- | |
initiated Statement.close(), and would thus be closed | |
again on Connection.close(). | |
-- Reorganized classes to clean up top-level com.mchange.v2.c3p0 | |
package. The gory innards of c3p0 now live in an impl package. | |
-- Reorganized DataSources so that there are "Base" versions suitable | |
for DBMS-specific subclassing. | |
c3p0-0.8.2-pre5 | |
-- DataSources looked up by JNDI now "coalesce" -- i.e., if | |
two separate calls look-up the same JNDI bound DataSource, | |
they will both see the same DataSource instance in the local | |
VM. This is especially important for PoolBackedDataSources, as they | |
own "helper threads" that help to manage the pool. Now each | |
logical DataSource shares the same pool of helper threads, | |
regardless of whether it is looked up once and cached, or | |
looked up multiple times and at multiple places by an application. | |
-- Number of helper-threads managing a PoolBackedDataSource is now | |
user-configurable | |
c3p0-0.8.2-pre4 | |
-- Fixed BAD memory leak -- cachedStatements were being retained | |
on close. This brings a performance improvement to | |
the StatementCache as well. | |
-- Set-up StatementCacheKey to coalesce, such that its equals | |
method can look like {return (this == o);}. Unfortunately, I | |
did not see the kind of performance increase I'd anticipated | |
from this... in fact, whatever performance changes I did see were | |
pretty negligable. Performed some other, mostly useless, optimizations | |
to the process of acquiring StatementCacheKeys. (I can't decide... | |
I've got 3 usuable, broadly similar versions of StatementCacheKey now.) | |
-- Fixed bugs having to do with when to create and the daemon status | |
of Timers | |
-- Appropriately synchronized access to PoolBackedDataSource. (This | |
should permit me to pull back on synchronization / marking of | |
volatile in some dependent classes, as access to these is now | |
controlled via PoolBackedDataSource.) | |
-- Made instantion of C3P0PooledConnectionPoolManager | |
by WrapperPoolBackedDataSource "lazy", so that Timer / Async task | |
threads are only started up when a Connection is actually requested | |
from a DataSource. This is useful especially for the instance residing | |
in the JNDI server VM, whose purpose is likely only to serve as an | |
instance to be looked up over the network. There's no reason why | |
it should keep several stalled Threads open. | |
-- Fixed DefaultConnectionTester, whose logic was bass-ackwards. | |
c3p0-0.8.2-pre3 | |
-- Factory method for StatementCacheKeys now "coalesce" equivalent | |
instances to conserve memory and to enable a fast (this == o) test | |
to usually work in equals methods. [Value test remains for when | |
identity test fails... maybe later I'll be more comfortable with a | |
1 instance per value guarantee, and remove the rest of the test. | |
As the constructor is private, the factory method coalesces, and the | |
class is not Serializable, an identity test should suffice. But | |
I'm paranoid.] | |
-- All asynchronous tasks are now distributed to 3 helper threads per | |
DataSource rather than queuing on just one. (Culing of expired | |
Connections is still managed by a single java.util.Timer... I don't | |
think this will be a problem.) | |
c3p0-0.8.2-pre2 | |
-- Total rewite of Statement cache! | |