com.ibm.websphere.rsadapter
Class SybaseDataStoreHelper

java.lang.Object
  |
  +--com.ibm.websphere.rsadapter.GenericDataStoreHelper
        |
        +--com.ibm.websphere.rsadapter.SybaseDataStoreHelper
All Implemented Interfaces:
DataStoreHelper, java.io.Serializable
Direct Known Subclasses:
Sybase11DataStoreHelper

public class SybaseDataStoreHelper
extends GenericDataStoreHelper
implements java.io.Serializable

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

If you have any special Sybase 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
SybaseDataStoreHelper(java.util.Properties props)
          Constructor, the property is passed in case some info is needed in the future, for now this parameter is not used.
 
Method Summary
 void doConnectionSetup(java.sql.Connection conn)
          Check warnings from the connection to figure out whether the database provided really exists.
 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.
 void setUserDefinedMap(java.util.Map newmap)
          This method is used to add user defined error maps.
 java.lang.String showLockInfo(java.util.Properties props)
          This method returns lock information for Sybase.
 
Methods inherited from class com.ibm.websphere.rsadapter.GenericDataStoreHelper
calcPartitionNumber, doConnectionCleanup, getLockType, getMetaData, getResultSetConcurrency, getResultSetType, getXAExceptionContents, hasLostUpdateOrDeadLockOccurred, isBatchUpdateSupportedWithAccessIntent, isConnectionError, mapException, mapException, modifyXAFlag, processGenericCredentials
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SybaseDataStoreHelper

public SybaseDataStoreHelper(java.util.Properties props)
Constructor, the property is passed in case some info is needed in the future, for now this parameter is not used.
Parameters:
props - not used here, entry will be ignored
Method Detail

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.

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 Sybase 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 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_REPEATABLE_READ 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

showLockInfo

public final java.lang.String showLockInfo(java.util.Properties props)
                                    throws java.lang.Exception
This method returns lock information for Sybase. We depend on Sybase's mechanism to generate the lock information. Sybase puts this information into a result set. We extract the information from the result set and return it as a String.
Overrides:
showLockInfo in class GenericDataStoreHelper
Parameters:
props - Props should have the following data to establish a connection with Sybase:
  1. user - username that has a DBA authority, default if not specified = null
  2. password - default if non specified is : null
  3. serverName - server name where Sybase DB resides
  4. portNumber - port where Sybase listener is listening
  5. databaseName - database name, default if not specified is =
Returns:
Output string with locking info for Sybase.
Throws:
java.lang.Exception - Could range from java.io exceptions to javax.sql exceptions since we are running operations against the OS

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.
Overrides:
setUserDefinedMap in class GenericDataStoreHelper
Parameters:
newmap - 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.sybase.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.

doConnectionSetup

public void doConnectionSetup(java.sql.Connection conn)
                       throws java.sql.SQLException
Check warnings from the connection to figure out whether the database provided really exists. Sybase will connect you to the configured "default database" if the specified database does not exist If this happens throw an SQL exception with the contents of the warning.
Overrides:
doConnectionSetup in class GenericDataStoreHelper
Parameters:
conn - The Sybase JDBC connection
See Also:
DataStoreHelper.doConnectionSetup(Connection)