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 :

Implémentation JNI ou JNA pour l'utilisation d'une librairie C


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut Implémentation JNI ou JNA pour l'utilisation d'une librairie C
    Bonjour,
    mod_status est un module httpd qui permet d'obtenir des infos en temps réel sur un serveur httpd (utilisateurs connectés avec les IP, ... threads et PID, uptime du serveur apache etc etc ...)
    mod_status.h -> http://pastebin.com/XhTPLjyR
    mod_status.c -> http://pastebin.com/C1j1PjMg
    Et pour ceux qui veulent aller directement sur le dépôt svn, voici le lien
    http://svn.apache.org/viewvc/httpd/h...es/generators/

    Je veux faire faire l'appel JNI ou JNA (je pencherai plus vers JNA plutôt que JNI), Je voudrais y accéder via Java ... voudrais juste savoir si JNA suffirait ou bien ?
    Je n'ai pas spécialement besoin de recourir à toutes les options qu'offrent le module mod_status, mais au moins juste obtenir la liste des IP qui sont connectées.
    Sinon, peut être aussi que je m'y prends mal et que ce n'est pas la bonne manière de procéder, mais dans tous les cas, toute proposition ou explication est la bienvenue.

    Merci d'avance,
    Cordialement
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    - JNA te permet d'exécuter du code natif C / C++ depuis Java
    - JNI te permet de faire de la communication native (C/C++) avec Java dans les 2 sens

    Dans les 2 cas il va te falloir travailler avec une librairie dynamique (dll). Ce qui signifie que tu dois commencer par compiler ton mod_status en une librairie dynamique.

    Ensuite, étant donné que dans ton cas tu veux faire des appels à des fonctions natives depuis Java, JNA te conviendra parfaitement.
    Consulte http://jna.java.net/ qui te fourni des exemples d'utilisations. De mémoire la procédure est la suivante :

    - Écrire une interface Java reprenant toutes les fonctions natives que tu désire appeler
    - Créer une instance CLibrary en lui précisant ton interface et le nom de ta dll native
    - Tu pourras ensuite appelé, via ton instance, les méthodes décrites dans ton interface.
    => JNA s'occupe de faire le binding vers tes fonctions natives du même nom

  3. #3
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour, merci pour la réponse.
    J'ai déjà lu les exemples qui sont dans le site jna.java.net et dans developpez.com, et Google.
    Mais, ... en lisant le code source de mod_status.c, je me suis demandé la fonction C qu'il fallait réécrire à Java native pour pouvoir faire l'appel.
    Ce code me semble assez tordu/tortueux ^^
    Sachant que je voulais juste récupérer les IP des clients connectés.
    J'en ai parlé avec d'autres développeurs et ils m'ont dit que ce n'était pas possible de le faire en JNA, ce qui m'a surpris
    Il m'ont plutôt proposé de parser la page html que génère le module mod_status .. mais je n'aime point cette méthode !

    Je pense que je risque de finalement abandonner tout ça ..
    Le code source de mod_status.c est un peu ...

    Si néanmoins, tu peux toujours m'éclairer un peu plus histoire que j'y vois plus clair et que je puisse changer d'avis/ être plus optimiste, ce serait cool aussi

    MERCI pour tout en tous cas.
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Ce que je te conseille de faire c'est une librairie dynamique qui se charge d'obtenir tes IP.

    En gros fais une librairie (dll) qui contiens une seule méthode : getIPs() (par exemple.. après tu adapte..) et cette méthode (native, toujours en C) s'occupe de travailler avec tes fonctions de mod_status.c. Après je n'ai pas parcouru le code, il va peut être te falloir adapté ton code pour que ça marche.

    Mais bref au final tu auras une librairie qui fera exactement ce que tu veux c'est à dire :
    - Te retourner une liste d'IP en appelant la méthode getIPs().

    Et c'est cette méthode que tu vas "binder" en Java.

    L'avantage c'est que tu pourras tester ta méthode "getIPs()" nativement avant de faire le binding Java. Et si ta librairie (dll) fonctionne en C, alors tu peux faire le binding de la fonction et il n'y a pas de raisons que ça ne marche pas.

  5. #5
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    ok, je vais essayer cela
    Merci.
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a quelque chose que je ne comprend pas : mod_status est un plugin d'apache, prévu pour fonctionner avec ce dernier. Je ne pense pas qu'il soit possible de l'utiliser hors d'apache !?


    a++

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/06/2008, 09h00
  2. Réponses: 3
    Dernier message: 29/04/2008, 08h22
  3. Réponses: 3
    Dernier message: 04/07/2007, 20h05
  4. Réponses: 3
    Dernier message: 14/04/2006, 19h36
  5. valeur d'un champ pour l'utiliser dans une requete
    Par bachilbouzouk dans le forum ASP
    Réponses: 4
    Dernier message: 08/04/2005, 16h58

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