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 :

Problème Corba retourner un objet


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut Problème Corba retourner un objet
    Voici mon prbl,j'arrive pas à retourner un objet sur corba

    voila mon interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    module serveurEsclave{
    	interface webServerItf{
    	    Object getPage(in string pagename);
    	    };
    	};
    et la classe qui l implemente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import org.omg.CORBA.Object;
     
    public class webServerItfIMPL extends webServerItfPOA {
     
        public webServerItfIMPL(){
        }
     
        public org.omg.CORBA.Object getPage(String nom){
            try{			
    			PageWeb toto=new PageWeb(nom);
                return (org.omg.CORBA.Object) toto;
            } catch(Exception e){System.out.println(e+ " erreur retour de l'objet corba"); return null;}
        }
    }
    il rentre bien mais le prbl est le retour,sais pas comment retourner un objet donc si quelque sais...

    [ Modéré par Viena ]
    Ajout balises de code : Pensez aux balises [code], votre message est plus lisible et la lecture plus facile.

    Les Règles du Forum

  2. #2
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Il faut :

    - que PageWeb soit un objet CORBA (i.e. PageWeb implémente une interface IDL)
    - créer l'objet PageWeb
    - activer l'objet dans un POA
    - renvoyer une référence sur l'objet (méthode POA.servant_to_reference)

    Bref, tu crées un autre objet CORBA, tout comme tu l'as fait avec ton objet principal webServerItfIMPL.

    Je rappelle que tu ne renvoies pas un objet local mais une référence sur un objet local. si tu veux renvoyer une copie d'un objet local, tu dois utiliser des structures ou des valuetype.

  3. #3
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    pourrais tu etre plus precis ? Afficher la pile d'execution par exemple et ton interface.

    tu as bien fait toute les étapes, je suppose ? compiler IDL, créer interface, compiler les .java ...

    Parce que ça fait longtemps que j'ai pas fait de Corba, donc je dis ptet des betises, mais je pensais qu'il fallait que tu extends le IMPL généré.

    Enfin bref, avec plus de détail, j'aurais ptet plus de souvenirs ...

    EDIT : j'ai été un peu trop long à répondre apparemment... menator à l'air plus au point que moi

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci de vos reponse,quelqu un pourais me passer son adresse msn en message privé,ca serait plus simple...

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    désolé, je n'ai pas msn au boulo ...

    affiche toujours le stacktrace,ton interface java et son implémentation

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    mais j ai pas tt a fais compris ce qui faut faire en fait lol
    j ai bien crée un objet
    org.omg.CORBA.Object obj = orb.string_to_object(ior);
    webServerItf ws = webServerItfHelper.narrow(obj);
    ensuite je fais PageWeb page=(PageWeb)ws.getPage(nompage);

    mais le retour merde donc...

  7. #7
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Comme je disais plus haut, ça fait longtemps que j'ai pas fait de Corba. Je veux bien t'aider (si je peux) mais il faut que j'ai plus de choses sous les yeux pour pouvoir comprendre... (à moins que quelqu'un s'y connaissant mieux t'aide)

    affiche le e.printStackTrace() quand tu catch l'exception
    fais voir ton interface et ta classe qui l'implémente.

    Parce que là, moi je vois pas trop ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    l interface et la classe qui l implemente sont juste en haut
    j ai essayé pas mal de facon pour retourner l objet,nada


    le e.print...() donne ca

    Serveur pret
    java.lang.ClassCastException: PageWeb
    at webServerItfIMPL.getPage(webServerItfIMPL.java:11)
    at webServerItfPOA._invoke(webServerItfPOA.java:35)
    at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(Unknown Source)
    at com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(Unknown Source)
    at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(Unknown Source)
    at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(Unknown Source)
    at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(Unknown Source)
    java.lang.ClassCastException: PageWeb erreur retour de l'objet corba

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    L interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    module serveurEsclave{
    	interface webServerItf{
    	    Object getPage(in string pagename);
    	    };
    	};




    Classe implement l interface
    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
     
    import org.omg.CORBA.Object;
     
    public class webServerItfIMPL extends webServerItfPOA {
     
        public webServerItfIMPL(){
        }
     
        public org.omg.CORBA.Object getPage(String nom){
            try{			
    			PageWeb toto=new PageWeb(nom);
                return (org.omg.CORBA.Object) toto;
            } catch(Exception e){e.printStackTrace();System.out.println(e+ " erreur retour de l'objet corba"); return null;}
        }
    }





    Joue le role de client,on va dire

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    import java.io.*;
    import java.net.*;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.lang.String.*;
    import org.omg.CORBA.ORB;
    import java.lang.Thread;
    import java.util.*;
     
    public class serveurThread extends Thread{
        private String nompage;
        private Socket s;
        private webServerItf ws;
        private String[] port;
        public serveurThread(String pagename,Socket s){
            this.nompage=pagename;
            this.s=s;
        }
        public boolean connection(String[] portinter){
     
            /**
             * Primitive (obligatoire) d'initialisation de l'ORB.
             * On lui passe les parametres de la ligne de commande.
             * Le 2nd parametre (null) est de type java.util.Properties
             * (utilisable si on a des parametres additionnels
             * a transmettre a l'ORB.
             */
     
            String ior="";
     
            ORB orb = ORB.init(portinter,null);
    	    boolean savoir=true;
            /**
             * On lit dans un fichier
             * l'IOR de l'objet CORBA ecrit par le programme Serveur.
             */
     
            try{
                BufferedReader br = new BufferedReader(new FileReader("webserver.ior"));
                ior = br.readLine();
                br.close();
                //System.out.println( ior );
     
            }catch(Exception e){e.printStackTrace();savoir=false;};
     
            /**
             * On cree un objet CORBA a partir de l'IOR
             * (primitive string_to_object).
             * On caste cet objet CORBA de base vers un object CORBA
             * implantant l'interface du webserver.
             * Comme tous les cast CORBA, on passe par la
             * mehode narrow de la classe Helper.
             */
            org.omg.CORBA.Object obj = orb.string_to_object(ior);
     
            /** ---- CONVERTIR obj en webserver ---- */
            ws = webServerItfHelper.narrow(obj);
            return savoir;
        }
        public int CompteNbLigne(String NomFic) {
            File fichier = new File(NomFic);
            int TailleFic=0;
            try {
                BufferedReader in = new BufferedReader(new FileReader(fichier));
                String ligne;
                while((ligne=in.readLine())!=null){
                    int indice=ligne.indexOf("=")+1;
                    port[TailleFic]=ligne.substring(indice,ligne.length());
                    TailleFic++;
                }
            }catch (Exception e){e.printStackTrace();System.err.println("erreur a l'ouverture du fichier dans CompteNbLigne");}
            TailleFic=TailleFic-1;
            return TailleFic;
        }
        public void run() {
           /* int nbligne=CompteNbLigne("config.ini");
            int nbligne=1;
    	int resultatRandom=(int)(Math.random()*nbligne);
    	*/
    	String[]inter=new String[1];
    	inter[0]="180";
            if (connection(inter)) {
                PageWeb page=(PageWeb)ws.getPage(nompage);
                try{
                    ObjectOutputStream ob=new ObjectOutputStream(s.getOutputStream());
                    ob.writeObject((PageWeb)page);
                    s.close();
                }catch(Exception e){e.printStackTrace();System.out.println("Socket envoie erreur");}
            }
        }
    }



    Joue le role de serveur
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    import java.io.FileWriter;
    import org.omg.CORBA.ORB;
    import org.omg.PortableServer.POA;
    import org.omg.PortableServer.POAHelper;
     
     
    public class serveurEsclave {
     
        public static void main( String[] args ) throws Exception {
     
            /**
             * Primitive (obligatoire) d'initialisation de l'ORB.
             * On lui passe les param?res de la ligne de commande.
             * Le 2nd param?re (null) est de type java.util.Properties
             * (utilisable si on a des param?res additionnels
             * ?transmettre ?l'ORB.
             */
     
             ORB orb = ORB.init(args, null );
     
            /**
             * Les objets CORBA sont pris en charge par un POA.
             * Le POA par d?aut s'appelle RootPOA qu'il est
             * n?essaire d'activer.
             * La s?uence d'appel suivant est "impos?" par l'API CORBA
             * (on a pas le choix).
             *
             * Comme tout "composant" de base le RootPOA se r?up?e
             * avec un appel ?resolve_initial_references() qui retourne
             * un org.omg.CORBA.Object
             * (attention nom complet obligatoire, sinon confusion
             * avec java.lang.Object).
             * L'objet retourn?est en fait un POA.
             * Pour avoir acc? ?ses m?hodes, il faut le "caster"
             * vers l'interface POA.
             * Comme tout cast CORBA, il faut passer par la m?hode
             * narrow d'une classe Helper.
             * On peut alors appeller la primitive activate().
             */
            org.omg.CORBA.Object rootobj =orb.resolve_initial_references("RootPOA");
            POA rootpoa = POAHelper.narrow(rootobj);
            rootpoa.the_POAManager().activate();
     
            /**
             * On instancie la classe.
             * Dans le vocabulaire CORBA, on cr? un servant.
             * On enregistre ce servant dans le POA
             * (primitive servant_to_reference).
             * On r?up?e un object CORBA.
             * Ici, l'association est simple: 1 servant <-> 1 objet CORBA
             */
            webServerItfIMPL servant=new webServerItfIMPL();
            /** ---- INSTANCIATION DE webserveur ---- */
            org.omg.CORBA.Object obj =rootpoa.servant_to_reference(servant);
     
            /**
             * Enregistre la r??ence d'objet CORBA (IOR) dans un fichier.
             * L'IOR s'obtient par la primitive object_to_string de l'ORB.
             * Ce fichier sera lu par le client.
             */
            String ior = orb.object_to_string(obj);
            FileWriter fw =new FileWriter("webserver.ior");
            fw.write(ior);
            fw.close();
            //System.out.println( ior );
     
            /**
             * On met l'ORB en attente de requ?es client.
             * Tant que l'on n'a pas fait orb.run(),
             * le(s) objet(s) cr?s) ne r?ond(ent) pas aux clients.
             * Ce programme continue ?"tourner"
             * tant que l'on ne fait pas Ctrl-C
             */
            System.out.println( "Serveur pret" );
            orb.run();
        }
    }
    Désolé pour tout ce code,c'est pour que vous comprenniez mieux d'ou peut vennir mon erreur..

  10. #10
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Woa, effectivement ça fait un petit bout de temps que j'ai pas fait de Corba

    (cf Menator) T'es sûr que ta classe PageWeb c'est bien un objet Corba ?

    Re-regarde ce qu'a dit Menator. Je suppose qu'il a raison, faut que tu fasse pareil que pour ton objet WebServerItfIMPL.

    Là je suis un peu perdu . Désolé si je t'ai fais perdre ton temps.

    Je te mets toujours un lien vers les TP/corrections des cours que j'avais suivi à l'époque, c'était assez clair ...

    Je continue à regarder mais à mon avis, la réponse de Menator suffisait

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    no ps du tt,mais comment dire que pageweb est un objet corba?

  12. #12
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    ben je suppose qu'il faut qu'il soit définit dans l'IDL, qu'une interface java correspondante existe et qu'elle soit implémentée. Mais faudrait que je relise vite fait des explications ... ou alors plus simplement, peut etre que PageWeb doit hériter/implémenter une certaine classe Corba pour pouvoir être castée en Objet Corab (?)

    En fait ça m'intéresse bien le Corba mais là j'ai un gros pb sur les bras, du coup j'ai un peu laché ...

    Si j'y arrive, je me remets à Corba. Bonne chance

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci à toi

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    la class pageweb au cas ou ca pourait vous servir

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import java.io.*;
    import org.omg.CORBA.*;
     
    public class PageWeb {
        File page;
        String name;
        String dirpath = "www";
        public PageWeb(String filename) throws PageException {
    	this.name = filename; 
    	page = new File(dirpath +"/"+ filename);
    	if(page == null){
    	    throw new PageException("Le fichier "+filename+" est inaccessible.");
    	}else{
    	    if(!page.exists()){
    		throw new PageException("Le fichier "+filename+" n'existe pas.");
    	    }
    	}
        }
        /**Constructeur d'une page vide. */
        public PageWeb(){
        }
     
        public String toString(){
            return "Page web - name =  " + name;
        }
        public File getFile(){
    	return this.page;
        }
     
        /** Retourne true si la page correspond vraiment a un fichier existant.*/
        public boolean exists(){
    	return (page==null) ? false : page.exists();
        }
        public void print() throws PageException{
    	if(page != null){
    	    try{
    		java.io.FileReader reader = new java.io.FileReader(page);
    		java.io.BufferedReader buf = new java.io.BufferedReader(reader);
    		while(buf.ready()){
    		    System.out.println(buf.readLine());
    		}
     
    		System.out.println();
    		reader.close();
    		buf.close();
    	    }
    	    catch(Exception e){
    		throw new PageException("Impossible d'imprimer le fichier " + name);
    	    }
    	}else{
    	    System.out.println("Le fichier "+name+" est vide.");
    	}
        }
     
    }

  15. #15
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Tout est dit

    ça s'est interdit, ça n'a pas de sens dans le monde CORBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public org.omg.CORBA.Object getPage(String nom){
      try{			
    	PageWeb toto=new PageWeb(nom);
                return (org.omg.CORBA.Object) toto;
            } catch(Exception e){e.printStackTrace();System.out.println(e+ " erreur retour de l'objet corba"); return null;}
        }
    Il faudrait que tu ais qque chose comme ça :
    (en supposant que tu crées un PageWebImpl qui implémente l'interface IDL PageWeb)
    IDL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    module ServeurEsclave {
      interface PageWeb {
         // les méthodes publiques que tu souhaites sur PageWeb
        string getNom();
      }
    }
    Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public org.omg.CORBA.Object getPage(String nom) {
     try{			
      PageWeb toto=new PageWebImpl(nom);
       // récupérer le POA (rootpoa) que tu as créé dans ton serveur
       org.omg.CORBA.Object obj =rootpoa.servant_to_reference(toto);
       return obj;
       } catch(Exception e){e.printStackTrace();System.out.println(e+ " erreur retour de l'objet corba"); return null;}
    }
    Au passage "getPage" devrait renvoyer un "PageWeb" plutôt que Object.

    Si PageWeb n'est pas un objet distribué mais plutôt une structure (i.e. pas de méthodes mais que des attributs), ce qui est probablement ton cas, tu changes ton contrat IDL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module ServeurEsclave {
      struct PageWeb {
       // les attributs publics que tu souhaites sur PageWeb
      string nom;
      }
      interface webServerItf{
        PageWeb getPage(in string pagename);
      };
    }
    Et là tu pourras renvoyer des structures directement, sans tout le tralala CORBA (activer l'objet sur le POA + servant_to_reference(...) etc..)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci enormement pour ta réponse et de ton temps passé pour moi mais j'ai encore qu'elle que truc qui me derange.En fait,j'ai envi que le serveur envoie un objet de type PageWeb et que le client ensuite envoie par socket cet objet a un autre client et que ce client puisse faire des methodes de cet objet,un peu compliqué mais bon....
    A ce que j'ai compris je dois créer une interface pageweb qui ,contient comme méthode getnom() qui retourne un string.Mais ceux que je veux est un objet donc...


    Desolé je débute en corba,et je dois le faire pour un projet

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    up

  18. #18
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Tu es en gros sur la bonne voie. Il vaudrait mieux poursuivre le thread sur le forum CORBA, c'est le seul que je consulte .

    Avec ce qu'on a dit tu as déjà le début:
    - une interface PageWeb que tu implémentes avec un objet Java PageWebImpl.
    - un client qui récupère des "objets" PageWeb via la méthode webServerItf.getPageWeb() (en fait des références d'objets, l'objet reste dans le process qui l'a instancé).

    (Donc bien faire la différence entre un Objet Java, qui est un objet local, et un Objet CORBA qui représente toujours une référence sur un objet distant)

    Il te reste à:
    - transmettre par socket l'objet PageWeb au client N°2:
    pas de problème, il faut :
    -> récupérer l'IOR de lo'objet CORBA PageWeb (orb.object_to_string()).
    L'IOR est la référence de l'objet, sous forme texte, transmissible par fichier/socket....
    -> transmettre l'IOR "string" au client N°2
    -> recréer un objet CORBA à partir de l'IOR (orb.string_to_object())
    -> caster l'objet en PageWeb (avec PageWebHelper.narrow(). narrow est le cast du monde CORBA, un cast standard Java ne fonctionnera pas).

    Tu obtiens un objet PageWeb sur client N°2 et tu peux faire appel aux méthodes. Chaque appel est distant, c'est toujours le serveur où tu as instancié PageWebImpl qui réponds.
    Avantage: il y a un seul exemplaire de "PageWeb" (le PageWebImpl instancié)
    Inconvénient : tu génères du trafic réseau, à chaque appel à une méthode de PageWeb.

    Si tu ne veux pas faire des objets distribués, mais de la migration d'objets (comme on aurait en Java, un objet est copié d'un process à un autre), alors il faut utiliser des valuetype : PageWeb n'est plus une interface, mais un valuetype, PageWeb avec ces attributs sera copié d'un process à un autre, les appels de méthodes seront locaux (i.e. sur client N°2, PageWeb.getNom() génère un appel local et non distant).
    Avantage: les appels de méthodes sur PageWeb sont locaux, les performances sont meilleures,
    Inconvénient : il existe pusieurs copies de PageWeb, une sur chaque client, les valeurs des attributs peuvent être différentes, si les clients les changent.
    Tu trouveras des exemples de valuetype dans tout bon ORB qui se respecte.

Discussions similaires

  1. Dll retournant un objet
    Par titoine1978 dans le forum C++
    Réponses: 4
    Dernier message: 27/12/2007, 17h30
  2. [MySQL] mysqli_connect me retourne un objet
    Par NerOcrO dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/11/2007, 11h06
  3. [Débutant] Fonction qui retourne un objet (classe)
    Par in dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/08/2007, 09h32
  4. Serialisation/deserialisation d'un arrayList retourne des objets vides
    Par cdtkoenig dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/07/2007, 15h45
  5. Réponses: 4
    Dernier message: 16/01/2007, 13h42

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