javabeans and corba

Upload: anonymous-ruqy8qme

Post on 06-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/17/2019 JavaBeans and CORBA

    1/12

    Sun Microsystems, Inc.

    901 San Antonio RoadPalo Alto, CA 94303

    U.S.A. 650-960-1300 

    Корпоративные компоненты JavaBeans и клиенты CORBA:

    Руководство разработчика 

    Краткий обзор 

    В этом документе описывается, как  разрешить клиентским приложениям, написанным на любом языке программирования, поддерживаемом CORBA, получить доступ к корпоративным JavaBeans™ компонентам («EJB™

    компоненты»). Этот документ  рассчитан на программистов, имеющих углубленные знания Java™ 2 Platform, EnterpriseEdition (J2EE™) и CORBA (Common Object Request Broker Architecture).

    January 2002

    Copyright © 2002 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, California 94303, U.S.A. All rights reserved.

    Sun Microsystems, Inc. владеет правами интеллектуальной собственности, относящейся к технологии, заключенной в данном продукте. В частности, и без ограничений, права интеллектуальной собственности могут включать один или несколько патентов США, перечисленных в http://www.sun.com/patents и один или несколько дополнительных патентов или ожидающих  решения патентов в США и других странах.

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

    Стороннее программное обеспечение, включая технологию шрифтов, охраняется авторским правом и лицензировано поставщиками Sun.

    Sun, Sun Microsystems, Sun logo, Java, Enterprise JavaBeans, EJB, J2EE и J2SE являются торговыми марками или 

    зарегистрированными торговыми марками Sun Microsystems, Inc. в США и других странах.

    UNIX является зарегистрированной торговой маркой в США и других странах и эксклюзивно лицензирована X/OpenCompany, Ltd.

    Корпоративные компоненты JavaBeans™ и клиенты CORBA:

    Руководство разработчика 

    В этом документе описывается, как  разрешить клиентским приложениям, написанным на любом языке программирования, поддерживаемом CORBA, получить доступ к корпоративным компонентам JavaBeans™ («EJB™компоненты»). Этот документ  рассчитан на программистов, имеющих углубленные знания Java™ 2 Platform, Enterprise

    Edition (J2EE™) и CORBA (Common Object Request Broker Architecture).

    Технология J2EE упрощает корпоративные приложения, позволяя строить их из стандартизованных, модульных и доступных для повторного использования компонентов, основанных на архитектуре JavaBeans™ (EJB™), обеспечивая полный набор служб для этих компонентов и управляя многими деталями поведения приложения автоматически.Автоматизируя многие сложные задачи  разработки приложений, требующие много времени, технология J2EE дает возможность  разработчикам приложений сконцентрироваться на своей задаче, то есть, на улучшении бизнес-логики, а не на построении инфраструктуры.

    Серверная модель компонентов EJB™ упрощает  разработку компонентов промежуточного  уровня, являющихся транзакционными, масштабируемыми  и переносимыми. Корпоративные серверы JavaBeans уменьшают сложность  разработки программного обеспечения промежуточного уровня, обеспечивая автоматическую поддержку таких служб как транзакции, безопасность, связь с базами данных и других.

    CORBA представляет собой стандарт Object Management Group (OMG), являющийся открытой, независящей от производителя архитектурой и инфраструктурой, которые используют приложения для совместной  работы в сети.

  • 8/17/2019 JavaBeans and CORBA

    2/12

    Используя стандартный протокол IIOP (Internet Inter-ORB Protocol), основанные на CORBA программы любых 

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

    http://www.omg.org/gettingstarted/gettingstartedindex.htm.

    Технология CORBA дополняет платформу Java, обеспечивая  распределенную объектную среду, службы для поддержки этой оболочки и возможность взаимодействия с другими языками. Технология CORBA является интегральной частью 

    платформы Java 2 и используется в корпоративных компонентах JavaBeans, в Java Remote Method Invocation API, работающем по протоколу IIOP (“Java RMI-IIOP”), и в Java IDL API (“Java IDL”).

    OMG Interface Definition Language (IDL) используется для описания интерфейсов, используемых удаленными объектами.IDL используется для определения имени интерфейса и имен каждого из атрибутов и методов. После создания IDL-файла вы можете использовать компилятор IDL для генерации клиентской заглушки и скелета программы для сервера на любом языке, для которого OMG определила спецификацию по отображению. Для углубленного изучения OMG IDLпосетите сайт http://www.omg.org/gettingstarted/omg_idl.htm.

    Java IDL дает возможность  распределенным приложениям Java активизировать операции удаленных сетевых служб,используя стандарт OMG IDL и IIOP, определенный Object Management Group (http://www.omg.org). Java RMI over IIOP

    API  разрешает программирование серверов и приложений CORBA при помощи javax.rmi API.

    Разработчики компонентов EJB используют программную модель Java RMI для своей  распределенной объектной 

    модели, в которой стандартным транспортным протоколом между всеми серверами приложений является Java RMI-IIOP.

    В гетерогенной серверной среде стандартное отображение архитектуры EJB в CORBA  разрешает следующие возможности взаимодействия:

    • Клиент, использующий ORB от одного производителя, может получить доступ к корпоративным компонентам,которые  расположены на сервере, поддерживающем технологию корпоративных компонентов JavaBeans («EJB-сервер») и предоставленным другим производителем.

    • Корпоративный компонент одного EJB-сервера может получить доступ к корпоративному компоненту другого 

    EJB-сервера.

    • CORBA-клиент, написанный на языке, отличном от языка программирования Java, может получить доступ к 

    любому EJB-компоненту, если существует отображение OMG IDL на этот язык программирования.

    Оставшаяся часть данного документа  рассматривает пример клиентского приложения CORBA, получающего доступ к объекту корпоративного компонента. В данном документе клиент CORBA означает клиентское приложение, написанное 

    на любом языке, поддерживаемом CORBA, включая язык программирования Java, C++, C, Smalltalk, COBOL, Ada, Lispили Python. Хотя Java-код в этом примере специфичен для корпоративных компонентов, процесс  разработки CORBA-

    клиента, получающего доступ к серверу, созданному с использованием Java RMI-IIOP API, является таким же.

    Ссылки на похожие примеры приложений от других производителей,  реализующих технологию J2EE, могут быть найдены в  разделе «Ссылки на похожие примеры».

    Разработка CORBA-клиента, который  обращается к корпоративному 

    компоненту 

    Ниже приведен пример того, как  разработать приложение CORBA-клиента, получающего доступ к компоненту EJB. В данном примере клиент написан на языке программирования С++, хотя может использоваться любой язык,

    поддерживаемый CORBA.

    Общий процесс  разработки CORBA-клиента, который может получить доступ к корпоративному компоненту, рассматривается в следующих  разделах:

    1. Написание корпоративного компонента.

    2. Генерация CORBA IDL.3. Создание CORBA-клиента.

    4. Размещение корпоративного компонента.5. Запуск клиентской программы.

    Этот документ также включает следующие  разделы:

    • Создание клиентского приложения Java RMI-IIOP.• Куда идти дальше.

    • Советы для сложных интерфейсов.

  • 8/17/2019 JavaBeans and CORBA

    3/12

    • Ссылки на похожие примеры.

    Мы сделали несколько сокращений для упрощения примера. Информацию по созданию более сложных программ можно 

    найти в  разделе «Советы для сложных интерфейсов».

    Часть I: Написание корпоративного компонента 

    В следующем примере демонстрируется код корпоративного компонента, принимающего простые  регистрационные 

    сообщения типа String, посылаемые серверу приложений от клиентов Java RMI-IIOP и CORBA. Корпоративный 

    компонент отображает их на сервере вместе с информацией о текущем времени сервера.

    1. Создайте следующие файлы: Logger.java, LoggerHome.java , LoggerEJB.java и LogMessage.java в 

    каталоге /Java/src/ejbinterop .

    Logger.java

    Файл Logger.java является удаленным интерфейсом корпоративного компонента, и, как таковой,  расширяет класс 

    EJBObject. Удаленный интерфейс обеспечивает видимость объекта EJB удаленным клиентом и определяет бизнес-методы, вызываемые им.

    //Пример кода 1: Logger.java

    package ejbinterop;

    import javax.ejb.EJBObject;import java.rmi.RemoteException;

    /*** Принимает простые регистрационные сообщения типа String и выводит * их на сервере.*/public interface Logger extends EJBObject{

    /*** Записать данное сообщение на сервер вместе с 

    * текущим временем сервера.*/void logString(String message) throws RemoteException;

    }

    LoggerHome.java

    Файл LoggerHome.java  расширяет EJBHome. Интерфейс EJBHome должен быть  расширен всеми домашними интерфейсами компонента EJB. Домашний интерфейс определяет методы, позволяющие удаленному клиенту создавать,находить и удалять объекты EJB, а также определяет домашние бизнес-методы, не являющиеся специфическими для экземпляра EJB.

    //Пример кода 2: LoggerHome.java

    package ejbinterop;

    import java.rmi.RemoteException;import javax.ejb.EJBHome;import javax.ejb.CreateException;public interface LoggerHome extends EJBHome

    {Logger create() throws RemoteException, CreateException;

    LoggerEJB.java

    Файл LoggerEJB.java содержит код сессионного компонента. Сессионный компонент является корпоративным компонентом, создаваемым клиентом и обычно существующим только на протяжении одной клиент-серверной сессии.

    Сессионный компонент выполняет для клиента такие операции, как вычисления или доступ к базе данных. В данном 

  • 8/17/2019 JavaBeans and CORBA

    4/12

    примере корпоративный компонент принимает от клиента простые  регистрационные сообщения типа String и печатает их на сервере.

    //Пример кода 3: LoggerEJB.javapackage ejbinterop;

    import javax.ejb.*;import java.util.*;import java.rmi.*;

    import java.io.*;

    /*** Принимает простые регистрационные сообщения типа String и выводит * их на сервере.*/public class LoggerEJB implements SessionBean {

    public LoggerEJB() {}public void ejbCreate() {}public void ejbRemove() {}public void ejbActivate() {}public void ejbPassivate() {}public void setSessionContext(SessionContext sc) {}

    /*** Регистрирует данное сообщение на сервере * с текущим временем сервера.*/public void logString(String message) {

    LogMessage msg = new LogMessage(message);System.out.println(msg);

    }}

    LogMessage.java

    Код LogMessage.java принимает текущую дату и время, создает форматированный объект типа String, 

    содержащий сообщение, и  распечатывает сообщение на сервере.

    //Пример кода 4: LogMessage.javapackage ejbinterop;

    import java.io.Serializable;import java.util.Date;import java.text.*;

    /*** Простой класс сообщения, который управляет * печатью регистрационных сообщений.*/

    public class LogMessage implements Serializable{private String message;private long datetime;/*** Конструктор, принимающий сообщение. Определяется * также и текущая дата и время.*/public LogMessage(String msg) {

    message = msg;datetime = (new Date()).getTime();

    }/**

    *Создает

     форматированный

     объект

     String,показывающий

     сообщение

    .*/public String toString() {

  • 8/17/2019 JavaBeans and CORBA

    5/12

    StringBuffer sbuf = new StringBuffer();DateFormat dformat

    = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.LONG);

    FieldPosition fpos = newFieldPosition(DateFormat.DATE_FIELD);

    dformat.format(new Date(datetime), sbuf, fpos);sbuf.append(": ");sbuf.append(message);

    return sbuf.toString();}}

    2. Для компиляции файлов, содержащихся в этом разделе, выполните следующую команду:javac -classpath $J2EE_HOME/lib/j2ee.jar: *.java 

    Эти команда создаст .class-файлы для всех .java-файлов в текущем каталоге. Эта команда, как и другие в данном документе, предполагает, что переменная окружения  J2EE_HOME  установлена правильно. Использование записи $J2EE_HOME  является соглашением в операционных системах Unix®. Замените эту запись на %J2EE_HOME% при  работе на операционной системе Windows.

    Часть II: Генерация CORBA IDL

    В данном  разделе  рассматривается генерация IDL-файлов из .class-файлов Java, полученных в предыдущем  разделе. В 

    данном примере мы будем использовать компилятор rmic для отображения Java-кода в IDL. IDL обеспечивает декларативный, независимый от языка программирования способ указания API объекта.

    3. Запустите компилятор rmic с .class-файлами Java, сгенерированными на предыдущем шаге, следующим 

    образом:

    rmic -idl -noValueMethods -classpath$J2EE_HOME/lib/j2ee.jar:-d ejbinterop.Logger ejbinterop.LoggerHome

    В этот пример мы включили .jar-файл, содержащий определения для пакета javax.ejb, а также каталог с нашими файлами ejbinterop. Если вы используете Java™ 2 Platform, Enterprise Edition (J2EE™), version 1.3 Reference

    Implementation (RI), .jar-файлы  расположены в $J2EE_HOME /lib/j2ee.jar.

    В приведенной выше командной строке для компилятора rmic мы  рекомендуем сократить  работу, используя опцию 

    noValueMethods . Эта опция указывает компилятору rmic пропустить любые методы с параметрами или типом  результата, которые могут быть отображены в типы значений CORBA. Это защитит нас от генерации необязательных IDL, которые мы должны  реализовать в клиенте на С++. Отрицательным моментом является то, что мы можем 

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

    После запуска компилятора rmic с .class-файлами Java в каталоге, указанном с опцией  –d , будут сгенерированы 

    следующие файлы:

    o java/lang/Ex.idlo java/lang/Exception.idlo java/lang/Object.idlo java/lang/Throwable.idlo java/lang/ThrowableEx.idlo javax/ejb/CreateEx.idlo javax/ejb/CreateException.idlo javax/ejb/EJBHome.idl o javax/ejb/EJBMetaData.idlo javax/ejb/EJBObject.idlo javax/ejb/Handle.idl

    o javax/ejb/HomeHandle.idlo javax/ejb/RemoveEx.idlo javax/ejb/RemoveException.idl

  • 8/17/2019 JavaBeans and CORBA

    6/12

    o ejbinterop/Logger.idlo ejbinterop/LoggerHome.idl

    Примечание. Некоторые из этих файлов содержат API, которое может быть использовано только  в среде 

    программирования Java. Например, данная  реализация  EJBMetaData специфична для каждого сервера приложений, то есть будет не просто  разработать ее эквиваленты, продолжающие  работать на  разных серверах, на платформах отличных от Java. Одним из  решений является удаление их из IDL, но в этом случае вы должны будете удалять их из IDL каждый 

     раз при изменении интерфейса Java и повторно генерировать файлы IDL компилятором rmic.

    Примечание. Поскольку исключительные ситуации CORBA не поддерживают наследования, отображение Java в IDLсоздает класс Ex, который содержит типы значений CORBA, представляя действительные  исключительные  ситуации Java. В этом примере мы не будем уделять много внимания поддержке исключительных  ситуаций. Дополнительную информацию о них можно найти в http://java.sun.com/j2se/1.4/docs/guide/idl/jidlExceptions.html.

    4. Откомпилируйте файлы IDL при помощи компилятора «IDL в C++» вашего поставщика С++ для генерации 

    кода С++, соответствующего IDL. Эта процедура различна у разных поставщиков компиляторов С++, так что 

    обратитесь к вашей документации.

    Часть III: Создание CORBA-клиента 

    Клиентское приложение может быть написано на любом языке, поддерживаемом CORBA. Следующий пример содержит 

    код простого клиента на С++, который, задав Object Request Broker (ORB) и corbaname URL для объекта LoggerHome,

     регистрирует простые сообщения типа String на сервере. Вы должны скорректировать операторы include и модифицировать код  регистрации пунктов значений в зависимости от ваших ORB-библиотек. Этот пример был написан для ORBacus C++ 4.0.5 и некоторые участки кода С++ в нем являются специфическими для этого продукта.

    URL corbaname представляет собой  URL обычного формата, позволяющий получить доступ к объектам CORBA. Он используется для  разрешения имен из специфического контекста имен. Это является новой функциональной возможностью в платформе J2EE v 1.3, выступающей как часть CORBA Interoperable Naming Service (INS). INS является  расширением CORBA Object Services (COS) Naming Service, которая  распространялась с предыдущими выпусками платформы J2EE. Дополнительную информацию по INS можно найти в http://java.sun.com/j2se/1.4/docs/guide/idl/jidlNaming.html#INS.

    В данном примере код клиента выполняет следующие действия:

    o Создает Object Request Broker (ORB). ORB соединяет объекты, запрашивающие службы, с объектами,обеспечивающими их.

    o Регистрирует пункты значений.

    o Ищет объект LoggerName в контексте имен, указанных в URL corbaname.

    o Выполняет безопасное приведение типов из объекта, возвращенного объекту LoggerHome.

    o Создает ссылку на объект LoggerEJB.

    o Регистрирует сообщение.

    o Указывает серверу приложений, что мы не хотим повторно использовать эту ссылку на EJB.

    5. Создайте клиент, используя код С++ подобный приведенному ниже. Точный код может зависеть от вашей 

    реализации С++. Этот код был написан для ORBacus C++ 4.0.5 и некоторые участки кода С++ в нем являются 

    специфическими для этого продукта.

    //Пример кода 5: Client.cpp#include

    // Зависящие от поставщика C++ ORB файлы include// Эти предназначены для C++ ORBacus 4.0.5

    #include

    #include

    // Файлы include, сгенерированные IDL

  • 8/17/2019 JavaBeans and CORBA

    7/12

    #include #include #include #include #include #include

    /*** Задав ORB и corbaname URL для объекта LoggerHome,

    *зарегистрировать

     одно

     строковое

     сообщение

     на сервере

    .*/void run(CORBA::ORB_ptr orb, const char* logger_home_url){

    cout _remove_ref();factory = new javax::ejb::CreateException_init;

  • 8/17/2019 JavaBeans and CORBA

    8/12

    orb -> register_value_factory(javax::ejb::CreateException::_OB_id(),factory);

    factory -> _remove_ref();factory = new javax::ejb::RemoveException_init;orb -> register_value_factory(javax::ejb::RemoveException::_OB_id(),

    factory);factory -> _remove_ref();// Выполнить работу run(orb, argv[1]);

    } catch(const CORBA::Exception& ex) {// Обработать любые, связанные с CORBA исключительные ситуации cerr New -> Enterprise Bean. 

    8. Нажмите кнопку Next, если отобразилось окно Introduction. Если нет, продолжайте.

    9. В мастере New EnterpriseBean Wizard выберите Edit в поле Contents.

  • 8/17/2019 JavaBeans and CORBA

    9/12

    10. Откройте список Available Files и добавьте следующие четыре .class-файла из нашего пакета ejbinterop:

    Logger.class, LoggerHome.class ,LoggerEJB.class, LogMessage.class . Нажмите OK, затем Next.

    11. Выберите Stateless Session Bean Type. 

    12. Выберите ejbinterop.LoggerEJB для Enterprise Bean Class.

    13. Выберите ejbinterop.LoggerHome для Remote Home Interface.

    14. Выберите ejbinterop.Logger для Remote Interface.

    15. Нажимайте кнопку Next до тех пор, пока не отобразится страница Security Settings.

    16. Нажмите кнопку Deployment Settings.

    17. Выберите Support Client Choice.

    18. Нажмите кнопку OK для сохранения настроек и закройте это диалоговое окно.

    19. Нажмите кнопку Finish.

    20. В программе  размещения выберите Tools -> Deploy.

     

    21. Если  работает Java RMI-IIOP client only, выберите Return Client JAR.

    22. Нажмите кнопку Next.

    23. Введите ejbinterop/logger в JNDI Name для нашего поля LoggerEJB.

    24. Нажмите кнопку Finish.

    25. Выберите File -> Exit для выхода из программы  размещения.

    Приложение Logger с нашим компонентом LoggerEJB  размещено и готово к приему сообщений.

    Часть V: Запуск клиентской программы 

    8. Запустите клиентскую программу. Один из способов запуска программы – ввести следующий URL в 

    терминальном окне из каталога, содержащего исполняемые фалы клиентской программы:

    Client corbaname:iiop:1.2@localhost:1050#ejbinterop/logger

    В этом URL,

    o Client  – имя запускаемого приложения.

    o corbaname указывает, что мы будем выполнять  разрешение имени из специфического контекста имен.

    o iiop:1.2 указывает ORB использовать протоколы IIOP и GIOP 1.2.

    o Хост-компьютером, на котором ищется ссылка является локальный компьютер, localhost. Для запуска этого 

    примера на двух машинах вместо localhost введите IP-адрес или имя хоста, на котором  работает сервер.

    o 1050 – это порт, который использует служба имен для получения запросов. По умолчанию для J2EE v.1.3 RI

    номер этого порта  равен 1050.  Часть ссылки до знака # (Client corbaname:iiop:1.2@localhost:1050)представляет собой URL, возвращающий корневой контекст имен.

    o ejbinterop/logger это имя, которое надо  разрешить в контексте имен.

    Если вы используете J2EE 1.3 Reference Implementation, вы должны на сервере приложений увидеть примерно такое сообщение:

  • 8/17/2019 JavaBeans and CORBA

    10/12

    Sep 21, 2001 3:33:07 PM PDT: Message from a C++ client ejbinterop/logger is the name to be resolved from the Naming Service.

    Часть VI: Остановка сервера J2EE

    9. Остановите сервер J2EE. Для этого введите следующую команду в терминальном окне или в командной строке:

    $J2EE_HOME/bin/j2ee -stop

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

    Создание клиентского приложения RMI-IIOP

    Используя этот же пример, мы можем легко  разработать клиентское приложение Java RMI-IIOP, которое соединяется с корпоративным компонентом. Отличия от примера, использующего клиент С++, следующие:

    • В ваш клиентский CLASSPATH необходимо включить путь к клиентскому .jar-файлу, созданному сервером 

    приложений J2EE, исполняющим нужный корпоративный компонент. Этот .jar-файл содержит необходимые клиентские заглушки.

    При  размещении приложения с использованием J2EE 1.3 RI проверьте поле Return Client Jar в программе Deploytool на первой странице окна Deploy.

    Далее приведена Java RMI-IIOP версия клиентской программы для компонента LoggerEJB. Следуйте тем же инструкциям, что и для примера С++. При запуске клиентской программы используйте такой же URL, что и в примере 

    для С++.

    //Пример кода 6: LogClient.javapackage ejbinterop;

    import java.rmi.RemoteException;import javax.rmi.*;import java.io.*;

    import javax.naming.*;import javax.ejb.*;

    /*** Простая клиентская программа Java RMI-IIOP, использующая компонент EJB.*/public class LogClient {

    /*** Задав ORB и corbaname URL для объекта LoggerHome,* зарегистрировать одно строковое сообщение на сервере.*/public static void run(String loggerHomeURL)

    throws CreateException, RemoveException,RemoteException, NamingException{

    System.out.println("Looking for: " + loggerHomeURL);// Создать InitialContext. Он будет использовать поставщика службы // CosNaming, который мы укажем при запуске.InitialContext ic = new InitialContext();// Найти объект LoggerHome в контексте имен,// указанном в corbaname URLObject homeObj = ic.lookup(loggerHomeURL);// Выполнить безопасное приведение типов LoggerHome home

    = (LoggerHome)PortableRemoteObject.narrow(homeObj,

    LoggerHome.class);// Создать ссылку на Logger EJBLogger logger = home.create();

  • 8/17/2019 JavaBeans and CORBA

    11/12

    System.out.println("Logging...");// Зарегистрировать сообщение logger.logString("Message from a Java RMI-IIOP client");// Сообщить серверу приложений о том, что мы не будем // больше использовать ссылку на EJBlogger.remove();System.out.println("Done");

    }/**

    *Простой

     метод

     main,который

     проверяет

     аргументы

    ,создает

     * ORB, и обрабатывает исключительные ситуации.*/public static void main(String args[]){

    try {if (args.length != 1) {

    System.out.println("Args: corbaname URL of LoggerHome"); System.exit(1);

    }LogClient.run(args[0]);

    } catch (Throwable t) {t.printStackTrace();System.exit(1);

    }}

    }

    Запуск клиентского приложения Java RMI-IIOP

    При запуске этого примера клиентского приложения Java RMI-IIOP выполните следующие действия:

    1. Откомпилируйте  .java-файлы в каталоге ejbinterop/ при помощи следующей команды:

    javac -classpath $J2EE_HOME/lib/j2ee.jar: *.java

    2. Разместите корпоративный компонент JavaBean так, как описано выше в  разделе «Размещение корпоративного компонента». Помните о выборе Return Client JAR на странице Tools -> Deploy при запуске клиентского приложения Java RMI-IIOP. Запустите также сервер J2EE RI.

    3. Запустите клиентское приложение, используя следующую команду: 

    java -classpath $J2EE_HOME/lib/j2ee.jar:/LoggerClient.jar::ejbinterop.LogClientcorbaname:iiop:1.2@localhost:1050#ejbinterop/logger

    В окне, в котором был запущен J2EE RI, появится  следующее сообщение:

    Jan 31, 2002 2:27:47 PM PST: Message from a Java RMI-IIOP client

    В окне, в котором  работает клиент, появится  следующее сообщение:

    Looking for: corbaname:iiop:1.2@localhost:1050#ejbinterop/loggerLogging...Done

    4. Остановите сервер J2EE.

    За рамками базового приложения 

    Данный  раздел содержит следующую информацию:

  • 8/17/2019 JavaBeans and CORBA

    12/12

    • Куда идти дальше 

    • Советы для сложных интерфейсов 

    • Ссылки на похожие примеры 

    Куда идти дальше 

    Для улучшения приложения вы можете:

    • Разработать пример с использованием valuetype. Для этого, удалите ключ -noValueMethods  при запуске 

    rmic.

    Повторно запустите ваш компилятор, отображающий IDL в С++, для проверки того, что он поддерживает сгенерированные valuetype.

    • Добавить в Logger еще один метод, который фактически принимает LogMessage.

    Советы для сложных интерфейсов 

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

    • Избегайте использования сложных классов Java, таких как коллекции из java.util, в качестве типов  параметров методов или возвращаемых ими значений.

    После того, как эти типы будут отображены в IDL, вы будете вынуждены  реализовать их на языке 

    программирования клиентского приложения. Кроме того, поскольку Java Object Serialization и RMI-IIOP APIдопускают постоянное  развитие формата соединений и внутреннего представления классов, ваше клиентское приложение CORBA может быть несовместимо с  реализациями или версиями Java™ 2 Platform, Standard Edition(J2SE™).

    • Начинайте с IDL.

    Вы можете захотеть использовать сложные структуры данных в качестве типов возвращаемых значений или параметров методов. В этом случае попробуйте начать с IDL. Определите структуры данных и даже исключительные ситуации в IDL, а затем используйте их в ваших интерфейсах EJB. Это защитит интерфейсы CORBA от переполнения искусственными  конструкциями обратного отображения. Например, попробуйте 

    сначала определить класс LogMessage в IDL, а затем используйте полученный в IDL компиляции класс языка Java в качестве параметра метода в компоненте EJB Logger.

    • Избегайте перегрузки интерфейсов EJB.

    CORBA IDL не поддерживает перегрузку методов. Спецификация отображения языка Java в IDL справляется с таким положением путем  создания определения методов IDL, названия которых составляются из названия 

    метода и названий всех типов его параметров IDL. Это приводит к очень непонятным названиям методов для  разработчиков, использующих языки программирования, отличные от Java.

    Подумайте об использовании мостов.

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

    Ссылки на похожие примеры 

    Несколько поставщиков,  реализующих технологию J2EE, имеют отличные примеры и советы по интеграции CORBA и 

    технологии корпоративных компонентов JavaBeans:

    • IONA - Calling Enterprise Beans from CORBA Clients на 

    http://www.iona.com/docs/iportal_application_server/3.0/DevelopGuide/html/intro-RMI.html#311099 

    • BEA - EJB-to-CORBA/Java Simpapp Sample Application на http://edocs.bea.com/wle/wle50/interop/ejbcorba.htm • Borland - Sevens steps to build a VisiBroker C++ CORBA Client for an EJB Server на 

    http://www.borland.com/devsupport/appserver/faq/ejbcpp/ejb_cpp.html