javaspring-bootwildflyjooqjooq-codegen-maven

Deploying SpringBoot Jooq Appilcation to wildfly does not load Jooq classes


Hello i am trying to create a workflow engine

Project Structure is as follows

└── workflow-engine/
    ├── workflow-engine-server/
    │   ├── src
    │   └── pom.xml
    ├── workflow-engine-data/
    │   ├── src
    │   └── pom.xml
    ├── workflow-engine-example/
    │   ├── src
    │   └── pom.xml
    └── pom.xml

data is an empty project containing the generated jooq classes

server is the rest api, depending on data

example is an example implementation.

I am building the example exploded war file and deploying it to a locally setup wildfly 32 running inside intellij. I can deploy and start without any problems.

I have a rest endpoint

public ResponseEntity<Void> login(String username, String password) {
    if (!userRepository.exists(USER.USERNAME.eq(username))) {
        return ResponseEntity.of(
                ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "USERNAME_DOES_NOT_EXIST")
        ).build();
    }
    return null;
}

When sending a post request to the endpoint i get a large exception inside server log

23.05.2024 13:34:17 ERROR [               ErrorPageFilter] Forwarding to error page from request [/auth] due to exception ['void org.jooq.impl.TableImpl.<init>(org.jooq.Name, org.jooq.Schema, org.jooq.Table, org.jooq.Field[], org.jooq.Comment, org.jooq.TableOptions, org.jooq.Condition)']: java.lang.NoSuchMethodError: 'void org.jooq.impl.TableImpl.<init>(org.jooq.Name, org.jooq.Schema, org.jooq.Table, org.jooq.Field[], org.jooq.Comment, org.jooq.TableOptions, org.jooq.Condition)'
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.jooq.tables.User.<init>(User.java:75)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.jooq.tables.User.<init>(User.java:71)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.jooq.tables.User.<init>(User.java:96)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.jooq.tables.User.<clinit>(User.java:45)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.jooq.Tables.<clinit>(Tables.java:19)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//net.internalerror.rest.controller.AuthController.login(AuthController.java:22)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:925)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:830)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
        at deployment.workflow-engine-example-1.0.0-SNAPSHOT.war//org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
        at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
and about 200 more lines

When debugging i see: Class not loaded: net.internalerror.jooq.Tables Screenshot

Why is the class not loaded? How can i fix that?

Edit: i have noticed, that the jooq jar in the compiled war file are version 3.18.13, but the dependencies are all version 3.19.8


Solution

  • This error seems relevant:

    java.lang.NoSuchMethodError: 'void org.jooq.impl.TableImpl.<init>
    

    So, your generated code is trying to load a constructor that does not (yet) exist in your runtime library. This is typically the case when you generate your code with a newer version of jOOQ than the one you use as an ordinary dependency.