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

Java Discussion :

Comment utiliser une assembly .Net ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut Comment utiliser une assembly .Net ?
    Bonjour,

    je dois développer en C# et les assemblies réalisées doivent être utilisables en Java. Hors je ne connais pas bien Java et je dois faire un projet Java qui réutilisera une assembly .Net fort simple, mais je ne sais pas encore comment m'y prendre.
    Et pour corser le tout, il faut aussi que ça ne fonctionne pas que sous Windows mais aussi sous linux. J'ai bien trouvé des tutos qui parlent de JNI et JNI4NET mais le premier passe par du code en C++ natif et le second n'est pas encore porté sous mono.

    Merci pour vos conseils.

  2. #2
    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
    Si les données à faire transiter ne sont pas trop volumineuse, des Web Services pourraient t'offrir une solution relativement propre.

  3. #3
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Utiliser un WebService ne veut pas dire qu'on doit installer un serveur web sur la machine ?
    N'est-ce pas un peu lourd alors que le but n'est pas de faire communiquer les 2 applis sur 2 postes différents mais en local sur le même poste ?

  4. #4
    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
    Pas forcément besoin d'un servlet container. Il suffit juste d'avoir une socket à disposition. Donc les web services marchent bien en dehors d'un contexte web.

    Cf: http://java.sun.com/developer/techni...J2SE/jax_ws_2/

    Cela peut sembler un peu lourd, toutefois ce sera amplement plus simple à maintenir que N couches de code natif utilisant des API plus ou moins stables.

  5. #5
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Ton article est un peu (beaucoup) compliqué pour quelqu'un qui ne s'y connait pas bien en Java.
    Mais si je ne m'abuse, il ne faut pas faire les WebServices en Java mais en .Net et l'appli Java utiliserait ces WebServices.
    Il faudrait donc que je trouve comment faire fonctionner des WebServices en .Net sur un serveur linux sans avoir à installer un serveur web ?
    Bien que je sois d'accord que d'avoir une couche native intermédiaire entre une couche managée et la couche Java soit assez usine à gaz et source d'incompatibilités, ta solution est aussi assez complexe à mettre en oeuvre.

    Je la garde sous le coude si besoin mais j'aimerais vraiment pouvoir trouver une solution où le déploiement entre autre serait plus simple.

    J'ai entendu dire que JNI permettait d'utiliser du code natif soit windows, soit linux, soit mac sans avoir besoin de faire 3 versions du code.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Par défaut
    Une solution simple:
    Le java exécute ton programme .net (en fait la machine virtuelle via exec) et utilise les pipes d'entrée-sortie standard pour dialoguer.

  7. #7
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Je ne m'y connais pas super bien, mais en faisant ainsi, on travaille bas niveau et du coup, ce n'est que du procédural, on na pas de typage fort de la POO, ni vérification des types à la compilation.

    Je suis en train de faire des tests en utilisant JNI, j'arrive à utiliser du code C++ compilé sous linux, il faut encore que je trouve comment mapper l'assembly .Net avec le code natif C++.

  8. #8
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Bonjour,

    finalement la solution d'utiliser JNI sur linux n'aboutit pas. J'ai un problème sur le projet C++ natif intermédiaire, je n'arrive pas ré-utiliser une assembly .NET, on dirait que ce n'est pas encore implémenté dans mono/monodevelop.

    Finalement, je me suis intéressé à la solution WebServices, mais je me demande si cela peut répondre au besoin car j'ai l'impression que les WebServices ne permettent que de faire du procédure avec des types primitifs comme string, int, ... et ne permet pas de faire de la POO, ce qui serait fort limitant.

  9. #9
    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
    Les webservices peuvent parfaitement correspondre à des données complexes sans le moindre problème.

    En effet tu peux utiliser tes propres Objets qui seront mappés en tant qu'éléments XML.

    Genre un truc dans le style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public class Maclasse {
       private int toto;
       private String machin;
       private BigDecimal duTexte;
     
     
       public int getToto() {
           return toto;
       }
     
       public void setToto(int toto) {
           this.toto = toto;
       }
     
       //et ainsi de suite pour les autres accesseurs get/set machin et duTexte
    }
    Avec une classe englobante du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class MaClasseEnglobante {
       private MaClasse maClasse;
       private String autreChaine;
     
       public MaClasse getMaClasse() {
          return maClasse;
       }
     
       //et ainsi de suite pour les autres accesseurs get/set maClasse  et autreChaine
     
    }
    Sera mappée en xml sous la forme:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <MaClasseEnglobante>
       <MaClasse>
          <toto>0</toto>
          <machin>truc</machin>
          <duTexte>azertyuiop</duTexte>
       </MaClasse>
       <autreChaine>poiuytreza</autreChaine>
    </MaClasseEnglobante>

    Ce qui correspond bien aux notions d'objets. Tu peux également mapper des collections ou tout autres choses de cette façon.

  10. #10
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Mais cela implique que celui qui consomme le WebService sera obligé de redéclarer toutes les classes pour qu'il puisse lui aussi faire de la POO ?

    Je n'arrive pas à voir comment côté client, on peut récupérer un objet et les propriétés d'un objet, il devra forcément désérialiser l'objet depuis le noeud XML ? Comment pourra-t-il appeler la méthode d'un de ces objets ?

Discussions similaires

  1. [ADO.Net][2.0] Comment utiliser une source de données Firebird ?
    Par neilbgr dans le forum Accès aux données
    Réponses: 2
    Dernier message: 24/05/2006, 08h05
  2. Réponses: 2
    Dernier message: 14/05/2006, 19h36
  3. [Langage]Comment utiliser une dll .NET dans VB6?
    Par BouB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2006, 14h20
  4. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50

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