Я хотел бы добавить метод в интерфейс CORBA моего существующего сервера. Это потребует перекомпиляции всех клиентов?
Я использую ТАО.
Я хотел бы добавить метод в интерфейс CORBA моего существующего сервера. Это потребует перекомпиляции всех клиентов?
Я использую ТАО.
Перекомпиляция клиентов не требуется (и не должна быть вне зависимости от используемого вами ORB). Как указал Адам, поиск выполняется по имени операции (прямое сравнение текста).
Я сделал то, что вы описываете, с нашей системой на основе ACE/TAO и не обнаружил никаких проблем (серверы были на ACE/TAO C++, клиенты были на ACE/TAO C++, C# с использованием Borland 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.