Bonjour,

Je travaille sur une application modulaire (plug-in). Les plugin sont chargées dans un autre ClassLoader.

Hibernate est défini dans le coeur de l'application et je donne la possibilité aux modules d'ajouter des classes persistantes (entités).

Le problème est donc qu'Hibernate est donc dans le premier ClassLoader alors que les entités persistantes dans le second ClassLoader.

Voici l'erreur que me donne Hibernate :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exception in thread "Thread-2" javax.persistence.PersistenceException: org.hibernate.MappingException: entity class not found: org.jtheque.films.persistence.od.TypeImpl
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:698)
	at org.jtheque.core.modules.persistence.PersistenceManager.init(PersistenceManager.java:73)
	at org.jtheque.core.modules.Managers.initManagers(Managers.java:74)
	at org.jtheque.core.modules.Application$1.run(Application.java:148)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.MappingException: entity class not found: org.jtheque.films.persistence.od.TypeImpl
	at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:99)
	at org.hibernate.validator.event.ValidateEventListener.initialize(ValidateEventListener.java:74)
	at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:356)
	at org.hibernate.cfg.Configuration.getInitializedEventListeners(Configuration.java:1228)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1218)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:691)
	... 4 more
Caused by: java.lang.ClassNotFoundException: org.jtheque.films.persistence.od.TypeImpl
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
	at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:96)
	... 9 more
Cette erreur apparaît sur cette ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
emf = config.buildEntityManagerFactory();
config étant un EJB3Configuration.

Ce qui est bizarre, c'est qu'il arrive bien à lire ces classes, puisqu'il arrive à détecter des erreurs dans ces classes par exemple un "could not determine type for ..." parce que j'avais oublié de tagger quelque chose comme transient, mais ça n'a pas l'air ensuite de fonctionner...

Je comprends pas vraiment pourquoi ?

Donc : Est-ce que c'est possible avec Hibernate de travailler sur plusieurs ClassLoader différents ? Ou alors, est-ce qu'il y a une solution pour rajouter des classes dans le classloader d'Hibernate.

Merci

Baptiste