
Je voulais juste faire un petit billet concernant un soucis que j’ai mis quasiment une journée à résoudre. J’ai une application web avec une architecture assez commune :
- un module métier (packagé dans un jar composé d’EJBs)
- un module web frontal (packagé dans un war)
- un module web pour les web services (utilisant exclusivement JAX-RS, packagé dans un war)
Le casse tête!
Chaque module war a une dépendance sur la partie ejb cliente du module métier (présents dans le WEB-INF/lib donc). Le problème que j’ai rencontré est que l’injection de dépendances dans mon module web-service (@EJB) lève des ClassNotFoundExceptions. J’ai essayé de passer outre l’injection automatique par le conteneur en faisant une recherche manuelle dans l’annuaire JNDI mais ceci s’est soldé par un échec avec la même erreur à la clef.
En jouant avec le débuggueur, je me suis rendu compte que les jars présents dans le dossier lib n’étaient pas ajoutés au classloader de l’application web.
La solution
J’ai passé longtemps à essayer beaucoup de choses pour corriger ce problème et j’ai trouvé l’astuce dans les exemples d’utilisation de Jersey.
Il suffit simplement d’avoir un fichier sun-web.xml avec le contenu suivant :
J’espère aider quelqu’un d’autre avec cette astuce !