Bonjour,
J'ai un souci :-) Pour schématiser:
- une classe principale A utilise un URLClassLoader pour charger des classes dynamiquement. Ce class loader contient, dans son "classpath", trois librairies: B.jar contenant une classe B, C.jar contenant une classe lambda C et enfin D.jar contenant une classe D qui se trouve etre un InitialContextFactory.
(en l'occurence dans la réalité D.jar est weblogic.jar et D est weblogic.jndi.WLInitialContextFactory mais je ne pense pas que ce soit important car le souci me semble plus générique)
- A instancie la classe B pour l'utiliser, à l'aide du class loader défini ci-dessus.
- B, quand à lui, instancie la classe C directement (à l'aide d'un simple new): aucun souci, ça marche très bien (j'en déduit que le classe loader par défaut utilisé par B pour charger C est celui qui a servi à le charger lui même depuis A...)
- Plus loin, B va instancier D à travers JNDI et fait donc un new InitialContext en lui passant le nom complet avec package de la classe D dans la property "java.naming.factory.initial"
Et là.... c'est le drame! Ca plante en me disant: "class not found: D"...
Je rappel que D.jar est pourtant bien dans le classpath du class loader ayant servi à charger B. J'en déduit donc que le class loader par défaut, s'il est bien utilisé pour instancier des classes classiquement depuis B (avec un simple new, comme on l'a vu avec la classe C), il n'est par contre pas transmis par défaut à InitialContext afin d'être utilisé pour charger la factory...
Bref ma question est: comment signifier à InitialContext qu'il doit utiliser mon class loader? Est-ce seulement possible?
Merci d'avance!
Partager