IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

[TOMCAT] Partager une dll entre 2 webapp


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut [TOMCAT] Partager une dll entre 2 webapp
    Bonjour a tous,

    Voila, j'ai un petit soucis avec Tomcat (j'ai la version 5.5.4). En fait j'ai 2 webapp qui tourne sur le meme serveur et a priori lors de chaque redemmarage, la premiere appli utilisee fonctionne correctement et la seconde donne une erreur du type:

    java.lang.UnsatisfiedLinkError: Native Library C:\WINNT\system32\bridge2java.dll already loaded in another classloader
    java.lang.ClassLoader.loadLibrary0(Unknown Source)
    java.lang.ClassLoader.loadLibrary(Unknown Source)
    java.lang.Runtime.loadLibrary0(Unknown Source)
    java.lang.System.loadLibrary(Unknown Source)
    ...

    Comme les 2 webapps sont utilises, c'est un tres gros probleme !!!!!

    Apparemment c'est donc un probleme de dll qui ne peut pas etre partagee entre ces webapps. Il me semblait que l'instance du ClassLoader etait differente pour chaque webapp... est ce qu'il y a une configuration particuliere pour autorise l'utilisation de la meme dll entre toutes les webapp ?

    Merci beaucoup,

    Lucho

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 76
    Points
    76
    Par défaut Re: [TOMCAT] Partager une dll entre 2 webapp
    Citation Envoyé par lucho31
    Bonjour a tous,

    Voila, j'ai un petit soucis avec Tomcat (j'ai la version 5.5.4). En fait j'ai 2 webapp qui tourne sur le meme serveur et a priori lors de chaque redemmarage, la premiere appli utilisee fonctionne correctement et la seconde donne une erreur du type:

    java.lang.UnsatisfiedLinkError: Native Library C:\WINNT\system32\bridge2java.dll already loaded in another classloader
    java.lang.ClassLoader.loadLibrary0(Unknown Source)
    java.lang.ClassLoader.loadLibrary(Unknown Source)
    java.lang.Runtime.loadLibrary0(Unknown Source)
    java.lang.System.loadLibrary(Unknown Source)
    ...

    Comme les 2 webapps sont utilises, c'est un tres gros probleme !!!!!

    Apparemment c'est donc un probleme de dll qui ne peut pas etre partagee entre ces webapps. Il me semblait que l'instance du ClassLoader etait differente pour chaque webapp... est ce qu'il y a une configuration particuliere pour autorise l'utilisation de la meme dll entre toutes les webapp ?

    Merci beaucoup,

    Lucho

    salut, je fais aussi des appels de Dll mais seulement sur une seule application. donc je ne peux difficilement te dire quoi que soit.
    Mais pour ma part, j ai implementer au depart qu au demarage de tomcat, il charge automatiquement la Dll et donc pas la methode static il reste ds la JVM. Et je crois que ton probleme vien de la JVM qui ne peut charger la mm Dll.
    C'est pourquoi, j ai preferé delocaliser l appel de la Dll en creant un serveur en Swing qui pourra l appelé et transiter les demandes des applications.Il faut par evidence , serialisé les objets
    Cela a l avantage de ne pas encombré tomcat et de partager la mm dll avec plusieur appli si necessaire.

    C'est une soluce mais je ne sais pas si cela repond a ta question.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Salut,

    Merci pour ta reponse, je pense que c'est une bonne solution de le garder dans la JVM de Tomcat au demarrage. Est ce que tu aurais des exemples du code que tu as utilises?

    Merci beaucoup,

    Lucho

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Hello,

    J'ai vu dans un forum que l'on pouvait faire un register de la dll avec regsvr.exe sur le serveur ou tourne tomcat, est ce que quelqu'un sait si cela permet de partager un dll entre plusieurs webapp et d'eviter les conflits ??

    Merci beaucoup,

    Lucho

  5. #5
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Une DLL ne peut être chargée qu'une seule fois par une JVM (JNI ne permet pas de "décharger" une bibliothèque partagée).

    Dans le cas d'un serveur d'application, il y a habituellement une hiérarchie de classloaders qui permet le chargement de la DLL une seule fois par un classloader la qui met à disponibilité des classloaders sous-jacents (ceux qui gèrent les différentes web-app).

    Exemple avec Sun Application Server : http://docs.sun.com/app/docs/doc/819...t?a=view#beade
    (il doit y avoir un équivalent pour Tomcat)

    Encore une raison d'éviter de faire du JNI quand c'est possible...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Hello Alexismp,

    Merci, c'est un peu ce que j'avais cru comprendre a travers me recherche sur le web mais je n'etais pas sur que les classes chargees par le ClassLoader "parent" etaient partage a ces "enfants".
    En fait j'ai reussi a fixer ce probleme sur une install de Tomcat en enlevant mon jacob.jar (liee a jacob.dll) des WEb-INF/lib et en les mettant dans java/lib/ext. De cette facon ces classes sont prises en charges par un autre ClassLoader, non ? Apres, je ne sais pas si c'est la bonne solution de placer mon jar ici, qu'est ce que tu en penses?
    Par contre, je ne connais pas JNI, juste par curiosite, qu'est ce que tu entends par "Encore une raison d'éviter de faire du JNI quand c'est possible..." ? Quelles serait les autres alternatives ? Desole pour cette question de newby :-)

    En tout cas merci beaucoup,

    Lucho

  7. #7
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Citation Envoyé par lucho31
    Hello Alexismp,

    Merci, c'est un peu ce que j'avais cru comprendre a travers me recherche sur le web mais je n'etais pas sur que les classes chargees par le ClassLoader "parent" etaient partage a ces "enfants".
    Ca (notion de parent), ca dépend du serveur d'application.

    Citation Envoyé par lucho31
    En fait j'ai reussi a fixer ce probleme sur une install de Tomcat en enlevant mon jacob.jar (liee a jacob.dll) des WEb-INF/lib et en les mettant dans java/lib/ext. De cette facon ces classes sont prises en charges par un autre ClassLoader, non ?
    Oui, attention à ne pas oublier ce que tu mets dans ce répertoire privilégié. Regardes aussi les endorsed classes:
    http://java.sun.com/j2se/1.5.0/docs/guide/standards/
    Citation Envoyé par lucho31
    Apres, je ne sais pas si c'est la bonne solution de placer mon jar ici, qu'est ce que tu en penses?
    Par contre, je ne connais pas JNI, juste par curiosite, qu'est ce que tu entends par "Encore une raison d'éviter de faire du JNI quand c'est possible..." ? Quelles serait les autres alternatives ? Desole pour cette question de newby :-)
    C'est pas toujours possible, mais utiliser des drivers JDBC de type IV ou plus généralement des implémentations 100% Java ca rend la vie plus simple...
    Citation Envoyé par lucho31


    En tout cas merci beaucoup,

    Lucho
    Pas de quoi.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Hello Alexismp,

    Merci beaucoup pour tes explications !!!
    Mon souci ici c'est que j'utilise cette dll (jacob.dll http://www.danadler.com/jacob/) pour communiquer avec des objets COM, donc la je suis un peu coince car c'est la seule solution que j'ai trouve, et donc je suis oblige de passer par JNI :-(

    Thanks a lot,

    Lucho

Discussions similaires

  1. [MVC] EHCache : Partage du cache entre 2 webapps sur Tomcat
    Par garthos dans le forum Spring Web
    Réponses: 1
    Dernier message: 30/04/2013, 15h26
  2. Réponses: 12
    Dernier message: 14/08/2006, 12h55
  3. Réponses: 7
    Dernier message: 06/04/2006, 18h17
  4. Partager une version entre plusieurs DLL
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2005, 10h25
  5. Réponses: 14
    Dernier message: 02/05/2005, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo