2009-10-20 8 views
2

Mon application Web utilise une DLL native pour une partie de ses fonctionnalités (dont l'emplacement est fourni dans PATH). Tout fonctionne jusqu'à ce que j'apporte une modification au fichier WAR et que JBoss déploie ce fichier WAR. À ce stade, la DLL n'est plus trouvée et j'ai besoin de redémarrer manuellement le serveur.Trouver un DLL nécessaire après un redéploiement JBoss (chaud)?

Quelle est la meilleure façon de charger la dll dans l'application après un déploiement à chaud?

Répondre

1

Ce n'est peut-être pas si simple. Normalement, une DLL est liée à un chargeur de classe spécifique. Lorsque vous redéployez, cela signifie que le chargeur de classe d'origine utilisé pour votre application est détruit. Malheureusement, la machine virtuelle Java n'autorise pas un second chargeur de classe à recharger une DLL à nouveau.

Vous devez avoir quelque chose de statique, qui ne sera jamais déchargé par la machine virtuelle. Peut-être qu'avoir une deuxième application qui charge la DLL serait une solution, car le redéploiement de la première application n'affecterait pas alors la DLL. Je suppose qu'il pourrait également être possible de créer un fichier Jar qui charge la DLL et l'ajoute au classpath de JBoss lui-même, au lieu de l'ajouter à votre application. Normalement, ces serveurs ont un répertoire "partagé" où de tels fichiers jar peuvent être ajoutés et seront partagés par toutes les applications.

Le bug suivant de SUN jette un peu de lumière dans cette question, ce qui est beaucoup plus général qu'un simple chargement servlets:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4225434

Questions connexes