Pregunta

Me gustaría agregar un método a la interfaz CORBA de mi servidor existente.¿Eso requerirá volver a compilar todos los clientes?

Estoy usando TAO.

¿Fue útil?

Solución

No se requiere la recompilación de clientes (y no debería serlo, independientemente del ORB que utilice).Como indicó Adam, las búsquedas se realizan por nombre de operación (una comparación de texto simple).

Hice lo que estás describiendo con nuestro sistema basado en ACE/TAO y no encontré problemas (los servidores estaban en ACE/TAO C++, los clientes eran ACE/TAO C++, C# usando Janeva de Borland y OmniORBPy).

Otros consejos

Suponiendo que los clientes y servidores se comunican a través de IIOP, no se requiere recompilación.Un mensaje IIOP contiene el nombre de la interfaz, el nombre del método y los parámetros.Si ninguna de esas cosas ha cambiado, entonces todo debería seguir siendo compatible.Agregar otro método a la interfaz no cambiará ninguna de esas cosas existentes.

Por otro lado, si sus objetos utilizan un protocolo diferente, o si los clientes están en proceso con el servidor y, por lo tanto, pasan por alto IIOP, es posible que deba asegurarse de que todo se vuelva a compilar.

Las operaciones (métodos) se buscan por nombre, por lo que sólo es necesario volver a compilar los clientes que utilizan la nueva operación.

Los clientes que utilizan colocación (es decir,que se ejecuta dentro del mismo proceso con la colocación habilitada en ORB) se debe volver a compilar.Los clientes remotos pueden seguir siendo los mismos; como se dijo anteriormente, los métodos coinciden por nombre simbólico.

Depende del uso del nuevo método idl.Si la invocación de Corba es estática (SII), lo que significa que su cliente está vinculado con un código auxiliar, debe volver a compilar un código auxiliar si desea utilizar la nueva interfaz de método agregada.

Si la invocación de corba es dinámica (DII), no se requiere ningún código auxiliar para el cliente.No se requiere ninguna recompilación.En este caso, su código de cliente debería ser como:

     remoteObjRef->invoke("methodname", args); // send("methodname", args)

Hice la invocación CORBA DII hace cuatro años y funciona con el cliente TAO y el servicio TAO/Jacorb/IONA corba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top