Home > Enterprise >  Classes inside persistence.xml will be ignored
Classes inside persistence.xml will be ignored

Time:07-16

I have here a wildfly 24.0.1 (on OpenJDK 11) and a ear with following structure:

MyPrj.ear
|- MyPrj_EJB.jar
`- MyPrj_Web.war

My persistence.xml is placed in MyPrj.ear/MyPrj_EJB.jar/META-INF/persistence.xml. I'm sure the persistence.xml isn't anywhere else.

The persistence.xml has following contents:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="myPrj">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>java:/myPrj</jta-data-source>
    <class>my.prj.cfg.Config</class>
    <properties>
      <property name="eclipselink.query-results-cache" value="true"/>
      <property name="eclipselink.cache.shared.default" value="true"/>
      <property name="eclipselink.target-server" value="JBoss"/>
      <property name="eclipselink.weaving" value="false"/>
      <property name="jboss.as.jpa.providerModule" value="org.eclipse.persistence"/>
      <!--  property name="eclipselink.logging.level" value="FINE" /  -->
    </properties>
  </persistence-unit>
</persistence>

I'm sure that the persistence.xml can be readed, because if I put an invalid character into the persistence-unit name (like an "/": <persistence-unit name="/myPrj">) I get the following error while deploying the application:

Caused by: java.lang.IllegalArgumentException: WFLYJPA0043: Persistence unit name (/myPrj) contains illegal '/' character

So I'm assuming that my persistence.xml is put in the right place and can be read successfully.

But its seems that my <class>-definition will be ignored. Every time if I deploy the ear, I get in the wildfly log file:

...
2022-07-04 18:51:15,694 INFO  [org.jboss.as.jpa] (MSC service thread 1-4) WFLYJPA0002: Read persistence.xml for myPrj
2022-07-04 18:52:48,400 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 141) WFLYJPA0003: Starting Persistence Unit Service 'MyPrj.ear/MyPrj_EJB.jar#myPrj'
...
2022-07-04 18:53:16,182 WARN  [org.eclipse.persistence] (ServerService Thread Pool -- 184) session_manager_no_partition
...

If I start the application (open the web site) I get:

...
2022-07-04 18:57:45,366 INFO  [org.eclipse.persistence] (default task-1) EclipseLink, version: Eclipse Persistence Services - 2.6.0.v20150309-bf26070
2022-07-04 18:57:45,444 INFO  [org.eclipse.persistence.connection] (default task-1) 
    connecting(DatabaseLogin(
        platform=>PostgreSQLPlatform
        user name=> ""
        connector=>JNDIConnector datasource name=>null
    ))
2022-07-04 18:57:45,444 INFO  [org.eclipse.persistence.connection] (default task-1) 
    Connected: jdbc:postgresql://localhost:5432/myDB
        User: myUser
        Database: PostgreSQL  Version: 9.2.24
        Driver: PostgreSQL JDBC Driver  Version: 42.2.23
2022-07-04 18:57:45,444 INFO  [org.eclipse.persistence.connection] (default task-1) 
    connecting(DatabaseLogin(
        platform=>PostgreSQLPlatform
        user name=> ""
        connector=>JNDIConnector datasource name=>null
    ))
2022-07-04 18:57:45,444 INFO  [org.eclipse.persistence.connection] (default task-1) 
    Connected: jdbc:postgresql://localhost:5432/myDB
    User: myUser
    Database: PostgreSQL  Version: 9.2.24
    Driver: PostgreSQL JDBC Driver  Version: 42.2.23
2022-07-04 18:57:45,446 INFO  [org.eclipse.persistence.connection] (default task-1) 
    /vfs:/content/MyPrj.ear/MyPrj_EJB.jar/_myPrj login successful
2022-07-04 18:57:45,509 WARN  [org.eclipse.persistence.metamodel] (default task-1) The 
    collection of metamodel types is empty. Model classes may not have been found 
    during entity search for Java SE and some Java EE container managed persistence 
    units.  Please verify that your entity classes are referenced in persistence.xml 
    using either <class> elements or a global <exclude-unlisted- 
    classes>false</exclude-unlisted-classes> element
2022-07-04 18:57:45,606 ERROR [org.jboss.as.ejb3.invocation] (default task-1) 
    WFLYEJB0034: Jakarta Enterprise Beans Invocation failed on component ConfigDAO for 
    method public my.prj.cfg.Config 
    my.prj.cfg.ConfigDAO.loadByKey(java.lang.String): 
    javax.ejb.EJBTransactionRolledbackException: An exception occurred while creating 
    a query in EntityManager:
    Exception Description: Problem compiling [SELECT obj FROM Config obj WHERE 
    obj.key=:parKey].
    [16, 22] The abstract schema type 'Config' is unknown.
    [33, 40] The state field path 'obj.key' cannot be resolved to a valid type.
         at [email protected]//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:219)

Take also note of the warning 2022-07-04 18:57:45,509 WARN org.eclipse.persistence.metamodel] (default task-1) The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted- classes>false</exclude-unlisted-classes> element.

Also to use <exclude-unlisted-classes>false</exclude-unlisted-classes> instead of the <class>-definition makes no difference.

Here the @Resource annotation of the EntityManager:

@PersistenceContext(unitName="myPrj") 
private EntityManager em = null;

And the annotation of the Config entity:

@Entity(name="Config")
@Table(name = "Cfg")
public class Config implements Serializable {

  ...

  @Column(name="key")
  private String key = null;

  ...
}

On the same wildfly I have another EAR running (in a separate standalone instance) which also have JPA access to a database (also eclipselink via persistence.xml) which works without any problems.

What can be wrong here?

CodePudding user response:

Found it! After upgrading eclipselink to V2.7.10 (store eclipselink.jar into .../wildfly-24.0.1.Final/modules/system/layers/base/org/eclipse/persistence/main/) I can deploy and start the application. Not sure which version of eclipselink was used before that (the jar file name don't contains the version information ...)

Switching to eclipselink 3.0.2 don't works because of this problem: Wildfly 21 with eclipselink 3.0 getting error as Persistence Provider not found

  • Related