alors d'abord les drivers, c'est particulier. En effet, tu ne charge jamais directement une connection avec un driver. C'est le driver qui s'enregistre auprès de jdbc. Ensuite quand jdbc recois une string de connection (genre jdbc:oracle:thin:blablabla), il regarde dans tous les drivers enregistrés lequel peut charger la connection. Le classloader n'interviens pas là dedans. Ce qui explique que ton war n'a pas priorité dans ce cas là. En réalité c'est le dernier driver enregistré qui gagne. C'est pour ca qu'il ne faut jamais mettre les driver dans le war. Sinon le war se retrouve enregistré auprès de jdbc et au final, c'est le driver du war 1 qui pourrais se retrouvé utilisé par le war2, bonjour le meli melo

.
Maintenant, le deuxième problème, les datasource gérées par tomcat, elle sont chargée à un niveau server et non pas à un niveau web. Ce qui fait qu'elle n'ont pas accès au classloader de ton war, et donc pas au driver, et donc impossible de charger le driver pour qu'il s'enregistre auprès de jdbc => NoClassDefFound.
Donc t'as pas le choix, faudra le mettre dans common/lib.
Partager