2013-06-13 13 views
12

stumped quando si tratta della posizione del mio file persistence.xml. Sto usando eclipselink 2.4 come mia implementazione JPA 2.0 e ho il mio persistence.xml che si trova sotto src/main/resources/META-INF/persistence.xml come molti messaggi di stato.JPA persistence.xml META-INF non funziona correttamente

Il primo numero: Dopo la pubblicazione sul mio server all'interno di eclipse, viene visualizzato un errore che indica che il mio persistence.xml non è stato trovato.

Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X' 
is available in scope Webapp. Available persistence units: [] at 

enter image description here

Ecco il codice per il mio 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> 

Se mi muovo META-INF per webapp/WEB-INF/classes/META-INF allora funziona ! Non riesco a capire quale sia il problema.

enter image description here

Ho controllato i progetti di costruire il percorso e tutto sembra a posto lì.

enter image description here

La seconda questione che sto avendo è che la mia classe di entità annotato non viene prelevato automaticamente dal EclipseLink. Nella mia configurazione JPA ho selezionato automaticamente le classi annotate.

enter image description here

Ho anche il seguente nel mio xml

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

tecnologie utilizzate: WebLogic Server 12c, EJB 3.1, JPA 2.0, M2E-WTP, e JSF 2.1

Aggiornamento 1: Lasciando META-INF sul percorso src/main/resources/META-INF/persistence.xml e l'esecuzione di Maven installazione per creare il file di guerra, la cartella META-INF sia posizionato correttamente in WEB-INF/classes/META INF/persistenza. xml come dovrebbe essere (all'interno della guerra). Sembra che sia solo ed è un problema quando la webapp viene creata ed eseguita localmente in Eclipse. Qualcuno può spiegarlo?

Aggiornamento 2: Lasciando META-INF in src/main/risorse cioè src/main/resources/META-INF/persistence.xml e di seguito nel mio persistence.xml piuttosto che esplicitamente messa in vendita la classe di entità

<exclude-unlisted-classes>false</exclude-unlisted-classes> 

funziona SE costruisco la guerra e la distribuisca tramite la console weblogic tramite Internet Explorer. Perché non funziona all'interno di Eclipse !?

Update 3:
hai ispezionare ciò che viene costruito -Sì, all'interno di Eclipse devo costruire insieme a automaticamente. Guardando nella cartella del progetto, vedo il pacchetto java com, la cartella META-INF contenente persistence.xml e la cartella delle risorse in Webapp/target/classes.
Se la guerra è lo stesso -Sei riferendosi al Webapp.cartella war trovata in C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war? Se è così, l'unica cosa lì dentro è WEB-INF \ lib \ jsf-impl-2.1.7.jar
poi hai ispezionato il classpath usato per testare la tua app in Eclipse - Questa voce si trova nel mio classpath come previsto in Webapp/.classpath
se il persistence.xml nella directory delle risorse si trova sul classpath per primo, verrà prelevato al posto di quello in war o in quello nella directory corretta - La mia comprensione è Eclipse costruirà il progetto, quindi copierà il contenuto sul server senza generare un file di guerra.

Ecco ciò che è alla radice del Maven generato Webapp.war:

enter image description here

Ecco cosa è alla radice della cartella di progetto Webapp:

enter image description here

Ecco cosa c'è nella root di Webapp.war FOLDER in C: \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ Weblogic12cDomain_auto_generated_ear_ \ Webapp.war

enter image description here

se il persistence.xml nella directory risorsa è nel classpath in primo luogo, saranno raccolti al posto di quello in guerra o uno nella directory corretta. - Non sei sicuro di cosa intendi con questo. Il persistence.xml nella mia risorsa/META-INF è quello che voglio prelevare. Non sei sicuro di cosa ha a che fare un file di guerra? In entrambi i casi dovrebbero essere la stessa persistenza.xml, penserei.

Qualsiasi aiuto è MOLTO apprezzato !!

risposta

5

La sezione 8.2.1 della specifica JPA specifica "Il file persistence.xml si trova nella directory META-INF della directory principale dell'unità di persistenza." e in seguito "Le classi di persistenza gestite possono essere contenute nella radice dell'unità di persistenza oppure esse possono essere specificate mediante riferimento, ovvero denominando classi, archivi di classi o file di mapping XML (che a loro volta classi di riferimento). che sono accessibili sul classpath dell'applicazione "

Quindi la radice dell'unità di persistenza è dove si trova la directory di directory META-INF. Inserendo le classi in una directory di classi, non si trovano nella radice dell'unità di persistenza e pertanto devono essere esplicitamente denominate per essere incluse.

+0

Thx Chris! questo ha senso, tuttavia non funziona in eclipse! =/Si prega di vedere i miei aggiornamenti. – Padawan

+0

Chris puoi per favore cambiare la tua risposta ad un commento in modo che gli altri non pensino che la domanda abbia avuto risposta? – Padawan

+0

Se non è quello che cerchi e vuoi più esposizione, metti una taglia su di essa, o fai quello che hai fatto - chiedi di nuovo con più o informazioni diverse. Hai detto che questo si verifica solo "quando si costruisce in Eclipse" - hai ispezionato ciò che viene costruito? Se la guerra è la stessa, hai ispezionato il classpath utilizzato per testare la tua app in Eclipse? se il persistence.xml nella directory delle risorse è prima sul classpath, verrà prelevato al posto di quello in war o di uno nella directory corretta. – Chris

2

Non fai mai menzione di persone, quindi non so se è nel tuo piatto; non funzionava per me con Maven fino a quando non ho aggiunto la dipendenza da Hibernate-entitymanager. Il mio pom.xml aveva solo l'hibernate-core. Dopo aver aggiunto Hibernate-entitymanager, ha iniziato a funzionare (per il mio test).

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.1.Final</version> 
</dependency> 

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

Controlla se il persistence.xml è all'interno della tua guerra. O non lo è o lo è, ma in una posizione sbagliata. Puoi anche posizionare questo file all'interno della cartella java/main/resources in modo che venga inserito nel tuo classpath

4

Credo che tu abbia almeno 2 problemi qui.

1) Maven costruire

Il vostro progetto ha Maven struttura non Eclipse struttura del progetto web, quindi deve essere costruire utilizzando i comandi Maven, non Eclipse costruire per impostazione predefinita. (Non sono esperto di esperti, quindi per favore gli esperti di missioni saltano dentro e commentano, se non è vero). Quindi, quando esegui la compilazione automatica in Eclipse, non è sicuro che copi il tuo src/main/resources/META-INF/persistence.xml nel WEB-INF/classes/META-INF/persistence.xml e compili solo java classi.

2) Distribuzione

Se si segue la struttura del progetto Eclipse, quindi Eclipse sa come imballare e aggiungere il progetto al server, quando si seleziona 'Aggiungi al server'. Se stai usando Maven, la tua guerra costruita di solito è nella directory di destinazione. Quindi, di nuovo, avresti bisogno di esportare questa guerra e installarla usando gli strumenti di WebLogic, oppure installarla tramite task Maven.

check WebLogic Server with Maven and Eclipse come Oracle suggerisce di usare Eclipse con WebLogic e Maven

+0

Ho Tomcat7 (OpenJPA2.x) e IBM WAS 8.5.5 (OpenJPA 2.x), webapp non è jta (resource_local) progetto jpa. Tomcat stava bene, ma era fallito con lo stesso pacchetto di guerra. Inserendo xml in "mywebapp/WEB-INF/classes/META-INF/persistence.xml" ha fatto il trucco, ora entrambi funzionano bene. – Whome

Problemi correlati