- Changes to support the following environment: Hibernate 4.2.6 (with schema validation enabled [database metadata]), Microsoft SQL Server, Microsoft SQL Server JDBC driver (sqljdbc4.jar)
a. ConnectionPrepareStatementCommand: ObjectOutput.writeUTF() is limited to 65,535 bytes, so output raw bytes
b. RowPacket: SQL Server JDBC driver small int handling
c. StreamingResultSet: SQL Server JDBC driver clob and timestamp handling
- Convert VJDBC to use Apache HttpClient 4.1
- Use KeepAliveTimerTask across all connections
- Generally named all threads and set to daemon
- Closed ResultSet in TableCache
- Eliminated several finalize() statements
- Converted isValid() from sleep-based approach to wait
- Improved handling of unexpected database shutdown (see usage of ConnectionClosedException, UnknownConnectionException)
- Similar to RequestEnhancer pattern, introduced ResponseHandler to allow inspection of response headers
- Allow HTTP SSL hostname and certificate verification to be disabled
- Support public key pinning for HTTP SSL host verification (see https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning)
- Ensure only a single DBCP connection pool is instantiated
Changes since original submission on 2015-10-27, after load and stress testing of product using VJDBC:
- Counteract Java [de]serialization code that shifts Timestamps; this contradicts our desire to universally maintain timestamps as UTC even when VJDBC clients and server are in different time-zones -- see TimestampParameter, RowPacket, StreamingResultSet and TimeUtil
- Update VJDBC to use the Apache Commons dbcp 2.1.1 and pool 2.4.2
- Added server-side "lack of use" connection closing (PingCommand does not count towards "use")
- Added ability for HTTP sink to seamlessly reconnect on UnknownConnectionException (in certain conditions), thereby allowing server to be restarted and clients to generally not notice the interruption -- see DecoratedCommandSink
- Configure HTTP connections to close after 30 seconds lifespan, ahead of the Tomcat 1 minute connection idle timeout [need to make this configurable]
This was based on revision 72