Configurando o QueryTimeout
É possível configurar um tempo limite de consulta na origem de dados de um aplicativo para que a instrução SQL (Structured Query Language) seja interrompida caso ela não conclua a execução antes do número de segundos especificado.
Antes de Iniciar
Sobre Esta Tarefa
- webSphereDefaultQueryTimeout estabelece um tempo limite de consulta padrão, que é o número de segundos que uma instrução SQL pode executar antes de atingir o tempo limite. Esse valor padrão é substituído durante uma transação Java™ Transaction API (JTA) se a propriedade customizada syncQueryTimeoutWithTransactionTimeout estiver ativada.
- syncQueryTimeoutWithTransactionTimeout usa o tempo restante (se houver) em uma transação JTA como o tempo limite de consulta padrão para instruções SQL.
- O tempo restante na transação JTA com base na configuração do tempo limite do TM (Transaction Manager) - syncQueryTimeoutWithTransactionTimeout
- o número absoluto de segundos especificado pela configuração - webSphereDefaultQueryTimeout
Procedimento
Resultados
Exemplo
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // o tempo limite de consulta de 20 segundos é usado
statement.executeUpdate(sqlcommand2); // o tempo limite de consulta de 20 segundos é usado
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // o tempo limite de consulta de 30 segundos é usado
// suponha que a operação acima levou 5 segundos, tempo restante = 30 - 5 segundos
statement.executeUpdate(sqlcommand4); // o tempo limite de consulta de 25 segundos é usado
// suponha que a operação acima levou 10 segundos, tempo restante = 25 - 10 segundos
statement.executeUpdate(sqlcommand5); // o tempo limite de consulta de 15 segundos é usado
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // o tempo limite de consulta de 20 segundos é usado
O
exemplo a seguir ilustra o efeito da configuração das propriedades customizadas
da origem de dados webSphereDefaultQueryTimeout = 20 e syncQueryTimeoutWithTransactionTimeout
= false. Quando somente webSphereDefaultQueryTimeout é
configurado, o valor de tempo limite padrão é usado para todas as instruções, independentemente
de serem executadas ou não dentro de uma transação a JTA:statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // o tempo limite de consulta de 20 segundos é usado
statement.executeUpdate(sqlcommand2); // o tempo limite de consulta de 20 segundos é usado
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // o tempo limite de consulta de 20 segundos é usado
// suponha que a operação acima levou 5 segundos
statement.executeUpdate(sqlcommand4); // o tempo limite de consulta de 20 segundos é usado
// suponha que a operação acima levou 10 segundos
statement.executeUpdate(sqlcommand5); // o tempo limite de consulta de 20 segundos é usado
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // o tempo limite de consulta de 20 segundos é usado
É
possível substituir o tempo limite de consulta para uma instrução a qualquer momento, chamando
a interface java.sql.Statement.setQueryTimeout a partir
de seu código do aplicativo.