Fix (APAR): WAS_CM_03-03-2004_4.0.6-4.0.5-4.0.4-4.0.3-4.0.2_cumulative_Fix Status: Fix Release: 4.0.6,4.0.5,4.0.4,4.0.3,4.0.2 Operating System: All Supersedes Fixes: CMVC Defect: PQ79688 and previous Byte size of APAR: 1274363 Date: 03-03-2004 Abstract: Cumulative Fixes for CM code Description/symptom of problem: Superceeds: All previous CM cumulative Fixes, including but not limited to those listed below. Directions to apply fix: 1) Create temporary "Fix" directory to store the jar file: UNIX: /tmp/WebSphere/Fix Windows: c:\temp\WebSphere\Fix 2) Copy jar file to the directory 3) Shutdown WebSphere 4) Run the jar file with the following command answering questions/prompts as they appear: java -jar 5) Restart WebSphere 6) The temp directory may be removed but the jar file should be saved. Do not remove any files created and stored in the /Fix/PQ##### directories. These files are required if a Fix is to be removed. Additional Information: ******************** NOTE ***************************************** If you are using Sequelink or DataDirect, you will need to download a -new- driver to use this Fix. Please see item 134469 below. ******************************************************************* Directions to remove fix: NOTE: FIXES MUST BE REMOVED IN THE ORDER THEY WERE APPLIED. DO NOT REMOVE A FIX UNLESS ALL FIXES APPLIED AFTER IT HAVE FIRST BEEN REMOVED. YOU MAY RE-APPLY ANY REMOVED FIX. Example: If your system has Fix1, Fix2, and Fix3 applied in that order and Fix2 is to be removed, Fix3 must be removed first, Fix2 removed, and Fix3 re-applied. 1) Change directory to the Fix location (/Fix/PQ#####). 2) Shutdown WebSphere 3) Run the backup jar file with the following command: java -jar PQ#####_Fix_backup.jar 4) Restart WebSphere Directions to re-apply fix: Follow the instructions for applying a Fix. If the backup files still exist (from the previous Fix application), you will be prompted to overwrite. Answer "yes" at the overwrite prompts. Additional Information: ------------------------------------------------------------------ This Connection Pooling E-fix is cumulative WAS 4.02 AE All previous non-custom Connection Pooling E-fixes are included in this Fix. ******************************** NOTE *********************************** Cached Prepared Statements performance (PQ53331 and 115405) in 4.02 base This code change features a performance increase to the WebSphere Connection prepared statement cache. The most benefit will be seen in the throughput of applications which use multiple connections simultaneously, although the performance for using a single connection is also improved. The side effect of this improvement is that the seamtics of 'Prepared Statement cache size' has changed. In previous versions this value signified the total maximum number of Prepared Statements (PS) that would be cached in the datasource or Pool. In this E-Fix, the value still represents the number of PSs per datasource, but the number is now divided by the number of connections. If the number of PS is less than the numner of connections, a minimum of 1 per connection is allocated. For example given 100 PS, and 50 connections, you will have 2 per connection, and given 10 PS and 50 connections, you will have 1 per connection. Customers may wish to adjust the statement cache size. The default statement cache remains 100, and depending upon your connection pool size, this may be reasonable. For larger pool sizes, the statement cache size may need to be increased. Statement cache size can be set using the Connection Pooling tab of the datasource in the Admin Console. ************************************************************************* Included internal defects and APARS: 115626 - Connection manager message MSG_CONM_6015E has been improved. It now includes the class name of the class that was unable to be loaded. 116630 - Change to the datasource required properties for Informix. Username and password are now listed as required. 116723 - Improvements in the messages relating to loading the datasource class. 116978 - An internal testing improvement for Oracle. 117710 - A fix to allow the Test Connection button to support getting a test connection to a database without specifying a username or password on the datasource. Some databases, like DB2, support this. Other databases which require a username and password will still get an error. This fix also includes logic to catch only specifying one of either the username or password and not the other. This is considered incorrect. PQ56104 - Work around for Sybase JZ006 on setQueryTimeout. Sybase uses JZ006 as a generic error for both fatal and non- fatal errors. When WebSphere gets this error, we dumped the connection pool. Sybase, in EBF 10105 has added a submessage to the error msg, so, when non-fatal, we can differentiate between the fatal and non-fatal JZ006 errors, and only dump the connection pool for fatal errors. Sybase EBF 10105 is a prerequisite for this E-Fix, not using the EBF will result in WebSphere not correctly translating fatal JZ006 errors into StaleConnectionExceptions and will leave bad connections in the WebSphere connection pool. PQ56665 - A fix for a regression in error mapping support. The fix is an improvement to error mapping overall, and specifically fixes problems with error mapping Merant errors. PQ56737 - A fix for a condition in which the number of elements in the queue of waiting requests for a connection grows without bound. 117713 - DataSource class name not found during direct JNDI lookup The issue arises when a servlet looks up the DataSource directly, rather than using the resource reference mechanism. There is no way for SM to tell that the JDBC driver will be used by the servlet, so the jar/zip file is not put on the classpath. Solutions to this problem include using the J2EE resource reference mechanism to lookup the datasource or manually adding the jar/zip file to the classpath of the application server. The error message printed in this scenario will be changed to state that a probably cause of the problem is a direct JNDI lookup, and one of the two solutions above can be applied to solve the problem. PQ57523 - createTableForPersister method incorrectly converted the types DATE, TIME, and DOUBLE in some cases, or portions of other types and column names containing these values. The conversions are now done correctly as follows, DATE --> DATETIME TIME --> DATETIME DOUBLE --> FLOAT 110326 - Resourrce Analyzer would give negative numbers for Database Connection Pool % used. This has been fixed. 118508 - Fix synchronization in ConnectionPool to correct PMI counting. The ConnectionPool object incorrectly synchronizes creates and destroys of connections, causing incorrect data regarding the number of connection in the pool to be passed to PMI. 118886 - A synchronization/timing problem existed in the waiters queue. The fix eliminates erroneous ConnectionWaitTimeoutExceptions. 119364 - When using the AS/400 DB2 via the Toolbox or Native driver, they had changed the format of the URL. We made some changes so we can now parse the URL for both of these drivers properly. 121445 - Support is added in this e-fix for the WebSphere branded ConnectJDBC driver for MSSQLServer. The name of the new DataSource class is com.ibm.websphere.jdbcx.sqlserver.SQLServerDataSource This driver may be downloaded free of charge from IBM, for use with the WebSphere product. 122250 - A bug was introduced which precluded the choosing of DB2ConnectPortabilityLayer. PQ57073.2 - CM support for DB2/390 fix PQ58535 - USER NAME PROPERTY MISSING IN DRIVERMANAGER.GETCONNECTION This problem occurs with both Sybase and Informix. The issue was that in order to determine which portability layer to use (Sybase or Sybase11, Informix or Informix7) we must get a connection and check the meta data. To get this connection, we now pass a user id and password from the getConnection call in DataSourceImpl to the getPortabilityLayer call on SybasePortabilityLayer or PortabilityLayerImpl (Informix). 119963 - The DB password was in cleartext in XAResources file. This has been corrected. PQ60281 - When StaleConnectionException is recieved, there is a possibility of a NullPointerException from the close on CachedStatement. This has been fixed. PQ60420(.1) - Added ability to use intropection on proxy classes. 123661 - Add support for Microsoft driver in 4.0.3 PQ60885 - Internal Systems management work-around for SE table. See CMVC for details. 131472 - Method Not Supported for SetMaxFieldSize() or setQueryTimeout() PQ61735 - When using custom error Map for StaleConnectionException, ClassNotFoundException was possible. 133683 -or- PQ62200 - When using the Microsoft SQLServer as the webSphere Repository with the Microsoft Type 4 JDBC Driver, the Administrative Server will fail to start with 'Violation of PRIMARY KEY constraint' exceptions. PQ62295 - When using Merant driver, receive error that Method Statement.setMaxRows() cannot be called when a result set is open. A case has been opened with Merant. We made some changes to work around this problem. 133881 This was a synchronization improvement, the problem could manifest itself Illegal various ways, one way was an Ilegal ConnectO state message, another was a slow down in performance. 134469 Updated WebSphere to support newer fixpacks of DataDirect ConnectJDBC 2.2 and SequeLink 5.2 drivers. If using either of these drivers, you will need to download the newer versions from IBM, available at ftp://ftp.software.ibm.com/software/websphere/info/tools/DataDirect/ -or- http://www-3.ibm.com/software/webservers/appserv/support.html selecting downloads and then searching for DataDirect. If planning to use these newer drivers with WebSphere Studio Application Developer, you will also need fix jr17278 for WebSphere Studio. 137243 There was a case where on first use of a preparedStatement, when ClearParameters() was called, it was not executed to the DB. PQ62537 Modified the 'Select ... For Update' support for Microsoft SQL Server. Because SQL Server does not support the 'For Update' keyword we replace it with the 'UPDLOCK' keyword. PQ63031 A condition existed, on a VERY fast multi-procesor system, whereby one thread held a lock on a statement, trying to get a lock on the connection, another thread had a lock on the conection, trying to get a lock on the statement. This could only happen when StaleConnection processing was happening at the same millisecond as a transaction timeout occurrs. PQ65178 Due to excess synchronization in the create connection path, if the database server is removed from the network (hardware/network failure), connections serially attempt to make a JDBC connection, waiting for the TCP/IP connection timeout value. 147017 If a getConnection was made with the same userid as a connection in the free pool, but a different -password-, and a transaction is running, a JTS/JTA transaction aborted exception is thrown, even though the userid/password was valid. It is unlikely customers would encounter this, Still, we now check for mismatched passwords before the connection is enlisted in the transaction, avoiding this potential problem. 147155 If an application gets a connection, and uses the setReadOnly(true) method to mark the connection as readonly, and does not call setReadOnly(false) before callingclose(), the next time the connection is retreived from the pool, it will still be marked as read only. This fix allows an administrator to add the custom property resetReadOnly to a data source, indicating that they wish to have the runtime invoke setReadOnly(false) before the connection is returned to the pool. To enable this functionality, create a custom property of resetReadOnly on the datasource with a value of true. PQ66566 When the first execute of a PreparedStatement with parameters causes an SQLException not related to invalid parameters being passed, a successful retry of that statement may cause any future use of the cached PreparedStatement to fail. For example, a customer executes a SELECT ... NOWAIT statement on a locked record. The exception is caught and retried. The transaction holding the original lock has now completed, so the retry completes succesfully. Prior to the fix, the PreparedStatement was cached in an invalid state, causing any future uses of that PreparedStatement to fail. This fix corrects the error handling mechanism so that the statement is appropriately cached. 148991 If Sybase users turn off MetaData, we had no way of getting Sybase Version information, so we added a property, which is not required, but if set, and the Meta-data is turned off, will be used to determine Sybase version. The property name is dataBaseVersion, and can be set via the admin console, it should contain the numeric Sybase version. 150120 Eliminated the warning showed up in console:MSG_CONM_7014W 151401 Correction of counting in 'Expanding Pool' message in Connection manager trace. PQ67801 Creation of Oracle DataSources no longer require userid and password. Note: Be sure to specify them if you want to call getConnection() with no parameters, or you want XA recovery to work. PQ68977 Creation of property to allow logging of orphaned connections. The property name is 'logOrphan', and can be set via the admin console. Valid values are 'true' and the default is 'false'. Orphaning is the process whereby a connection is returned to the pool after a period of time defined by the orphanTimeout parameter. If the application is working properly, Orphaning should not occur. Orphaning is typically indicative of the application holding open connections too long, or caching connections. This was superceeded by 166057 below. PQ69059 Removed the required userid/password for Merant datasources. Note: Be sure to specify them if you want to call getConnection() with no parameters, or you want XA recovery to work. PQ69520 Infrastructure support to allow vendor specific calls. PQ69737 A possible JVM deadlock exists between the transaction timeout thread and the application processing thread, causing the application to hang. A workaround is to increase the transaction timeout so in process transactions do not timeout. This fix resolves the deadlock issue. PQ70014 License Verification Errors may appear in the Windows Event Viewer when using the Sequelink or ConnectJDBC drivers. The application/admin server does not get exceptions, and continues to function normally. This fix stops the error message from appearing in the Windows Event Viewer. 119273.2 Fix for Oracle exception that is caused by Oracle tight coupling transaction branches. On oracle 9i the exception is: XAER_RMERR resource error -3. On oracle 8i the exception is: ="Io exception: End of TNS data channel", SQLState=null, vendorCode=17002). This fix requires at minimum (Oracle 9202 or oracle 8174) + Oracle patch 2511780. You will need to set the custom property (transactionBranchesLooselyCoupled) to true on the datasource. PQ72384 Fix for XA getMetaData call. PQ72406 Because of a timing issue, it was possible for a connection which had been recently retrieved from the connection pool, but not yet used, to be collected by the orphan timer. This causes a StaleConnectionException when the application tries to use the connection. 162498 The message CONM6021W for 119273.2 above was appearing too many times in the log. PQ73231 A classloader issue was fixed for users configuring DataSources using multiple JDBC Provider classes. PQ73769 A condition existed where on an exception path, PMI data was not being sent properly the result would be that in Resource Analyzer, the customer may see more connections in use than they have set as their maximum. 162483.4 XARecovery without password exposure. We added a new property, secureXACredential. This property renders the userid and password specified on the datasource good for XARecovery -only-. If the secureXACredential boolean is set to true, the default user and password properties will not be stored in the referencable, and will only be used for XA recovery. This provides a configuration option which is secure, and still allows XA recovery to function. If the secureXACredential property is not set, or is set to false, the CM functions as before this fix. 166057 Extended diagnostics for CM. This covered thoroughly under DCF Trechnote # 1110015 and briefly here: The property, "diagOptions" is set with one (or a combination) of the values below; 0 - No CM Diagnostics are enabled 1 - Orphaned Connection Notification, a short message each time a connection is orphaned. 2 - Orphaned Connection Application Code Path Tracing 4 - Connection Wait Timeout Code Path Tracing To set more than one value at a time, simply add the numeric values and set as the value in the console. There is a slight performance degradation of 1-5% when using these options. 158708.x Stuck connection detector code fixes for NullPionterException and trace statements. PQ77574 Added ORA-25408 to the Mapping for StaleConnectionException. 117700 Removal of userid and password as required properties for Informix DataSource. PQ78561 Possible NullPointerException in ConnectO. PQ78605 The possibility existed, where locks would be left on the admin database. There was a small window where a connection went bad during an admin request. This had the adverse effect of subsequently not being able to start the admin server. This happened on Oracle only. Dropping the Oracle locks would circumvent the problem. We fixed the locking mechanism so it should no longer occurr. PQ79688 Using WSCallHelper now allows the use of constructors for non-JDBC objects. PQ80452 Removed a deadlock between returning a connection to the pool and getting a connection from a waiter. This would only happen if there were waiters waiting for connections. The timing window is very small which is why we had not yet seen this. PQ80525 This APAR was fixed via internal defect 142913 in 4.0.5. The APAR was created so our support team could find the symptom. The symptom was a JVM deadlock between Orphaning connections and closing connections. PQ80783 Handle NullPointerException for SetBytes() on Oracle. PQ85245 Removed the DataBaseName as required for all DataDirect drivers.