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 :

Quelques questions sur la JNI


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Quelques questions sur la JNI
    Bonjour à tous, en éspérant tomber sur un expert Java qui saura m'éclairer

    J'ai un projet réseau à réaliser, et je dois utiliser la JNI.
    En gros le code doit permettre d'appeller du code C++ qui implemente l'algorithme de traceroute (la fameuse commande reseau) et récuperer et parser les données en Java.

    Jusqu'à la rien de bien étrange, la JNI étant faite pour supporter du code C++.
    Je suppose que le code C++ doit être dépendant de la plateforme pour être compilé correctement sur chaque plateforme (qu'en est-il de l'execution ? platform dependant au niveau du code aussi ?).

    En gros je dois faire tourner ce projet sous MacOSX et Windows, sans trop me fatiguer a faire deux implementations du traceroutes (en C++) complétement différentes.
    La JNI rend elle abstraite le code C++ aprés compilation, et cela tourne til donc sur toutes les plateformes ? Ce n'est pas mon idée premiére ...

    Auquel cas il faudrait que je trouve une librairie orientée réseau en C/C++ qui soit cross platform (au moins Mac / Windows - Je pense à ACE) ...
    Mais est-ce évident via la JNI d'utiliser des librairies C++, ou devrais-je encapsuler l'ensemble des milliers de headers de la librairie avec des tags propres à la JNI ?

    Voila, merci de répondre si vous pouvez un peu m'aider à avancer.

    Merci d'avance !

    Ben.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ce qui est sûr, c'est que JNI ne te fournit pas une sollution multi plateformes (on a eu le problème avec un serveur SUN Solaris 10 en 64 et une version de la JVM en 32, certains types n'avaient pas la même longueur).
    En gros, il faut faire une classe java qui implémente les méthodes "native", tu utilises après javah pour générer le .h, faire un programme C pour implémenter toutes les méthodes de .h, créer une dll (donc là aussi problème : windows = dll, Unix = .o)
    Ensuite, côté java, c'est simple, tu fais un System.load (ou System.loadLibrary) et tu utilises...
    Ceci dit, pourquoi ne pas lancer la commande traceroute via Runtime.getRuntime().exec(...) ?
    C'est une appli WEB ou Swing ?

    En espérant ne pas t'avoir découragé...

    A+

  3. #3
    Membre actif Avatar de coco62
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 237
    Points : 278
    Points
    278
    Par défaut
    Ne pas oublier de rendre la librairie disponible via
    LD_LIBRARY_PATH ou PATH ouo LD_PATH en fonction de l'os

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par f273345
    Ne pas oublier de rendre la librairie disponible via
    LD_LIBRARY_PATH ou PATH ouo LD_PATH en fonction de l'os
    Uniquement si tu utilises loadLibrary (avec load, tu peux préciser le chemin complet)

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos réponses !

    Je suis un peu découragé en effet, c'est assez chaud, je suis expert C++ et non pas Java, c'est pour un client, et je dois me remettre à Java, sans avoir vraiment jamais touché à la JNI.

    Le besoin a été exprimé d'utiliser la JNI pour effectuer le traceroute, je n'ai pas vraiment plus de précision pour le moment, j'ai demandé au client j'attend sa réponse.

    Pour ce qui est du code du traceroute (le moteur sera écrit en C++), je ne peux pas donc realiser un code natif unique, mais il doit être dépendant de la plateforme ? Car pour generer une .dll windows et l'équivalent MAC il va me falloir compiler ce code sur les deux plateformes je suppose.

    Je maintiens donc le fait que j'aimerai utiliser une librairie systéme/réseau cross platform (telle que ACE), supportée sous Mac et Windows (et plein d'autres OS).
    Mais en gros, je fais mon code C++ standard sous Visual Studio, en sortant une DLL (et lequivalent sur MAC) et au niveau JNI je n'ai pas grand chose à faire exact ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    En fait je voulais dire ...

    Le code C++ n'as pas à être mélangé au code Java (un peu comme disont du HTML dans du PHP), mais peut être conservé hors du projet dans une solution Visual Studio à part ...
    Et le projet Java n'aura pas une trace de code C++ mais fera juste des appels à la DLL.

    Je me trompe ou pas ?

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Non, c'est tout à fait ça

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Ok ca me semble beaucoup plus clair maintenant ...

    En gros je peux utiliser les librairies que je veux à côté au niveau de mon projet C++, faudra juste que je fournisse les dll de ces librairies également et la dll de mon projet, et ensuite sous Java JNI je chargerai ma dll de projet et en gros le seul code "commun" est celui à effectuer avant d'appeller javah, qui est à travailler uniquement pour les signatures des fonctions exposées de la DLL.

    Je pense avoir tout bon lol :p

    Enfin j'éspére

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Mais comme dit plus haut, tu pourrais aussi (peut-être) faire un exe (C) qui traite la demande et tu l'appelles via Runtime.getRuntime().exec("la ligne de commande qui va bien");
    Tu peux récupérer la sortie de ce process, c'est prévu...

    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Oui je vois ce que tu veux dire, faire mon traceroute portable sur MAC/Windows avec mon format de sortie souhaitée, en C ... Et appeller cet exe sous MAC ou Windows depuis monde code Java sans passer par la JNI.

    A mon avis c'est clair que c'est faisable, mais aprés n'y aura t-il pas des contraintes (car le client à bien exprimé son besoin de passer par JNI).
    Peut-être pour un probléme d'optimisation, l'application aura une charge lourde et un process pour chaque requéte (car le exec spawn le process) ca fera peut être lourd .... Peut-être est-ce la le probléme de mon client.

    Ou peut être ne veut il pas diffuser l'application de traceroute (car cette méthode nécéssiterai de fournir l'exe aux utilisateurs, et la JNI rend les choses un peu plus opaques).

    Je ne vois pas vraiment d'autre contrainte pour lesquels le choix de JNI s'imposerait ...

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Effectivement, peut-être ne veut-il pas diffuser l'exe et comme JNI implique l'usage d'une dll, c'est (un peu) plus opaque...
    En plus, si c'est ce qu'il veut... Y a qu'à faire...

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Ou peut-être est-ce juste un client un peu sadique sur les bords ...

    Qui sait ^^

Discussions similaires

  1. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 14h27
  2. Réponses: 19
    Dernier message: 21/10/2005, 20h24
  3. Quelques questions sur la mémoire
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 17/11/2004, 15h38
  4. Quelques question sur Win 32 Appli
    Par lvdnono dans le forum Windows
    Réponses: 5
    Dernier message: 15/06/2004, 13h37
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 22h23

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