JPA persistence.xml META-INF ne fonctionne pas correctement
Je suis perplexe quand il s'agit de l'emplacement de mon persistence.xml fichier. Je suis à l'aide de eclipselink 2.4 mon JPA 2.0 mise en œuvre et de mon persistence.xml situé en vertu de src/main/resources/META-INF/persistence.xml comme de nombreux postes de l'état.
La première question: Après la publication de mon serveur à l'intérieur de l'éclipse, je reçois un message d'erreur indiquant que mon persistence.xml n'est pas trouvé.
Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X'
is available in scope Webapp. Available persistence units: [] at
Voici le code de mon persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="X" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>localJTA</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-server" value="WebLogic"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
Si je déplace le META-INF à webapp/WEB-INF/classes/META-INF, puis ça marche! Je ne comprends pas quel est le problème.
J'ai vérifié les projets de build path et tout semble bon.
La deuxième question je vais avoir, c'est que mon annoté de la classe d'entité n'est pas détectée automatiquement par eclipselink. Dans mon JPA config j'ai Découvrir classes annotées automatiquement sélectionné.
J'ai aussi de la suite dans mon xml
<exclude-unlisted-classes>false</exclude-unlisted-classes>
Technologies utilisées: weblogic server 12c, EJB 3.1, JPA 2.0, M2E-WTP, et JSF 2.1
Mise à jour 1: Laissant META-INF sur le chemin src/main/resources/META-INF/persistence.xml et l'exécution de maven installer pour construire la guerre de fichier, le répertoire META-INF est correctement placé dans WEB-INF/classes/META-INF/persistence.xml comme il se doit (à l'intérieur de la guerre). Semble qu'il est seul et quand la webapp est construit et gère localement dans Eclipse. Quelqu'un peut-il m'expliquer cela?
Mise à jour 2: Laissant META-INF dans le répertoire src/main/resources
j'.e src/main/resources/META-INF/persistence.xml
et le suivant dans mon persistence.xml plutôt que d'une liste explicite de la classe d'entité
<exclude-unlisted-classes>false</exclude-unlisted-classes>
fonctionne SI je construis la guerre et de la déployer à travers la console weblogic via internet explorer. Pourquoi ne pas travailler à l'intérieur de l'éclipse!?
Mise à jour 3:
avez-vous d'inspecter ce qui se construit -Oui, à l'intérieur de l'Éclipse, j'ai à construire de façon automatique. En regardant dans le dossier de projet de je vois java package com, répertoire META-INF contenant persistence.xml et dossier de ressources qui sont sous la Webapp/target/classes.
Si la guerre est la même -Êtes-vous référant à la Webapp.la guerre dossier trouvé dans C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war ? Si donc la seule chose qui y est WEB-INF\lib\jsf-impl-2.1.7.jar
alors avez-vous d'inspecter le classpath être utilisé pour tester votre application dans Eclipse- Cette entrée est trouvé dans mon classpath comme prévu en vertu de la Webapp/.classpath
si l'persistence.xml dans le répertoire des ressources sur le chemin de la classe de première, il sera pris à la place de celui de votre guerre ou de l'un dans le bon répertoire - Ma compréhension est l'Éclipse sera la construction du projet, puis copier le contenu sur le serveur sans avoir à générer un fichier war.
Ici est ce qui est à la racine de l'maven généré Webapp.guerre:
Ici est ce qui est à la racine de la Webapp dossier de projet:
Ici est ce qui est à la racine de la Webapp.la guerre sous-DOSSIER C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war
si l'persistence.xml dans le répertoire des ressources sur le chemin de la classe de première, il sera pris à la place de celui de votre guerre ou de l'un dans le bon répertoire.- Pas sûr de ce que vous entendez par là. L'persistence.xml dans mes ressources/META-INF est celui que je veux ramassé. Pas sûr de ce qu'un fichier war de a à faire avec elle? De toute façon, ils doivent être de la même persistence.xml je ne le pense.
Toute aide est très appréciée!!
source d'informationauteur Padawan
Vous devez vous connecter pour publier un commentaire.
Section 8.2.1 de la JPA spec membres de "L'persistence.xml le fichier est situé dans le
Répertoire META-INF de la racine de l'unité de persistance." et plus tard "Les classes de persistance gérée peut être contenue dans la racine de l'unité de persistance; ou ils
peut être défini par référence—c'est à dire, en nommant les classes, de la classe, les archives ou les fichiers de mapping XML
(qui à son tour référence les classes) qui sont accessibles sur l'application classpath"
Donc la racine de l'unité de persistance est où le répertoire META-INF répertoire est. En plaçant les classes dans un répertoire classes, ils ne sont pas dans la racine de l'unité de persistance, et doit donc être explicitement nommé pour être inclus.
Je crois que vous avez au moins 2 questions ici.
1) Maven build
De votre projet maven structure pas Eclipse web du projet de la structure, de sorte qu'il doit être construit à l'aide de maven commandes, pas d'Éclipse de construire par défaut. (Je ne suis pas maven expert, donc merci de maven experts de sauter dedans et de commentaire, si ce n'est pas vrai). Ainsi, lorsque vous faites de construction automatique dans Eclipse, il ne sait pas qui doit copie de votre src/main/resources/META-INF/persistence.xml à l'WEB-INF/classes/META-INF/persistence.xml et juste compile les classes java.
2) Déploiement
Si vous suivez le projet Eclipse de la structure, puis Eclipse sait comment emballer et de les ajouter à votre projet sur le serveur, lorsque vous sélectionnez "Ajouter au serveur". Si vous utilisez maven, puis intégrées guerre est généralement dans le répertoire cible. Donc, encore une fois, vous aurait besoin à l'exportation de la guerre et de l'installer à l'aide de WebLogic outils, ou de l'installer via maven tâche.
Vérifier WebLogic Server avec Maven et Eclipse comment Oracle suggère d'utiliser Eclipse avec WebLogic et Maven
Vous ne mentionnez jamais maven, donc je ne sais pas si c'est dans votre assiette; il ne fonctionnait pas pour moi avec maven jusqu'à ce que j'ai ajouté de la mise en veille prolongée-entitymanager dépendance. Mon pom.xml seulement avait hibernate-core. Après j'ai ajouté de la mise en veille prolongée-entitymanager puis il a commencé à travailler (pour mon test).
Vérifier si le persistence.xml est à l'intérieur de votre guerre. Ou il n'est pas ou il est, mais dans un mauvais endroit.
Vous pouvez également placer ce fichier à l'intérieur java/main/resources dossier de sorte qu'il sera placé dans votre classpath