Je souhaite ajouter une méthode à l'interface CORBA de mon serveur existant. Cela exigera-t-il de recompiler tous les clients?Modification d'une interface CORBA sans recompilation
J'utilise TAO.
Je souhaite ajouter une méthode à l'interface CORBA de mon serveur existant. Cela exigera-t-il de recompiler tous les clients?Modification d'une interface CORBA sans recompilation
J'utilise TAO.
La recompilation des clients n'est pas requise (et ne devrait pas l'être, quel que soit le bloc ORB que vous utilisez). Comme Adam l'a indiqué, les recherches sont effectuées par nom d'opération (une comparaison de texte en ligne droite). J'ai fait ce que vous décrivez avec notre système ACE/TAO, et n'ai rencontré aucun problème (les serveurs étaient en ACE/TAO C++, les clients étaient ACE/TAO C++, C# utilisant Borland's Janeva, et OmniORBPy) .
Les opérations (méthodes) sont recherchées par leur nom, il vous suffit donc de recompiler les clients qui utilisent la nouvelle opération.
En supposant que les clients et les serveurs communiquent via IIOP, aucune recompilation n'est requise. Un message IIOP contient le nom de l'interface, le nom de la méthode et les paramètres. Si aucune de ces choses n'a changé, alors tout devrait rester compatible. Ajouter une autre méthode à l'interface ne changera aucune de ces choses existantes. D'autre part, si vos objets utilisent un protocole différent, ou si les clients sont en cours de traitement avec le serveur et donc en contournant IIOP, vous devrez peut-être vous assurer que tout est recompilé.
Les clients utilisant la colocation (c'est-à-dire s'exécutant dans le même processus avec la colocation activée dans ORB) doivent être recompilés. Les clients distants peuvent rester les mêmes - comme indiqué précédemment, les méthodes sont appariées par un nom symbolique.
Cela dépend de l'utilisation de la nouvelle méthode idl. Si l'invocation de Corba est statique (SII), ce qui signifie que votre client est lié avec stub, vous devez recompiler un stub si vous souhaitez utiliser votre nouvelle interface de méthode ajoutée.
Si l'invocation corba est dynamique (DII), aucun stub n'est requis pour le client. Aucune recompilation n'est requise. Dans ce cas, votre code client devrait être comme:
remoteObjRef->invoke("methodname", args); // send("methodname", args)
Je l'ai fait appel CORBA DII il y a quatre ans et il travaille avec le client TAO & TAO/JacORB/IONA service CORBA.
Nous faisons cela tout le temps - ajouter des méthodes et même de nouvelles valeurs à la fin des énumérations. Il fonctionne comme un charme! – Fortyrunner