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

C++ Discussion :

Utilisation d'un coeur algorithmique Java distant à partir d'un programme C++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut Utilisation d'un coeur algorithmique Java distant à partir d'un programme C++
    Bonjour,

    Je voudrais connaître l'avis d'expert ayant déjà utilisé des technologies d'interfaçage de programmes C++ et Java sur des machines distantes.

    J'ai d'un côté un système indépendant écrit en C++ et de l'autre un algorithme implémenté en Java permettant d'effectuer certain calculs et de renvoyer une action correspondante au programme C++.

    Seulement, certaines contraintes rendent impossibles le redéveloppement de la partie Java en C++.

    En résumé :
    -j'ai des données émanant de la partie C++ matérialisées par une classes "Donnée".
    - je voudrais transmettre l'objet Données à java, afin qu'il fasse ses calculs en fonction des informations de ces données.
    - Instanciation dans Java d'un objet "Action" résultant des calculs.
    - Transmission de cet objet à C++ pour qu'il récupère les informations d'Action.
    - Utilisation de l'objet Action dans C++.

    Ce processus serai amené à boucler puisque divers évènements peuvent engendrer un recalcul.

    Alors j'ai exploré divers pistes comme le JNI couplé au RMI, le Corba, les sockets, le framework Zeus de C++.

    Quelle est votre avis sur la question ? Je suis ouvert à tout retour d'expérience sur l'utilisation de ces technologies.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Sockets ou JNI, sachant que le premier est en théorie (beaucoup) plus performant.

    Mais bon, on a le même problème alors on porte java en C++... comme on peut.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    D'accord, mais dans votre cas est-ce qu'il y a une problèmatique de communication réseau entre le code C++ et java ?

    Car l'utilisation de JNI seul ne répond pas à cette problèmatique, tandis que les Sockets peuvent passer par le réseau.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Si le travail s'effectue toujours par un réseau, il "suffit" de faire transiter les données selon un protocole à établir éventuellement...

    Pour autant que les deux systèmes soient en mesure d'évaluer les données reçues de la même manière et de les émettre sous une forme déterminée, tu passe littéralement outre la barrière du langage...

    La seule chose étant que, quel que soit le langage utilisé, il faudra prévoir... une structure pour représenter les données dans les deux applications
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Ok, je vois l'idée : passer par un moyen plus bas niveau, en transmettant les données sous la forme d'une chaîne de caractère (par exemple) suivant une syntaxe préalablement définie. Chaîne qui sera ensuite traitée côtée Java. Et de la même façon en sens inverse.

    Ca me paraît être la solution la plus rapide tant au niveau durée de développement qu'au niveau du temps d'exécution. Mais en terme de facilité de reprise du code par un tier j'émet quelques doutes.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    XML. C'est autodocumenté.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Ah oui, cette idée me plaît, je n'y avais pas pensé.

    Et pour envoyer le fichier XML généré, je peux passer par des Sockets c'est ça ?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je ne sais pas dans quelle mesure soap peut aussi apporter une réponse. A tout hasard, voici un tuto qui peut servir d'introduction : Web Services en C++ : Implémenter un client/serveur gSoap, par r0d.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    write XML > zip > socket > unzip > read XML

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Ok merci, je jette un oeil à SOAP quand même.

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par K-you Voir le message
    <snip>Mais en terme de facilité de reprise du code par un tier j'émet quelques doutes.
    Je ne vois pas pourquoi...

    Si tu détermine clairement la manière dont les données sont transmises et la structure qui permet de les récupérer / représenter, il suffira à celui qui reprend le code d'apprendre à... utiliser cette structure, dont, principalement, l'utilisation des différents champs qu'elle regroupe.

    Mettons que tu aies une structure "personne" qui serait codée en C sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Persone
    {
        char nom[45]; // je prend volontairement un grand nombre :D
        char prenom[45];
        char dn[0] // au format YYYYMMDD + '\0'(ajouté)
    };
    Elle pourrait très bien être codée en C++ sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Personne
    {
        public:
            Personne(std::string const & n, std::string const & p, 
                     std::string const & d):name_(n),firstname_(p),birth_(d){}
            /* tout ce qui nous intéresse */
    };
    et sous une forme équivalente quel que soit le langage utilisé (pas uniquement java, mais ada, cobol ou que sais-je )

    Du moment que l'on sache que le protocole prévois l'envoi des données sous la forme
    • byte 1 : nombre de lettres du nom (sans compter '\0')
    • byte 2 : nombre de lettres du prenom
    • byte 3 à byte N (*): nom
    • byte N+1 à byte M (**): prenom
    • byte M à byte M+8 : date de naissance
    • byte L(***) : checksum

    • (*) correspond à 4+ nombre de lettres du nom comme défini dans byte 1
    • (**) correspond à N+1 + nombre de lettres du prenom comme défini dans byte 2
    • (***) correspond à M + 1 + 8
    n'importe quel langage (y compris les plus exotiques / anciens) sera en mesure de récupérer les informations et de les traiter

    [EDIT] Effectivement, un format comme XML est facile à utiliser et à transmettre...

    Les possibilités sont multiples et présentent toutes des avantages et des inconvénients
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par K-you Voir le message
    Ok merci, je jette un oeil à SOAP quand même.
    Par curiosité, ton module en java, c'est quoi ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Oui, c'est vrai qu'avec une documentation claire et un format de transmission de données comme celui de ton exemple, ça ne pose pas de problème de reprise.

    Ma partie Java est un algorithme de plannification (avec entre autres, des recherches de plus court chemin).

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Merci.
    Tiens-nous au courant de tes résultats. Je ne connais pas SOAP et suis curieux de savoir ce que ça donne, surtout du coté des serveurs java.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Je n'ai toujours pas testé SOAP, mais je me demande maintenant si le protocol buffer qui permet de générer du code en C++ ou en Java grâce au compilateur associé à la librairie Protocol Buffer ne serait pas plus efficace. Personne n'a d'expérience dans l'utilisation de ce protocole ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/05/2010, 18h31
  2. Utilisation de code Java à partir d'un programme C++ distant
    Par K-you dans le forum Général Java
    Réponses: 5
    Dernier message: 25/02/2010, 14h08
  3. Compiler des fichier java, mais à partire d'un programme Java.
    Par Djobird dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 06/11/2007, 21h44
  4. Réponses: 4
    Dernier message: 24/04/2007, 18h05
  5. [ActiveX] Peut-on utiliser un Controle ActiveX avec Java
    Par waldo2188 dans le forum Multimédia
    Réponses: 2
    Dernier message: 22/02/2005, 11h39

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