2017-05-17 7 views
1

Mon programme fonctionnait parfaitement bien, jusqu'à ce que j'ai commencé à utiliser la persistance et avec le EntityManager@Inject.élément inattendu dans Persistence.xml Entitymanager injecter ne fonctionne pas

Il y a beaucoup d'erreurs lancées, mais je pense que celle-ci est la plus bloquante.

Cela dit quelque chose à propos d'un élément inattendu, mais je ne trouve rien d'utile en ligne à ce sujet.

Log:

Connected to server 
[2017-05-16 09:13:17,808] Artifact web-example:war exploded: Artifact is being deployed, please wait... 
mei 16, 2017 9:13:18 PM org.apache.tomee.catalina.TomcatWebAppBuilder deployWebApps 
INFO: using default host: localhost 
mei 16, 2017 9:13:18 PM org.apache.tomee.catalina.TomcatWebAppBuilder init 
INFO: ------------------------- localhost ->/
mei 16, 2017 9:13:18 PM org.apache.tomee.catalina.TomEEClassLoaderEnricher validateJarFile 
WARNING: jar '/Users/renzo/development/school/dea/spotitube/app/target/web-example-1.0-SNAPSHOT/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.1.Final.jar' contains offending class: javax.persistence.Entity. It will be ignored. 
mei 16, 2017 9:13:18 PM org.apache.tomee.catalina.TomEEClassLoaderEnricher validateJarFile 
WARNING: jar '/Users/renzo/development/school/dea/spotitube/app/target/web-example-1.0-SNAPSHOT/WEB-INF/lib/jboss-transaction-api_1.1_spec-1.0.1.Final.jar' contains offending class: javax.transaction.Transaction. It will be ignored. 
mei 16, 2017 9:13:18 PM org.apache.openejb.config.ConfigurationFactory configureApplication 
INFO: Configuring enterprise application: /Users/renzo/development/school/dea/spotitube/app/target/web-example-1.0-SNAPSHOT 
mei 16, 2017 9:13:18 PM org.apache.openejb.config.ReadDescriptors deploy 
SEVERE: Unable to load Persistence Unit from EAR: /Users/renzo/development/school/dea/spotitube/app/target/web-example-1.0-SNAPSHOT, module: file:/Users/renzo/development/school/dea/spotitube/app/target/web-example-1.0-SNAPSHOT/WEB-INF/classes/. Exception: unexpected element (uri:"http://xmlns.jcp.org/xml/ns/persistence", local:"persistence"). Expected elements are <{http://java.sun.com/xml/ns/persistence}persistence> 
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://xmlns.jcp.org/xml/ns/persistence", local:"persistence"). Expected elements are <{http://java.sun.com/xml/ns/persistence}persistence> 

/resources/META-INF/persistence.xml

<persistence 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 
http://xmlns.jcp.org/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_1.xsd" 
      version="2.1"> 
    <persistence-unit 
      name="mysql" 
      transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <class> 
      nl.han.dea.domain.User 
     </class> 

     <properties> 
      <property name="hibernate.archive.autodetection" value="class"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> 
      <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/> 
      <property name="hibernate.connection.url" 
         value="jdbc:mysql://localhost:3306/Spotitube?autoReconnect=true&amp;useSSL=false&amp;serverTimezone=UTC"/> 
      <property name="hibernate.connection.username" value="spotitube"/> 
      <property name="hibernate.connection.password" value="java"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.flushMode" value="FLUSH_AUTO"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 

    </persistence-unit> 
</persistence> 

pom.xml

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>nl.han.dea</groupId> 
    <artifactId>web-example</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>web-example</name> 

    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.6</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.2.6.Final</version> 
     </dependency> 
    </dependencies> 

    <properties> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
    </properties> 
</project> 

Répondre

2

Le problème se manifeste dans cette ligne du journal sortie:

Exception: élément inattendu (uri: "http://xmlns.jcp.org/xml/ns/persistence", local: "persistence").

éléments sont attendus < {http://java.sun.com/xml/ns/persistence} persistance

Cela nous dit, que leur est une incompatibilité avec les versions JPA 2.0 et 2.1. La raison de ce conflit réside dans la version plutôt ancienne d'Hibernate à laquelle vous faites référence dans le pom.xml présenté.

Hibernate 4.2.x ne supporte que JPA 2.0, alors que tomee 7.0.x attend un fournisseur JPA 2.1 comme vous l'avez dit donc avec un persistence.xml tel que présenté dans votre question:

persistance 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/persistance http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd http://xmlns.jcp.org/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_1.xsd " version =" 2.1" >

Pour plus de détails sur la prise en charge d'Hibernate par JPA, voir la page de téléchargement Hibernate ORM sur laquelle ces informations sont répertoriées.

Solution

Très probablement, en changeant la version d'Hibernate pour 4.3.x devrait guérir certains des problèmes que vous rencontrez. Voici comment la déclaration de dépendance pertinente devrait ressembler à:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.3.11.Final</version> 
</dependency> 

Si vous voulez moderniser votre application plus loin, donner Hibernate 5.2.x un essai. Pour la version actuelle, la déclaration de dépendance ressemble à:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>5.2.10.Final</version> 
</dependency 

Espérons que cela aide.

Add-On

Si vous voulez aller pour Hibernate 5.2.x dans un tomee> = 7.0.3 configuration, il est conseillé d'ajouter

<property name="tomee.jpa.cdi" value="false" /> 

à votre persistence.xml, comme sinon, le conteneur se plaindra des problèmes d'injection au démarrage. Pour plus de détails, voir this post et également here.

De plus, changer l'entrée <provider> au nouveau paquet/correct comme ceci:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>