2012-01-25 5 views
1

Я знаю, что CORBA позволяет реализовать несколько объектов на разных языках программирования и даже работать на разных вычислительных узлах. Однако, требуется ли тогда два разных ORB, написанных на двух разных языках?Должно ли приложение CORBA быть реализовано на том же языке, что и ORB?

Пример: Узел A запускает приложение Java J1, а узел B запускает приложение C++ C1. Должен ли я получить «Java ORB» для узла A и «C++ ORB» для узла B, или все/некоторые ORB взаимодействуют с приложениями, написанными на любом языке, на котором есть сопоставление IDL?

Я был бы особенно благодарен, если бы кто-нибудь мог связать меня с источником, указав это явно, как я бы хотел его процитировать. Ближайший я нашел "the way a programmer manipulates a struct or union, makes a remote call using a proxy or implements an interface with a servant class is exactly the same across all C++ CORBA products, is exactly the same across all Java CORBA products, and so on". Это заставляет меня думать, что мне понадобятся два ORB, но недостаточно явных. В основном я хотел бы знать, могу ли я утверждать, что «поскольку ORB написан на C++, программистам приложений также запрещено использовать C++».

Благодаря

+0

Позвольте мне пояснить немного больше, с конкретным примером: «ACE ORB (TAO) является совместимым с CORBA V3.0, C++ ORB» [ссылка] (http://www.theaceorb.com /) Означает ли это, что я должен писать свои приложения на C++, если использовать TAO? – Vidar

+0

Да, это то, что он имеет в виду. Однако он может удаленно общаться с любым другим ORB на любом другом языке программирования через стандартный протокол IIOP (среди прочих). –

+0

Спасибо вам за помощь! Консенсус, похоже, заключается в том, что для приложения требуется ORB для предоставления API на языке, в котором реализовано приложение. Часто ORB просто предоставляет API на языке программирования, который сам реализован, но нет ничего прекращающего он связывает свои основные библиотеки с API на других языках. * Кроме того, существует возможность использования любых языковых функций внедрения языка приложения, например, вызов C++ из Python или вызов C из Java. – Vidar

ответ

2

Не важно, на каком языке ORB реализован, важно, какие языковые привязки он предоставляет. Для языка L вам нужен орб, который предоставляет привязки для языка L. Часто орбы просто предоставляют привязку к языку, на котором они сами написаны, но также могут обеспечивать привязки для некоторых других языков.

3

No. Точка CORBA является то, что он полностью развязывает компоненты.

Очевидно, что вашим приложениям необходимо использовать клиентские библиотеки, с которыми они могут взаимодействовать. Ваш ORB может устанавливать привязки только для одного языка, и в этом случае вам нужно найти другие привязки или найти способ взаимодействия с ними (например, если вы используете Python, вы все равно можете работать с библиотеками C++, если хотите).

Попробуйте использовать эту технологию.

+0

Er, но все же Java-программа должна иметь «представление» ORB, реализованного на Java, правильно? –

+0

@DiegoSevilla: Я не знаю, что вы имеете в виду. Каждая программа должна иметь соответствующие клиентские библиотеки corba для работы с системой corba. – Marcin

+0

Вы и @DiegoSevilla, похоже, не согласны. Добавляет ли комментарий к моему первоначальному вопросу ваш ответ или вы говорите, что «C++ ORB» может также предоставлять клиентские библиотеки/API на Java? – Vidar

0

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

Как в Java и C++, компилятор IDL генерирует заглушек и скелеты, которые служат в качестве клея между сетью и программой. Вы предоставляете реализацию своих объектов CORBA, обычно наследуемых от генерируемого компилятором IDL класса (скелета). Скелет получает запрос от клиента в некотором роде, а затем вызывает вашу реализацию. То же самое происходит в обратном направлении на стороне клиента.

Затем, как скелет, так и заглушка используют механизмы, предоставляемые ORB, для удаленного вызова серверов и ответа на ответы, даже включая установление сетевых соединений, если клиент и серверы находятся на разных машинах. Эта «магия» реализуется ORB и должна присутствовать в вашей программе в виде библиотеки, набора функций и т. Д., Которые заглушка и скелет будут использовать для выполнения работы.

Итак, каждая программа должна иметь какое-то представление ORB для взаимодействия с другими клиентами и серверами CORBA на других машинах.

Однако, с логической точки зрения, ORB рассматривается как слой, который фактически и плавно соединяет как клиентов, так и серверы, поэтому, даже если приложение C++ имеет некоторую реализацию ORB, написанную на C++, и реализацию Java иметь ORB, написанный на Java, посредством магии стандартных протоколов (GIOP, IIOP), они могут общаться друг с другом без проблем.

+0

Я перефразирую ключевые моменты, чтобы проверить мое понимание: клиентская программа видит ORB как API, выраженный на том же языке, что и сам. И ORB предоставляет такой API только на том языке, на котором он сам реализован. – Vidar

+0

Это правильно, поэтому вам нужно то, что называется ORB (реализация API ORB и функциональность) в том же адресном пространстве (и таким образом, язык), что ваше приложение. –

+1

Ну, орб может быть реализован на одном языке и обеспечивает привязки для нескольких других. –