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

  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++

  7. #7
    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
    Oui en effet, c'est un plugin d'Apache et je ne compte pas l'utiliser hors Apache.
    En fait, pour que l'application que je compte faire puisse marcher correctement, il faudrait que le module mod_status soit installé dans le système en même tant que apache bien sûr.
    Mais, vu que je veux profiter des spécificités de mod_status, il faut bien que je fasse le binding java (jni ou jna) vers ce module afin que je puisse récupérer les IPs actuellement connectés au server apache.
    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 !

  8. #8
    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
    Citation Envoyé par paissad Voir le message
    Mais, vu que je veux profiter des spécificités de mod_status, il faut bien que je fasse le binding java (jni ou jna) vers ce module afin que je puisse récupérer les IPs actuellement connectés au server apache.
    Non... JNI & JNA servent à exécuter du code natif, mais cela ne permet en aucun cas d’appeler une méthode au sein d'un autre process (apache dans ton cas).

    mod_status est un plugins pour apache. Sauf erreur il n'est pas prévu pour être utilisé par d'autre processus (natif ou pas).


    Par contre il y a une solution bien plus simple puisque une fois qu'il est correctement configuré, mod_status fourni une page HTML ou texte avec toutes les infos sur http://127.0.0.1/server-status?auto

    http://httpd.apache.org/docs/trunk/e...od_status.html


    Il te suffirait donc de lire cette page...


    a++

  9. #9
    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
    Oui, j'avais pensé à parser la page html ... mais bon, c'est juste que cette solution me semblait un peu "brouillonne" ^^
    J'avais fait un premier "wget http://domain/server-status?auto -O - " et j'avais commencé à googler pour un lib java pour parser des pages html .. mais je me disais juste que ceci semblait pas très convenant !
    Mais, si tu le dis, je vais essayer cela.

    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 !

  10. #10
    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
    Ben... Je ne pense pas qu'il y ait d'autre solution avec mod_status.

    Question : tu arrives à récupérer les infos de mod_status depuis un programme natif ???



    Sinon d'après la doc le contenu du server-status?auto est "machine-readable", donc cela devrait être assez facile à décoder...


    a++

  11. #11
    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
    La page http://localhost/server-status?auto ne retourne pas les adresses ip en réalité.

    mais juste une simpliste page html facilement transformable en format texte qui contient les informations suivantes:
    Total Accesses: 165541
    Total kBytes: 288524
    CPULoad: .802125
    Uptime: 25698
    ReqPerSec: 6.44179
    BytesPerSec: 11496.9
    BytesPerReq: 1784.75
    BusyWorkers: 1
    IdleWorkers: 29
    Scoreboard
    D'ailleurs, j'ai regardé un script perl qui permet de se connecter par socket à localhost:80 par exemple afin de récupérer les informations ci-dessus
    Voici le script perl en question qui se trouve dans le dépôt svn du apache même : http://svn.apache.org/repos/asf/http..._server_status

    D'ailleurs, ça vient aussi de me donner une autre idée, à savoir essayer de me connecter en socket à localhost:80 et obtenir les infos de la page /server-status?refresh=5 par exemple (je pense et suppose que cela est possible)

    Et pour répondre à ta question : non, je n'ai pas encore récupéré les infos de mod_status via un programme natif
    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 !

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