hi Guillaume, hi Everyone,

first: thanks for making Groovy! It simply is great!

I am using groovy.sql.Sql with a commons dbcp2 BasicDataSource and am 
encountering a stacktrace as in [2] below.  I do create many identical closures 
with different data, and I pass them all at once to ExecutorService.invokeAll.  
The closures are all using the same Sql instance.

I believe this is a race condition because it happens only when the database is 
over a network, and not when the database is local.

To work around I can set Sql.cacheNamedQueries = false.  Problem is reliably 
gone in this case.  So I guess the culprit is in [1], with my sql already being 
cached in namedParamSqlCache, but not yet in namedParamIndexPropCache?

Yours,
acefael



[1] the line in the source code

https://github.com/apache/incubator-groovy/blob/GROOVY_2_4_X/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java#L4407

[2] the stacktrace

java.lang.NullPointerException
        at java.util.ArrayList.<init>(ArrayList.java:168) ~[?:1.8.0]
        at groovy.sql.Sql.buildSqlWithIndexedProps(Sql.java:4422) 
~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql.checkForNamedParams(Sql.java:4369) 
~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql.getPreparedStatement(Sql.java:4360) 
~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql.getPreparedStatement(Sql.java:4439) 
~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql.execute(Sql.java:2366) ~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql.execute(Sql.java:2438) ~[groovy-all-2.4.5.jar:2.4.5]
        at groovy.sql.Sql$execute$1.call(Unknown Source) ~[?:?]
        at es.acefael.BaseMigration.execute(BaseMigration.groovy:2017) 
~[es-acefael-dostuff-SNAPSHOT.jar:?]


Reply via email to