2008-08-31 10 views

ответ

4

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

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

+0

Мы делаем это все время - добавляем методы и даже новые значения в конец перечислений. Отлично работает! – Fortyrunner 2009-01-22 11:30:33

1

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

3

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

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

1

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

0

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

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

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

Я сделал CORBA DII вызов четыре года назад, и он работает с ТАО клиент & службы CORBA TAO/Jacorb/IONA.