/ / Získanie príležitostného „Nepodarilo sa overiť novovytvorené pripojenie“ Výnimka SQL na jar JDBCTemplate v TomEE - java, jar, tomee, tomee-7

Príležitostné "Nepodarilo sa overiť novo vytvorené spojenie" Výnimka SQL na jarnom JDBCTemplate v TomEE - java, spring, tomee, tomee-7

Mám v aplikácii TomEE (7.0.1) spustenú malú jarnú aplikáciu (4.3.5), ktorá hovorí s databázou Oracle (11) db.

Mám jednu triedu DAO, ktorá dokáže spracovať dva rôzne dotazy.

Mám na nich dve úlohy spojené s procesorom dotazovdotazy, v plánovači, každé každé dve minúty, jedno každé tri minúty. Keď som prvýkrát videl problém, ktorý budem opísať, mal som jednu naplánovanú úlohu, ktorá spúšťala obidva dotazy.

Obidva dotazy sú podobné, len sa vracajúrôzne stĺpce a agregáty v tej istej tabuľke. Tieto dva dotazy sú zostavené v kóde, ale nie sú skutočne dynamické. Komponenty sú relatívne statické. Overil som, že obidva dotazy sú v poriadku spustením debuggeru a vložením vygenerovaného dotazu do môjho prehľadávača SQL. Obe fungujú poriadku.

Keď spustím aplikáciu, niekoľkokrát získam výsledky z oboch dopytov. Potom som v denníku začal vidieť toto:

Jan 19, 2017 9:21:05 AM org.apache.tomcat.jdbc.pool.PooledConnection validate
WARNING: SQL Validation error
java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:973)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1041)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1909)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1871)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:318)
at org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:509)
at org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:443)
at org.apache.tomcat.jdbc.pool.ConnectionPool.testAllIdle(ConnectionPool.java:1049)
at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1371)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

Jan 19, 2017 9:21:05 AM org.apache.tomcat.jdbc.pool.PooledConnection validate
WARNING: SQL Validation error
java.sql.SQLException: Invalid SQL type: sqlKind = UNINITIALIZED
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:63)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1033)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1909)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1871)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:318)
at org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:509)
at org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:443)
at org.apache.tomcat.jdbc.pool.ConnectionPool.testAllIdle(ConnectionPool.java:1049)
at org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1371)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

Je to jednoznačne pri overovaní fondu, nie pri spúšťaní môjho dotazu.

Môj zdroj údajov v súbore tomee.xml vyzerá takto:

      <Resource id="tst36" type="DataSource">
testOnBorrow = true
testOnReturn = true
testWhileIdle = true
logValidationErrors = true
validationQuery = "select 1 from dual"
JdbcDriver = oracle.jdbc.OracleDriver
MaxActive = 10
MinIdle = 2
MaxIdle = 2
MaxWait = 10000
JdbcUrl = jdbc:...
UserName = ...
Password = ...
</Resource>

Čo tu môžem urobiť?

odpovede:

1 pre odpoveď č. 1

si si istý

validationQuery = "select 1 from dual"

čo si myslel? Nie je to tak

validationQuery = select 1 from dual