use of fish.payara.jdbc.SlowSQLLogger in project Payara by payara.
the class ManagedConnectionImpl method getConnection.
/**
* Creates a new connection handle for the underlying physical
* connection represented by the <code>ManagedConnectionImpl</code> instance.
*
* @param sub <code>Subject</code> parameter needed for authentication
* @param cxReqInfo <code>ConnectionRequestInfo</code> carries the user
* and password required for getting this connection.
* @return Connection the connection handle <code>Object</code>
* @throws ResourceException if there is an error in allocating the
* physical connection from the pooled connection
* @throws javax.resource.spi.SecurityException
* if there is a mismatch between the
* password credentials or reauthentication is requested
*/
@Override
public Object getConnection(Subject sub, javax.resource.spi.ConnectionRequestInfo cxReqInfo) throws ResourceException {
logFine("In getConnection");
checkIfValid();
/**
* Appserver any way doesnt bother about re-authentication today. So commenting this out now.
* com.sun.gjc.spi.ConnectionRequestInfo cxRequestInfo = (com.sun.gjc.spi.ConnectionRequestInfo) cxReqInfo;
* PasswordCredential passwdCred = SecurityUtils.getPasswordCredential(this.mcf, sub, cxRequestInfo);
*
* if(SecurityUtils.isPasswordCredentialEqual(this.passwdCredential, passwdCred) == false) {
* throw new javax.resource.spi.SecurityException("Re-authentication not supported");
* }
*/
// GJCINT
getActualConnection();
ManagedConnectionFactoryImpl spiMCF = (ManagedConnectionFactoryImpl) mcf;
String statementTimeoutString = spiMCF.getStatementTimeout();
if (statementTimeoutString != null) {
int timeoutValue = Integer.parseInt(statementTimeoutString);
if (timeoutValue >= 0) {
statementTimeout = timeoutValue;
}
}
if (sqlTraceDelegator == null) {
if ((requestTracing != null && requestTracing.isRequestTracingEnabled()) || (isSlowQueryLoggingEnabled())) {
sqlTraceDelegator = new SQLTraceDelegator(spiMCF.getPoolName(), spiMCF.getApplicationName(), spiMCF.getModuleName());
}
}
if (sqlTraceDelegator != null) {
if (requestTracing != null && requestTracing.isRequestTracingEnabled()) {
// This method will only register a request tracing listener
// if one doesn't already exist
sqlTraceDelegator.registerSQLTraceListener(new RequestTracingListener());
} else {
/**
* If request tracing is not enabled, but there is a SQL trace
* delegator, deregister the request tracing listener if one is
* registered.
*/
sqlTraceDelegator.deregisterSQLTraceListener(RequestTracingListener.class);
}
if (!isSlowQueryLoggingEnabled()) {
sqlTraceDelegator.deregisterSQLTraceListener(SlowSQLLogger.class);
sqlTraceDelegator.deregisterSQLTraceListener(SQLTraceStoreAdapter.class);
} else {
sqlTraceDelegator.registerSQLTraceListener(new SlowSQLLogger(getSlowQueryThresholdInMillis(), TimeUnit.MILLISECONDS));
sqlTraceDelegator.registerSQLTraceListener(new SQLTraceStoreAdapter());
}
/**
* If there are no longer any listeners registered, set the
* delegator to null to prevent
* JdbcObjectsFactory().getConnection(...) from using a profiled
* wrapper unnecessarily.
*/
if (!sqlTraceDelegator.listenersRegistered()) {
sqlTraceDelegator = null;
}
}
myLogicalConnection = spiMCF.getJdbcObjectsFactory().getConnection(actualConnection, this, cxReqInfo, spiMCF.isStatementWrappingEnabled(), sqlTraceDelegator);
// TODO : need to see if this should be executed for every getConnection
if (!initSqlExecuted) {
// Check if Initsql is set and execute it
String initSql = spiMCF.getInitSql();
executeInitSql(initSql);
}
incrementCount();
isClean = false;
myLogicalConnection.setActive(true);
return myLogicalConnection;
}
Aggregations