Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > CORBA
CORBA Forum d'entraide et de discussion sur le développement distribué avec CORBA & les ORB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/03/2011, 14h16   #1
Invité de passage
 
Inscription : février 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 5
Points : 0
Points : 0
Par défaut Migration de BOA a POA avec l'ORB de Sun

Bonjour,

J'ai un large code qui utilise le CORBA de Sun base sur le BOA ( compile des IDL avec l'option "-oldImplBase"). L'application en question utilise CORBA pour creer les objets par delegation comme suit:
Pour une intefrace XXX j'ai
XXXImpl impl = new XXXImpl();
XXX x = new XXX_Tie(impl);
orb.connect(x);
x.doSomething(); // l'appel ici est local, i.e sans passer par les couche corba

Je souhaite porter ce code en utilisant le POA, toujours par delegation. J'ai commencer par remplacer tout les appels _Tie par POATie. Bien sur ceci a casse le code car il n'y a plus de lien entre le XXXTie et XXX. Du coup pour recuperer le XXX, j'ai fait rootPOA.servant_to_reference(xxxpoatie) puis un narrow() de ce que me renvoie le servant_to_reference(). Sauf que a present tout les appel de XXX sont automatiquement en remote et cette ligne ne compile pas:
XXX x = new XXXPOATie(impl);

En regardant bien c'est normal le XXX ne peut etre qu'un _Stub et donc la partie client du code (remote). Oui mais comment faire pour pas casser tout le code, car dans la plupart des cas les objets sont locaux, car dans le code d'origine il ne fait que orb.connect() et pas obj_is_ready().

En resume et si j'ai bien compris, dans mon cas ou les appels se font en local il faut que je fasse les appels aux fonctions uniquement a travers le XXXImpl ou de son Tie seulement (et pas le XXX) ? Mais ca ca veut dire bcp de boulo... y a t il un autre moyen ?

A part le code, est ce qu'il faut changer qqchose a la config du fait de changement de BOA a POA?

J'ai vraiment besoin d'aide!
riri_dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 17h47   #2
Membre confirmé
 
Homme Julien Enoch
Architecte technique
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Julien Enoch
Âge : 36
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 291
Points : 291
Citation:
Je souhaite porter ce code en utilisant le POA, toujours par delegation. J'ai commencer par remplacer tout les appels _Tie par POATie. Bien sur ceci a casse le code car il n'y a plus de lien entre le XXXTie et XXX.
Pourquoi n'y aurait-il plus de lien ?
Il y en a un dès l'activation de l'object CORBA. Par exemple:
Code :
XXX x = xxxpoatie._this(orb);
Citation:
Sauf que a present tout les appel de XXX sont automatiquement en remote
Qu'est ce qui te fait dire qu'ils sont en remote ? Si le client est dans le même process que le serveur, ce n'est pas en remote.
Après, il est possible que ton ORB fasse du boulot en trop et inutile lors d'un appel co-localisé. Mais certains ORB peuvent optimiser cela avec une configuration adéquate.

Citation:
cette ligne ne compile pas:
XXX x = new XXXPOATie(impl);
Normal. Comme tu le dis XXXPOATie n'est pas un stub, c'est un skeleton (côté serveur). Pour obtenir un stub, il faut activer un objet CORBA "connecté" sur ce skel. Cela peut être fait de manière implicite avec le code ci-dessus (_this()) ou de manière explicite avec un POA et l'opération activate_object() puis id_to_reference().

Citation:
En resume et si j'ai bien compris, dans mon cas ou les appels se font en local il faut que je fasse les appels aux fonctions uniquement a travers le XXXImpl ou de son Tie seulement (et pas le XXX) ? Mais ca ca veut dire bcp de boulo... y a t il un autre moyen ?
Pour des appels co-localisés, tu peux aussi passer par le XXX, de la même manière qu'en distant. C'est un des intérêts de CORBA: lorsqu'un client utilise un stub (XXX) il n'a pas à savoir si le skel est local où remote. L'appel se fait de la même manière. C'est l'ORB qui gère.
CorbAddict est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h12.


 
 
 
 
Partenaires

Hébergement Web