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:
XXX x = xxxpoatie._this(orb);
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.
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().
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.
Partager