2010-07-12 6 views
6

Vorrei creare un pacchetto che sia in grado di utilizzare Java Persistence. Per raggiungere questo obiettivo, ho creato un progetto plugin all'interno di Eclipse. Nel mio progetto, ho creato un file persistence.xml in META-INF. Ho giardini.L aggiunto nel mio manifest.mf (nelle depencies) quei 3 pacchetti:EclipseLink: nessun provider di Persistenza per EntityManager denominato

  1. javax.persistence.jar
  2. org.eclipse.persistence.jar
  3. org.eclipse.persistence.jar

Poi, nel mio Activator io uso questo le linee per creare un EntityManager:

factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
EntityManager em = factory.createEntityManager(); 

per eseguire il mio fagotto, ho fatto un produ configurazione ct. Quando eseguo la mia configurazione del prodotto, ho ottenuto questo errore:

javax.persistence.PersistenceException: Nessun provider di persistenza per EntityManager denominati persone

Ho cercato di spostare la posizione del mio persistence.xml senza successo . Sembra che qualsiasi pacchetto carichi il file persistence.xml. Forse, non importa i pacchetti giusti?

È possibile scaricare il mio semplice Bundle qui: download

Potrebbe aiutarmi a trovare una soluzione o un indizio?

risposta

4

Prova ad aggiungere questo tag nel persistence.xml:

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

Grazie, ma ho questa linea nella mia persistenza.file xml. Un'altra soluzione? – user376112

2

Sembra che non hai descrivere l'unità di persistenza in MANIFEST.MF con JPA-PersistenceUnits: intestazione. Puoi trovare maggiori dettagli su EclipseLink qui (1).

(1): http://wiki.eclipse.org/Gemini/JPA/Documentation/CreatingAnApplication

+0

Ho risolto il mio problema. Ho solo dovuto mettere nel classpath del manifesto questi pacchetti: - persistence.jar - eclipselink.jar - mysql-connector.jar Grazie – user376112

6

Ho risolto il mio problema. Ho solo dovuto mettere nel classpath del manifesto questi pacchetti: - persistence.jar - eclipselink.jar - mysql-connector.jar

Grazie

+0

Non sono sicuro Seguo fatto è stato aggiunto un manifesto a coloro vaso File? Può elaborare un po 'di più? – simgineer

1

Se si esegue la vostra applicazione dall'interno di Eclipse utilizzando Maven, fai clic con il tasto destro del mouse sul progetto JPA, scegli Proprietà e verifica se esiste una voce di menu "Deployment Assembly". In tal caso, fare clic su Assieme di distribuzione, fare clic sul pulsante Aggiungi ..., Fare clic su Voci del percorso di generazione Java e quindi selezionare Dipendenze Maven. Assicurati che eclipselink.jar sia tra le dipendenze di Maven

1

Stavo ottenendo lo stesso errore in un semplice progetto in esecuzione in Eclipse.

Si scopre che l'aggiunta della directory META-INF (contenente persistence.xml) al percorso della mia classe era la cosa sbagliata da fare.

Devi contenere il suo dir (o jar) sul percorso della classe. Dalle fonti di EclipseLink 2.5.1:

/** 
    * Search the classpath for persistence archives. A persistence archive is 
    * defined as any part of the class path that contains a META-INF directory 
    * with a persistence.xml file in it. Return a list of {@link Archive} 
    * representing the root of those files. It is the caller's responsibility 
    * to close all the archives. 
    * 
    * @param loader the class loader to get the class path from 
    */ 
    public static Set<Archive> findPersistenceArchives(ClassLoader loader){ 
     // allow alternate persistence location to be specified via system property. This will allow persistence units 
     // with alternate persistence xml locations to be weaved 
     String descriptorLocation = System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT); 
     return findPersistenceArchives(loader, descriptorLocation); 
    }