Изменение интерфейса CORBA без перекомпиляции

StackOverflow https://stackoverflow.com/questions/36890

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы добавить метод к интерфейсу CORBA моего существующего сервера. Это потребует перекомпиляции всех клиентов?

Я использую TAO.

Это было полезно?

Решение

Перекомпиляция клиентов не требуется (и не должна быть, независимо от того, какой ORB вы используете). Как указал Адам, поиск выполняется по имени операции (прямое сравнение текста).

Я сделал то, что вы описываете с нашей системой на основе ACE / TAO, и не обнаружил никаких проблем (серверы были на ACE / TAO C ++, клиенты были ACE / TAO C ++, C # с использованием Borland's Janeva и OmniORBPy).

Другие советы

Если предположить, что клиенты и серверы обмениваются данными через IIOP, перекомпиляция не требуется. Сообщение IIOP содержит имя интерфейса, имя метода и параметры. Если ничего из этого не изменилось, то все должно оставаться совместимым. Добавление другого метода в интерфейс не изменит ничего из этого.

С другой стороны, если ваши объекты используют другой протокол или клиенты работают с сервером и, таким образом, обходят IIOP, вам может потребоваться убедиться, что все перекомпилировано.

Операции (методы) ищутся по имени, поэтому вам нужно только перекомпилировать клиентов, использующих новую операцию.

Клиенты, использующие колокейшн (то есть работающие в одном и том же процессе с колокейшн в ORB) должны быть перекомпилированы. Удаленные клиенты могут остаться прежними - как было сказано ранее, методы сопоставляются по символическому имени.

Это зависит от использования нового метода idl. Если вызов Corba является статическим (SII), что означает, что ваш клиент связан с заглушкой, вы должны перекомпилировать заглушку, если хотите использовать новый интерфейс добавленного метода.

Если вызов corba является динамическим (DII), для клиента не требуется заглушка. Никакой перекомпиляции не требуется. В этом случае ваш код клиента должен выглядеть так:

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

Я выполнял вызов CORBA DII четыре года назад, и он работает с клиентом TAO и сервисом TAO / Jacorb / IONA corba.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top