# No Persistence provider for EntityManager named X



## Kababär (28. Mrz 2017)

Hi,

beim Umzug eines normalen Java-Projekts auf ein Web-App-Projekt stoße ich auf ein Problem..

Mittels Netbeans habe ich mir in einem Web-App Projekt Controller-Klassen erstellt und versuche nun die persistence.xml zu laden.
Diese liegt im Ordner META-INF und sieht so aus:


```
<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="TDT" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    [Klassen ...]
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dbName?zeroDateTimeBehavior=convertToNull"/>
      [Properties]
    </properties>
  </persistence-unit>
</persistence>
```

Die von Netbeans erstellte Kontroller-Klasse sieht so aus:


```
public class UsersJpaController implements Serializable {

    public UsersJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
...
...
...
}
```

In der Zeile


```
UsersJpaController ujc = new UsersJpaController(Persistence.createEntityManagerFactory("TDT"));
```

in meinem Servlet fliegt dann folgender Fehler:



> javax.persistence.PersistenceException: No Persistence provider for EntityManager named TDT
> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
> javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
> com.mycompany.mavenproject2.util.Validation.checkUser(Validation.java:19)
> ...



Das Projekt ein Maven-Projekt. Was mich verwirrt ist, dass es bei meinem normalen Maven-JavaFX-Projekt funktioniert..

Wo liegt mein Fehler?


----------



## AndyJ (29. Mrz 2017)

Ich kenn mich mit NetBeans nicht aus. Die Maven Struktur sollte aber so aussehen:


```
project
    |-- src
            |-- main
                    |-- java
                    |-- resources
                              |-- META-INF
                    |-- webapp
                            |-- META-INF
                            |-- WEB-INF
            |-- test
                    |-- java
                    |-- resources
                            |-- META-INF
    |-- target
            |-- classes
    |-- pom.xml
```

Das Problem ist vermutlich, dass deine persistence.xml nicht auf dem Classpath ist (angenommen du startest das aus deiner IDE).

Cheers,
Andy


----------



## Kababär (29. Mrz 2017)

Die Struktur dürfte stimmen. Ist etwas anders dargestellt als in eclipse. Dieses other resources-> ... -> persistence.xml entspricht genau dem src/main/resources.

Die persistence.xml liegt auch oberhalb des classes Order, wird also beim compilen/builden nicht ignoriert.

Vielleicht liegt es an meiner Maven configuration? Ich gucke mir das später nochmal an wenn ich Zuhause bin und poste mal meine pom


----------



## SeriousD0nkey (29. Mrz 2017)

Den Hibernate-Entitymanager hast du auch als Dependency in deiner POM? 


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


----------



## Kababär (29. Mrz 2017)

Jap ist vorhanden..


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

Hier mal die vollständige pom


```
<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany</groupId>
    <artifactId>mavenproject2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>mavenproject2</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
   
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.6.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.193</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.8.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.56</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
        </dependency>
        <dependency>
            <groupId>opencv3</groupId>
            <artifactId>ocv3</artifactId>
            <version>1</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>

      
        <!-- Database -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
      
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>unknown-jars-temp-repo</id>
           <name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository.</name>
            <url>file:${project.basedir}/lib</url>
        </repository>
    </repositories>
</project>
```


----------



## stg (29. Mrz 2017)

Das Java EE 7 Web profile enthält bereits die Persistence API 2.1. Ich glaube nichts, dass du Version 1.0.2 wirklich noch benutzen willst?!
Ob das hier Probleme macht, weiß ich nicht, aber ich würde die Abhängigkeit zur JPA 1.0.2 so oder so komplett löschen.
Die Abhängigkeit zu Hibernate-Entitymanager sieht ebenfalls falsch aus, wenn du hibernate-core (in einer halbwegs aktuellen Version, wie du es tust) nutzt. Also ebenfalls die Abhängigkeit zu hibernate-entitymanager löschen.


----------



## Kababär (29. Mrz 2017)

Zugegeben, die dependencies habe ich mir aus sämtlichen Tutorials und Beispielen und Foren (stackoverflow) zusammengewurstelt. Als Anfänger hat man da ja überhaupt keinen Überblick was jetzt gebraucht wird und was nicht.

Aber mal vorneweg:
Den Entity-Manager brauche ich doch für den Provider? Dachte der lädt für mich die provider.jar herunter.

Aktuelles pom


```
<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany</groupId>
    <artifactId>mavenproject2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>mavenproject2</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
   
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.3.0.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.8.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.56</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
        </dependency>
        <dependency>
            <groupId>opencv3</groupId>
            <artifactId>ocv3</artifactId>
            <version>1</version>
        </dependency>
      
        <!-- Database -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
       
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>unknown-jars-temp-repo</id>
            <name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository.</name>
            <url>file:${project.basedir}/lib</url>
        </repository>
    </repositories>
</project>
```

Liegt das Problem eventuell an endorsed oder wird das tatsächlich benötigt?

Ich probiere es nochmal aus mit der neuen pom


----------



## stg (29. Mrz 2017)

Kababär hat gesagt.:


> Den Entity-Manager brauche ich doch für den Provider? Dachte der lädt für mich die provider.jar herunter.



Hibernate ist der JPA Provider deiner Wahl, das ist schon richtig. Alle benötigten Implementierungen (inklusive der des EntityManagers) finden sich in hibernate-core. hibernate-entitymanager ist deprecated. Die Version, die du da in deiner POM stehen hattest ist zudem drei Jahre alt...



Kababär hat gesagt.:


> Ich probiere es nochmal aus mit der neuen pom



Mach das erst mal und meld dich dann wieder


----------



## SeriousD0nkey (30. Mrz 2017)

stg hat gesagt.:


> Alle benötigten Implementierungen (inklusive der des EntityManagers) finden sich in hibernate-core. hibernate-entitymanager ist deprecated.


Okay, das hatte ich auch nicht auf dem Schirm. Sorry  Aber gut zu wissen.


----------



## Kababär (31. Mrz 2017)

Also unter Netbeans funktioniert es nicht.. unter Eclipse funktioniert es 

Werde ich dann mal wieder bei Eclipse eintauchen, solange bis ich auf eine Funktion treffe die nicht funktioniert. Dann wandere ich wie üblich wieder zu Netbeans bis...


----------



## thecain (31. Mrz 2017)

Das macht keinen Sinn. Die IDE sollte nichts mit dem Code zu tun haben.


----------



## Kababär (31. Mrz 2017)

Denke es ist eine Konfigurationssache. Das einzige was sein könnte, ist, dass die persistence.xml doch woanders hin muss. Aber hab schon mehrfach im Internet geguckt und als Lösung wurde immer der Ordner angepriesen, indem sich jetzt die persistence.xml befindet.. suspekt finde ich das ja auch.
Aber ich bin es gewöhnt, suspekte Dinge hinzubekommen...  Habe immer dort Probleme, wo andere es noch nie hatten


----------



## stg (1. Apr 2017)

Kababär hat gesagt.:


> Das einzige was sein könnte, ist, dass die persistence.xml doch woanders hin muss.



Und was hat das mit der IDE zu tun?


----------



## Kababär (1. Apr 2017)

Ich zitiere mich mal selbst:


Kababär hat gesagt.:


> Denke es ist eine Konfigurationssache.


Dazu gehört doch auch die Struktur oder?

Seltsam ist es trotzdem. Aber solange es funktioniert..


----------



## stg (1. Apr 2017)

Kababär hat gesagt.:


> Dazu gehört doch auch die Struktur oder?



Ja, aber das hat doch nichts mit der IDE zu tun... 
(und ja, wir drehen uns im Kreis)


----------

