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

Entrée/Sortie Java Discussion :

[JNI]System.loadLibrary()


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut [JNI]System.loadLibrary()
    Bonjour à tous

    j'ai un petit souci avec la méthode System.loadLibrary().

    J'utilise cette méthode afin de charger une dll. Or il se trouve que j'ai un problème dans le cas suivant :

    J'ai une JVM qui gère deux environnements. Soit A et B ces deux environnements.
    Lorsque je démarre l'envrionnement A, la dll se charge sans aucun problème. Lorsque l'environnement B démarre, il plante sur le System.loadLibrary car la dll est déjà chargée.

    N'y aurait pas un moyen de savoir si la dll est chargée ??

    Merci.





    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    C'est quoi le message d'erreur quand ca plante ? Ca génére une execption ? Si oui c pas possible de la catcher pour continuer ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    salut,

    en fait l'erreur qui remonte est de type UnsatifiedLinkError. Cette erreur survient du moment où t'appelle une fonction native contenue dans la librairie.

    Si tu veux ça fonctionne trés bien, or il existe un cas super où ça plante.
    Tu démarres tomcat, et lance ton code qui charge la dll, puis ta fonction ==> OK
    Tu sors de ton appli, (la dll est toujours en mémoire). Tu recharches le contexte de tomcat, et tu essais de relancer ton appli, et là il ne veut pas recharger la dll, car à priori, il la trouve, mais il est incapable de trouver le code de la fonction...

    C'est un peu compliqué à expliquer.

    Concrétement, je crois que lorsque tu démarres une première fois Tomcat, il réserve de la mémoire qui est propre au Tomcat 1.
    Lorsque tu recharges le contexte de ton Tomcat 1, il ne doit pas arriver à faire le lien avec l'ancien. Du coup, il réserve un autre boup de mémoire, et là il ne retrouve plus la dll.

    A priori, il existe dans Tomcat, un répertoire Shared qui peut contenir les ressources partagées de tes applis ==> Elles sont alors chargées (les ressources) par le classLoader de Tomcat.

    Je continue à chercher.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Problème résolu.

    En fait, lorsqu'on a des classes java qui charge des librairie (System.LoadLibrary(xxx)), il na faut surtout pas, avec tomcat, avoir le code dans l'environnement Web-app.

    L'astuce est de faire un jar du fichier class qui charge la librairie.
    Ce fichier jar doit être placé dans %CATALINA_HOME%\shared\lib (classLoader shared de Tomcat).

    De cette manière, lors du démarrage de Tomcat, le fichier jar sera chargé par Tomcat et ne sera déchargé que lors de l'arrêt du service Tomcat.

    Du coup, la librairie chargée est véritablement une librairie partagée.

    Voilà.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java - JNI : arrêt à System.loadLibrary()
    Par Faust7011 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 24/02/2011, 05h03
  2. JNI et java et fichier system.dll
    Par younes12 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 08/09/2009, 14h31
  3. Réponses: 1
    Dernier message: 06/10/2006, 10h21
  4. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 16h38
  5. [TP7]systeme d'exploitation
    Par numeror dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 15/08/2002, 08h47

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