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

CORBA Discussion :

JAVA - Passer des Objects à des méthodes


Sujet :

CORBA

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 22
    Points : 14
    Points
    14
    Par défaut JAVA - Passer des Objects à des méthodes
    Bonjour,

    quelqu'un pourrait me montrer un exemple pour passer un Object de type org.omg.CORABA.Object à une méthode.

    J'ai défini cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void init(in Object query);
    J'ai une classe comme cela :
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    package com.lswe.irisReporting.test.client;
    
    import org.omg.CORBA.Context;
    import org.omg.CORBA.ContextList;
    import org.omg.CORBA.DomainManager;
    import org.omg.CORBA.ExceptionList;
    import org.omg.CORBA.NVList;
    import org.omg.CORBA.NamedValue;
    import org.omg.CORBA.Policy;
    import org.omg.CORBA.Request;
    import org.omg.CORBA.SetOverrideType;
    
    public class TestObject implements org.omg.CORBA.Object {
    
        public String st = "1";
    
        /**
         *  
         */
        public TestObject() {
            super();
    
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_release()
         */
        public void _release() {
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_non_existent()
         */
        public boolean _non_existent() {
            return false;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_hash(int)
         */
        public int _hash(int maximum) {
            return 0;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_is_a(java.lang.String)
         */
        public boolean _is_a(String repositoryIdentifier) {
            return false;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_get_domain_managers()
         */
        public DomainManager[] _get_domain_managers() {
            return null;
        }
    
        /*
    
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_duplicate()
         */
        public org.omg.CORBA.Object _duplicate() {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_get_interface_def()
         */
        public org.omg.CORBA.Object _get_interface_def() {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_is_equivalent(org.omg.CORBA.Object)
         */
        public boolean _is_equivalent(org.omg.CORBA.Object other) {
            return false;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_get_policy(int)
         */
        public Policy _get_policy(int policy_type) {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_request(java.lang.String)
         */
        public Request _request(String operation) {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_set_policy_override(org.omg.CORBA.Policy[],
         *      org.omg.CORBA.SetOverrideType)
         */
        public org.omg.CORBA.Object _set_policy_override(Policy[] policies, SetOverrideType set_add) {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_create_request(org.omg.CORBA.Context,
         *      java.lang.String, org.omg.CORBA.NVList, org.omg.CORBA.NamedValue)
         */
        public Request _create_request(Context ctx, String operation, NVList arg_list, NamedValue result) {
            return null;
        }
    
        /*
         * (non-Javadoc)
         * 
         * @see org.omg.CORBA.Object#_create_request(org.omg.CORBA.Context,
         *      java.lang.String, org.omg.CORBA.NVList, org.omg.CORBA.NamedValue,
         *      org.omg.CORBA.ExceptionList, org.omg.CORBA.ContextList)
         */
        public Request _create_request(Context ctx, String operation, NVList arg_list, NamedValue result, ExceptionList exclist,
                ContextList ctxlist) {
            return null;
        }
    
    }

    Dans mon client, j'utilise cette classe , mais j'ai une erreur de classCastException.

    Quel est le probleme ?


    De plus, avec CORBA, peut-on passer n'importe quel type d'objets ??

  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
    Oulà ...

    J'ai l'impression que tu est en train de :
    - définir un contrat IDL avec une méthode init(in Object query)
    - définir un objet Java que tu tentes de faire passer pour un objet CORBA en dérivant de org.omg.CORBA.Object
    Tu te fais jeter par un classCastException Java et c'est normal car ce n'est pas la bonne méthode.

    L'objet CORBA que tu fait passer dans "init" doit implémenter une interface définie en IDL:

    Ex : avec l'IDL suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    interface MyServer {
    void init(in Object query);
    }
    interface MyClient {
    ...
    }
    Ici, un "Object" CORBA est une référence vers un objet qui implémente une interface définie en IDL.
    Tu peux passer des "Object" CORBA qui implémentent l'interface MyClient, ou tout autre objet qui implémente une interface IDL.

    Tu recevras cet objet avec un code du type (à qque chose près, mes souvenirs commencent à dater)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void init(org.omg.CORBA.Object o) {
    
      MyClient client = null;
    
      if (o._is_a(MyClientHelper.id())) {
      client = fooHelper.narrow(o);
      // je bosse avec mon "objet CORBA qui est identifié comme un client"
      }
    }
    Tu ne peux en aucun cas passer un élément non défini dans le contrat IDL.

    Evidemment pour ne pas avoir à réaliser le narrow (c'est un cast dans le monde CORBA) il vaut mieux définir une interface spécifique à passer dans ton init (Object est un poil trop large non ?)

    Si tu veux vraiment passer n'importe quel type y compris des types de base, des structures, utilise un Any, mais ce sera plus lourd à gérér.

  3. #3
    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
    J'ajoute que:

    - tu n'as pas à implémenter les méthodes de org.omg.CORBA.Object

    Tu dois seulement implémenter les méthodes de ton interface IDL, qui sont en "abstract" sur ton POA côté Java.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //IDL
    interface MyServer {
    void init(in Object query);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Java
    public class MyServerImpl extends MyServerPOA {
      public void init(Object query) {
    .....
     }
    }
    Les tutoriels expliquent bien ces points fondamentaux ...

Discussions similaires

  1. Ensemble des réels, des complexes, des entiers naturels
    Par ANOVA dans le forum Mathématiques - Sciences
    Réponses: 5
    Dernier message: 08/10/2009, 12h58
  2. Réponses: 2
    Dernier message: 28/06/2007, 18h00
  3. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  4. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 15h17
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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