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

avec Java Discussion :

Comment faire communiquer C++ avec J2EE


Sujet :

avec Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut Comment faire communiquer C++ avec J2EE
    Salut,

    Mon projet consiste à réaliser une application web d'acquisition,stockage et de matching des empreintes digitales.
    la partie traitement des images est développé en C++ et la partie web je fais le faire avec J2EE.Alors si quelqu'un peut me donner une idée comment faire communiquer ces deux parties.
    Je suis débutante en J2EE,Merci de m'aider.

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 325
    Billets dans le blog
    2
    Par défaut
    bonjour,

    ce problème n'est pas trivial. Je vois 2 possibilités:

    1/ jna/jne (des packages java qui permettent d'utiliser des dll écrites en c++ à partir d'une appli java)

    2/ passer par un serveur soap (jsoap côté java, gSoap côté c++). Plus lourd, mais si tu dois faire un webservice, tu pourras utiliser ton serveur.

    Après, ça dépend de tes contraintes et du contexte en général.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    bonsoir,

    Merci beaucoup pour votre réponse, mais je n'ai pas bien assimilé surtout la 2éme solution,SVP expliquez moi un peu plus ces deux solutions et comment le concrétisé.
    ce sujet est mon projet de fin d'étude,j'ai codé l'algorithme de codage et de matching d'empreinte digitale en C++ en utilisant la bibliothèque de traitement d'image OpenCV et je vais coder maintenant la partie web en J2EE mais je me suis bloqué dans la partie J2EE.

    Merci d'avance de m'aider.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 325
    Billets dans le blog
    2
    Par défaut
    1/ jna et jne sont des packages java (en gros l'équivalent des bibliothèques en c++) qui permettent d'utiliser des dll écrites en c++. jna est une sur-couche de jne. En gros, c'est jne "pour les nuls": plus simple à utiliser mais avec de grosses pertes de performances. jne est donc plus difficile à utiliser mais plus efficace. Je ne pourrais pas t'en dire plus, je n'ai jamais approfondi cette solution.

    Concrètement, cette solution consiste à transformer ton application c++ en dll, et de la charger, en utilisant jna ou jne, dans ton application java.

    L'avantage de cette solution est qu'elle est plus simple à implémenter et à installer.

    2/ SOAP est un protocole de transfert de données entre 2 application via le réseau. Il utilise le protocole http, et nécessite donc un serveur http (apache, IIS, etc.). Sur ce point, je ne peux pas t'en dire plus, je n'y connais rien. Je n'ai jamais réussi à comprendre, par exemple, ce qu'est exactement J2EE. Je sais juste que ce protocole (SOAP) est implémenté en java par le package jSoap, et en c++ par la bibliothèque/compilateur gSoap.

    Cette solution consiste donc à:
    - créer un serveur http et un web service. gSoap permet d'en créer un "stand alone", c'est à dire sans utiliser un serveur tiers, mais il permet aussi d'en utiliser un que tu aura créé "en dehors".
    - tranformer ton appli c++ en serveur gSoap (web service).
    - transformer ton application java en client soap.

    Donc, ton application java (client), pilotera ton application c++ (web service), par le biais de requêtes http (post/get). Le contenu de ses requêtes est du xml (on peut donc les valider de grâce à un schéma xsd par exemple) et est généré et interprété par les bibliothèques SOAP (gSoap et jSoap).

    L'avantage de cette solution est qu'elle offre la possibilité à des applications externes de "communiquer" avec ton appli, et ce, quel que soit le langage de celle-ci.

    Voilà, je ne peux pas t'aider plus, je ne suis pas expert dans le domaine, et je n'ai jamais réellement utilisé aucune de ses solutions (juste des petits tests de faisabilité). Je pense que tu auras beaucoup de compléments en discutant avec les gens du forum java.

    Hope it helps.

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    Merci beaucoup.c'est clair maintenant.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par r0d Voir le message
    (SOAP) est implémenté en java par le package jSoap
    Je ne connais pas cette biblio, peut-être est-ce une biblio tierce partie. Quitte à faire des web services en Java, autant utiliser la spec la plus récente: Jax-WS en utilisant une implémentation quelconque (celle de référence, Metro ou CXF de chez Apache).
    Mais bon, faire un web service en Java ce n'est pas un problème. Perso j'aurais plus peur pour le C++. Je ne connais pas gSoap mais j'avais recherché il y a un petit temps un moyen de faire des web services en C++ pour en déduire que c'était loin d'être simple.
    J'aurais plus tendance à conseiller du Corba. Ca existe depuis longtemps, il y a un nombre incalculable d'apis dédiés au C++, et c'est tout aussi simple à utiliser en Java (même pas besoin de rechercher une biblio, tout est intégré dans le JDK depuis le 1.4 au moins).

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    au choix:

    jni (tu embed ta librarie c++ dans la jvm)
    Socket (tu communique entre java et c++ via une socket, soit avec un protocole à toi, soit en utilisant des webservices)
    Si ce sont des process longs: un répetoire où tu "pose" les requete sous forme de fichier, un autre ou tu lit les résultats.

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    Merci de votre réponse, mais si tu peux m'expliquer un peu plus ces 2 solutions surtout comment les concrétisé.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    y en a plus que deux ^^

    Pour ce qui est de mettre des fichiers dans un répertoire, je passe outre, c'est pas bien compliqué à imaginer, par contre c'est loin d'être du real-time

    Pour les webservice, tu peux faire implémenter un webservice par ton application c++. Tu met alors un client webservice dans ton j2ee et tu l'utilise (voir les docs sur les webservices)

    Pour la socket, ben çà consiste à inventer un protocole réseau pour faire communiquer ton java avec ton appli c++

    Pour le jni, çà consisteà intégrer tes bout de code c++ dans des classes java, via l'api jni (voir aussi les docs qui foisonnent sur le net). C'est juste long, compliqué et si ton c++ a des erreur, çà peut crasher la jvm (pas de stacktrace)

  10. #10
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut
    Merci c'est clair.

  11. #11
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Il existe egalement d'autres solutions dont entre autre CORBA qui permet le partage d'objets entre differents languages (dont bien sur le C++ et le Java) a travers le reseau (et donc a fortiori sur un meme poste). La technoligie est similaire a RMI (Java <-> Java) et donc peut etre lourdre a mettre en place mais ca marche.

    Apres il existe egalement des trucs comme SOAP ou XMLRPC mais la ce n'est pas trop mon domaine.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  12. #12
    Nouveau candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut SWIG
    J'ai le même problème à résoudre et je suis tombé sur le site web de l'outil SWIG. Il permet de générer du code java (d'autres langages sont disponibles également) à partir d'en-têtes de code C ou C++.
    Je vais essayer de l'utiliser. Je pense que ça me fera gagner beaucoup de temps.

    http://www.swig.org/

  13. #13
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Eventuellement tu peux passer par JNA qui ne nécessite même pas de générer de C/C++ de liaison et te permet d'attaquer directement des librairies natives.

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    merci sinok, j'aurais appris un truc aujourd'hui

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je n'y ai jamais crû à ce mode de fonctionnement qui consiste à appeler un fonction directement par son nom. Franchement à part pour les cas triviaux (genre sqrt() ) ça doit être la croix et la bannière pour expliquer correctement les types de paramètre/de retour. Et la je parle pour le C, pour le C++ on peut oublier, à part peut-être dans le cas de bibliothèques ancestrales genre wxWidgets mais faut prévoir une super moumoute pour quand on aura fini de s'arracher les cheveux.

Discussions similaires

  1. Comment faire communiquer Flex avec un JDBC svp?
    Par takinelinfo dans le forum Flash
    Réponses: 2
    Dernier message: 30/10/2009, 16h23
  2. Réponses: 3
    Dernier message: 06/07/2009, 12h11
  3. Réponses: 14
    Dernier message: 26/05/2009, 15h28
  4. J aimerai faire communiquer une application J2EE avec OpenErp(TinyErp)
    Par p2w.walas dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 20/03/2009, 18h54
  5. Réponses: 3
    Dernier message: 27/07/2006, 10h17

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