1

I am trying to deploy applications currently running on WildFly 26.1.2.Final to WildFly 27.0.0.Final. The deployment fails with the following error:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."jee2ap102-ear.ear".FIRST_MODULE_USE: org.jboss.msc.service.StartException in service jboss.deployment.unit."jee2ap102-ear.ear".FIRST_MODULE_USE: WFLYSRV0153: Failed to process phase FIRST_MODULE_USE of deployment "jee2ap102-ear.ear"
    at org.jboss.as.server@19.0.0.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189)
    at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
    at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
    at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: jakarta.persistence.PersistenceException: WFLYJPA0057: PersistenceProvider 'org.eclipse.persistence.jpa.PersistenceProvider' not found
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.lookupProvider(PersistenceUnitServiceHandler.java:999)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.nextPhaseDependsOnPersistenceUnit(PersistenceUnitServiceHandler.java:1042)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.processor.PersistenceUnitServiceHandler.deploy(PersistenceUnitServiceHandler.java:138)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.processor.PersistenceBeginInstallProcessor.deploy(PersistenceBeginInstallProcessor.java:52)
    at org.jboss.as.server@19.0.0.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182)
    ... 8 more

I used the same configuration that I have been using for previous versions, that is:

  1. Copy eclipselink-2.7.8.jar to C:\wildfly-27.0.0.Final\modules\system\layers\base\org\eclipse\persistence\main.

  2. Modify the module.xml file in that directory to add the resource corresponding to eclipselink-2.7.8.jar. Now the file looks like this:

     <properties>
         <property name="jboss.api" value="public"/>
     </properties>
    
     <resources>
         <resource-root path="jipijapa-eclipselink-27.0.0.Final.jar"/>
         <resource-root path="eclipselink-2.7.8.jar">
             <filter>
                 <exclude path="javax/**" />
             </filter>
         </resource-root>
     </resources>
    
     <dependencies>
         <module name="java.logging"/>
         <module name="java.management"/>
         <module name="java.naming"/>
         <module name="jakarta.annotation.api"/>
         <module name="jakarta.enterprise.api"/>
         <module name="jakarta.json.api" optional="true"/>
         <module name="jakarta.persistence.api"/>
         <module name="jakarta.transaction.api"/>
         <module name="jakarta.validation.api"/>
         <module name="jakarta.xml.bind.api"/>
         <module name="org.antlr"/>
         <module name="org.apache.commons.collections"/>
         <module name="org.dom4j"/>
         <module name="org.jboss.as.jpa.spi"/>
         <module name="org.jboss.logging"/>
         <module name="org.jboss.vfs"/>
     </dependencies>
    

The persistence.xml file had no modifications; it looks like this:

<persistence
    version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="jee2ap102-ejb-pu" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/jee2ap102</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="eclipselink.target-server" value="JBoss"/>
            <property name="eclipselink.weaving" value="static"/>
        </properties>
    </persistence-unit>
</persistence>

I'm using the same eclipselink-2.7.8.jar for both WildFly 26 and 27. I'm sure class org.eclipse.persistence.jpa.PersistenceProvider is in that jar, but even so WildFly 27 can't find it.

EDIT 11/19/2022

I also tried using eclipselink 3.0.3. It also fails. This is the error message:

INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 18) WFLYJPA0003: Starting Persistence Unit Service 'jee2ap102-ear.ear/jee2ap102-ejb.jar#jee2ap102-ejb-pu'
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 18) MSC000001: Failed to start service jboss.persistenceunit."jee2ap102-ear.ear/jee2ap102-ejb.jar#jee2ap102-ejb-pu": org.jboss.msc.service.StartException in service jboss.persistenceunit."jee2ap102-ear.ear/jee2ap102-ejb.jar#jee2ap102-ejb-pu": java.lang.NoClassDefFoundError: java/rmi/RemoteException
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:199)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:129)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at org.wildfly.security.elytron-base@2.0.0.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:214)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:834)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.NoClassDefFoundError: java/rmi/RemoteException
    at org.eclipse.persistence//org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactoryImpl(PersistenceProvider.java:331)
    at org.eclipse.persistence//org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:316)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:367)
    at org.jboss.as.jpa@27.0.0.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:191)
    ... 10 more
Caused by: java.lang.ClassNotFoundException: java.rmi.RemoteException from [Module "org.eclipse.persistence" from local module loader @fb9c7aa (finder: local module finder @4c398c80 (roots: C:\wildfly-27.0.0.Final\modules,C:\wildfly-27.0.0.Final\modules\system\layers\base))]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:200)
    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)
    ... 14 more

At this point I tried adding java.management.rmi and java.rmi as module dependencies, but it didn't work with either of them.


I will be very grateful for any help in solving this problem.

Jorge Campins
  • 413
  • 1
  • 4
  • 11

3 Answers3

1

Take a look into the changelog:

We don’t plan to support Jakarta EE 8 in standard WildFly. The WildFly 26.1 releases will be the last that support EE 8.

Use Eclipselink 3.0.0 because it supports Jakarta EE 9 in which all namespaces have been adapted to jakarta.* in comparison to the old one javax.*.

enter image description here

kladderradatsch
  • 596
  • 5
  • 18
  • I updated the post. Please take a look. Using eclipselink 3.0.3 fails with a java.lang.ClassNotFoundException: java.rmi.RemoteException. I guess new dependencies must be added. – Jorge Campins Nov 19 '22 at 20:11
  • I tried adding java.management.rmi and java.rmi but it didn't work with either of them. – Jorge Campins Nov 19 '22 at 20:25
  • Now all JEE libraries have to be updated so they match the new package structure `jakarta.*` in Jakarta EE 9. Thus update them all, too. Actually, the Wildfly website should list them all. – kladderradatsch Nov 19 '22 at 22:58
  • 1
    @JorgeCampins did you find the solution? im running into exact same issue... – saham nadeem Feb 09 '23 at 07:27
1

add <module name="javax.api"/> to your dependencies, i also did not add the filter attribute to my resource-root as that caused an exception loop. Also, if you get a Failed to define class org.eclipse.persistence.jpa.rs.exceptions.JPARSExceptionMapper, add <module name="javax.ws.rs.api"/> to the dependencies as well.

Your final configured module.xml file should look like this:

<module name="org.eclipse.persistence" xmlns="urn:jboss:module:1.9">
    <properties>
        <property name="jboss.api" value="public"/>
    </properties>

    <resources>
        <resource-root path="jipijapa-eclipselink-27.0.0.Final.jar"/>
        <resource-root path="eclipselink.jar"/>
    </resources>

    <dependencies>
        <module name="java.logging"/>
        <module name="java.management"/>
        <module name="java.naming"/>
        <module name="javax.api"/>
        <module name="jakarta.annotation.api"/>
        <module name="jakarta.enterprise.api"/>
        <module name="jakarta.json.api" optional="true"/>
        <module name="jakarta.persistence.api"/>
        <module name="jakarta.transaction.api"/>
        <module name="jakarta.validation.api"/>
        <module name="jakarta.xml.bind.api"/>
        <module name="javax.ws.rs.api"/> 
        <module name="org.antlr"/>
        <module name="org.apache.commons.collections"/>
        <module name="org.dom4j"/>
        <module name="org.jboss.as.jpa.spi"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.vfs"/>
    </dependencies>
</module>
basamoahjnr
  • 145
  • 11
1

With Wildfly 27 and Eclipselink 4 the following updated module.xml works (see commented changes):

<module name="org.eclipse.persistence" xmlns="urn:jboss:module:1.9">
    <properties>
        <property name="jboss.api" value="public"/>
    </properties>

    <resources>
        <resource-root path="jipijapa-eclipselink-27.0.1.Final.jar"/>
        <!-- Added Eclipselink library  -->
        <resource-root path="eclipselink-4.0.0.jar"/>
    </resources>

    <dependencies>
        <module name="java.logging"/>
        <module name="java.management"/>
        <module name="java.naming"/>
        <!-- Added rmi dependency used by Eclipselink   -->
        <module name="java.rmi"/>
        <!-- Added desktop dependency used by Eclipselink  -->
        <module name="java.desktop"/>
        <module name="jakarta.annotation.api"/>
        <module name="jakarta.enterprise.api"/>
        <module name="jakarta.json.api" optional="true"/>
        <module name="jakarta.persistence.api"/>
        <module name="jakarta.transaction.api"/>
        <module name="jakarta.validation.api"/>
        <module name="jakarta.xml.bind.api"/>
        <module name="org.antlr"/>
        <module name="org.jboss.as.jpa.spi"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.vfs"/>
    </dependencies>
</module>
bonapat
  • 11
  • 2