# HIbernate: Could not read mapping document



## lumo (23. Nov 2009)

hallo,

habe zwei plugins
core (datenbank klassen und hibernate xml files)
user interface und controller - greift auf den core zu...

wenn ich nun aber eine session öffne schreit er mir auf, dass er meine xml files nicht findet...

wie kann ich das problem lösen? (der folder ist als extension point freigegeben!)


```
Exception in thread "main" org.hibernate.MappingException: Could not read mapping document from file: src/at/bio/core/db/BioObject.hbm.xml
	at org.hibernate.cfg.Configuration.addFile(Configuration.java:252)
	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1490)
	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
	at at.biooffice.core.db.SessionProvider.getConfig(SessionProvider.java:34)
	at at.biooffice.core.db.SessionProvider.configureAndBuildSessionFactory(SessionProvider.java:26)
	at at.biooffice.core.db.SessionProvider.getSession(SessionProvider.java:77)
	at Snippet.main(Snippet.java:7)
Caused by: org.dom4j.DocumentException: src\at\bio\core\db\BioObject.hbm.xml (Das System kann den angegebenen Pfad nicht finden) Nested exception: src\at\bio\core\db\BioObject.hbm.xml (Das System kann den angegebenen Pfad nicht finden)
	at org.dom4j.io.SAXReader.read(SAXReader.java:266)
	at org.hibernate.cfg.Configuration.addFile(Configuration.java:243)
	... 9 more
```


----------



## maki (24. Nov 2009)

Seit wann gehört das Verzeichnis [c]src[/c] den zum Classpath??? ???:L


----------



## lumo (24. Nov 2009)

err... warum findet ers, wenn ich im selben plugin drauf zugreife??
da ist ja src auch nicht im classpath

werds morgen gleich testen, wenn ichs in meinen resource folder packe


----------



## lumo (25. Nov 2009)

so,
hab jetzt die ganzen hibernate xml files (und auch die pfadangaben in den xml files) upgedated.
jetzt siehts so aus:
src: -> alle java klassen
res/hibernate  alle xml files.
die files werden alle in die bin geschoben. trotzdem bekomme ich noch nen error.

wenn ich die application die hibernate funktion testet in das andere plugin kopiere dann klappts nur, wenn ich ins zweite plugin auch die xml files kopiere, was für mich keinen sinn macht, denn:

plugin 1 mit datenbank
plugin 2 erstellt eine klasse und lädt daten aus der datenbank (was in plugin 1 umgesetzt ist) also nur zugriff auf die java klassen! warum muss dann das hibernate zeug auch in plugin 2 sein?!

des weiteren. wenn jetzt plugin 2 die hibernate xml files in seinem resource folder hat (wäre vorübergehend egal) bekomme ich bei der ausführung der anwendung mit mehreren plugins folgenden fehler im view:

```
java.lang.ClassNotFoundException: org.hibernate.Session
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at at.bio.core.db.Site.getById(Site.java:1148)
	at at.bio.siteeditor.controller.ListController.init(ListController.java:41)
	at at.bio.siteeditor.views.ListView.createPartControl(ListView.java:223)
```

die Session, die hier beschrieben wird, liegt in hibernate3.jar, welche über plugin 1 eingebunden ist (wird auch in plugin 2 angezeigt als referenziertes include über plugin 1)

EDIT:
ein schritt weiter
mit hilfe von:


Wildcard hat gesagt.:


> Hast du sie im Manifest als extra classpath entries angegeben?


 aus einem anderen thread...
jetzt findet er alle klassen, aber die hbx files nicht (jep, sie liegen wie oben angegeben noch immer im res folder)


----------



## maki (25. Nov 2009)

> trotzdem bekomme ich noch nen error.


Aber einen anderen und die Mappingfiles sind nun lesbar, oder? 



> plugin 1 mit datenbank
> plugin 2 erstellt eine klasse und lädt daten aus der datenbank (was in plugin 1 umgesetzt ist) also nur zugriff auf die java klassen! warum muss dann das hibernate zeug auch in plugin 2 sein?!


Hibernate erzeugt dyn. Proxies zur Laufzeit, du glaubst zwar ein Objekt deiner Klasse zu bekommen, bekommst aber in wirklichkeit einen Hibernate Proxy 
Im Endeffekt heisst das dann, dass jedes Bundle welches Objekte nutzt die von Hibernate geladen werden auch Hibernate als Abhängigkeit haben.
Warum eingentlich nicht die ganze Hibernate geschichte in ein eigenes Bundle welches dann von allen anderen Bundles genutzt wird?
Hibernate OSGi Bundles gibt es auch schon fertig: SpringSource Enterprise Bundle Repository


----------



## lumo (25. Nov 2009)

maki hat gesagt.:


> Warum eingentlich nicht die ganze Hibernate geschichte in ein eigenes Bundle welches dann von allen anderen Bundles genutzt wird?


das ist das ziel der ganzen aktion

warum nicht spring? weil ich die datenbank nicht mache und nicht enscheide was dafür verwendet wird

lösung:
1) ich hab in den dependencies alle jars angeben müssen.
2) nachdem hibernate trotzdem die files nicht findet (wede in res noch in src, sobei er laut support die files im src finden sollte!!!) musste ich den absoluten pfad in den hbm.xml files angeben (gefällt mir nicht)

aber immerhin funktionierts jetzt und ich kann weiterarbeiten. wie das problem letztendlich komplett gelöst wird... bleibt bei meinem mitarbeiter hängen :bae:


----------



## maki (25. Nov 2009)

> warum nicht spring?


Wer spricht denn von Spring?
Und was hat Spring mit der DB zu tun??
Das Spring Enterprise Repository hat einfach nur OSGi Bundles von vielen nicht-OSGi Jars (genauso wie Eclipse Orbit), man braucht kein Spring um diese zu nutzen 

Hab selber schon mit Hibernate & OSGi gerbeitet, allerdings ohne Mappingfiles, dafür eben mit Annotationen, da hatte ich diese Probleme nicht.
Es gibt auch sehr viele Blogs in denen (meist dasselbe) Hibernate-OSGi Bespiele zu finden sind.


----------



## lumo (25. Nov 2009)

maki hat gesagt.:


> Wer spricht denn von Spring?


:lol: Hibernate JPA
warum er keine annotations verwendet hat... keine ahnung


----------



## maki (25. Nov 2009)

lumo hat gesagt.:


> :lol: Hibernate JPA
> warum er keine annotations verwendet hat... keine ahnung


Hibernate JPA ist eben nur Hibernate JPA, die Bundles kannst du dir runterladen, brauchst halt noch die anderen Bundles, von denen Hibernate abhängig ist.
Spring hat damit nix zu tun


----------



## lumo (25. Nov 2009)

maki hat gesagt.:


> Hibernate JPA ist eben nur Hibernate JPA, die Bundles kannst du dir runterladen, brauchst halt noch die anderen Bundles, von denen Hibernate abhängig ist.
> Spring hat damit nix zu tun



???:L???:L???:L

ich hab mit hibernate selbst nur dann was am hut, wenn mein mitarbeiter nicht mehr weiter weiss...
(und auch ganz gut so )

werde ihm mal deinen hinweis auf hibernate jpa weitergeben, soll er sich den kopf zerbrechen

T.E.A.M.-work -> *T*oll *E*in *A*nderer *M*achts :toll:


----------

