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

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

Я использую ТАО.


person Dmitry Shechtman    schedule 31.08.2008    source источник


Ответы (5)


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

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

person Jason Etheridge    schedule 03.09.2008
comment
Мы делаем это постоянно — добавляем методы и даже новые значения в конец перечислений. Работает как часы! - person Fortyrunner; 22.01.2009

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

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

person Kristopher Johnson    schedule 03.09.2008

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

person Adam Mitz    schedule 31.08.2008

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

person Dmitry Khalatov    schedule 18.09.2008

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

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

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

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

person shijie xu    schedule 05.12.2013