Fork me on GitHub

HA-JDBC Changes

Release History

Version Date Description
3.0.3 2014-07-25  
3.0.2 2014-04-07  
3.0.1 2014-04-03  
3.0.0 2013-12-30  
3.0.0-rc-1 2013-11-06  
2.1.0-beta-4 2013-08-11  
2.1.0-beta-3 2012-12-09  
2.1.0-beta-2 2012-10-27  
2.1.0-beta-1 2012-10-11  
2.0.16 Pending  
2.0.16-rc-1 2009-06-21  
2.0.15 2009-02-17  
2.0.14 2009-02-15  
2.0.14-rc-1 2009-01-25  
2.0.13 2008-05-20  
2.0.12 2008-03-18  
2.0.11 2008-01-14  
2.0.10 2008-01-08  
2.0.9 2007-12-28  
2.0.8 2007-11-19  
2.0.7 2007-11-09  
2.0.6 2007-10-17  
2.0.5 2007-10-15  
2.0.4 2007-10-04  
2.0.3 2007-09-24  
2.0.2 2007-09-14  
2.0.1 2007-07-23  
2.0.0 2007-07-16  
2.0-rc-4 2007-07-07  
2.0-rc-3 2007-07-02  
2.0-rc-2 2007-06-25  
2.0-rc-1 2007-06-18  
2.0-beta-1 2007-04-23  
1.2-beta-7 2006-12-01  
1.2-beta-6 2006-10-24  
1.2-beta-5 2006-09-22  
1.2-beta-4 2006-09-11  
1.2-beta-3 2006-08-26  
1.2-beta-2 2006-08-10  
1.2-beta-1 2006-07-19  
1.1 2006-04-21  
1.1-rc-2 2006-04-18  
1.1-rc-1 2006-04-09  
1.1-beta-7 2006-03-20  
1.1-beta-6 2006-02-15  
1.1-beta-5 2006-02-13  
1.1-beta-4 2006-02-10  
1.1-beta-3 2006-01-27  
1.1-beta-2 2006-01-23  
1.1-beta-1 2005-12-13  
1.0 2005-09-22  
1.0-rc-5 2005-09-15  
1.0-rc-4 2005-09-06  
1.0-rc-3 2005-08-23  
1.0-rc-2 2005-08-21  
1.0-rc-1 2005-08-02  
1.0-beta-8 2005-04-27  
1.0-beta-7 2005-04-05  
1.0-beta-6 2005-03-31  
1.0-beta-5 2005-03-03  
1.0-beta-4 2005-02-18  
1.0-beta-3 2005-02-07  
1.0-beta-2 2005-01-08  
1.0-beta-1 2004-10-01  
1.0-alpha-3 2004-08-30  
1.0-alpha-2 2004-07-17  
1.0-alpha-1 2004-07-14  

Release 3.0.3 - 2014-07-25

Type Changes By
fix Avoid use of PreparedStatement.addBatch(String) in SQLStateManager since not all dialects support it. Thanks to Justin Cranford.
add Add ability to override the default logical address of the JGroups channel. pferraro
fix Fix alter sequence SQL for Oracle dialect. pferraro
fix Fix NPE when previous coordinator is restarted. Refactor command dispatcher logic using channel that does not discard its own messages. pferraro
fix Fix MySQL restore process - replace file pipe with writing file directly to the process output. pferraro
fix Ensure ProcessBuilder.environment() uses privileged action. pferraro
fix Use INVOKE_ON_ANY strategy for Connection.getTransactionIsolation() - most drivers don't require a round trip to the database for this. pferraro
fix Fix bug in DistributedStateManager where our local state is never persisted during activation/deactivation. pferraro
add Add support for data-only dump-restore. pferraro
fix Don't deactivate local databases on stop until we can distinguish between embedded databases and local databases using separate processes. pferraro
fix Ensure that we rollback any current transactions to release any locks before closing the connections to an inactive database. This is necessary if the connection is pooled. pferraro
fix Fix alter sequence SQL for Oracle dialect. pferraro

Release 3.0.2 - 2014-04-07

Type Changes By
fix Fix NoClassDefFoundError in SLF4J and Commons logging providers when the requisite classes are not available. pferraro

Release 3.0.1 - 2014-04-03

Type Changes By
update Upgrade JGroups to 3.4.3.Final pferraro
update Refactor DumpRestoreSupport to support dialects that do not require external process execution. pferraro
fix Ensure Database.setActive(...) is set correctly during startup. pferraro
fix Fixes issue where DataSource is created multiple times, which is very bad if the DataSource encapsulates a connection pool. pferraro
fix Fix table introspection in Oracle dialect to use user name as schema. pferraro
fix Fix failure detection logic in H2 and HSQLDB dialects. pferraro
fix Fix dump/restore in MySQL dialect to use -r option. pferraro
fix Improve resiliency of invocation strategies to concurrent database deactivation. pferraro
fix Distributable state manager needs to delegate to local state manager on activate/deactivate. pferraro
fix Fix issue where HA-JDBC proxies can retain stale references to objects from a deactivated database if that database is reactivated before being accessed. pferraro

Release 3.0.0 - 2013-12-30

Type Changes By
update Update default jgroups configuration. pferraro

Release 3.0.0-rc-1 - 2013-11-06

Type Changes By
update Re-versioned to 3.0. The scope of changes since 2.0.x justifies a major release bump. pferraro
update Add option to drop PostgreSQL database object before restoring. Thanks to sjones4.
fix Fix input channel registration. Thanks to sjones4.
fix Fixed UnsupportedOperationException when using dump-restore sync strategy due to incorrect regex parsing of jdbc url. pferraro
fix Allow runtime change to weight for active databases. Thanks to sjones4.
update Upgrade JGroups to 3.4.0.Final. pferraro

Release 2.1.0-beta-4 - 2013-08-11

Type Changes By
update Upgrade JGroups to 3.3.x. pferraro
fix Optimize SynchronousExecutor.invokeAll(...) and make sure reverse mode doesn't execute first task until all other tasks are complete. pferraro
fix Make DatabaseCluster references within HA-JDBC driver static. Fixes integration with Tomcat connection pooling. pferraro
fix Deactivate all local active databases upon DatabaseCluster.stop(). pferraro
fix If DatabaseCluster fails to start, stop it before clearing its reference from the Registry. pferraro
fix Add Dialect.isValid(Connection) to allow workaround for dialects that do not implement Connection.isValid(int). pferraro
fix Don't create a proxy for null results, e.g. ResultSet.getClob(...). pferraro
fix Use a new TreeMap to store results, not an immutable singleton map. pferraro
fix Fixed parsing bug in Driver.getMajorVersion()/getMinorVersion() that prevented deployment on JBoss AS7. pferraro
fix Allow DataSource Reference to define config using URI (not just serialized form). pferraro
fix Add support for Blob.setBinaryStream(long), Clob.setAsciiStream(long) and Clob.setCharacterStream(long) via OutputStream and Writer, respectively. pferraro
add Add "input-sink" configuration property to control whether InputStream and Reader-based update methods will use a file or in-memory sink. pferraro
fix When loading service providers, skip providers with missing dependencies. This way optional dependencies are truly optional. pferraro
fix REPEATABLE_READ queries should execute against primary database only. pferraro
fix Avoid classpath scan per exception, due to use of ServiceLoader to resolve exception types. Thanks to sjones4.
fix Fix improper unlock logic in LocalTransactionContext which could preventing database activation. Thanks to sjones4.
fix Correct reserved identifier logic to only include SQL:2003 reserved words by default. Add explicit reserved identifier overrides for PostgreSQL and MySQL. pferraro

Release 2.1.0-beta-3 - 2012-12-09

Type Changes By
update Switch default durability from "fine" to "coarse". pferraro
fix Restore ability to add new databases to the cluster at runtime via JMX. pferraro
fix Ensure event source field is not lost during serialization. pferraro
fix Fix configuration file location on windows when file path contains spaces. Thanks to eskorzeny.
update Add debug logging if Connection.isValid(...) throws an exception. Otherwise, it is difficult to debug connectivity issues when connection pooling is used. pferraro
add Complete BerkeleyDB state manager implementation. Fixes 2. pferraro
fix Always flush the output stream during state transfer. Thanks to eskorzeny.
fix Fix class name of JGroupsCommandDispatcherFactory within META-INF/services/net.sf.hajdbc.distributed.CommandDispatcherFactory. Thanks to eskorzeny.
update Rename SimpleStateManagerFactory from "memory" to "simple". Thanks to eskorzeny.
update Upgrade JGroups to 3.2.4.Final. pferraro
fix XML parser should fail if dialect/durability/balancer/meta-data-cache was not found. pferraro
fix Fix formatting of JBoss Logging messages. pferraro
fix Auto-activation and auto-deactivation only need to be triggered on the group coordinator. Fixes 5. pferraro
update Drop obsolete Dialect.getSimpleSQL(). pferraro

Release 2.1.0-beta-2 - 2012-10-27

Type Changes By
add Complete SQLite state manager implementation. Fixes 3. pferraro
update Relocate default location of SQL state manager databases to $HOME/.ha-jdbc pferraro
fix Fix xml parsing of pooling configuration for state managers. pferraro
fix Fix recovery query logic in SQL state manager. pferraro
fix Fix NPE in MulitplexingDecoderFactory if password is null. pferraro
fix Fix dialect detection in SQL state manager. pferraro
fix Drop deprecated properties from default jgroups configuration. pferraro
fix Fix HSQLDB Dialect.getDefaultSchemas() to return "PUBLIC". pferraro
fix Database meta data cache should store table/schema names quoted, if necessary. pferraro
update Allow override of identifier normalization by refactoring DatabaseMetaDataSupport into Dialect interface. pferraro
update Upgrade Mockito to version 1.9.5. pferraro
update Upgrade JGroups to version 3.2.0.Final. pferraro

Release 2.1.0-beta-1 - 2012-10-11

Type Changes By
update Migrate source code repository to github. pferraro
update Update Java runtime requirement to 1.6. pferraro
update Update Java compile requirement to 1.7 (for JDBC 4.1 support). pferraro
update Migrate build from Ant to Maven. pferraro
update Migrate site generation from Forrest to Maven site plugin. pferraro
update Replace JiBX with JAXB for configuration file reading/writing. Configuration schema is now auto-generated from annotations during build. XML parsing will validate against the schema. pferraro
update Redesign HA-JDBC startup, adding support for programmatic configuration. pferraro
update Store references to database clusters within Driver or DataSource object, rather than in the mbean server. pferraro
update Replace mbean interfaces with dynamic mbeans created from annotations. pferraro
update Replace java.util.prefs-based state manager with a jdbc-based or in-memory implementation. Add alternative implementations for sqlite (via sqljet) and berkeleydb. pferraro
add Add generic pooling mechanism for use by state managers. pferraro
add Add ability to obfuscate passwords stored in HA-JDBC configuration file. Supported mechanisms: plain text, hex encoding, base-64 encoding, symmetric encryption. pferraro
update Add support for version (e.g. last update timestamp) columns to differential sync strategy. This improves the general performance of change detection from O(N*M) -> O(N), where N is number of rows, and M is number of columns. pferraro
update Changed failure detection handling to always prefer response from the designated primary database (instead of always preferring successful responses). Apply the same logic to resolve jdbc method result conflicts. pferraro
update Add durability support to detect and recover from node crashes during commit, enabled by default. pferraro
update Improve reliability of distributed lock manager by locking coordinator first, then broadcasting lock acquisition event to other members. pferraro
update Use exception introspection to determine whether a not a given failure is catastrophic, replacing separate simple query. pferraro
add Add per-database eager and lazy meta data cache implementations - useful for schemas with auto-generated constraint names. Options for meta-data-cache="eager|shared-eager|lazy|shared-lazy|none". pferraro
add Create logging facade to support parameterized log messages to avoid string evaluation if message won't be logged. Prefer jboss-logging provider, fall back to slf4j, commons-logging, then to jdk logging. This removes any explicit runtime dependency on a particular logging framework. pferraro
update Reverse invocation order of commit/rollback using serial transaction mode. The first database to acquire a row lock should be the last to commit. pferraro
update Replace deprecated JGroups channel multiplexer with shared transport. pferraro
update Configuration file now specifies synchronization strategies, state manager provider, and distributable capabilities provider via identifiers instead of class names. Uses service loader mechanism for extensibility. pferraro
update Modify configuration of balancer, dialect, durability, password codecs, and meta-data cache to use service loader mechanism for extensibility. pferraro
update Copy CronExpression from Quartz code base instead of pulling in entire artifact. HA-JDBC no longer has any required dependencies. pferraro
add Support system property expansion in configuration file, via ${property} notation. pferraro

Release 2.0.16 - Pending

Type Changes By
fix Fix unintentional configuration export during initial startup for datasource, pool-datasource, and xa-datasource configs. pferraro
fix In DatabaseMetaDataSupportImpl.quote(...), use case-insensitive comparison when determining if identifier is a keyword. pferraro
fix Using non-zero fetchSize in full and differential sync strategies requires auto-commit off in PostgreSQL. Fixes 2850077. pferraro
fix Connection.setAutoCommit(...) should use a end-transaction invocation strategy, yet still be recordable. pferraro
update Upgrade JGroups to 2.6.12. pferraro
fix If first database activation fails during auto-activate, just log failure and continue with next failed database. pferraro

Release 2.0.16-rc-1 - 2009-06-21

Type Changes By
fix Fixed NullPointerException in PreparedStatement.set/ResultSet.update stream/reader/blob/clob methods, if called with null value. Fixes 2684746. pferraro
fix Only consider hashed unique indexes when finding unique constraints. Fixes 2688439. pferraro
fix Ensure unique constraint columns are quoted, if necessary. pferraro
fix Fix memory leak caused by batch method recording when using PreparedStatement pooling. Fixes 2728324. pferraro
fix Optimize recording of ResultSet navigation and update methods. pferraro
fix Fix recording of CallableStatement.registerOutParameter(...) methods. pferraro
fix Fix differential sync strategy breakage when a table contains only primary key columns. Fixes 2688421. pferraro
fix Determine column meta data from ResultSetMetaData instead of DatabaseMetaData.getColumns(...). This avoids the need for dialect specific IDENTITY column detection logic. Fixes 2770743. Thanks to Karl Moore. pferraro
fix Fixed StandardDialect.getIdentifierPattern(DatabaseMetaData) to require that identifiers begin with a letter. pferraro
update Upgraded JGroups to 2.6.10. pferraro
update Upgraded JiBX to 1.2.1. pferraro
update Upgraded Quartz to 1.6.5. pferraro
update Upgraded SLF4J to 1.5.7. pferraro
update Upgraded EasyMock to 2.5.1. pferraro
update Upgraded TestNG to 5.9. pferraro

Release 2.0.15 - 2009-02-17

Type Changes By
fix Fixed infinite loop regression in DistributableLockManager$DistributableLock.tryLock(long, TimeUnit) pferraro
fix Fixed ExceptionInInitializerError regression when creating HA-JDBC connections in Java 1.4/1.5. pferraro

Release 2.0.14 - 2009-02-15

Type Changes By
fix Fixed parsing of local attribute of database, datasource, etc. pferraro

Release 2.0.14-rc-1 - 2009-01-25

Type Changes By
update Upgraded JiBX to 1.1.6a. pferraro
update Upgraded SLF4J to 1.5.6. pferraro
update Upgraded Retrotranslator to 1.2.8. pferraro
update Upgraded JGroups to 2.6.7. pferraro
update Upgraded Quartz to 1.6.4. pferraro
update Upgraded EasyMock to 2.4. pferraro
fix Remove file list items during FileSupport.close() - rather than wait for finalization. Fixes 2004105. pferraro
fix FileSupport is no longer used for large object support and is now created/destroyed per statement, rather than per connection. This helps mitigate temp file build-up. Fixes 2004105. pferraro
fix Removed references to javax.sql.CommonDataSource - this broke binary compatibility with Java 1.4/1.5 for datasource configurations. pferraro
fix Fixed java 1.4 binary incompatibility with Boolean (does not yet implement Comparable) not handled by Retrotranslator. pferraro
fix Restore autoCommit mode to its original value at the end of synchronize(...) in each strategy. Thanks to Ben Short. pferraro
fix Fixed regression in lazy/none meta-data-cache that broke synchronization. pferraro
fix Fixed misleading Spanish, French, Italian, and Portuguese translation of config-not-found message. pferraro
fix Store child proxies using weak references to fix potential memory leak if proxy is not closed. pferraro
fix Remote locks in DistributableLockManager now respect lock fairness. pferraro
add Startup will now also consult ha-jdbc.{0}.configuration system property when searching for configuration file. pferraro
add Add HA proxying of DatabaseMetaData interface. pferraro
add Added net.sf.hajdbc.util.servlet.DatabaseClusterShutdownContextListener to automatically shutdown a list of database clusters scoped to a servlet context. The clusters to shutdown are defined in a comma delimited init parameter: ha-jdbc.clusters Fixes 2103533. pferraro

Release 2.0.13 - 2008-05-20

Type Changes By
fix Fixed SybaseDialect.getSimpleSQL() to query for GETDATE(). Thanks to Jason Rosenberg. pferraro
add Added event handler support for activation, deactivation, and synchronization events. Clients can opt to be notified of such events by registering themselves as handlers using the appropriate methods on the database cluster mbean. pferraro
fix Fixed close() methods of Connection, Statement, and ResultSet proxies to use driver (instead of database) write invocation strategy to prevent unnecessary creation of SQL objects (potentially triggering query execution) just to be closed. pferraro
fix Fixed exception handling in FullSynchronizationStrategy. Exceptions wrapped as SQLException were not getting re-thrown. Thanks to Maris Orbidans. pferraro
fix Fixed logic in DatabaseMetaDataSupport.quote(String) to properly deal with identifier case. pferraro
fix Fixed synchronization to allow schemas with auto-generated constraint names (i.e. constraint names are not uniform in all databases) to function properly when meta-data-cache="none". pferraro
fix Fixed bug where statements created from read-only connections were not getting properly load balanced. pferraro
add Added explicit, Referenceable DataSource, ConnectionPoolDataSource, and XADataSource proxy implementations. The <name> element of a <datasource>, <pool-datasource>, or <xa-datasource> configuration can define a data source implementation class name. If the <name> element is a class name, then the subsequent <property name="..."> elements will be interpreted as property values of the data source (e.g. serverName, portNumber, databaseName). pferraro
fix Added missing definitions for <pool-datasource> and <xa-datasource> to DTD and XSD. pferraro
fix Calls to PreparedStatement.addBatch() were not being recorded and, consequently, not getting replayed when a new database is activated. pferraro
fix Fixed AcquireLockDecree to use write locks, instead of a read locks, so that database activation will block transactions on remote nodes. Fixes 1964456. pferraro
update Upgraded TestNG to 2.8. pferraro

Release 2.0.12 - 2008-03-18

Type Changes By
fix Fixed case normalization in DatabaseMetaDataSupport.normalize(String, String). pferraro
fix Fixed NullPointerException using CallableStatement stream methods. pferraro
update Optimized Balancer implementations using copy-on-write concurrent collections. pferraro
fix Eliminated some unnecessary runtime reflection. pferraro
fix Fixed potential deadlock when synchronization is triggered while there are open transactions. Refactored statement read locking to lock and unlock at transaction boundaries. Removed obsoleted table locking in synchronization strategies. pferraro
add Added ConnectionPoolDataSource and XADataSource proxies, the latter required to detect distributed transaction boundaries. Added necessary <xa-datasource> and <pool-datasource> configuration file elements. pferraro
update Renamed net.sf.hajdbc.sql.DataSource to net.sf.hajdbc.DataSourceFactory. This should hopefully eliminate some confusion about its usage, as it is a javax.naming.spi.ObjectFactory and not a java.sql.DataSource implementation. pferraro
fix Fixed Spanish translation of log messages. Thanks to Alejandro Domenech. pferraro
update Added linked source to javadoc. pferraro
update Upgraded Retrotranslator to 1.2.6. pferraro
update Upgraded JGroups to 2.6.2. pferraro
update Upgraded SLF4J to 1.5.0. pferraro

Release 2.0.11 - 2008-01-14

Type Changes By
fix Replaced accidental use of Method.getTypeParameters() with intended Method.getParameterTypes() in AbstractInvocationHandler. This fixes bug where state changing methods were not recorded properly and subsequently not replayed correctly on newly activated databases. pferraro

Release 2.0.10 - 2008-01-08

Type Changes By
fix Fixed CronThreadPoolExecutor to work around potential inaccuracies in java.util.Date that could cause a task to be scheduled multiple times in a single cron interval. pferraro
fix Connection.setReadOnly() should use DatabaseWriteInvocationStrategy instead of DriverWriteInvocationStrategy. pferraro
update Refactored invoker recording to support any JDBC method regardless of InvocationStrategy implementation. pferraro
fix Fixed replay of PreparedStatement and CallableStatement set*() methods for a newly activated database. pferraro
update Cleanup logic in DatabaseWriteInvocationStrategy by splitting into TransactionalDatabaseWriteInvocationStrategy and NonTransactionalDatabaseWriteInvocationStrategy. pferraro
fix Rollback TestNG to 5.6. Version 5.7 mysteriously skipped test methods. pferraro
fix CallableStatement does not need to parse out sequences nor identity columns, nor detect SELECT...FOR UPDATE in SQL. pferraro
fix Fixed broken test cases. pferraro

Release 2.0.9 - 2007-12-28

Type Changes By
fix In DatabaseWriteInvocationStrategy, acquire read locks before Balancer.all() so that a newly activated database will not miss any pending write statements. pferraro
update Upgraded JGroups to 2.6.1. pferraro

Release 2.0.8 - 2007-11-19

Type Changes By
fix Fixed infinite loop in CronThreadPoolExecutor when scheduled task throws an ExecutionException. Fixes 1832392. Thanks to gamani. pferraro
update Upgraded JGroups to 2.6.0. pferraro

Release 2.0.7 - 2007-11-09

Type Changes By
update Added local="true|false" attribute to database/datasource. Cluster panic detection now consults this flag instead of weight to determine whether a database is local or remote. pferraro
update LocalLockManager now uses a custom semaphore-based ReadWriteLock implementation instead of ReentrantReadWriteLock. Removed obsolete DistributableLockAdapter hack. pferraro
update Optimized DistributableLockManager using RpcDispatcher instead VotingAdapter. pferraro
fix Fixed deadlocking in DistributableLockManager when simultaneous voting occurs for he same resource from different peers. pferraro
update Upgraded Retrotranslator to 1.2.3. pferraro
update Upgraded TestNG to 5.7. pferraro

Release 2.0.6 - 2007-10-17

Type Changes By
fix Fixed exception handling during startup to prevent subsequent if database cluster fails to start. pferraro
fix Fixed potential deadlocking sources and improved cpu friendliness of DistributableLockManger. Fixes 1814865. pferraro

Release 2.0.5 - 2007-10-15

Type Changes By
fix Fixed bug in Dialect.getAlterSequenceSQL(...) and Dialect.getAlterIdentityColumnSQL(...) causing values > 999 to get formatted with grouping separators. Fixes 1811698. pferraro
fix Added "cluster panic" detection to prevent asymmetric database deactivation during a network fragmentation when in distributable mode where databases are colocated on peer nodes. If HA-JDBC detects a cluster panic, the cluster is stopped. Manual intervention is required to resolve any consequent synchronization problems and to start the cluster. Fixes 1738533. pferraro
remove Removed obsolete JBoss jmx-console FAQ entry. pferraro

Release 2.0.4 - 2007-10-04

Type Changes By
fix Added look-ahead and to Dialect.evaluateCurrentTime() regular expression so that it does not match CURRENT_TIMESTAMP functions. pferraro
fix Fixed NullPointerException regression in DistributableLockManager preventing database activation in distributable mode. pferraro
update Use new official JDK 1.4 backport of JGroups instead of retrotranslating our own. pferraro

Release 2.0.3 - 2007-09-24

Type Changes By
update Upgraded JGroups to 2.5.1. pferraro
fix Fixed infinite loop in DistributableLockManager while acquiring a lock when only one peer node is present. Fixes 1799618. pferraro
fix Fixed missing membership listener registration in DistributableLockManager preventing proper lock cleanup. pferraro
fix Defer creation of connection factories until needed since DataSource creation relies on JNDI environment properties that may not yet be established. Fixes 1796975. pferraro

Release 2.0.2 - 2007-09-14

Type Changes By
fix Added Dialect.getIdentifierPattern(...) method to work around buggy DatabaseMetaData.getExtraNameCharacters() in PostgreSQL driver since version 8.1. Bug causes unexpected failures during identity column detection when schema or table name contains non-standard characters. pferraro
update Optimized StandardDialect.getDefaultSchemas() by replacing separate CURRENT_USER query with DatabaseMetaData.getUserName(). pferraro
fix Fixed example Tomcat DataSource configuration. pferraro
fix Fixed currentTimestampFunction() method of MaxDBDialect. pferraro
add Created separate OracleDialect, formerly an alias of MaxDBDialect. pferraro
add Created separate H2Dialect, formerly an alias of HSQLDBDialect. pferraro
add Added new dialect for Sybase. pferraro
add Added evaluateCurrentDate(String, java.sql.Date), evaluateCurrentTime(String, java.sql.Time), evaluateCurrentTimestamp(String, java.sql.Timestamp), and evaluateRandom(String) to Dialect interface to replace non-deterministic SQL functions (e.g. CURRENT_TIMESTAMP, RAND()) with deterministic static values. Added optional eval-current-date, eval-current-time, eval-current-timestamp, and eval-rand cluster attribute to enable these behaviors. pferraro
update Both sequence and identity column detection are no longer enabled by default. pferraro
remove Removed supportsSequences() and supportsIdentityColumns() methods from Dialect interface. The corresponding parseSequence(String) and parseInsertTable(String) methods now return null for dialects that do not support these features. pferraro
fix Fixed race condition in DistributableLockAdapter that may prevent a lock from being released. pferraro
update Upgraded SLF4J to 1.4.3. pferraro
add Added SynchronizationSupport.synchronizeIdentityColumns(...). Consequently, MySQL AUTO_INCREMENT columns are now fully supported. pferraro
add Added DatabaseProperties.getSequences() and TableProperties.getIdentityColumns() to meta data cache facility. pferraro

Release 2.0.1 - 2007-07-23

Type Changes By
fix LazyDatabaseMetaDataCache now caches DatabaseProperties using a SoftReference to prevent the cache from causing OutOfMemoryErrors. pferraro
fix Refactored ThreadLocalDatabaseMetaDataCache to NullDatabaseMetaDataCache which no long stores its DatabaseProperties instance in a ThreadLocal since this can inadvertently act like a lazy cache if application threads are pooled. Replaced SynchronizationContext.getDatabaseMetaDataCache() with SynchronizationContext.getDatabaseProperties() so that meta data used during synchronization is still cached for the lifetime of the SynchronizationContext, regardless of cache implementation. pferraro
update Re-implemented BalancerFactory, DialectFactory, and DatabaseMetaDataCacheFactory using enums. pferraro
fix In DatabaseMetaDataSupport.normalize(...), adjust case of table to match the way identifiers are stored in the database. pferraro
fix In DatabaseMetaDataSupport.quote(...), normalize identifiers to lower case if database is case-insensitive, yet stores identifiers in mixed case. pferraro
update Fixed all benign compiler warnings reported by Eclipse. pferraro
update Migrated simple string constants to Strings. pferraro

Release 2.0.0 - 2007-07-16

Type Changes By
update Optimized failure handling in DatabaseWriteInvocationStrategy. pferraro
update Optimized thread synchronization in DistributableLockAdapter. pferraro
update Upgraded EasyMock to 2.3. pferraro
update Upgraded SLF4J to 1.4.2. pferraro
update Upgraded JGroups to 2.5 GA. pferraro
update Revised documentation. pferraro

Release 2.0-rc-4 - 2007-07-07

Type Changes By
update In distributable mode, try to retrieve initial state from any remote node, not just "coordinator". pferraro
fix Fixed deadlocking during activation/deactivation in distributable mode caused by redundant secondary notifications. pferraro
update In distributable mode, do not send activation notifications to other nodes during cluster startup. pferraro
fix In distributable mode, do not respond to initial state queries until cluster startup is complete. pferraro
update Upgraded SLF4J to 1.4.1. pferraro

Release 2.0-rc-3 - 2007-07-02

Type Changes By
update FailureDetectionTask and SQLProxy.handleFailure() will not deactivate any databases if they all appear to be dead. pferraro
update Convert dynamic Class.cast() and Class.isInstance() to static cast and instanceof expressions wherever possible. pferraro
fix Fixed bug during initialization where databases are added as dirty, triggering export of configuration file. pferraro
fix When adding a database to the cluster, perform duplicate id check before registering database to avoid InstanceAlreadyExistsException. pferraro
fix Fixed broken error message when attempting to remove a database that is still active. pferraro

Release 2.0-rc-2 - 2007-06-25

Type Changes By
fix Added toString() to DatabaseClusterMBean interface so that log messages will display cluster id properly. pferraro
fix Fixed IllegalAccessError in JiBX marshalling during configuration export.n Thanks to David White. pferraro
remove Removed Retrotranslator plugin for This is now natively supported by Retrotranslator. pferraro
update Upgraded Retrotranslator to 1.2.2. pferraro

Release 2.0-rc-1 - 2007-06-18

Type Changes By
fix Fixed memory leak with CONCUR_READ_ONLY result sets when using ResultSet.getStatement().close(). pferraro
update Removed problematic singleton references to database clusters in DatabaseClusterFactory. pferraro
update Require separate XML config file per database cluster. pferraro
update Consolidated database-cluster and datasource cluster elements into single cluster element, as in 1.1. Removed id attribute from cluster element. pferraro
update Modified configuration locator logic to first check driver connection properties or datasource config property for resource URL. Default resource name is now ha-jdbc-{0}.xml, where {0} is the cluster id. pferraro
fix Added test for UnsupportedOperationException thrown when Quartz cron expression uses both day-of-week and day-of-month values. Thanks to Hanson Char. pferraro
fix If a group member leaves, any distributed locks it held must be freed. pferraro
update DistributableLockManager uses default vote response processor instead of its own implementation. pferraro
remove Removed quoting of cluster ID and database ID in mbean ObjectName. JBoss users no longer need to patiently wait for this long standing jmx-console bug ( to be fixed. pferraro
fix Fixed NoSuchElementException thrown during database activation when there are no active databases. pferraro
fix Fixed IllegalMonitorStateExceptions in DistributableLockManager resulting from improper use of reentrant locks by multiple threads. pferraro
update Optimized DistributableLockManager using a single phase VotingAdapter. pferraro
fix Re-implemented DistributableStateManager to use synchronous MessageDispatcher instead of asynchronous NotificationBus. This will ensure that all nodes are notified of database activation prior to unlocking database tables during synchronization. Changed default jgroups protocol stack to "udp-sync". pferraro
update Do not auto-deactivate the last database of a cluster. pferraro
fix JGroups 2.5 uses Java 1.5 as a baseline, so retrotranslate this jar as part of 1.4 build. pferraro
update Modified build to produce 3 different binary distributions, for Java 1.4, 1.5, and 1.6. pferraro
update Upgraded SLF4J to 1.4.0. pferraro
update Upgraded JiBX to 1.1.5. pferraro
update Upgraded JGroups to 2.5.0-cr1. pferraro
update Upgraded TestNG to 5.6. pferraro

Release 2.0-beta-1 - 2007-04-23

Type Changes By
fix Optimized PostgreSQLDialect.getLockTableSQL() by removing unnecessary select statement. Thanks to David Goodenough. pferraro
fix Removed JVM shutdown hook since it may prevent proper shutdown of a server-managed connection pool. pferraro
fix Fixed NullPointerException accessing meta data if database does not support schemas. Fixes 1618746. pferraro
update Refactored Balancer.list() to return a set to better reflect balancer semantics. pferraro
update Refactored DatabaseClusterMBean interface into DriverDatabaseClusterMBean and DataSourceDatabaseClusterMBean. LocalDatabaseCluster refactored into generic AbstractDatabaseCluster. Replaced <cluster> element in DTD with <database-cluster> and <datasource-cluster>. pferraro
update Created StateManager to encapsulate management of database cluster state. pferraro
update Distributable functionality no longer added via inheritance, but through lock manager and state manager implementations. pferraro
add Created schema definition of HA-JDBC configuration as an alternative to DTD. pferraro
update Reimplemented core logic to use dynamic instead of explicit proxies, decoupling HA-JDBC from a specific version of the JDBC API. Resulting jar is approximately half the size as before. pferraro
update Refactored SynchronousExecutor implementation to extend AbstractExecutorService since the ExecutorService interface in Java 1.6 is not compatible with that of 1.5. pferraro
update Java 1.6 adds auto-increment column identification to DatabaseMetaData.getColumns(). Added isAutoIncrement() to ColumnProperties interface populated only if this information exists. This value is now be consulted prior to querying the dialect to identify identity columns. pferraro
fix Fixed regular expressions in dialects to properly negotiate whitespace. pferraro
add Added support for JDBC 4.0 (i.e. Java 1.6). pferraro
add Added support for mutable LOBs. pferraro
add Added Java 1.6 service provider hook for HA-JDBC driver. pferraro
add Added max batch size property to differential synchronization strategy to help prevent out of memory errors when a table contains many changes. pferraro
update Use platform mbean server for cluster/database mbean registration. Provide retrotranslator plugin for that uses old logic to locate mbean server. pferraro
fix Forced cleanup of open java.sql objects that were not accessed during an deactivate/reactivate cycle. pferraro
fix Fixed german message transations. Thanks to Kurt Huwig. pferraro
update Upgraded JiBX to 1.1.3. pferraro
update Upgraded JGroups to 2.5.0-beta-2. concurrent-*.jar is now obsolete. pferraro
update Upgraded SLF4J to 1.3.1. pferraro
update Upgraded Retrotranslator to 1.2.1. pferraro
update Upgraded Woodstox to 3.2.1. pferraro
update Upgraded TestNG to 5.5. pferraro
add Added JDBC RowSet API to Java 1.4 runtime dependencies. pferraro
update Updated documentation to use Forrest 0.8. pferraro

Release 1.2-beta-7 - 2006-12-01

Type Changes By
fix Fixed sequence synchronization logic to use next value instead of current value since it may be undefined. pferraro
update Refactored SynchronizationStrategy interface into distinct prepare (e.g. lock), synchronize, and cleanup (e.g. unlock) stages. pferraro
update Created SynchronizationContext to simplify SynchronizationStrategy interface methods. pferraro
update Refactored CronExecutorService to use CronExpression instead of CronTrigger. pferraro
update Changed default distributable stack to "udp". pferraro
fix Disabled support for identity columns in MySQL dialect. MySQL's implementation has no mechanism to synchronize auto-increment counter. pferraro
update Upgraded JGroups to 2.4 GA (final). pferraro
update Upgraded Retrotranslator to 1.1.0. pferraro
update Upgraded Quartz to 1.6.0. pferraro
update Upgraded Woodstox to 3.1.0. pferraro
update Upgraded SLF4J to 1.1.0 RC1. pferraro
update Upgraded TestNG to 5.3. pferraro

Release 1.2-beta-6 - 2006-10-24

Type Changes By
add Added support for identity columns. pferraro
add Added new cluster attributes "detect-sequences" and "detect-identity-columns". pferraro
add Added dialect implementations for Ingres and Mckoi. pferraro
update Upgraded Woodstox to 3.0.2. pferraro
fix Fixed PostgreSQL Blob/Clob handling in differential and full synchronization strategies when large objects require updating. pferraro
update Refactored DefaultDialect to StandardDialect and renamed dialect alias from "default" to "standard". pferraro

Release 1.2-beta-5 - 2006-09-22

Type Changes By
update Upgraded TestNG to 5.2. pferraro
fix Fixed binding compilation error that only seemed to affect windows users. pferraro
fix Fixed mbean registration race condition during startup in distributable mode. pferraro

Release 1.2-beta-4 - 2006-09-11

Type Changes By
update Upgraded JGroups to 2.4-cr-2. pferraro
update Upgraded Woodstox to 3.0.1. pferraro
update Upgraded TestNG to 5.1. pferraro
fix Force cleanup of underlying connections, statements, and result sets when a database is deactivated. Fixes 1543962. pferraro
update Log cause of DatabaseCluster.isAlive(Database) failures. pferraro
fix Fixed bug in DatabaseMetaDataSupport.getForeignKeyConstraints() causing method to always return an empty collection. pferraro
fix Fixed bug in PostgreSQLDialect.getSequences(...) causing method to fail to when database does not contain any sequences. pferraro

Release 1.2-beta-3 - 2006-08-26

Type Changes By
fix Fixed bug in DifferentialSynchronizationStrategy where generated select statements had duplicated columns. pferraro
update Extracted interfaces from ColumnProperties, ForeignKeyConstraint, and UniqueConstraint. Implementations refactored into net.sf.hajdbc.cache package. pferraro
add Added long needed unit tests for each synchronization strategy. pferraro
update Upgraded JGroups to 2.4-cr-1. pferraro
update Upgraded Retrotranslator to 1.0.8. pferraro
fix Fixed bugs in MySQLDialect related to generating SQL for creating and dropping foreign keys and unique constraints. Thanks to Stephan Hesse. pferraro

Release 1.2-beta-2 - 2006-08-10

Type Changes By
update Upgraded TestNG to 5.0.1. pferraro
update Upgraded Woodstox to 3.0.0. pferraro
fix Fixed premature quoting of schema and tables in DatabaseMetaDataCacheSupport. pferraro
fix Fixed NullPointerException in ThreadLocalDatabaseMetaDataCache. pferraro
fix Fixed bug in SimpleBalancer where a database deactivation would trigger the deactivation of other databases of identical weight. pferraro

Release 1.2-beta-1 - 2006-07-19

Type Changes By
update Upgraded Retrotranslator to version 1.0.7. pferraro
update Upgraded JiBX to version 1.1. pferraro
update Replaced XMLPull runtime library with StAX API + Woodstox implementation. pferraro
update Upgraded JGroups to version 2.3-sp1. pferraro
update Upgraded SLF4J to version 1.0.2. pferraro
update Upgraded Quartz to version 1.5.2. pferraro
update Upgraded EasyMock to version 2.2. pferraro
update Upgraded TestNG to version 5.0. pferraro
fix Fixed create/drop constraint methods of DefaultDialect to quote constraint names. Thanks to Ryan Holmes. pferraro
update Modified Dialect interface to leverage ForeignKeyConstraint and UniqueConstraint objects to encapsulate constraint details. pferraro
fix Fixed DefaultDialect to correctly generate create foreign key statements for foreign keys containing multiple columns, ON DELETE/UPDATE actions, and deferrability. pferraro
add Created dialects for MySQL and Firebird. pferraro
update DerbyDialect, HSQLDBDialect, MaxDBDialect now override createForeignKeySQL(). pferraro
fix Fixed synchronization of PostgreSQL tables containing Blob (oid) columns. pferraro
fix Modified differential synchronization strategy to use UPDATE statements instead of using updatable ResultSet, due to poor driver support. e.g. ResultSet.updateBlob(...) is not implemented in PostgreSQL driver. pferraro
add Added DatabaseMetaData caching. New meta-data-cache attribute of cluster. Options are eager, lazy, or none. pferraro
update Modified Dialect and SynchronizationStrategy interfaces to use DatabaseMetaDataCache objects. pferraro
update Refactored Dialect interface with much simpler method signatures. pferraro
update Leverages JGroups 2.3 multiplexing so that notification bus and distributable lock manager share the same channel. No more "discarded message from different group..." warnings in logs! "protocol" attribute of "distributable" element in DTD is replaced by "config" and "stack" attributes. Default for "config" is "stacks.xml" from JGroups distribution. Default for "stack" is "fc-fast-minimalthreads". pferraro
fix Moved mbean registration to DatabaseCluster.start() and added mbean unregistration to DatabaseCluster.stop(). HA-JDBC initialization failures will no longer leave stray registered mbeans. pferraro
update Replaced simple read-write locking with named read-write locking encapsulated by a LockManager. pferraro
add Added support for sequences. pferraro
update Refactored unit tests so that test classes implement subject interfaces. pferraro
fix Fixed non-default charset handling of Clobs. pferraro

Release 1.1 - 2006-04-21

Type Changes By
update Ensure that causes of initialization failures are logged. pferraro

Release 1.1-rc-2 - 2006-04-18

Type Changes By
fix Fixed IllegalArgumentException during startup when using transactions="xa". pferraro
fix Fixed NullPointerException during startup when database does not define a driver. pferraro
fix Fixed CronExecutorService to use daemon threads so that it doesn't prevent the shutdown hook from firing. pferraro

Release 1.1-rc-1 - 2006-04-09

Type Changes By
update Upgraded Retrotranslator to version 1.0.3. pferraro
fix Fixed Blob/Clob handling in PreparedStatement.setBlob(...)/setBlob(...) and ResultSet.updateBlob(...)/updateClob(...) methods. pferraro
fix Fixed bug in DefaultDialect.qualifyTable(...) for databases that do not support schemas. pferraro
add Added new required transactions="local|xa" option to cluster. When in local mode, database writes are performed concurrently. When in xa mode, database writes are performed synchronously to ensure a predictable execution order and prevent deadlocks. pferraro
fix Added fault tolerance measures to cluster thread pool under high load. If pool size reaches max-threads threshold, database writes will be executed in the caller thread using java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy. pferraro
update Upgraded TestNG to 4.7. pferraro

Release 1.1-beta-7 - 2006-03-20

Type Changes By
add Added auto-activate-period cluster option that will auto-activate failed database nodes at a configurable interval. Thanks to Tapan Paul. pferraro
add New dependency on Quartz ( pferraro
add Created CronThreadPoolExecutor, a java.util.concurrent.ThreadPoolExecutor that leverages a Quartz CronTrigger to calculate future execution times of a scheduled task. pferraro
update Enhanced auto-activation and failure detection to use a cron schedule, instead of a simple fixed-delay period. Renamed failure-detect-period to failure-detect-schedule and auto-activate-period to auto-activate-schedule in DTD. pferraro
update Migrated repository to Subversion. pferraro
update Migrated test suite to TestNG. pferraro
update Migrated logging facade from commons-logging to SLF4J. pferraro
add New dependency on SLF4J ( pferraro
update Upgraded Retrotranslator to version 1.0.1. pferraro
update Replaced commons-logging-1.0.4.jar with jcl104-over-slf4j.jar from SLF4J distribution. pferraro
add Added management interface methods for adding and removing databases from a cluster. pferraro
update Separated DatabaseMBean interface into InactiveDatabaseMBean (read-write) and ActiveDatabaseMBean (read-only). pferraro
update Activating/Deactivating database reregisters the database using the appropriate active/inactive mbean interface. pferraro
add Added dirty flag logic for Database attributes. If a database is dirty when it is activated, then the HA-JDBC configuration is exported. pferraro
update Renamed "name" property of DataSource to "cluster", since "name" cannot be set by the BeanFactory from Tomcat's server.xml file. pferraro
update Revised main documentation. Added more FAQs. pferraro

Release 1.1-beta-6 - 2006-02-15

Type Changes By
fix Added workaround for missing ReentrantReadWriteLock(boolean) constructor in backport-util-concurrent package. pferraro
update Added verify flag to retrotranslator compilation to catch future Java 1.4 compatibility issues. pferraro
update Rollback change to PostgreSQL dialect. Removed batching of lock table commands. pferraro

Release 1.1-beta-5 - 2006-02-13

Type Changes By
fix Database activation uses Lock.lockInterruptibly() instead of Lock.tryLock() to prevent activation from failing due to concurrent writes. pferraro
fix Fixed getLockTableSQL() from PostgreSQL dialect so that it can be executed within a batch. pferraro

Release 1.1-beta-4 - 2006-02-10

Type Changes By
update Upgraded Retrotranslator to version 0.9.8. pferraro
add Added optional failure-detect-period to configuration file. If defined, HA-JDBC will proactively detect database failures every specified number of seconds. pferraro
add Replace DatabaseCluster.init() with start() and stop() methods. pferraro
add Added JVM shutdown hook that calls stop() on each DatabaseCluster. pferraro
add Derby dialect overrides getLockTableSQL(). Thanks to Kurt Huwig. pferraro
update Refactored DistributableDatabaseCluster to extend LocalDatabaseCluster rather than contain/decorate it. pferraro
update Refactored JiBX configuration to support both input and output binding directions. pferraro
update Removed configuration related methods from SynchronizationStrategy interface removing the need for AbstractSynchronizationStrategy. pferraro
add Implemented distributable read-write locking so that database writes are locked during database activation. This eliminates the need to deactivate databases that were newly actived upon completion of a database write. pferraro
add Added mbean interfaces for Databases. pferraro

Release 1.1-beta-3 - 2006-01-27

Type Changes By
update Changed exceptions thrown by DatabaseClusterMBean methods to built-in Java exceptions so that they can be interpretted by a remote JMX client. pferraro
add Added distributable locking to prevent multiple simultaneous synchronizations on the same cluster. pferraro
add Added configurable timeout attribute to DTD for distributable operations. pferraro
update Moved SELECT ... FOR UPDATE pattern definition to dialect. pferraro
fix Fixed IndexOutOfBoundsException during database activation when one or more databases in the cluster is not alive. pferraro

Release 1.1-beta-2 - 2006-01-23

Type Changes By
update Upgraded JiBX to version 1.0.1. pferraro
update Upgraded JGroups to version pferraro
fix Recorded Operations are stored in a Map keyed by class instead of a List to prevent unnecessary boundless growth. Thanks to Ilkka Lassila. pferraro
fix DifferentialSynchronizationStrategy generates bad DELETE statements when table has multiple primary keys. Thanks to Kurt Huwig. pferraro
fix Fixes german error message translations. Thanks to Kurt Huwig. pferraro
fix DatabaseClusterFactory.createDatabaseClusterFactory() throws RuntimeException instead of SQLException to prevent java.sql.DriverManager from masking root cause of HA-JDBC configuration failures. pferraro
fix Fixes potential NullPointerException if database is deactivated as a result of a read operation. pferraro
update Migrated code base to Java 1.5. pferraro
update Retrotranslator ( leveraged for JDK 1.4 compatibility. Build script generates separate 1.4 jar and includes additional dependencies. pferraro
update Replaced Balancer.toArray() : Database[] with Balancer.list() : List<Database> pferraro
update Unit tests now use EasyMock 2.0. pferraro
add Added requiresTableLocking() method to SynchronizationStrategy interface. pferraro
update During database activation, table locking is only performed if required by synchronization strategy. pferraro
add All vendor specific customizations to HA-JDBC are now encompassed in the Dialect attribute of a cluster. This replaces the validate-sql attribute of a cluster; and the truncateTableSQL, createForeignKeySQL, dropForeignKeySQL, createUniqueKeySQL, and dropUniqueKeySQL properties of the diff and full synchronization strategies. pferraro
add Created dialects for PostgreSQL, MaxDB, Derby, HSQLDB, and a default dialect. pferraro
fix Changed default table locking query used during synchronization to use an innocuous UPDATE statement. pferraro
fix Added more explicit logging for exceptions thrown during HA-JDBC initialization that end up getting masked by JiBX. pferraro
fix Added missing rollback to exception handling in diff and full synchronization strategies. Thanks to Kurt Huwig. pferraro
add In distributable mode, JGroups channel and protocols are registed with the mbean server. pferraro
remove Removed obsolete net.sf.hajdbc.sql.pool.xa and net.sf.hajdbc.sql.pool packages. pferraro

Release 1.1-beta-1 - 2005-12-13

Type Changes By
add New dependency on JDK 1.4 backport of JDK 1.5 java.util.concurrent package. pferraro
update Uses configurable thread pooling for asynchronously executed write operations for improved efficiency and fault tolerance under high load. pferraro
update Uses default-minimalthreads.xml from JGroups distribution as default distributable protocol. pferraro
fix Synchronization strategies now use schema qualified table names when appropriate. pferraro
update Upgraded JGroups to version 2.2.9. pferraro
fix Fixed problematic co-dependency between DatabaseCluster and ConnectionFactory. pferraro

Release 1.0 - 2005-09-22

Type Changes By
fix Fixed JDK 1.4 source compatibility issues. Thanks to Roman Kurmanowytsch. pferraro
fix Added explicit logging to expose root causes of exceptions that are hidden by JiBX. pferraro
add Added FAQ section for manually deleting local cluster state. pferraro
add Added FAQ section for distinguishing application database users vs. HA-JDBC database users. pferraro
update Upgraded EasyMock to version 1.2. pferraro

Release 1.0-rc-5 - 2005-09-15

Type Changes By
update During DatabaseClusterFactory initialization, if no mbean server can be found, an exception is thrown, rather than attempting to create a new one. pferraro
fix Quote all identifiers used in synchronization to prevent SQL syntax errors in identifier is a reserved word. pferraro

Release 1.0-rc-4 - 2005-09-06

Type Changes By
fix Correct error message when connection to config url fails. Thanks to Nick Rudnick. pferraro
update Avoid wrapping SQLException cause when a database operation fails. pferraro
add Added FAQ section for running HA-JDBC under Tomcat 5.0. pferraro
fix Fixed readProperties() and writeProperties(...) methods of AbstractSynchronizationStrategy to ignore the property "class". Thanks to Matthew Wooller. pferraro
add Reintroduced PassiveSynchronizationStrategy. pferraro
fix Added logic to LocalDatabaseCluster.loadState() to validate locally persisted cluster state. pferraro

Release 1.0-rc-3 - 2005-08-23

Type Changes By
fix Fixed NullPointerException bug in LocalDatabaseCluster.loadState(). pferraro
fix Distributable database activation commands should not reinvoke synchronization. pferraro

Release 1.0-rc-2 - 2005-08-21

Type Changes By
fix SELECT...FOR UPDATE queries are now detected and distributed to each database cluster node. pferraro
fix Corrected German translation of error messages. Thanks to Nick Rudnick. pferraro
fix Fixed infinite loop in AbstractSynchronizationStrategy.getProperties(). pferraro
fix Fixed bug in LocalDatabaseCluster.loadState() when cluster is empty. pferraro

Release 1.0-rc-1 - 2005-08-02

Type Changes By
update Refactored HA-JDBC initialization and DTD. Synchronization strategies are now shared across all clusters. Each cluster defines a default synchronization strategy. pferraro
add Added properties to cluster configuration to allow DataSources to define custom JNDI environment parameters and to allow Driver to define additional runtime parameters. pferraro
update Changed default JGroups protocol stack to use FD instead of FD_SOCK. pferraro
update activate(String) method in DatabaseClusterMBean interface will synchronize using the default synchronization strategy for the cluster. pferraro
update Removed getSynchronizationStrategies() from DatabaseClusterMBean interface. pferraro
fix Fixed ClassCastException during XADataSource initialization. pferraro
fix SQLException wrapper properly reports vendor-specific error code and SQL state. pferraro
update Updated DifferentialSynchronizationStrategy to use PreparedStatements for inserts and deletions instead of using problematic updatable result set methods. pferraro
fix Fixed DifferentialSynchronizationStrategy to drop and re-create unique keys on each table to prevent possible unique constraint violations during sync. pferraro
update DifferentialSynchronizationStrategy now correctly compares byte[] columns. pferraro
update Migrated unit tests from TestNG to JUnit in order to utilize EasyMock. pferraro
add Added unit tests for net.sf.hajdbc.sql package. pferraro
update Upgraded Forrest documentation to version 0.7. pferraro
update Upgraded JGroups to version 2.2.8. pferraro
update Upgraded JiBX to version 1.0-rc-1. pferraro

Release 1.0-beta-8 - 2005-04-27

Type Changes By
add Cluster state is now persisted locally so that it can be restored between application restarts. pferraro
add Added customizable fetchSize property to each synchronization strategy to avoid out of memory errors when synchronizing large tables. pferraro
add Added TestNG unit tests for Driver, Connection, Statement, and each balancer implementation. pferraro
fix Fixed issue with driver returning non-distributable connections when in distributable mode. pferraro
fix Fixed issue in DifferentialSynchronizationStrategy with some updatable result set implementations where inserted rows were deleted again. pferraro
fix Fixed ClassCastException in Connection.releaseSavepoint(Savepoint) and Connection.rollback(Savepoint) methods. pferraro
fix Minor fixes to zero weight handling in random and load balancers. pferraro
fix Corrected German translation of error messages. Thanks to Oezcan Acar. pferraro
update executeWriteToDatabase() will now throw SQLException for Statements and ResultSets if some valid databases fail while others succeed and auto-commit is off, giving the client the opportunity to rollback the current transaction. pferraro
update Connection.isReadOnly() was changed from executeReadFromDatabase() to executeReadFromDriver(). pferraro
update Refactored java.sql.* proxy classes. pferraro
update Upgraded JiBX to version 1.0-rc-0. pferraro

Release 1.0-beta-7 - 2005-04-05

Type Changes By
fix Fixed buggy weighted round-robin algorithm. pferraro
fix Round-robin balancer now handles databases with 0 weight properly. pferraro

Release 1.0-beta-6 - 2005-03-31

Type Changes By
update Database cluster now specifies 1 of 4 different strategies for balancing read requests: simple, random, round-robin, or load. pferraro
update A database can define a weight to affect how it is prioritized by the balancer. pferraro
update In distributed environment, a database cluster will get its initial state from the JGroups group coordinator. pferraro
fix Fixed bug where auto (i.e. non-manual) database deactivation behaved locally even if environment is distributed. pferraro
fix Fixed bug where synchronization strategies will fail if foreign key constraints have names that require quoting (e.g. $1, $2). pferraro
update Lots of refactored code. Most notably, the HA-JDBC driver has moved to net.sf.hajdbc.sql.Driver pferraro
update Protocol parameter is now optional for distributable clusters. pferraro
add Added error message translations for German, Spanish, French, Italian, and Portuguese. Thanks to AltaVista Babel Fish. pferraro
add Added error message for tables without primary keys in DifferentialSynchronizationStrategy. pferraro

Release 1.0-beta-5 - 2005-03-03

Type Changes By
update Added better data type support for SynchronizationStrategy properties. pferraro
fix Fixed Java 1.4 compatibility. pferraro

Release 1.0-beta-4 - 2005-02-18

Type Changes By
update getActiveDatabases() and getInactiveDatabases() no longer throw SQLException pferraro
update Configuration DTD updated: Synchronization strategies and properties are now explicitly defined per cluster. pferraro
add Added getSynchronizationStrategies() method to cluster management interface. pferraro
update Changed symantics of activate(...) methods on management interface: activate(String, String) uses synchronization strategy identifier instead of class name; activate(String) now activates a database without synchronizing. pferraro
remove PassiveSynchronizationStrategy is obsolete. Use activate(String) instead. pferraro
update synchronize() method of SynchronizationStrategy interface no longer uses DatabaseClusterDescriptor. pferraro
fix Fixed various bugs in documentation and javadoc. pferraro

Release 1.0-beta-3 - 2005-02-07

Type Changes By
add All log/exception messages are now localized. pferraro
update Driver is no longer required when defining a driver-based cluster since underlying driver already be registered via the jdbc.drivers system property. pferraro
fix Fixed bug in SQLException when nested exception chain is already initialized. pferraro

Release 1.0-beta-2 - 2005-01-08

Type Changes By
add Added JMX interface to DatabaseCluster to allow administration of each cluster. pferraro
update Refactored cluster initialization and management. pferraro
update Distributable behavior implemented using command pattern. pferraro
update Restructured configuration DTD adding new synchronization-related cluster properties. pferraro
update Refactored distributable behavior to support activation. pferraro
add Added ability to activate a failed database. pferraro
add Created database synchronization strategies used during activation. pferraro
update Allow simple names for DriverManager-based database cluster. pferraro
update Enhanced large object support. pferraro
update Upgraded Forrest documentation to v0.6. pferraro

Release 1.0-beta-1 - 2004-10-01

Type Changes By
fix Fixed bug in connection.rollback() pferraro
fix Fixed logic in PreparedStatement/CallableStatement.setXXXStream() and ResultSet.updateXXXStream() methods pferraro
update Optimized asynchronous execution of write operations. pferraro
update Improved consistancy of cluster when autocommit is true. pferraro
update Upgraded JGroups to v2.2.7 pferraro
update Prevent multiple logging of database deactivation pferraro

Release 1.0-alpha-3 - 2004-08-30

Type Changes By
update Configuration DTD is now PUBLIC pferraro
update Upgraded JGroups to v2.2.6 pferraro
fix Fixed thread safety bug in SQLProxy.executeWrite() pferraro
update Changed license to LGPL, added license details to source code pferraro
remove Removed obsolete RowSetProxy class, javax.sql.RowSet implementation are implicitly supported pferraro
update Refactored package names to reflect project name pferraro
update Replaced CHANGES.txt with this page pferraro

Release 1.0-alpha-2 - 2004-07-17

Type Changes By
add Added ability specify location of configuration file using a system property pferraro
update Extended classpath search for configuration file to include system classpath pferraro
fix Fixed DataSource proxy initialization pferraro
update DriverProxy now expects the cluster name to match the JDBC url pferraro
add Several refactorings affecting configuration dtd pferraro
fix Fixed bug in clean target of ant build file pferraro

Release 1.0-alpha-1 - 2004-07-14

Type Changes By
add Initial Release pferraro