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 :
Cette erreur apparaît sur cette ligne :
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
config étant un EJB3Configuration.
Code : Sélectionner tout - Visualiser dans une fenêtre à part emf = config.buildEntityManagerFactory();
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
Partager