com.atomikos.jdbc.JdbcConnectionProxyHelper Maven / Gradle / Ivy
/**
* Copyright (C) 2000-2017 Atomikos
*
* LICENSE CONDITIONS
*
* See http://www.atomikos.com/Main/WhichLicenseApplies for details.
*/
package com.atomikos.jdbc;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.SQLException;
import com.atomikos.datasource.pool.CreateConnectionException;
import com.atomikos.logging.Logger;
import com.atomikos.logging.LoggerFactory;
public class JdbcConnectionProxyHelper {
private static final Logger LOGGER = LoggerFactory.createLogger(JdbcConnectionProxyHelper.class);
/**
* Converts a driver error (generic exception) into an appropriate
* SQLException or RuntimeException.
*
* @param ex The driver exception.
* @param msg The message to use in the logs and conversion.
*/
public static void convertProxyError(Throwable ex, String msg)
throws SQLException {
if ( ex instanceof Error ) {
Error err = ( Error ) ex;
LOGGER.logWarning ( msg , err );
throw err;
} else if ( ex instanceof RuntimeException ) {
RuntimeException rte = ( RuntimeException ) ex;
LOGGER.logWarning ( msg , ex );
throw rte;
} else if ( ex instanceof SQLException ) {
SQLException driverError = ( SQLException ) ex;
LOGGER.logWarning ( msg , ex );
throw driverError;
} else if ( ex instanceof InvocationTargetException ) {
InvocationTargetException ite = ( InvocationTargetException ) ex;
Throwable cause = ite.getCause();
if ( cause != null ) {
//log as debug and let the convert do the rest for the cause
if ( LOGGER.isTraceEnabled() ) LOGGER.logTrace ( msg , ite );
convertProxyError ( cause , msg );
}
else {
//cause is null -> throw AtomikosSQLException?
AtomikosSQLException.throwAtomikosSQLException ( msg , ite );
}
}
//default: throw AtomikosSQLException
AtomikosSQLException.throwAtomikosSQLException ( msg , ex );
}
public static void setIsolationLevel ( Connection connection , int defaultIsolationLevel )
throws CreateConnectionException
{
if (defaultIsolationLevel < 0)
return;
try {
if ( LOGGER.isDebugEnabled() ) LOGGER.logDebug ( "setting isolation level to " + defaultIsolationLevel);
connection.setTransactionIsolation ( defaultIsolationLevel );
}
catch (SQLException ex) {
LOGGER.logWarning ( "cannot set isolation level to " + defaultIsolationLevel, ex);
throw new CreateConnectionException ( "The configured default isolation level " + defaultIsolationLevel +
" seems unsupported by the driver - please check your JDBC driver documentation?" , ex );
}
}
}