Spec-Zone .ru
спецификации, руководства, описания, API
|
Прежде, чем Вы начнете работать с IDL Java, Вы должны установить версию 1.4 (или позже) платформы Java. Версия 1.4 (и позже) обеспечивает Прикладной программный интерфейс (API), и Посредник запросов к объектам (ШАР) должен был включить CORBA-на-основе распределенному объектному взаимодействию, так же как компилятору idlj. Компилятор idlj использует язык IDL к Java, отображающийся, чтобы преобразовать определения интерфейса IDL соответствующим интерфейсам Java, классам, и методам, которые можно тогда использовать, чтобы реализовать Ваш код клиента и сервера.
Этот раздел учит Вас, как записать простое определение интерфейса IDL и как преобразовать интерфейс IDL в Java. Это также описывает цель каждого файла, сгенерированного компилятором idlj.
Эти темы включаются в этот раздел:
module HelloApp { interface Hello { string sayHello(); oneway void shutdown(); }; };
IDL OMG является языком, используемым, чтобы описать интерфейсы, что клиент возражает вызову, и объектные реализации обеспечивают. Интерфейсное определение, записанное в IDL OMG полностью, определяет интерфейс и полностью определяет параметры каждой работы. Интерфейс IDL OMG предоставляет информацию, должен был разработать клиенты, которые используют операции интерфейса.
Клиенты пишутся на языках, для которых были определены отображения от понятий IDL OMG. Отображение понятия IDL OMG к клиентской конструкции языка будет зависеть от средств, доступных на клиентском языке. OMG определяет отображение от IDL до нескольких различных языков программирования, включая C, C++, Smalltalk, КОБОЛ, Аду, Lisp, Python, и Java. Когда отображено, каждый оператор в IDL OMG преобразовывается в соответствующий оператор в предпочтительном языке программирования.
Например, Вы могли использовать инструмент idlj, чтобы отобразить интерфейс IDL на Java и реализовать клиентский класс. Когда Вы отобразили тот же самый IDL на C++ и реализовали сервер на том языке, клиент Java (через ШАР Java) и сервер C++ (через ШАР C++) взаимодействует, как если бы они были записаны на том же самом языке.
IDL для "Привет Мира" чрезвычайно прост; его единственный интерфейс имеет только две операции. Вы должны выполнить только три шага:
Модуль CORBA является пространством имен, которое действует как контейнер для связанных интерфейсов и объявлений. Это соответствует близко пакету Java. Каждый оператор модуля в файле IDL отображается на оператор пакета Java.
Оператор модуля похож на это:
module HelloApp { // Subsequent lines of code here. };
Когда Вы скомпилируете IDL, оператор модуля генерирует оператор пакета в коде Java.
Как интерфейсы Java, интерфейсы CORBA объявляют, что API сокращается, объект имеет с другими объектами. Каждый интерфейсный оператор в IDL отображается на оператор интерфейса Java когда отображено.
В Вашем файле Hello.idl интерфейсный оператор похож на это:
module HelloApp { interface Hello // These lines { // declare the // interface }; // statement. };
Когда Вы скомпилируете IDL, этот оператор генерирует интерфейсный оператор в коде Java.
Операции CORBA являются поведением, которое серверы обещают выполнить от имени клиентов, которые вызывают их. Каждый оператор работы в IDL генерирует соответствующий оператор метода в сгенерированном интерфейсе Java.
В Вашем файле Hello.idl оператор работы похож на это:
module HelloApp { interface Hello { string sayHello(); // This line is an operation statement. oneway void shutdown(); // This line is another }; };Интерфейсное определение для наш немного "Привет Мировое" приложение теперь полно.
Инструмент idlj
файлы IDL OMG чтений и создают необходимые файлы Java. Значения по умолчанию компилятора idlj к генерированию только привязка клиентской стороны. Если Вы нуждаетесь и в привязке клиентской стороны и в скелетах серверной стороны (как Вы делаете для нашей "Привет Мировой" программы), следует использовать опцию -fall, выполняя компилятор idlj. Для получения дополнительной информации по опциям компилятора см. опции компилятора IDL к Java.
Отображение серверной стороны по умолчанию, сгенерированное, когда или -fall или параметры -fserver используются, соответствует Главе 11, Переносимый Объектный Адаптер (POA) CORBA 2.3.1 Спецификации
Преимущества использования Переносимого Объектного Адаптера (POA):
idlj -fall Hello.idl
Если Вы перечислите содержание каталога, то Вы будете видеть, что каталог под названием HelloApp был создан и что это содержит шесть файлов. Откройте Hello.java в своем текстовом редакторе. Hello.java является интерфейсом подписи и используется, поскольку подпись вводит объявления метода, когда интерфейсы указанного типа используются в других интерфейсах. Это похоже на это:
//Hello.java package HelloApp; /** * HelloApp/Hello.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Hello.idl */ public interface Hello extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity { } // interface Hello
С интерфейсом это простое, легко видеть, как операторы IDL отображаются на сгенерированные операторы Java.
Оператор IDL | Оператор Java | |
---|---|---|
module HelloApp | package HelloApp; | |
interface Hello | public interface Hello |
Единственный удивительный элемент является оператором extends. Все объекты CORBA получаются из org.omg.CORBA.Object, чтобы гарантировать требуемую функциональность CORBA. Необходимый код сгенерирован idlj; Вы не должны сделать никакого отображения.
В предыдущих версиях компилятора idlj (известный как idltojava), операции, определенные в интерфейсе IDL, существовали бы в этом файле также. Запускаясь с J2SDK v1.3.0, в соответствии с CORBA 2.3.1 Спецификации
//HelloOperations.java package HelloApp; /** * HelloApp/HelloOperations.java * Generated by the IDL-to-Java compiler (portable), version "3.0" * from Hello.idl */ public interface HelloOperations { String sayHello (); void Shutdown (); } // interface HelloOperations
Поскольку есть только две операции, определенные в этом интерфейсе, легко видеть, как операторы IDL отображаются на сгенерированные операторы Java.
Оператор IDL | Оператор Java | |
---|---|---|
string sayHello(); | String sayHello(); | |
oneway void shutdown(); | void Shutdown (); |
Компилятор idlj генерирует много файлов. Фактическое число сгенерированных файлов зависит от опций, выбранных, когда файл IDL компилируется. Сгенерированные файлы обеспечивают стандартную функциональность, таким образом, можно проигнорировать их, пока не пора развернуть и выполнить Вашу программу. Под J2SE v.1.4, файлы, сгенерированные компилятором idlj для Hello.idl, с параметром командной строки -fall:
Этот абстрактный класс является основанным на потоке скелетом сервера, обеспечивая основную функциональность CORBA для сервера. Это расширяет org.omg.PortableServer.Servant, и реализует интерфейс InvokeHandler и интерфейс HelloOperations. Класс сервера, HelloServant, расширяет HelloPOA.
Этот класс является клиентским тупиком, предоставляя функциональность CORBA клиенту. Это расширяет org.omg.CORBA.portable.ObjectImpl и реализует интерфейс Hello.java.
Этот интерфейс содержит версию Java нашего интерфейса IDL. Интерфейс Hello.java расширяет org.omg.CORBA.Object, обеспечивая стандартную функциональность объекта CORBA. Это также расширяет интерфейс HelloOperations и org.omg.CORBA.portable.IDLEntity.
Этот класс обеспечивает вспомогательную функциональность, особенно метод narrow(), требуемый бросать ссылки на объект CORBA на их надлежащие типы. Класс Помощника ответственен за чтение и запись типа данных к потокам CORBA, и вставки и извлечения типа данных от Any s. Класс Держателя делегирует к методам в классе Помощника для чтения и записи.
Этот заключительный класс содержит общедоступного члена экземпляра типа Hello. Всякий раз, когда типом IDL является out или параметр inout, класс Держателя используется. Это обеспечивает операции для org.omg.CORBA.portable.OutputStream и параметров org.omg.CORBA.portable.InputStream, которые CORBA позволяет, но которые не отображаются легко на семантику Java. Класс Держателя делегирует к методам в классе Помощника для чтения и записи. Это реализует org.omg.CORBA.portable.Streamable.
Этот интерфейс содержит методы sayHello() и shutdown(). Отображение IDL к Java помещает все операции, определенные в интерфейсе IDL в этот файл, который совместно используется и тупиками и скелетами.
Когда Вы пишете интерфейс IDL, Вы делаете все программирование, требуемое генерировать все эти файлы для Вашего распределенного приложения. Следующие шаги должны реализовать классы клиента и сервера. В шагах, которые следуют, Вы создадите клиентский класс HelloClient.java и класс сервера HelloServer.java.
Если Вы пытаетесь выполнить idlj на файле, Hello.idl и система не могут найти idlj, это наиболее вероятно не в Вашем пути. Удостоверьтесь, что расположение idlj (каталог bin JDK) находится в Вашем пути, и попробовать еще раз.
Обеспечивает основы для того, чтобы они отобразили конструкции IDL на соответствующие операторы Java.
Обеспечивает полную спецификацию для Языка определения интерфейсов OMG. Спецификация может быть загружена с