No Persistence provider for EntityManager named X

Kababär

Top Contributor
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:

Code:
<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:

Code:
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

Code:
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)
com.mycompany.mavenproject2.beans.controller.servlets.LoginServlet.doPost(LoginServlet.java:32)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

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

Wo liegt mein Fehler?
 

Anhänge

  • vzstruct.JPG
    vzstruct.JPG
    28,9 KB · Aufrufe: 48

AndyJ

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

Code:
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

Top Contributor
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
 
Zuletzt bearbeitet:

SeriousD0nkey

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

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

Kababär

Top Contributor
Jap ist vorhanden..

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

Hier mal die vollständige pom

Code:
<?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

Top Contributor
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

Top Contributor
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

Code:
<?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

Top Contributor
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...

Ich probiere es nochmal aus mit der neuen pom

Mach das erst mal und meld dich dann wieder :)
 

Kababär

Top Contributor
Also unter Netbeans funktioniert es nicht.. unter Eclipse funktioniert es o_O

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... :D
 

Kababär

Top Contributor
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... :D Habe immer dort Probleme, wo andere es noch nie hatten :D
 

Ähnliche Java Themen

Neue Themen


Oben