Flowertown Technology
Flowertown Technology

Reputation: 21

Wildfly 27 Migration (Jakarta EE 10) leads to startup issues

I am migrating from Wildfly 25 to Wildfly 30. However, lots of issues happened when trying that jump. I was able to go to 26 without any issues. However, going to 27, I have had a number of issues. I have updated to jakarta from javax. Everything now compiles ok. However, initialization now fails. Initialization appears to be determined by the web.xml file.

Here is the initial startup warning (followed by many similar ones) that I am seeing:

09:57:07,949 WARN  [org.jboss.modules.define] (MSC service thread 1-8) Failed to define class com.oberon.esg.server.SessionTimeoutCookieFilter in Module "deployment.esg.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link com/oberon/esg/server/SessionTimeoutCookieFilter (Module "deployment.esg.war" from Service Module Loader): javax/servlet/Filter
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1096)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:351)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
    at org.jboss.modules.Module.loadModuleClass(Module.java:765)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at [email protected]//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:21)
    at [email protected]//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:14)

        ...

However the class com.oberon.esg.server.SessionTimeoutCookieFilter is in the exploded war file: ./content-1570ca522c4f5e25/WEB-INF/classes/com/oberon/esg/server/SessionTimeoutCookieFilter.class

There are additional loading error messages for other filters and servlets that follow. So, I assume it has something to do with changes that have happened between Java EE 8 and Jakarta EE 10. However, I have not been able to narrow down what needs to be upgraded in my Wildfly configuration.

I'm not sure why the error mentions javax/servlet/Filter. I think I only refer jakarta.servlet in my code. Here is my web.xml:

<web-app
        xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
        version="6.0"
>
    <display-name>ESG WebApplication</display-name>

    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>

    <listener>
        <listener-class>com.pearson.esg.server.PRMSContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
        </listener-class>
    </listener>

    <filter>
        <filter-name>SessionTimeoutCookieFilter</filter-name>
        <filter-class>com.oberon.esg.server.SessionTimeoutCookieFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SessionTimeoutCookieFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    ...


</web-app>

Here is my pom.xml which I suppose might be pulling in dependencies to javax that I don't understand. However, IntelliJ doesn't see any:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pearson.prms</groupId>
    <artifactId>PRMS</artifactId>
    <version>SNAPSHOT</version>
    <packaging>war</packaging>

    <name>esg</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.javadoc.failOnError>false</maven.javadoc.failOnError>
    </properties>

    <distributionManagement>
        <repository>
            <id>maven2</id>
            <name>Maven Central Repo</name>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
        <snapshotRepository>
            <id>PearsonSnapshot</id>
            <name>PearsonSnapshot</name>
            <url>https://nexus2.pearsondev.com/nexus/content/repositories/PearsonSnapshot/</url>
        </snapshotRepository>
    </distributionManagement>

    <build>
        <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
        <finalName>esg</finalName>
        <resources>
            <resource>
                <directory>${basedir}/src/main/java/com/oberon/esg/util</directory>
                <includes>
                    <include>build.number</include>
                </includes>
                <targetPath>${basedir}/target/esg/WEB-INF/classes/com/oberon/esg/util</targetPath>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <targetPath>${basedir}/target/esg</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.4</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>wagon-maven-plugin</artifactId>
                <version>2.0.0</version>
                <executions>
                    <execution>
                        <id>upload-war-to-server</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>upload</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <fromDir>${project.build.directory}</fromDir>
                    <includes>esg.war</includes>
                    <toDir>dev-tools/wildfly-11.0.0.Final/standalone/deployments</toDir>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.20.0</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>6.2.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>6.2.6.Final</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
        </dependency>

        <dependency>
            <groupId>jakarta.xml.rpc</groupId>
            <artifactId>jakarta.xml.rpc-api</artifactId>
            <version>1.1.4</version>
        </dependency>

        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>jakarta.mail</groupId>
            <artifactId>jakarta.mail-api</artifactId>
            <version>2.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
            <version>6.2.6.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-fileupload2-jakarta</artifactId>
            <version>2.0.0-M1</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.14</version>
        </dependency>

        <dependency>
            <groupId>org.owasp.antisamy</groupId>
            <artifactId>antisamy</artifactId>
            <version>1.7.4</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.14</version>
        </dependency>

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.12.498</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>

        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>5.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.10.0</version>
        </dependency>

    </dependencies>

</project>

TIA!

Upvotes: 0

Views: 1036

Answers (1)

Flowertown Technology
Flowertown Technology

Reputation: 21

I found that javax was still being pulled into my war file by looking at the exploded, deployed war file. With a little bit of grep searching in my build area, I found javax was being pulled in by some old unittests. I removed my unit test directory and now I am seeing the initialization going properly:

17:04:38,242 DEBUG [org.jboss.as.ee] (MSC service thread 1-4) Configuring component class: com.oberon.esg.server.SessionTimeoutCookieFilter named com.oberon.esg.server.SessionTimeoutCookieFilter

Still having problems, but I am over one more hurdle.

Upvotes: 0

Related Questions