Problème avec plusieurs ClassLoader
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:
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:
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