Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Предприятие Компоненты JavaBeansTM и Клиенты CORBA: Руководство разработчика

Эта работа рассматривает, как позволить клиенту, записанному на любом языке, поддерживаемом CORBA получить доступ к Предприятию компоненты JavaBeansTM ("компоненты EJBTM"). Эта бумага направляется на программистов с усовершенствованным знанием и JavaTM 2 Платформы, Enterprise Edition ("J2EETM") и CORBA (Общая Архитектура Посредника запросов к объектам).

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

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

CORBA является Группа по управлению объектами (OMG) стандарт, который является открытой, архитектурой не зависящий от производителя продукта и инфраструктурой что использование компьютерных приложений, чтобы сотрудничать по сетям. Используя стандартный интернет-Протокол Межшара (IIOP), CORBA-на-основе программа от любого поставщика, на почти любом компьютере, операционной системе, язык программирования, и сеть, могут взаимодействовать с CORBA-на-основе программой от того же самого или другого поставщика, на почти любом другом компьютере, операционной системе, языке программирования, и сети. Чтобы узнать больше о CORBA, посетите http://www.omg.org/gettingstarted/gettingstartedindex.htm.

Технология CORBA дополняет платформу Java, служа распределенной основой объектов, службы, чтобы поддерживать ту платформу, и функциональную совместимость с другими языками. Технология CORBA является неотъемлемой частью Java 2 платформы, используемые в Предприятии компоненты JavaBeans, Java Удаленные API Вызова метода, работающие на основе интернет-Протокола Межшара ("IIOP RMI Java"), и API IDL Java ("IDL Java").

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

IDL Java позволяет распределенным приложениям Java прозрачно вызвать операции на удаленные сетевые службы, используя IDL OMG промышленного стандарта и IIOP, определенный Группой по управлению объектами (http://www.omg.org). Java RMI по API IIOP включает программированию серверов CORBA и приложений через javax.rmi API.

Разработчики, которые программируют компоненты EJB, следуют за Java модель программирования RMI для их распределенной объектной модели, где необходимый транспорт, распространенный через все серверы приложений, является IIOP RMI Java. В неоднородных серверных средах стандартное отображение архитектуры EJB к CORBA включает следующей функциональной совместимости:

Остальная часть этого документа обеспечивает пример клиентского приложения CORBA, получающего доступ к объекту корпоративного компонента. В этом документе клиент CORBA имеет в виду клиентское приложение, записанное на любом языке, поддерживаемом CORBA, включая язык программирования Java, C++, C, Smalltalk, КОБОЛ, Аду, Lisp, или Python. В то время как код Java в этом примере является определенным для корпоративных компонентов, процесса для того, чтобы разработать клиент CORBA, который получает доступ к создаваемому использованию сервера API IIOP RMI Java, то же самое.

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




Разработка Клиента CORBA, который Получает доступ к Предприятию Компонент JavaBean

Это - пример того, как разработать клиентское приложение CORBA, которое получает доступ к компоненту EJB. В этом примере клиент пишется на языке программирования на C++, но клиент мог быть записан на любом языке, поддерживаемом CORBA.

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

  1. Запишите Предприятию компонент JavaBean
  2. Генерируйте IDL CORBA
  3. Создайте клиент CORBA
  4. Разверните Предприятие компонент JavaBean
  5. Выполните клиентскую исполнимую программу

Этот документ также включает:

Чтобы сделать пример простым, мы взяли несколько ярлыков. Для получения информации о создании более усовершенствованных решений см. Подсказки для сложных интерфейсов.

  1. Первая часть: Запишите Предприятию компонент JavaBean

    Следующие примеры показывают код для корпоративного компонента, который примет простой String зарегистрируйте сообщения, отправленные серверу приложений от IIOP RMI Java и клиентов CORBA. Корпоративный компонент печатает их на сервере наряду с текущим временем сервера.

  2. Создайте файлы Logger.java , LoggerHome.java , LoggerEJB.java , и LogMessage.java в /Java/src/ejbinterop каталог.

    Logger.java

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

    
    //Code Example 1: Logger.java
    package ejbinterop;
    
    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;
    
    /**
     * Accepts simple String log messages and prints
     * them on the server.
     */
    public interface Logger extends EJBObject
    {
        /**
         * Logs the given message on the server with
         * the current server time.
         */
        void logString(String message) throws RemoteException;
    }
    

    LoggerHome.java

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

    
    //Code Example 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 содержит код для боба сеанса. Боб сеанса является корпоративным компонентом, который создается клиентом, и это обычно существует только для продолжительности единственного сеанса клиент-сервер. Боб сеанса выполняет операции, такие как вычисления или доступ к базе данных для клиента. В этом примере корпоративный компонент принимает простой String зарегистрируйте сообщения от клиента, и печатает их на сервере.

    
    //LoggerEJB.java
    package ejbinterop;
    
    import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;
    import java.io.*;
    
    /**
     * Accepts simple String log messages and prints
     * them on the server.
     */
    public class LoggerEJB implements SessionBean {
    
        public LoggerEJB() {}
        public void ejbCreate() {}
        public void ejbRemove() {}
        public void ejbActivate() {}
        public void ejbPassivate() {}
        public void setSessionContext(SessionContext sc) {}
    
        /**
         * Logs the given message on the server with
         * the current server time.
         */
        public void logString(String message) {
            LogMessage msg = new LogMessage(message);
    
            System.out.println(msg);
        }
    }
    

    LogMessage.java

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

    //LogMessage.java
    package ejbinterop;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.text.*;
    
    /**
     * Simple message class that handles pretty
     * printing of log messages.
     */
    public class LogMessage implements Serializable
    {
        private String message;
        private long datetime;
    
        /**
         * Constructor taking the message. This will
         * take the current date and time.
         */
        public LogMessage(String msg) {
            message = msg;
            datetime = (new Date()).getTime();
        }
    
        /**
         * Creates a formatted String showing the message.
         */
        public String toString() {
            StringBuffer sbuf = new StringBuffer();
            DateFormat dformat
                = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
            DateFormat.LONG);
            FieldPosition fpos = new
                FieldPosition(DateFormat.DATE_FIELD);
            dformat.format(new Date(datetime), sbuf, fpos);
            sbuf.append(": ");
            sbuf.append(message);
            return sbuf.toString();
        }
    }
    

  3. Скомпилируйте файлы, записанные в этом разделе, например,
    javac -classpath $J2EE_HOME/lib/j2ee.jar:.. *.java
    

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

    Вторая часть: Генерируйте IDL CORBA

    Это разделяет, обсуждает генерирование Языка определения интерфейсов (IDL) файлы от файлов класса Java, сгенерированных в предыдущем разделе. В этом примере мы будем использовать rmic компилятор, чтобы отобразить код Java на IDL. IDL обеспечивает просто декларативный, программирующий независимый от языка способ определить API объекта.

  4. Работайте rmic компилятор против файлов класса Java, сгенерированных в предыдущем шаге следующим образом:
    rmic -idl -noValueMethods -classpath
      $J2EE_HOME/lib/j2ee.jar:<path_to_ejbinterop_dir>
      -d <path_to_where_idl_files_should_be_generated>
      ejbinterop.Logger ejbinterop.LoggerHome
    
    

    В предыдущем примере мы включаем файл JAR, содержащий определения для javax.ejb пакет так же как каталог к нашему ejbinterop файлы. Если Вы используете JavaTM 2 Платформы, Enterprise Edition (J2EETM), Ссылочная Реализация версии 1.3 (RI), файлы JAR располагаются в $J2EE_HOME/lib/j2ee.jar .

    В командной строке для rmic выше, мы рекомендуем ярлык - использование noValueMethods опция. Эта опция говорит rmic пропускать любые методы с параметром или типами возврата, которые были бы отображены на типы значения CORBA. Преимущество состоит в том, что это будет препятствовать тому, чтобы мы генерировали много ненужного IDL, который нам, возможно, придется реализовать в клиенте C++. Недостаток - то, что мы можем только использовать примитивные типы данных, массивы, и Strings как параметры или возвращаемые значения, и не наши собственные типы классов Java. Читайте больше об этом в Подсказках для сложных интерфейсов

    Выполнение rmic компилятор на файлах класса Java генерирует следующие файлы к каталогу, обозначенному с-d опцией в rmic оператор выше:

     

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

    ОТМЕТЬТЕ: Так как исключения CORBA не поддерживают наследование, язык Java к отображению IDL создает Ex класс, который содержит тип значения CORBA, представляющий фактическое исключение Java. В этом основном примере мы не собираемся волноваться очень о поддержке исключения. Больше информации об исключениях может быть найдено в Exceptions.

  5. Скомпилируйте файлы IDL со своим IDL "поставщика C++ к C++" компилятор, чтобы генерировать код C++, соответствующий IDL. Шаги для этой процедуры изменяются поставщиком, так что консультируйтесь со своей документацией продукта для определенных шагов для Вашего поставщика.

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

    Клиентское приложение может быть записано на любом языке, поддерживаемом CORBA. Следующий пример предоставляет код простому клиенту C++ что учитывая Посредника запросов к объектам (ШАР) и a corbaname URL для a LoggerHome объект, регистрирует простое String сообщение на сервере. Необходимо корректироваться include операторы и изменяют код для того, чтобы зарегистрировать фабрики значения, основанные на Ваших библиотеках поставщика ШАРА C++. Этот пример был записан для ORBacus для C++ 4.0.5, и часть кода C++ в этом примере является определенной для того продукта.

    A corbaname URL является удобочитаемым форматом URL, который включает Вам к доступу объекты CORBA. Это используется, чтобы разрешить имя stringified от определенного контекста именования. Это - часть Взаимодействующей Службы Именования CORBA (INS). INS является расширением Служб Объекта CORBA (COS) Служба Именования, которая была поставлена в предыдущих выпусках платформы J2EE. Чтобы читать больше о INS, посетите Взаимодействующую Службу Именования.

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

  6. Создайте клиент, использующий код C++, подобный следующему. Точный код может меняться в зависимости от Вашей реализации C++. Этот код был записан для ORBacus для C++ 4.0.5, и часть кода C++ в этом примере может быть определенной для того продукта.
    //Code Example: Client.cpp
    #include <fstream.h>
    
    // C++ ORB Vendor specific include files
    // These are from C++ ORBacus 4.0.5
    
    #include <OB/CORBA.h>
    #include <OB/OBORB.h>
    
    // Include files generated from our IDL
    #include <java/lang/Exception.h>
    #include <java/lang/Throwable.h>
    #include <javax/ejb/CreateException.h>
    #include <javax/ejb/RemoveException.h>
    #include <ejbinterop/Logger.h>
    #include <ejbinterop/LoggerHome.h>
    
    /**
     * Given an ORB and a corbaname URL for a LoggerHome
     * object, logs a simple string message on the server.
     */
    void
    run(CORBA::ORB_ptr orb, const char* logger_home_url)
    {
      cout << "Looking for: " << logger_home_url << endl;
    
      // Look up the LoggerHome object in the naming context
      // pointed to by the corbaname URL
      CORBA::Object_var home_obj
        = orb->string_to_object(logger_home_url);
    
      // Perform a safe downcast
      ejbinterop::LoggerHome_var home
        = ejbinterop::LoggerHome::_narrow(home_obj.in());
    
      assert(!CORBA::is_nil(home));
    
      // Create a Logger EJB reference
      ejbinterop::Logger_var logger = home->create();
    
      CORBA::WStringValue_var msg =
        new CORBA::WStringValue((const CORBA::WChar*)L"Message
          from a C++ client");
    
      cout << "Logging..." << endl;
    
      // Log our message
      logger->logString(msg);
    
      // Tell the application server we won't use this
      // EJB reference any more
      logger->remove();
    
      cout << "Done" << endl;
    }
    
    /**
     * Simple main method that checks arguments, creates an
     * ORB, and handles exceptions.
     */
    int
    main(int argc, char* argv[])
    {
      int exit_code = 0;
      CORBA::ORB_var orb;
    
      try {
    
      // Check the arguments
      if (argc != 2) {
        cerr << "Usage: Client <corbaname URL of LoggerHome>" << endl;
        return 1;
      }
    
      // Create an ORB
      orb = CORBA::ORB_init(argc, argv);
    
      // Register value factories
    
      // NOTE: This is overkill for the example since we'll never
      // get these exceptions.  Also, the _OB_id method is a
      // proprietary feature of ORBacus C++ generated code.
      CORBA::ValueFactory factory = new java::lang::Throwable_init;
      orb -> register_value_factory(java::lang::Throwable::_OB_id(),
        factory);
      factory -> _remove_ref();
    
      factory = new java::lang::Exception_init;
      orb -> register_value_factory(java::lang::Exception::_OB_id(),
        factory);
      factory -> _remove_ref();
    
      factory = new javax::ejb::CreateException_init;
      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();
    
      // Perform the work
      run(orb, argv[1]);
    
    } catch(const CORBA::Exception& ex) {
      // Handle any CORBA related exceptions
      cerr << ex._to_string() << endl;
      exit_code = 1;
    }
    
      // Release any ORB resources
      if (!CORBA::is_nil(orb)) {
        try {
          orb -> destroy();
        } catch(const CORBA::Exception& ex) {
          cerr << ex._to_string() << endl;
          exit_code = 1;
        }
      }
    
      return exit_code;
    }
    
  7. Используйте свой компилятор C++, чтобы скомпилировать все файлы C++, включая файл Client.cpp, создать Клиентскую исполнимую программу. Такие инструменты значительно различаются через платформы, так что консультируйтесь со своей документацией продукта для инструкций.

    IV части: Разверните Предприятие компонент JavaBean

  8. Разверните корпоративный компонент, используя Ваш любимый сервер приложений. Следующие шаги описывают, как развернуться LoggerEJB компонент используя J2EE 1.3 Ссылочных Реализации (RI).
    1. Запустите приложение RI с окна терминала или командной строки, вводя:
         $J2EE_HOME/bin/j2ee -verbose
      
    2. Когда J2EE, 1.3 RI указывают "на полный запуск сервера J2EE", выполняет инструмент развертывания из другого окна терминала или командной строки, вводя:
         $J2EE_HOME/bin/deploytool
      
    3. От инструмента развертывания выбрать File -> New -> Application.
    4. В поле Application File Name войти Logger.ear указать в который файл создать приложение.
    5. В Поле имени Дисплея Приложения войти Logger
    6. Выберите OK, чтобы сохранить настройки и закрыть это диалоговое окно.
    7. От инструмента развертывания выбрать File -> New -> Enterprise Bean.
    8. Выберите Затем, если Вы получаете экран Introduction. В противном случае продолжайте.
    9. В Новом Мастере EnterpriseBean выберите Редактирование в поле Contents.
    10. Разверните Доступный список Файлов, и добавьте следующие четыре .class файлы от нашего ejbinterop пакет: Logger.class , LoggerHome.class , LoggerEJB.class , LogMessage.class . Выберите OK, тогда Затем.
    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. Выберите Конец.
    20. От инструмента развертывания выберите, Tools -> Deploy.
    21. Выполняя клиент IIOP RMI Java только, выберите Клиентский JAR Возврата.
    22. Выберите Затем.
    23. Войти ejbinterop/logger в JNDI Name для нашего поля LoggerEJB.
    24. Выберите Конец.
    25. Выберите Файл-> Выход, чтобы выйти из deploytool.

    Теперь, приложение Регистратора с нашим LoggerEJB компоненты развертываются и готовы получить сообщения.

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

  9. Выполните клиентскую исполнимую программу. Одним путем можно работать, клиентская исполнимая программа должна ввести следующий URL в окно терминала из каталога, содержащего исполнимый клиентский файл:
    Client corbaname:iiop:1.2@localhost:1050#ejbinterop/logger
    

    В этом URL,

    Если Вы используете J2EE 1.3 Ссылочных Реализации, следует видеть сообщение, подобное следующему, напечатанному на сервере приложений:

    
    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

  10. Остановите сервер J2EE. Чтобы остановить сервер, введите эту команду в окно терминала или командную строку.
    $J2EE_HOME/bin/j2ee -stop
    

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




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

Используя тот же самый пример, мы можем легко разработать клиент IIOP RMI Java, который соединяется с корпоративным компонентом. Различия от примера, используя клиент C++:

Следующий код является версией IIOP RMI Java клиента для нашего LoggerEJB компонент. Следуйте за теми же самыми шагами как представленные для клиентского примера C++. Выполняя клиент, используйте тот же самый URL в качестве в примере C++.

//Code Example: LogClient.java
package ejbinterop;

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

/**
 * Simple Java RMI-IIOP client that uses an EJB component.
 */
public class LogClient
{
    /**
     * Given a corbaname URL for a LoggerHome,
     * log a simple String message on the server.
     */
    public static void run(String loggerHomeURL)
        throws CreateException, RemoveException,
               RemoteException, NamingException
    {
        System.out.println("Looking for: " + loggerHomeURL);

        // Create an InitialContext. This will use the
        // CosNaming provider we will specify at runtime.
        InitialContext ic = new InitialContext();

        // Lookup the LoggerHome in the naming context
        // pointed to by the corbaname URL
        Object homeObj = ic.lookup(loggerHomeURL);

        // Perform a safe downcast
        LoggerHome home
            = (LoggerHome)PortableRemoteObject.narrow(homeObj,
        LoggerHome.class);

        // Create a Logger EJB reference
        Logger logger = home.create();

        System.out.println("Logging...");

        // Log our message
        logger.logString("Message from a Java RMI-IIOP client");

        // Tell the application server we won't use this
        // EJB reference anymore
        logger.remove();

        System.out.println("Done");
    }

    /**
     * Simple main method to check arguments and handle
     * exceptions.
     */
    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);
        }
    }
}

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

Запуская приложение в качестве примера с клиентом IIOP RMI Java вместо клиента C++, следуйте за этими шагами:

  1. Скомпилируйте.java файлы в ejbinterop / каталог со следующей командой:
    javac -classpath $J2EE_HOME/lib/j2ee.jar:<ejbinterop_directory> *.java
    
  2. Разверните Предприятие, компонент JavaBean как описано в Развертывает Предприятие компонент JavaBean. Не забудьте выбирать Клиент Возврата, Раздражают Инструменты->, Развертывают страницу, выполняя клиентское приложение IIOP RMI Java. Команды в теме Развертывания дают Вам команду запускать RI J2EE или другой сервер приложений.
  3. Выполните клиентское приложение, используя команду, подобную следующему:
    java -classpath $J2EE_HOME/lib/j2ee.jar:
    <path to LoggerClient.jar>/LoggerClient.jar:
    <directory_above_ejbinterop>:<ejbinterop_directory>
    ejbinterop.LogClient
    corbaname:iiop:1.2@localhost:1050#ejbinterop/logger 
    

    В окне, в котором работает RI J2EE, Вы будете видеть это:

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

    В окне от того, куда клиент выполняется, Вы будете видеть это:

    Looking for: corbaname:iiop:1.2@localhost:1050#ejbinterop/logger
    Logging...
    Done
    
  4. Остановите сервер J2EE.



Вне Основного Приложения

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

Куда пойти отсюда

Чтобы улучшить приложение, Вы могли:

Подсказки для сложных интерфейсов

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

Ссылки к подобным примерам

У нескольких поставщиков, реализующих технологию J2EE, есть превосходные примеры и подсказки для того, чтобы интегрировать CORBA и Предприятие технология JavaBeans:


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами