No Persistence provider for EntityManager named flashcard

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

No Persistence provider for EntityManager named flashcard

Beitrag von Jo(h)nny »

wir verzweifeln hier schon seit ner stunde an diesem fehler. wir haben die Datei persistence.xml in den Ordner META-INF eingefügt, aber es scheint, als ob die Datei trotzdem nicht gefunden wird....
hier unsere .xml-Datei:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
	<persistence-unit name="flashcard">
	
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

		<class>de.tud.cs.se.flashcards.model.Flashcard</class>
		<class>de.tud.cs.se.flashcards.model.DefaultFlashcardSeries</class>
		<properties>
			<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
			<property name="eclipselink.ddl-generation.output-mode" value="database" />
		</properties>

	</persistence-unit>
</persistence>
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Benutzeravatar
v0id
Neuling
Neuling
Beiträge: 7
Registriert: 19. Okt 2009 15:15

Re: No Persistence provider for EntityManager named flashcar

Beitrag von v0id »

Ich schließe mich mit dem selben Problem an.
Schon seit 2 Stunden versuche ich vergeblich eine Lösung zu finden.
Hab auch die persistence.xml in den src/META-INF Ordner getan ja im Build-Path liegt.
Natürlich habe ich auch die eclipselink.jar und javax.persistence_1.0.0.jar als Bibliotheken hinzugefügt.
Was machen wir nur falsch?

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
	<persistence-unit name="flashcardseries">	
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<class>de.tud.cs.se.flaschcards.model.DefaultFlashcardSeries</class>
		<properties>			
			<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
			<property name="eclipselink.ddl-generation.output-mode" value="database" />
		</properties>
	</persistence-unit>
</persistence>

eichberg
Dozentin/Dozent
Beiträge: 448
Registriert: 25. Sep 2007 12:12
Kontaktdaten:

Re: No Persistence provider for EntityManager named flashcar

Beitrag von eichberg »

Wenn Ihr die EntityManagerFactory initialisiert, dann ist es wichtig den Classloader zu setzten, den EclipseLink verwenden soll...

Der Code sollte in etwas wie folgt aussehen:

Code: Alles auswählen

Map<String, Object> properties = new HashMap<String, Object>();

		// override the properties that depend of the user input
		properties.put(....)
		// for EclipseLink in OSGi
		properties.put("eclipselink.classloader", connection.getClass().getClassLoader());

		// It is necessary to make the persistence framework work in OSGi
		EntityManagerFactory emf = new PersistenceProvider().createEntityManagerFactory(
				PERSISTENCE_UNIT_NAME,
				properties);

		...emf.createEntityManager();

Pascha
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 242
Registriert: 6. Jun 2007 14:03

Re: No Persistence provider for EntityManager named flashcar

Beitrag von Pascha »

Das wird bei uns gemacht, trotzdem haben wir das gleiche Problem, wie die beiden anderen Gruppen über uns. :/

leMac
Neuling
Neuling
Beiträge: 7
Registriert: 7. Feb 2008 17:01

Re: No Persistence provider for EntityManager named flashcar

Beitrag von leMac »

Wir können uns erinnern, dass Sie so etwas in der Vorlesung erwähnt haben, aber im Skript lässt sich nichts finden.

Uns ist vor allem jetzt nicht klar, welchen classloader wir nehmen sollen. In Ihrem Beispiel steht connection, diese variable existiert bei uns aber nicht.

eichberg
Dozentin/Dozent
Beiträge: 448
Registriert: 25. Sep 2007 12:12
Kontaktdaten:

Re: No Persistence provider for EntityManager named flashcar

Beitrag von eichberg »

Stimmt.... Connection ist spezifisch für unsere Implementierung.
"connection.getClass()" könnt Ihr vermutlich / vielleicht durch "Store.class" ersetzen.

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: No Persistence provider for EntityManager named flashcar

Beitrag von Jo(h)nny »

es geht immer noch nicht!!!! :x :x :x :x :x
genau der gleiche fehler.....

Code: Alles auswählen

Map<String, Object> properties = new HashMap<String, Object>();

							DBType type = (DBType)dbTypeComboBox.getSelectedItem();
							// Ensure RESOURCE_LOCAL transactions is used.
							
							// Configure the internal EclipseLink connection pool
							properties.put("eclipselink.classloader", Store.class.getClassLoader());
							properties.put("eclipselink.jdbc.driver", type.getDriver());
							properties.put("eclipselink.jdbc.url", urlTextField.getText());
							properties.put("eclipselink.jdbc.user", userTextField.getText());
							properties.put("eclipselink.jdbc.password", passwordField.getPassword());;

							// Configure logging. FINE ensures all SQL is shown

							// Ensure that no server-platform is configured
							EntityManagerFactory factory = Persistence.createEntityManagerFactory("flashcard", properties);
							em = factory.createEntityManager();
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

eichberg
Dozentin/Dozent
Beiträge: 448
Registriert: 25. Sep 2007 12:12
Kontaktdaten:

Re: No Persistence provider for EntityManager named flashcar

Beitrag von eichberg »

Wie sieht denn die Fehlermeldung aus?

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: No Persistence provider for EntityManager named flashcar

Beitrag von Jo(h)nny »

knopflerfish sagt:

[stderr] javax.persistence.PersistenceException: No Persistence provider for EntityManager named flashcard
[stderr] at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
[stderr] at de.tud.cs.se.flashcards.ui.DBDialog$3$1.run(DBDialog.java:227)
[stderr] at java.lang.Thread.run(Unknown Source)
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

eichberg
Dozentin/Dozent
Beiträge: 448
Registriert: 25. Sep 2007 12:12
Kontaktdaten:

Re: No Persistence provider for EntityManager named flashcar

Beitrag von eichberg »

Hm - mit Ferndiagnose gerate ich langsam ans Ende. Hier nur noch ein paar Ideen / Probleme, die mir ein / aufgefallen sind:
(1) Stellt ihr 100% sicher, dass die Datei auch im Bundle Jar landet?
(2) Die Datei "Persistence.xml" muss im Verzeichnis "META-INF" liegen, dass Teil des Classpaths des Bundles ist! Achtung: dies ist in aller Regel nicht das META-INF Verzeichnis des Bundles.... d.h. legt euch am besten unterhalb des src Verzeichnisses ein Verzeichnis mit dem dem Namen META-INF an und legt dort die persistence.xml rein
(3) Habt Ihr probiert was passiert wenn ihr die Applikation ohne OSGi, d.h. als "Standalone", verwendet? Falls es dann läuft, dann konzentriert euch erst einmal darauf, die Persistenzfunktionalität weiter zu implementieren.
(4) Die "Persistence.xml" (von oben) sind nicht vollständig. Die Dateien enthalten nicht alle relevanten Klassen... (dürfte allerdings mit dem aktuellen Problem nicht weiter zusammen hängen)

...
(X) Wenn auch das alles nichts hilft... dann muss ich es mir persönlich anschauen.

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: No Persistence provider for EntityManager named flashcar

Beitrag von Jo(h)nny »

hmmm also wir haben jetzt folgendes probiert:

Code: Alles auswählen

PersistenceProvider z =
								new org.eclipse.persistence.jpa.osgi.PersistenceProvider();
							EntityManagerFactory factory = z.createEntityManagerFactory("flashcard", properties);
							em = factory.createEntityManager();
und kriegen jetzt folgende exceptions:

Code: Alles auswählen

Exception in thread "Thread-29" Local Exception Stack: 
Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: BundleClassLoader(id=32,gen=4)
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [flashcard] failed.
Internal Exception: java.lang.ClassCastException: [C cannot be cast to java.lang.String
	at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
	at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:133)
	at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:65)
	at de.tud.cs.se.flashcards.ui.DBDialog$3$1.run(DBDialog.java:236)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [flashcard] failed.
Internal Exception: java.lang.ClassCastException: [C cannot be cast to java.lang.String
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:991)
	at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:88)
	at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:124)
	... 3 more
Caused by: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [flashcard] failed.
Internal Exception: java.lang.ClassCastException: [C cannot be cast to java.lang.String
	at org.eclipse.persistence.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:210)
	... 6 more
Caused by: java.lang.ClassCastException: [C cannot be cast to java.lang.String
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.getConfigPropertyAsString(EntityManagerFactoryProvider.java:137)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.translateOldProperties(EntityManagerFactoryProvider.java:327)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:839)
	... 5 more
langsam sind wir echt am verzweifeln.......
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

leMac
Neuling
Neuling
Beiträge: 7
Registriert: 7. Feb 2008 17:01

Re: No Persistence provider for EntityManager named flashcar

Beitrag von leMac »

Okay die Lösung ist ziemlich einfach, wenn man drauf kommt.

1. C soll wohl Char{} heißen
2. wenn man das Password aus einem JPassword... abfragt, dann am besten so new String(passwordLable.getPassword())
3. nun kann man auch das PW in den Properties setzen.

Und so ein Sch***** bereitet einem 3 Stunden Kopfzerbrechen :shock:

Der ursprüngliche Fehler lässt sich ausmertzen wie Jo(h)nny schon beschreiben hat.

Gruß

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: No Persistence provider for EntityManager named flashcar

Beitrag von Jo(h)nny »

nun ich denke nicht, dass das was wir da probiert haben auch so gewollt ist, ich denke wir haben einfach irgendwas falsch eingestellt.....
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

m_mueller
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 13. Nov 2009 18:46

Re: No Persistence provider for EntityManager named flashcar

Beitrag von m_mueller »

leMac hat geschrieben: 2. wenn man das Password aus einem JPassword... abfragt, dann am besten so new String(passwordLable.getPassword())

Und so ein Sch***** bereitet einem 3 Stunden Kopfzerbrechen :shock:
Danke, für den Tipp! Hatte ein Zugriffs-Problem auf die Datenbank, weil das Passwort in den Properties nicht richtig gesetzt wurde.
passwordLable.getPassword().toString() o.ä. funktioniert hier nicht...

Schöne Grüße

Benutzeravatar
v0id
Neuling
Neuling
Beiträge: 7
Registriert: 19. Okt 2009 15:15

Re: No Persistence provider for EntityManager named flashcar

Beitrag von v0id »

Hallo Leute,
ich bekomme es trotz aller hier zu findenden Hinweise nicht zum Laufen.
Wenn ich den org.eclipse.persistence.jpa.osgi.PersistenceProvider benutze ändert das bei mir rein gar nichts am Problem.
Ich kann zwar das Flashcard-bundle prima starten aber sobald ich eine Verbindung versuche, erhalte ich weiterhin diese Meldung:

Code: Alles auswählen

[stdout] FlashcardBundle starting...
Exception in thread "Thread-15" [stderr] java.lang.NoClassDefFoundError: org/eclipse/persistence/jpa/osgi/PersistenceProvider
[stderr] 	at de.tud.cs.se.flashcards.ui.DBDialog$3$1.run(DBDialog.java:222)
[stderr] 	at java.lang.Thread.run(Unknown Source)
[stderr] Caused by: java.lang.ClassNotFoundException: org.eclipse.persistence.jpa.osgi.PersistenceProvider
[stderr] 	at org.knopflerfish.framework.BundleClassLoader.findClass(BundleClassLoader.java:339)
[stderr] 	at org.knopflerfish.framework.BundleClassLoader.loadClass(BundleClassLoader.java:438)
[stderr] 	at java.lang.ClassLoader.loadClass(Unknown Source)
[stderr] 	... 2 more
Deshalb ein paar Fragen:
- setzt ihr dann auch in der persistence.xml: <provider>org.eclipse.persistence.jpa.osgi.PersistenceProvider</provider> ?
- verwendet ihr javax.persistence_1.0.0.jar oder javax.persistence_2.0.0.v201002051058.jar?
- wo müssen die eclipselink.jar und die anderen Bibliotheken überall eingebunden werden?
(hab sie zur Zeit überall:
- build.xml: <classpath> ... <pathelement location="lib/eclipselink.jar" /> ...
- src/META-INF/manifest.mf: Bundle-ClassPath: ., lib/eclipselink.jar, lib/javax.persistence_2.0.0.v201002051058.jar, ...
Für die javax.persistence_2.0.0.v201002051058.jar brauche ich auch noch Import-Package: javax.persistence
und ich muss sie als Bundle in Knopflerfish reinladen damit's überhaupt läuft
)
- was könnte ich noch falsch machen?

Vielen Dank

Antworten

Zurück zu „Archiv“