3
respostas

SQL Timeout - Programático

Estou com uma dúvida dentro dessa arquitetura Java Jakarta EE + JPA, tentei fazer uns teste para controle do tempo ao realizar uma operação no banco de dados.

Vi alguns exemplos utilizando incluindo uma nova propriedade no persistence.xml:

<properties>
   <property name="javax.persistence.query.timeout" value="1000"/>
</properties>

ou setendo uma sugestão de timeout na query:

query.setHint("javax.persistence.query.timeout", 1000);

É possível dentro desse contexto controlar esse tempo de espera ao realizar uma consulta no banco de dados?

3 respostas

Flavio, bom dia. Você gostaria de saber o tempo que ocorre a transação enquanto ela é processa o banco de dados?

Quando implementamos uma consulta via JDBC podemos ter o controle do tempo de execução de uma determinada consulta definindo o seu timeout.

Algo assim : https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setQueryTimeout(int)

Statement stmt  = c.createStatement();
 stmt.setQueryTimeout(10);
 stmt.execute(validateQuery);

Implementando com JPA dentro de um contexto JAVA EE, posso ter esse controle do tempo de execução em consultas individuais?

Flavio, boa tarde. Pelo que eu pesquisei, você pode usar a versão do persistence.xml para criar o timeout para todas as querys executadas (Querys nativas, JPQL's) ou inserir o setHint("javax.persistence.query.timeout", 50) para querys específicas. Deve-se tomar cuidado quando usar uma implementação específica, como o hibernate .setHint("org.hibernate.timeout", 1). Sabe-se que o hibernate é a implementação padrão do wildfly, porém deverá funcionar sem problemas, mas o glassfish usa o eclipselink, logo deve ocorrer um erro.

Você poderia testar com o setHint("javax.persistence.query.timeout", 50) e nos informar se funcionou?