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 :

[Architecture] Interface entre C++ & Java [Trucs & Astuces]


Sujet :

Entrée/Sortie Java

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut [Architecture] Interface entre C++ & Java
    Bonjour;

    Exist'il un autre moyen bcq plus performant que JNI pour dialoguer une application Java avec une autre appli en C++.
    Le souci que j'ai c'es que j'ai une application web réalisée avec des comapsants java (Servlet + JSP) qui doit notifier (avec passage de qcq paramètres) une grosse application codée en C++ : lui transmet les paramètres et lancer par exemple une méthode d'une classe C++ pour réaliser un traitement.
    C'est réalisable avec JNI mais problème des perfs.

    En vous remerciant.

    Djamel;

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    une autre méthode serait d'utiliser une architecture distribuée qui correspondrait au mieux à ton besoin.

    Corba sert notamment pour des applications client serveur hétérogène,

    tu peux de ce fait gérer des objets au travers de CORBA.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je pense que tu devrais utiliser utiliser des fichiers XML pour l'échange des données entre tes deux applications, sans pour autant développer sous CORBA.

    Il existe un parser XML en Java qui existe aussi en C++: Xerces.

    Va voir à cette adresse:
    http://xml.apache.org/#N1006E

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut Interface Java/C++
    Attention :

    il ne sa'git pas d'échanger des data, mais uniquement une notification à l'application C++ pour lancer un traitement spécifique (un appel de méthode avec des paramètres).

    A+:

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    c'est pourquoi je te recommande Corba

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut Interface Java & C++
    Voila ce que je souhaite faire :

    J'ai une servlet qui va uploadée des fichiers d'un poste client vers un serveur Sun et une autre qui peux supprimer ses fichiers uploadés.
    Lorsque la servlet d'upload aura fini son travail elle doit invoquer une méthode d'une classe C++ pour maj des data en mémoire gèrer par l'application C++. Traitement similaire lors d'une suppression.

    Sachant que les deux applications java & C++ tournent sur la meme machine Sun (Solaris8).
    Corba n'est pas une bonne solution car mes objets sont ds un meme serveur (non distant).

    A+;

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    malheureusement je ne vois que JNI comme unique solution, ceci dit je peux me tromper mais en ma connaissance je n'en vois pas d'autre

    Bon courage!

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Une autre solution consisterait à utiliser une socket sur un port local bien précis pour envoyer des informations d'une appli à une autre.
    On peut créer des sockets en Java et en C++, non?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Où tu utilise la méthode des CGI.

    Derrière ton serveur web, tu lui applique un module pour lui permettre d'exécuter des CGI (dèja fait avec Apache sur un AIX)
    et via ta servlet , tu appel ton CGI écrit en C, C++,pascal, etc., via une URL tu peux passer des paramètres sans problèmes et ton CGI peux renvoyer un résultat dans le flux.

    dans ta servlet tu utilise une url:
    "http://tonserveurweb/cgi-bin/toncgiexecutable?param1=blabla&param2=bibi"

    et de mémoire dans ton prg en C
    tu fais
    char *temp
    temp=getenv("QUERY_STRING"); // pour récuperer param1=blabla&parma2=bibi

    et tu fais des printf pour envoyer des données dans le flux de retour.
    exemple pour que ton browser affiche qqch:
    printf("Content-type: text/html\n\n" ); // 2 \n obligatoire !!!
    printf("<HTML>\n" );
    printf("<BODY>\n" );
    etc etc

    C'est très simple a mettre en oeuvre
    Slt

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    Il existe des logiciel qui permette de faire un "pont" entre java et les interfaces COM...
    Je sais pas si tu fais du COM, mais si oui je te conseille de t'orienter vers ces progs...

    pour trouver des exemples de "Java-Com bridge" :
    http://www.google.fr/search?q=Java-C...-8&hl=fr&meta=

    Perso j'utilise JIntegra et ça marche très bien...

    voili, voilou...
    Si tu as envie de travailler, assieds-toi et attends que ça passe...

  11. #11
    bjb
    bjb est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 3
    Points : 8
    Points
    8
    Par défaut Et une autre solution :o)
    La solution socket est la plus pratique à implementer mais une autre idée est le pipe nommé !

    Vive unix sur ce point, l'idée est d'utiliser un pipe nommer pour echanger les infos entre 2 la parti C++ et Java.

    Coté C++ les IPC te permetront d'implementer ça sans auncun PB :o)

    Coté Java, un simple File pointant sur le pipe, et voila :o)

    En theorie, cette solution doit fournir des performance largement plus importante car elle ne surcharge pas la pile IP.

    Mais si le besoin de per n'est pas important, alors le socket avec binding sur localhost est vraiment trés simple. Surtout si tu implemente un "pseudo webservice". Envoie des parametre au service C++ en URLEncodé et retour du resulat eventuel en XML (facile à généré pour n'importe quel langage et facile à parsé pour Java).

    Au passage sache que Corba est un tres bonne solution pour ton PB, mais certainement surdimensioné par rapport à tes besoins. Car ici CORBA te permetrait par exmple de gerer de la qualité de service ou de la repartition de charge (utilie sur une solaris multiproc par exemple).

    Donc, vive les socket et les pipe nommés ;-)

    @+
    -JB'.
    http://www.up2go.net - WebStart @ the MAX

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je cherche aussi à faire communiquer une appli C++ avec une autre en Java, sous environnement Windows. Je souhaiterais utiliser les tubes nommés (par souci d'homogéneïté dans le projet, tous les progs C++ communiquant ainsi).

    Sauriez-vous me dire si c'est possible : les tubes nommés Windows n'ayant malheureusement pas "l'interface fichier" des tubes Unix, je ne suis pas sûr que les Pipes Java puissent sortir de l'environnement (et donc communiquer avec autre chose qu'un autre prog Java).

    Merci par avance,
    b.

    P.S. j'ai déjà effectué des recherches google, mais elles n'ont abouti qu'à des progs Unix ou à de la communication inter-process par Socket ...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Points : 60
    Points
    60
    Par défaut JNI
    Bonjour;

    Utilise API "JNI" elle faite pour ca du moins d'après ce que tu expliques.

    Mais fait attention c'est trop gormand, n'essaye pas de transiter des data de taille non négligeable => pb de perf.

    A+;



    Citation Envoyé par balti
    Bonjour,

    Je cherche aussi à faire communiquer une appli C++ avec une autre en Java, sous environnement Windows. Je souhaiterais utiliser les tubes nommés (par souci d'homogéneïté dans le projet, tous les progs C++ communiquant ainsi).

    Sauriez-vous me dire si c'est possible : les tubes nommés Windows n'ayant malheureusement pas "l'interface fichier" des tubes Unix, je ne suis pas sûr que les Pipes Java puissent sortir de l'environnement (et donc communiquer avec autre chose qu'un autre prog Java).

    Merci par avance,
    b.

    P.S. j'ai déjà effectué des recherches google, mais elles n'ont abouti qu'à des progs Unix ou à de la communication inter-process par Socket ...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Re: JNI
    Re-bonjour,

    Citation Envoyé par yanis97
    Utilise API "JNI" elle faite pour ca du moins d'après ce que tu expliques.

    Mais fait attention c'est trop gormand, n'essaye pas de transiter des data de taille non négligeable => pb de perf.
    Je te remercie pour ta réponse :
    mais il me semble que cette API sert plutôt à exécuter du code C++ à l'intérieur d'une appli Java, (en particulier à faire transiter des données chaînes ou autre d'un format de stockage à l'autre) ... d'autre part, s' il était possible d'utiliser les tubes nommés ; comme je le disais, cela me permettrait de conserver une certaine homogénéité ds le medium de communication.

    Merci encore, et à bientôt,
    b.

Discussions similaires

  1. Réponses: 27
    Dernier message: 26/10/2011, 14h05
  2. Réponses: 4
    Dernier message: 28/02/2010, 21h59
  3. Réponses: 7
    Dernier message: 06/04/2005, 19h18
  4. [votre avis m'interesse] Interface avec un programme Java
    Par LineLe dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 11/12/2004, 11h39
  5. interface entre oracle et MySQL
    Par sbenoist dans le forum Oracle
    Réponses: 21
    Dernier message: 19/08/2004, 18h51

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