com.ibm.websphere.rsadapter
Class InformixDataStoreHelper

java.lang.Object
  |
  +--com.ibm.websphere.rsadapter.GenericDataStoreHelper
        |
        +--com.ibm.websphere.rsadapter.InformixDataStoreHelper
All Implemented Interfaces:
DataStoreHelper, java.io.Serializable

public class InformixDataStoreHelper
extends GenericDataStoreHelper
implements java.io.Serializable

This is a helper class customized for the Informix database. It allows us to plug in data store specific functions. When trying to map an exception, the Informix errormap will be searched first then the generic one will be searched.

If you have any special Informix requirements, you might want to look into extending this class and overwriting the methods you wish to change.

See Also:
Serialized Form

Fields inherited from class com.ibm.websphere.rsadapter.GenericDataStoreHelper
EOLN, genErrorMap, resBundle
 
Fields inherited from interface com.ibm.websphere.rsadapter.DataStoreHelper
CLOUDSCAPE_HELPER, CLOUDSCAPE_NETWORK_SERVER_HELPER, CONNECTJDBC_HELPER, CUSTOM_HELPER, DATADIRECT_HELPER, DB2_390_HELPER, DB2_390_LOCAL_HELPER, DB2_400_HELPER, DB2_HELPER, DB2_UNIVERSAL_HELPER, GENERIC_HELPER, INFORMIX_HELPER, MSSQL_HELPER, ORACLE_HELPER, POTENTIAL_DEADLOCK, POTENTIAL_LOST_UPDATE, SEQUELINK_HELPER, SYBASE_HELPER, SYBASE11_HELPER, TX_REPEATABLE_READ_FORUPDATE, TX_SERIALIZABLE_FORUPDATE, UPDATE_ON_READONLY, WSCONNECTJDBC_HELPER
 
Constructor Summary
InformixDataStoreHelper(java.util.Properties props)
          Constructor expects an Integer parseable entry in the properties object with key = "informixLockModeWait".
 
Method Summary
 boolean doConnectionCleanup(java.sql.Connection conn)
          This method will do clean up on the connection which consists of calling the scrubConnection() method provided by Informix.
 void doConnectionSetup(java.sql.Connection conn)
          This method allows the DataStoreHelper to set any connection properties that are not specified in the default configuration.
 void doStatementCleanup(java.sql.PreparedStatement stmt)
          Clean up a statement before it is placed in the cache.
 java.lang.Class findMappingClass(java.sql.SQLException e)
          This method returns mapping for a given exception if one is found.
 int getIsolationLevel(com.ibm.websphere.appprofile.accessintent.AccessIntent aIntent)
          This method returns the isolation level given the Intent object.
 java.io.PrintWriter getPrintWriter()
          This method is used to return a java.io.PrintWriter instance to be passed on to setLogWriter method called on the datasource, during the managedConnectionFactory initialization.
 int getResultSetConcurrency(com.ibm.websphere.appprofile.accessintent.AccessIntent intent)
          This method returns the resultSet concurrency given the Intent Object.
 void setUserDefinedMap(java.util.Map newmap)
          This method is used to add user defined error maps.
 
Methods inherited from class com.ibm.websphere.rsadapter.GenericDataStoreHelper
calcPartitionNumber, getLockType, getMetaData, getResultSetType, getXAExceptionContents, hasLostUpdateOrDeadLockOccurred, isBatchUpdateSupportedWithAccessIntent, isConnectionError, mapException, mapException, modifyXAFlag, processGenericCredentials, showLockInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InformixDataStoreHelper

public InformixDataStoreHelper(java.util.Properties props)
Constructor expects an Integer parseable entry in the properties object with key = "informixLockModeWait". The value represents the timeout on detecting a lock.
Parameters:
props - The properies object with a key = "informixLockModeWait"
Method Detail

findMappingClass

public final java.lang.Class findMappingClass(java.sql.SQLException e)
This method returns mapping for a given exception if one is found. First the user defined map is searched followed by the predefined Informix map. If nothing is found, the search continues in the parent class - GenericHelper. The search is done in the following order:
  1. first the errorCode is searched
  2. then the SQLState.

If a user wants to override the mapping of a specific Exception, they can override this method and either return the same exception class or return null. In the mapexception() which calls this method if the map found is null then the original exception is returned. A user can also cancel the mapping by returning null for that exception map.

Overrides:
findMappingClass in class GenericDataStoreHelper
Parameters:
e - The SQLException we need to find a mapping class for
Returns:
java.lang.Class - The mapped class

getIsolationLevel

public final int getIsolationLevel(com.ibm.websphere.appprofile.accessintent.AccessIntent aIntent)
                            throws javax.resource.ResourceException
This method returns the isolation level given the Intent object. If the intent Object passed is null, the websphere default is returned. The websphere default is dependent on the backend database. In this case it will be TRANSACTION_READ_COMMITTED If this value is not desired one could override it in a subclass.

AccessType: Optimistic--> map to RC; PessimisticRead --> map to RR

PessimisticUpdate: Update Hint Value order is:
greedy nocollision Exclusive
0/1 0/1 0/1

when adding up the combo as an integer, for example:

BTW 7 is an invalid option since you can't have nocollision and exclusive together.

Note:
we don't allow pessimistic_update_random, therefore, this assumption is made when calculation is done

Overrides:
getIsolationLevel in class GenericDataStoreHelper
Parameters:
aIntent - AccessIntent
Returns:
int - An isolation level. The value is based on the isolation level that is defined in the java.sql.Connection.
Throws:
javax.resource.ResourceException -  
See Also:
Intent

getResultSetConcurrency

public int getResultSetConcurrency(com.ibm.websphere.appprofile.accessintent.AccessIntent intent)
                            throws javax.resource.ResourceException
This method returns the resultSet concurrency given the Intent Object. For Informix, CONCUR_READ_ONLY is the only supported value. CONCUR_READ_ONLY is also the default JDBC value. So the Intent Object is always ignored. If this value is not desired one could override it in a subclass. This method has the same implementation as the Generic but we duplicate code here for the Trace to print correctly.
Overrides:
getResultSetConcurrency in class GenericDataStoreHelper
Parameters:
intent - AccessIntent
Returns:
CONCUR_READ_ONLY in all cases
Throws:
javax.resource.ResourceException -  
See Also:
AccessIntent

doConnectionSetup

public void doConnectionSetup(java.sql.Connection conn)
                       throws java.sql.SQLException
This method allows the DataStoreHelper to set any connection properties that are not specified in the default configuration. For Informix such a property would be the informixLockModeWait value sent into the constructor.
Overrides:
doConnectionSetup in class GenericDataStoreHelper
Parameters:
conn - The connection object on which the property is to be set.
Throws:
java.sql.SQLException -  

doStatementCleanup

public void doStatementCleanup(java.sql.PreparedStatement stmt)
                        throws java.sql.SQLException
Clean up a statement before it is placed in the cache. This method is called only for statements which are being cached. It is called only if certain statement properties have changed. See DataStoreHelper.
Overrides:
doStatementCleanup in class GenericDataStoreHelper
Parameters:
stmt - the PreparedStatement.
Throws:
java.sql.SQLException - if an error occurs cleaning up the statement.

doConnectionCleanup

public boolean doConnectionCleanup(java.sql.Connection conn)
                            throws java.sql.SQLException
This method will do clean up on the connection which consists of calling the scrubConnection() method provided by Informix.

Note:
The cleanup will only be done if the operation does not release the prepared statements, otherwise the PS cache would be lost.

Overrides:
doConnectionCleanup in class GenericDataStoreHelper
Parameters:
conn - java.sql.Connection
Returns:
returns true if scrubConnection() was called
Throws:
java.sql.SQLException -  

setUserDefinedMap

public final void setUserDefinedMap(java.util.Map newmap)
This method is used to add user defined error maps. It is useful when the user wants a slght tweaking of the map. For a comprehensive change it might be advisable to extend this object.
Overrides:
setUserDefinedMap in class GenericDataStoreHelper
Parameters:
newmap - Map - a list of SQL error codes / states and the Exception class

getPrintWriter

public java.io.PrintWriter getPrintWriter()
This method is used to return a java.io.PrintWriter instance to be passed on to setLogWriter method called on the datasource, during the managedConnectionFactory initialization. the method will return a null printWriter in the following cases: 1) if the trace is not enabled for the specific backend from within WebSphere (e.g. WAS.databases=all=disabled, or com.ibm.ws.informix.logwriter=all=disabled ...) 2) if the backend requires a different mechanisim to enable JDBC logging/tracing e.g. Oracle, where special proprietary code will be used. if trace for the specific back end is enabled, and case 2 above doesn't apply, the method will return non null java.io.PrintWriter
Overrides:
getPrintWriter in class GenericDataStoreHelper
Returns:
non null java.io.PrintWriter if the a printWriter is to be set on the datasource (managedConnectionFactory instance) null otherwise.