Open jonaslimads opened 4 years ago
Thanks for the bug report. That one is gonna be fun to track. which version of java is that running against? could you check if there are more than one sfm-util jar? will try and reproduce and might get lucky - what is the frequency of that happening?
in the mean time if that is trouble you can disable the asm generatation - *Factory.useAsm(false)
it actually should not change the perf that much specially on a join
Hello,
We use Java 1.8.0_222 and Kotlin 1.3.61. Most of our code is in Kotlin compiled to Java, only jOOQ generated code is in Java. Also there is only one sfm-util (the full dependency tree is pasted below).
The error "Handler dispatch failed; nested exception is java.lang.NoSuchMethodError...." has been happening once a day for the past week. The interesting is that it only happens in one query, which has 56 columns, 1 join, 5 left joins and one discriminator; it has a two-level nested mapping, so the query maps to an objects and its properties objects/list of objects only as you can see in the ResourceRepository::getMapperKeys. That query is the only one with discriminator in the code, but I'm not sure if discriminator is related to the error. There are other big queries in some part of the code as well, but they don't trigger the error.
Let me now if you need more details. Thank you!
Some snippets:
BaseRepository.kt had - from now on we will add useAsm(false) after newInstance()
fun getMapper(): SelectQueryMapper<T> = getMapperFactory().newMapper(modelCls.java)
fun getMapperFactory(): SelectQueryMapperFactory =
SelectQueryMapperFactory.newInstance().ignorePropertyNotFound().addKeys(*getMapperKeys())
fun getJdbcMapper(): DynamicJdbcMapper<T> = getJdbcMapperFactory().newMapper(modelCls.java)
fun getJdbcMapperFactory(): JdbcMapperFactory = JdbcMapperFactory.newInstance().addKeys(*getMapperKeys())
fun getMapperKeys(): Array<String> = emptyArray()
ResourceRepository.kt (implements BaseRepository) which contains the query the triggers the error and discriminator:
override fun getMapperFactory(): SelectQueryMapperFactory = super.getMapperFactory()
.discriminator(Estimate::class.java)
.onColumn("resource_list_estimate_price", Double::class.java)
.with { builder ->
builder
.`when`({ it >= 0 }, ModelAEstimate::class.java)
.`when`({ true }, ModelBEstimate::class.java)
}
override fun getMapperKeys(): Array<String> = arrayOf("parent_resource_id",
"user_id",
"resource_list_resource_id",
"resource_list_user_id"
"item_list_item_id",
"address_list_address_id")
Runtime dependency tree:
+--- org.springframework.boot:spring-boot-devtools -> 2.2.2.RELEASE
| +--- org.springframework.boot:spring-boot:2.2.2.RELEASE
| | +--- org.springframework:spring-core:5.2.2.RELEASE
| | | \--- org.springframework:spring-jcl:5.2.2.RELEASE
| | \--- org.springframework:spring-context:5.2.2.RELEASE
| | +--- org.springframework:spring-aop:5.2.2.RELEASE
| | | +--- org.springframework:spring-beans:5.2.2.RELEASE
| | | | \--- org.springframework:spring-core:5.2.2.RELEASE (*)
| | | \--- org.springframework:spring-core:5.2.2.RELEASE (*)
| | +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| | +--- org.springframework:spring-core:5.2.2.RELEASE (*)
| | \--- org.springframework:spring-expression:5.2.2.RELEASE
| | \--- org.springframework:spring-core:5.2.2.RELEASE (*)
| \--- org.springframework.boot:spring-boot-autoconfigure:2.2.2.RELEASE
| \--- org.springframework.boot:spring-boot:2.2.2.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-web -> 2.2.2.RELEASE
| +--- org.springframework.boot:spring-boot-starter:2.2.2.RELEASE
| | +--- org.springframework.boot:spring-boot:2.2.2.RELEASE (*)
| | +--- org.springframework.boot:spring-boot-autoconfigure:2.2.2.RELEASE (*)
| | +--- org.springframework.boot:spring-boot-starter-logging:2.2.2.RELEASE
| | | +--- ch.qos.logback:logback-classic:1.2.3
| | | | +--- ch.qos.logback:logback-core:1.2.3
| | | | \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | | +--- org.apache.logging.log4j:log4j-to-slf4j:2.12.1
| | | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | | | \--- org.apache.logging.log4j:log4j-api:2.12.1
| | | \--- org.slf4j:jul-to-slf4j:1.7.29
| | | \--- org.slf4j:slf4j-api:1.7.29 -> 1.7.30
| | +--- jakarta.annotation:jakarta.annotation-api:1.3.5
| | +--- org.springframework:spring-core:5.2.2.RELEASE (*)
| | \--- org.yaml:snakeyaml:1.25
| +--- org.springframework.boot:spring-boot-starter-json:2.2.2.RELEASE
| | +--- org.springframework.boot:spring-boot-starter:2.2.2.RELEASE (*)
| | +--- org.springframework:spring-web:5.2.2.RELEASE
| | | +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| | | \--- org.springframework:spring-core:5.2.2.RELEASE (*)
| | +--- com.fasterxml.jackson.core:jackson-databind:2.10.1
| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.10.1
| | | \--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1
| | | +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | | \--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
| | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1
| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.10.1
| | | +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | | \--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
| | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1
| | +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | \--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
| +--- org.springframework.boot:spring-boot-starter-validation:2.2.2.RELEASE
| | +--- org.springframework.boot:spring-boot-starter:2.2.2.RELEASE (*)
| | +--- jakarta.validation:jakarta.validation-api:2.0.1
| | \--- org.hibernate.validator:hibernate-validator:6.0.18.Final
| | +--- org.jboss.logging:jboss-logging:3.3.2.Final -> 3.4.1.Final
| | \--- com.fasterxml:classmate:1.3.4 -> 1.5.1
| +--- org.springframework:spring-web:5.2.2.RELEASE (*)
| \--- org.springframework:spring-webmvc:5.2.2.RELEASE
| +--- org.springframework:spring-aop:5.2.2.RELEASE (*)
| +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| +--- org.springframework:spring-context:5.2.2.RELEASE (*)
| +--- org.springframework:spring-core:5.2.2.RELEASE (*)
| +--- org.springframework:spring-expression:5.2.2.RELEASE (*)
| \--- org.springframework:spring-web:5.2.2.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-jetty -> 2.2.2.RELEASE
| +--- jakarta.servlet:jakarta.servlet-api:4.0.3
| +--- jakarta.websocket:jakarta.websocket-api:1.1.2
| +--- org.eclipse.jetty:jetty-servlets:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-continuation:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-http:9.4.24.v20191120
| | | +--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | | \--- org.eclipse.jetty:jetty-io:9.4.24.v20191120
| | | \--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | \--- org.eclipse.jetty:jetty-io:9.4.24.v20191120 (*)
| +--- org.eclipse.jetty:jetty-webapp:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-xml:9.4.24.v20191120
| | | \--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | \--- org.eclipse.jetty:jetty-servlet:9.4.24.v20191120
| | \--- org.eclipse.jetty:jetty-security:9.4.24.v20191120
| | \--- org.eclipse.jetty:jetty-server:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-http:9.4.24.v20191120 (*)
| | \--- org.eclipse.jetty:jetty-io:9.4.24.v20191120 (*)
| +--- org.eclipse.jetty.websocket:websocket-server:9.4.24.v20191120
| | +--- org.eclipse.jetty.websocket:websocket-common:9.4.24.v20191120
| | | +--- org.eclipse.jetty.websocket:websocket-api:9.4.24.v20191120
| | | +--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | | \--- org.eclipse.jetty:jetty-io:9.4.24.v20191120 (*)
| | +--- org.eclipse.jetty.websocket:websocket-client:9.4.24.v20191120
| | | +--- org.eclipse.jetty:jetty-client:9.4.24.v20191120
| | | | +--- org.eclipse.jetty:jetty-http:9.4.24.v20191120 (*)
| | | | \--- org.eclipse.jetty:jetty-io:9.4.24.v20191120 (*)
| | | +--- org.eclipse.jetty:jetty-xml:9.4.24.v20191120 (*)
| | | +--- org.eclipse.jetty:jetty-util:9.4.24.v20191120
| | | +--- org.eclipse.jetty:jetty-io:9.4.24.v20191120 (*)
| | | \--- org.eclipse.jetty.websocket:websocket-common:9.4.24.v20191120 (*)
| | +--- org.eclipse.jetty.websocket:websocket-servlet:9.4.24.v20191120
| | | \--- org.eclipse.jetty.websocket:websocket-api:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-servlet:9.4.24.v20191120 (*)
| | \--- org.eclipse.jetty:jetty-http:9.4.24.v20191120 (*)
| +--- org.eclipse.jetty.websocket:javax-websocket-server-impl:9.4.24.v20191120
| | +--- org.eclipse.jetty:jetty-annotations:9.4.24.v20191120
| | | +--- org.eclipse.jetty:jetty-plus:9.4.24.v20191120
| | | | \--- org.eclipse.jetty:jetty-webapp:9.4.24.v20191120 (*)
| | | +--- org.eclipse.jetty:jetty-webapp:9.4.24.v20191120 (*)
| | | +--- org.ow2.asm:asm:7.2
| | | \--- org.ow2.asm:asm-commons:7.2
| | | +--- org.ow2.asm:asm:7.2
| | | +--- org.ow2.asm:asm-tree:7.2
| | | | \--- org.ow2.asm:asm:7.2
| | | \--- org.ow2.asm:asm-analysis:7.2
| | | \--- org.ow2.asm:asm-tree:7.2 (*)
| | +--- org.eclipse.jetty.websocket:javax-websocket-client-impl:9.4.24.v20191120
| | | \--- org.eclipse.jetty.websocket:websocket-client:9.4.24.v20191120 (*)
| | \--- org.eclipse.jetty.websocket:websocket-server:9.4.24.v20191120 (*)
| \--- org.mortbay.jasper:apache-el:8.5.49
+--- org.springframework.boot:spring-boot-starter-security -> 2.2.2.RELEASE
| +--- org.springframework.boot:spring-boot-starter:2.2.2.RELEASE (*)
| +--- org.springframework:spring-aop:5.2.2.RELEASE (*)
| +--- org.springframework.security:spring-security-config:5.2.1.RELEASE
| | +--- org.springframework.security:spring-security-core:5.2.1.RELEASE
| | | +--- org.springframework:spring-aop:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | | +--- org.springframework:spring-beans:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | | +--- org.springframework:spring-context:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | | +--- org.springframework:spring-core:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | | \--- org.springframework:spring-expression:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | +--- org.springframework:spring-aop:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | +--- org.springframework:spring-beans:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | +--- org.springframework:spring-context:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| | \--- org.springframework:spring-core:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| \--- org.springframework.security:spring-security-web:5.2.1.RELEASE
| +--- org.springframework.security:spring-security-core:5.2.1.RELEASE (*)
| +--- org.springframework:spring-aop:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| +--- org.springframework:spring-beans:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| +--- org.springframework:spring-context:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| +--- org.springframework:spring-core:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| +--- org.springframework:spring-expression:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
| \--- org.springframework:spring-web:5.2.1.RELEASE -> 5.2.2.RELEASE (*)
+--- org.springframework.boot:spring-boot-starter-jdbc -> 2.2.2.RELEASE
| +--- org.springframework.boot:spring-boot-starter:2.2.2.RELEASE (*)
| +--- com.zaxxer:HikariCP:3.4.1
| | \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| \--- org.springframework:spring-jdbc:5.2.2.RELEASE
| +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| +--- org.springframework:spring-core:5.2.2.RELEASE (*)
| \--- org.springframework:spring-tx:5.2.2.RELEASE
| +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| \--- org.springframework:spring-core:5.2.2.RELEASE (*)
+--- org.springframework.amqp:spring-amqp -> 2.2.2.RELEASE
| +--- org.springframework.retry:spring-retry:1.2.4.RELEASE
| \--- org.springframework:spring-core:5.2.2.RELEASE (*)
+--- org.springframework.amqp:spring-rabbit -> 2.2.2.RELEASE
| +--- com.rabbitmq:amqp-client:5.7.3
| | \--- org.slf4j:slf4j-api:1.7.26 -> 1.7.30
| +--- org.springframework.amqp:spring-amqp:2.2.2.RELEASE (*)
| +--- org.springframework:spring-context:5.2.2.RELEASE (*)
| +--- org.springframework:spring-messaging:5.2.2.RELEASE
| | +--- org.springframework:spring-beans:5.2.2.RELEASE (*)
| | \--- org.springframework:spring-core:5.2.2.RELEASE (*)
| \--- org.springframework:spring-tx:5.2.2.RELEASE (*)
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61
| +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61
| | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
| | \--- org.jetbrains:annotations:13.0
| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61 (*)
+--- org.jetbrains.kotlin:kotlin-reflect:1.3.61
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61 (*)
+--- com.fasterxml.jackson.module:jackson-module-kotlin -> 2.10.1
| +--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
| +--- com.fasterxml.jackson.core:jackson-annotations:2.10.1
| \--- org.jetbrains.kotlin:kotlin-reflect:1.3.50 -> 1.3.61 (*)
+--- javax.persistence:javax.persistence-api:2.2
+--- com.zaxxer:HikariCP:3.4.1 (*)
+--- org.apache.httpcomponents:httpclient:4.5.10
| +--- org.apache.httpcomponents:httpcore:4.4.12
| \--- commons-codec:commons-codec:1.11 -> 1.13
+--- io.springfox:springfox-swagger2:2.9.2
| +--- io.swagger:swagger-annotations:1.5.20
| +--- io.swagger:swagger-models:1.5.20
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.5 -> 2.10.1
| | +--- org.slf4j:slf4j-api:1.7.22 -> 1.7.30
| | \--- io.swagger:swagger-annotations:1.5.20
| +--- io.springfox:springfox-spi:2.9.2
| | \--- io.springfox:springfox-core:2.9.2
| | +--- net.bytebuddy:byte-buddy:1.8.12 -> 1.10.4
| | +--- com.google.guava:guava:20.0
| | +--- com.fasterxml:classmate:1.4.0 -> 1.5.1
| | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE
| | | +--- org.springframework:spring-beans:4.0.9.RELEASE -> 5.2.2.RELEASE (*)
| | | +--- org.springframework:spring-context:4.0.9.RELEASE -> 5.2.2.RELEASE (*)
| | | +--- org.springframework:spring-aop:4.0.9.RELEASE -> 5.2.2.RELEASE (*)
| | | \--- org.slf4j:slf4j-api:1.7.10 -> 1.7.30
| | \--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE
| | +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
| | \--- org.slf4j:slf4j-api:1.7.10 -> 1.7.30
| +--- io.springfox:springfox-schema:2.9.2
| | +--- io.springfox:springfox-core:2.9.2 (*)
| | \--- io.springfox:springfox-spi:2.9.2 (*)
| +--- io.springfox:springfox-swagger-common:2.9.2
| | +--- io.swagger:swagger-annotations:1.5.20
| | +--- io.swagger:swagger-models:1.5.20 (*)
| | +--- io.springfox:springfox-spi:2.9.2 (*)
| | +--- io.springfox:springfox-schema:2.9.2 (*)
| | +--- io.springfox:springfox-spring-web:2.9.2
| | | +--- com.google.guava:guava:20.0
| | | +--- com.fasterxml:classmate:1.4.0 -> 1.5.1
| | | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | | +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
| | | +--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
| | | \--- io.springfox:springfox-spi:2.9.2 (*)
| | +--- com.google.guava:guava:20.0
| | +--- com.fasterxml:classmate:1.4.0 -> 1.5.1
| | +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| | +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
| | \--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
| +--- io.springfox:springfox-spring-web:2.9.2 (*)
| +--- com.google.guava:guava:20.0
| +--- com.fasterxml:classmate:1.4.0 -> 1.5.1
| +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| +--- org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE (*)
| +--- org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE (*)
| \--- org.mapstruct:mapstruct:1.2.0.Final
+--- io.springfox:springfox-swagger-ui:2.9.2
| \--- io.springfox:springfox-spring-web:2.9.2 (*)
+--- javax.xml.bind:jaxb-api:2.3.1
| \--- javax.activation:javax.activation-api:1.2.0
+--- org.slf4j:slf4j-api:1.7.30
+--- ch.qos.logback:logback-core:1.2.3
+--- ch.qos.logback:logback-classic:1.2.3 (*)
+--- org.jooq:jooq:3.12.3
| +--- org.reactivestreams:reactive-streams:1.0.2 -> 1.0.3
| \--- javax.xml.bind:jaxb-api:2.3.0 -> 2.3.1 (*)
+--- org.jooq:jooq-codegen:3.12.3
| +--- org.jooq:jooq:3.12.3 (*)
| \--- org.jooq:jooq-meta:3.12.3
| \--- org.jooq:jooq:3.12.3 (*)
+--- org.jooq:jooq-meta:3.12.3 (*)
+--- org.simpleflatmapper:sfm-jdbc:8.2.1
| \--- org.simpleflatmapper:sfm-map:8.2.1
| \--- org.simpleflatmapper:sfm-reflect:8.2.1
| +--- org.simpleflatmapper:ow2-asm:6.2
| +--- org.simpleflatmapper:sfm-util:8.2.1
| \--- org.simpleflatmapper:sfm-converter:8.2.1
| \--- org.simpleflatmapper:sfm-util:8.2.1
+--- org.simpleflatmapper:sfm-jooq:8.2.1
| \--- org.simpleflatmapper:sfm-jdbc:8.2.1 (*)
+--- org.json:json:20190722
+--- com.braintreepayments.gateway:braintree-java:2.106.0
| +--- org.osgi:org.osgi.core:4.2.0
| +--- com.fasterxml.jackson.jr:jackson-jr-objects:2.9.9 -> 2.10.1
| | \--- com.fasterxml.jackson.core:jackson-core:2.10.1
| \--- org.apache.commons:commons-csv:1.4
+--- io.sentry:sentry-spring:1.7.29
| \--- io.sentry:sentry:1.7.29
| +--- org.slf4j:slf4j-api:1.7.24 -> 1.7.30
| \--- com.fasterxml.jackson.core:jackson-core:2.10.0 -> 2.10.1
\--- mysql:mysql-connector-java:8.0.18
@arnaudroger your feedback about adding *Factory.useAsm(false) was great, we haven't had any issues since then. Thanks a lot!
Hello,
first thanks for the great library. It's been quite easy to work with and the mapping from SQL to Java classes is great.
However we have lately been facing every now and then a random error below. We use:
Thanks a lot! Regards,