2017-06-19 1 views
0

Ich versuche Oracle-Datenbank in meiner Java-Webanwendung zu verwenden, aber ich bekomme den Fehler, wenn ich meinen Code als Java-Anwendung ausführen :Ausnahme im Thread "Haupt" javax.persistence.PersistenceException: Kein Persistence Provider für EntityManager namens databaseTest

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named databaseTest

hier ist mein Code nur ein einfacher Code ein Unternehmen Manager zu erstellen:

package com.sabir.test; 

import javax.persistence.Persistence; 

public class DatabaseService { 

    public static void main(String[] args) { 
     System.out.println("test"); 
     Persistence.createEntityManagerFactory("databaseTest"); 
    } 

} 

und hier ist meine persistence.xml Datei

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name= "databaseTest" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> 
      <property name="javax.persistence.jdbc.user" value="HR"/> 
      <property name="javax.persistence.jdbc.password" value="password"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

und hier ist dann erforderlich, wenn meine pom.xml-Datei:

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.sabir.test</groupId> 
    <artifactId>databaseTest</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>databaseTest Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>ojdbc6</artifactId> 
    <version>11.2.0.3</version> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.5.0-RC1</version> 
    <scope>compile</scope> 
</dependency> 

    </dependencies> 

    <repositories> 
    <repository> 
     <id>codelds</id> 
     <url>https://code.lds.org/nexus/content/groups/main-repo</url> 
    </repository> 
    <repository> 
    <id>oss.sonatype.org</id> 
    <name>OSS Sonatype Staging</name> 
    <url>https://oss.sonatype.org/content/groups/staging</url> 
</repository> 
<repository> 
    <id>EclipseLink</id> 
    <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url> 
</repository> 
    </repositories> 

    <build> 
    <finalName>databaseTest</finalName> 
    </build> 
</project> 

Ich weiß nicht, warum ich die Störung erhalte! hier ist auch Struktur meine Dateien:

[enter image description here

ich die Dateistruktur bin Verdacht besteht, aber nachdem ich viele Websites überprüft, ich glaube, dass dies die richtige ist. Ich habe auch den eclipslink in maven importiert, also glaube ich, dass das alles ist, was ich brauche, ich habe auch das Repository oder Orakel hinzugefügt.

meine Datenbank ist auch und läuft und ich kann aus dem Oracle-Entwickler-Tool

+0

'META-INF/persitence.xml' geht in' src/main/resources' (wie es eine Ressource für den Classpath ist, nicht eine Quelldatei). 'mvn package' wird das in' WEB-INF' einfügen. –

+0

das Problem weiterhin besteht nach wie vor! Wenn ich den DatabaseService.java als eine Anwendung ausführe, passiert der gleiche Fehler! irgendwelche Vorschläge ? und auch wenn ich es als Server laufen lasse, erhalte ich viele Fehler wie 19. Juni 2017 18.51.49 org.apache.catalina.loader.WebappClassLoaderBase findResourceInternal SCHWER: Ressourcenlesefehler: kann nicht geladen werden org/eclipse /persistence/internal/databaseaccess/ConnectionCustomizer.class. –

Antwort

0

Prüfen Sie zuerst abfragen, wenn Sie Maven Bibliotheken auf dem Build-Pfad haben. in Eclipse möchten Sie

Project Properties -> Java Build Path -> Libraries. 

gehen Wenn Sie unten überprüfen:

Sie haben keine Anbieter Sie sich beziehen auf Ihrem Classpath.

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

Ich schlage vor, die folgenden auf Ihre Abhängigkeiten (und entfernen Eclipse Abhängigkeit) hinzuzufügen:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

oder Änderung Eclipse Abhängigkeit

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>org.eclipse.persistence.jpa</artifactId> 
    <version>2.6.4</version> 
</dependency> 

Wie und wo erhalten Sie EntityManager aus EntityManagerFactory? Ich sehe nur, dass Sie nur Instanz von EntityManagerFactory erstellen. Es sollte

EntityManagerFactory emf = Persistence.createEntityManagerFactory("databaseTest"); 
EntityManager em = emf.createEntityManager(); 

Im Allgemeinen ist dieser Ansatz ist nur sinnvoll, wenn Sie in Java SE Umgebung Bootstrap möchten. Stattdessen könnten Sie Dependency Injection verwenden:

@PersistenceContext 
EntityManager em; 

oder

@PersistenceUnit(unitName="myUnit") 
EntityMangerFactory emf; 

dann in Ihre Methoden können Sie EntityManager wieder bekommen als

EntityManager em = emf.createEntityManager(); 

folgt Oder können Sie JNDI-Suche verwenden.

Verwandte Themen