Создание EJB-клиентов с использованием Eclipse Rich Client Platform и Rational Application Developer V6

Роланд Баркиа, Патрик Ногэй, IT-консультанты, IBM Software Services for WebSphere

Введение

За последний несколько лет популярность платформы Eclipse в качестве интегрированной среды для написания IDE-средств (interactive development environment - среда интерактивной разработки) значительно возросла. С появлением версии Eclipse 3.0 эта технология была расширена для поддержки разработки "богатых" клиентов, предоставляя Java-разработчикам возможность писать код "богатых" клиентов, используя открытую платформу с присущим ей внешним видом и поведением.

Платформа для разработки приложений для "богатых" клиентов известна под названием Eclipse Rich Client Platform (RCP). Почему внимание снова переключается на приложения для "богатых" клиентов? После нескольких лет работы с n-уровневой архитектурой стало очевидным, что разработать приложения, предоставляющие конечному пользователю богатые возможности при работе в браузере, не просто. Основанные на браузере приложения часто пытались имитировать определенное удобство использования путем комбинирования JavaScript с HTML. Однако стало ясно, что приложения с более богатыми возможностями лучше создавать, используя более развитую клиентскую технологическую платформу. По существу, Eclipse RCP предоставляет разработчикам возможность создавать гибкие клиентские приложения (далее - клиенты), которые могут участвовать в n-уровневой архитектуре. Eclipse RCP позволяет разрабатывать приложения "богатых" клиентов следующего поколения и является основной для таких платформ клиентов, как технология IBM Workplace Client.

IBM Rational Application Developer V6 (ранее, IBM WebSphere Studio Application Developer) построена на платформе Eclipse 3.0. Это дает J2EE-разработчикам возможность создавать приложения для "богатых" клиентов, которые взаимодействуют с J2EE-приложениями. В данной статье мы будем использовать функциональные возможности Eclipse 3.0 в Rational Application Developer (здесь и далее называемом Application Developer) для создания Eclipse RCP-клиентов, вызывающих EJB-компоненты, развернутые в тестовой среде WebSphere Application Server внутри Application Developer.

Для создания Eclipse RCP-приложения,вызывающего корпоративный компонент, который выполняется внутри WebSphere Application Server V6, следуйте следующим указаниям:

  • Установите IBM Application Client for WebSphere Application Server. При развертывании Java-клиентов на рабочих станциях вы должны использовать клиентское программное обеспечение WebSphere для правильного взаимодействия с удаленным корпоративным компонентом, выполняющимся на WebSphere Application Server. Мы это сделаем в данной статье, чтобы продемонстрировать конфигурацию.
  • Разверните EJB-приложение преобразователя температуры в WebSphere Application Server, используя J2EE™ Perspective в Application Developer, который включает в себя полнофункциональную версию WebSphere Application Server для тестирования ваших приложений. Через Application Developer вы можете взаимодействовать с экземпляром WebSphere Application Server по умолчанию, вызвать административную консоль и развернуть приложение (вам не надо импортировать файл Enterprise Archive (EAR) в ваше рабочее окружение для этого демонстрационного примера). (Мы используем Application Developer для удобства; если вы используете автономный WebSphere Application Server, инструкции остаются такими же.)
  • Используйте среду Eclipse Plug-in Development для построения RCP-клиента. Мы настроим Eclipse Plug-in Launcher на взаимодействие с WebSphere Application Server Java Thin Client, который представляет собой обычный IBM JDK с серверными расширениями, необходимыми для взаимодействия с WebSphere Application Server. Мы выбрали его, а не J2EE Application Client Container, потому что он проще в настройке.
  • Экспортируйте RCP-приложение и запустите его как автономное приложение. Вы должны знать, как настраивать ваши подключаемые модули и JRE для работы с "тонким" клиентом WebSphere Application Server.

Для дальнейшей работы с этим упражнением вам понадобятся:

  • Rational Application Developer V6 (or Eclipse 3)
  • WebSphere Application Server V6 (после небольшой модификации вы можете также использовать Eclipse 3 и WebSphere Application Server V5)
  • IBM Application Client for WebSphere Application Server (включенный в WebSphere Application Server V6)

Установка J2EE-приложения

Прежде всего мы должны установить IBM Application Client for WebSphere Application Server, который входит в WebSphere Application Server V6 (если у вас нет клиента, то вы можете изменить вашу конфигурацию, указав на сервер JDK в тестовой среде Application Developer, либо в реальной установке WebSphere Application Server), а затем развернуть приложение в работающем WebSphere Application Server:

  1. J2EE-клиент устанавливается при помощи Installation wizard interface (интерфейс мастера установки). После запуска LaunchPad вашей WebSphere, выберите IBM Client for IBM WebSphere Application Server.
  2. По мере следования указаниям мастера мы установим клиента в каталог C:\WebSphere6ND\AppClient. Находящийся в загруженном zip-файле пакетный файл Windows (BAT) использует именно этот class path; если вы выберете другой каталог, придется изменить BAT-файл для ссылки на этот новый каталог. На рисунке 3 изображен третий экран мастера, в котором вы выбираете каталог.

    Рисунок 1. Мастер установки

  3. Мы также выбрали типичную установку и ввели localhost для Hostname, как показано на рисунке 2.

    Рисунок 2. Мастер установки

    Затем мы будем использовать Application Developer для развертывания EAR в WebSphere Application Server. Это сделано просто для удобства создания и тестирования подключаемого модуля из этого же рабочего пространства. Вы можете также развернуть приложение в автономном экземпляре WebSphere Application Server, настроив Eclipse для взаимодействия с ним.

  4. Откройте Application Developer, используя меню Start, и перейдите в рабочее пространство, например C:\RCPEJBClient\workspace, (рисунок 3).

    Рисунок 3. Workspace Launcher

  5. Закройте страницу Welcome по умолчанию (Рисунок 4).

    Рисунок 4. Страница Welcome Rational SDP

  6. Перейдите в J2EE Perspective, если она не загрузилась по умолчанию.
  7. Найдите вид Servers в нижнем фрейме и нажмите правой кнопкой мыши на WebSphere Application Server v6.0 (Рисунок 5). При этом Application Developer проверит, выполняется ли экземпляр WebSphere Application Server по умолчанию.

    Рисунок 5. Закладка Servers

  8. Сервер опять должен перейти в состояние "Stopped". Нажмите правой кнопкой мыши на сервере и выберите Start (рисунок 6). (Для запуска сервера можно также перейти в каталог <Application Developer_INSTALL_ROOT>/runtimes/profiles/default/bin и выполнить команду startserver server1).

    Рисунок 6. Запуск сервера

  9. После запуска сервера вы можете запустить консоль администратора, нажав правой кнопкой мыши на сервере и выбрав команду Run administrative console (или открыть браузер и перейти по адресу http://localhost:9060/admin), как показано на рисунке 7.

    Рисунок 7. Запуск консоли администратора

  10. Зарегистрируйтесь с любым пользовательским id (Рисунок 8).

    Рисунок 8. Запуск консоли администратора

  11. Разверните раздел Applications и выберите Install New Application (рисунок 9).

    Рисунок 9. Установка нового приложения

  12. Просмотрите C:\RCPEJBClient, выберите TemperatureEAR.ear и затем нажмите Next (рисунок 10). Приложение TemeratureEAR представляет собой простой метод, преобразующий температуру из шкалы по Цельсия в шкалу по Фаренгейту (хотя, возможно, не слишком точно).

    Рисунок 10. Установка нового приложения

  13. На странице Bindings (рисунок 11) оставьте значения по умолчанию и нажмите кнопку Next.

    Рисунок 11. Установка нового приложения

  14. На следующей странице Step 1 процесса установки приложения выберите Deploy enterprise beans (развернуть корпоративные компоненты), а затем Step 7 Summary (рисунок 12).

    Рисунок 12. Установка нового приложения

  15. В диалоговом окне Step 7 нажмите кнопку Finish (рисунок 13). Процесс установки должен занять минуту или две (рисунок 14).

    Рисунок 13. Установка нового приложения

    Рисунок 14. Сообщения при установке нового приложения

  16. После завершения процесса установки выберите Save to Master Configuration (рисунок 15).

    Рисунок 15. Save to Master Configuration

  17. В диалоговом окне Save, нажмите кнопку Save (рисунок 16).

    Рисунок 16. Save to Master Configuration

  18. Теперь мы запустим приложение. В меню Applications, выберите Enterprise Applications (рисунок 17).

    Рисунок 17. Enterprise applications

  19. Выберите TemperatureEAR и нажмите Start (рисунок 18).

    Рисунок 18. Enterprise applications

  20. Соответствующая пиктограмма в столбце Status должна показать, что приложение запустилось (рисунок 19).

    Рисунок 19. Enterprise applications

  21. Выйдите из консоли администратора (рисунок 20).

    Рисунок 20. Выход из консоли администратора

Создание RCP-клиента

Теперь мы готовы создать клиентское приложение RCP в виде простого подключаемого модуля при помощи мастера Plug-in. При создании RCP-приложений вы обычно должны создать несколько подключаемых модулей с учетом возможности повторного использования. Например, вы могли бы переписать этот пример и создать один подключаемый модуль с вашими J2EE-зависимостями, второй для компонента View, а третий для RCP Shell. Это даст возможность повторно использовать различные подключаемые модули, например, код J2EE. Однако в этом упражнении мы создадим только один подключаемый модуль, в основном по причине ограничения размера этой статьи.

Создание проекта plug-in

  1. Для создания проекта Plug-in в Application Developer выберите пункт File => New => Other в J2EE Perspective (рисунок 21).

    Рисунок 21. Создание проекта plug-in

  2. В мастере New Project проверьте, что отмечен флажок Show All Wizards. Разверните Plug-in Development и выберите Plug-in Project (рисунок 22).

    Рисунок 22. Мастер New Project

  3. На этом этапе может отобразиться запрос на разрешение подключаемых модулей для их разработки (рисунок 23). В этом случае нажмите кнопку OK.

    Рисунок 23. Подтверждение разрешения подключаемых модулей

  4. В диалоговом окне "Create a new plug-in project" (рисунок 24) дайте название проекту: com.ibm.issw.temperature.form. Это обычное соглашение по наименованию для подключаемых модулей. Убедитесь, что вы отметили варианты, показанные на рисунке 24:
    • Ваш проект подключаемого модуля будет также Java-проектом, поскольку вы будете добавлять Java-код.
    • В Eclipse 3.0 у вас есть возможность выбрать установку зависимостей времени исполнения с использованием файла манифеста, что мы и выберем.
    Нажмите кнопку Next.

    Рисунок 24. Создание нового проекта подключаемого модуля

  5. В следующем диалоговом окне заполните данные подключаемого модуля так, как показано на рисунке 25, затем нажмите Next.

    Рисунок 25. Создание нового проекта подключаемого модуля

  6. Для создания подключаемого модуля мы будем использовать шаблон. Поскольку мы будем создавать подключаемый модуль с окном просмотра, выберите Plug-in with a view, затем нажмите Next (рисунок 26).

    Рисунок 26. Создание нового проекта подключаемого модуля

  7. В следующем диалоговом окне мы определим информацию о классе View. Введите точно такую же информацию, которая показана на рисунке 27, затем нажмите Next.

    Рисунок 27. Установка настроек просмотра

  8. Наконец, в диалоговом окне View Features (рисунок 28), снимите отметки на всех вариантах. (Мы будем импортировать свой собственный класс просмотра.) Нажмите кнопку Finish.

    Рисунок 28. Установка настроек просмотра

  9. На запрос о переключении в перспективу Plug-in Development Perspective (рисунок 29) ответьте Yes.

    Рисунок 29. Подтверждение переключения перспективы

Импорт J2EE JAR и JAR EJB-клиента

Сейчас мы импортируем два JAR в наш новый подключаемый модуль:

  • j2ee.jar - Подключаемый модуль, взаимодействующий с API EJB-клиента, поэтому его необходимо включить в ваш classpath.
  • JAR EJB-клиента - Содержит необходимые клиентские интерфейсы и сгенерированные прокси и заглушки (stub) для корректного подключения к выполняющимся корпоративным компонентам.
  1. В Application Developer нажмите правой кнопкой мыши на проекте подключаемого модуля и выберите пункт Import (рисунок 30).

    Рисунок 30. Импорт JAR

  2. Выберите File System, затем нажмите Next (рисунок 31).

    Рисунок 31. Импорт JAR

  3. Есть несколько мест, из которых можно получить j2ee.jar. Поскольку RCP будет использовать IBM Application Client for WebSphere Application Server во время исполнения, лучше всего использовать этот JAR, который вы можете найти в <WAS_CLIENT_INSTALL_ROOT>/lib, как показано на рисунке 32. Убедитесь, что выбран только j2ee.jar. (Если ваш подключаемый использует любые другие WebSphere API, например расширение программной модели WebSphere, вы должны импортировать их тоже. В противном случае, вам не нужно импортировать другие WebSphere JAR времени исполнения; во время исполнения сгенерированный код EJB-прокси и код контейнера клиента загружают классы из загрузчика классов (classloader) тонких клиентов WebSphere.) Если у вас нет установленного клиентского программного обеспечения, вы можете получить j2ee.jar из каталога <Application Developer_INSTALL_ROOT>/runtimes/base_v6/lib or <WAS_ROOT>/lib.

    Рисунок 32. Импорт JAR

  4. Далее нам необходимо импортировать JAR EJB-клиента, который является специальным JAR-файлом с кодом, необходимым для вызова EJB из удаленного места. В него входят интерфейсы EJB-клиента и сгенерированный код RMI/IIOP. (Если бы вы создавали ваше собственное EJB-приложение, то могли бы сгенерировать клиентский JAR в Application Developer, нажав правой кнопкой мыши на ваш EJB Project и выбрав Create EJB Client Jar) Для нашего примера JAR EJB-клиента предоставляется в файле для загрузки. Импортируйте JAR-файл при помощи варианта File System (как и прежде), перейдите в каталог C:\RCPEJBClient и выберите TemperatureEJBClient.jar (рисунок 33).

    Рисунок 33. Импорт JAR

  5. Наш проект подключаемого модуля должен теперь иметь два JAR-файла, как показано на рисунке 34.

    Рисунок 34. Импортированные JAR-файлы

  6. Теперь нам нужно установить classpath времени компилирования для создания и компилирования в рабочем пространстве. Это позволит успешно компилировать код подключаемого модуля как в Eclipse IDE, так и при автоматизированной компоновке. Информация о classpath времени компоновки обновляется в Build Section редактора конфигурации подключаемого модуля. Выберите закладку Build, показанную на рисунке 35.

    Рисунок 35. Раздел Build

  7. Перейдите на закладку Binary Build (рисунок 36) и выберите два JAR-файла. Если вы выберете компоновку подключаемого модуля в бинарный файл, в Build нужно включить JAR-файлы. Binary build дает возможность скомпоновать ваш бинарный файл и затем использовать загружаемый бинарный файл Eclipse RCP. Для этого упражнения мы вручную скопируем подключаемые модули для запуска приложения Eclipse RCP.

    Рисунок 36. Раздел Binary Build

  8. Для успешного компилирования кода необходимо добавить JAR-файлы в classpath времени компилирования. Вы можете сделать это, добавив JAR-файлы в Extra Classpath Entries в нижней части раздела Build (рисунок 37). При этом обновляется Project Build Path в Eclipse.

    Рисунок 37. Дополнительные записи Classpath

  9. Сделанные на странице Build изменения обновят файл build.properties. Вы можете просмотреть этот файл, выбрав закладку build.properties.
  10. Для того чтобы код вашего подключаемого модуля во время исполнения мог найти J2EE и код EJB-клиента, необходимо добавить его в classpath времени исполнения подключаемого модуля. Это можно сделать в редакторе конфигурации подключаемого модуля, который должен открыться по умолчанию. (Если нет, щелкните дважды на файле plug-in.xml, чтобы его открыть.) Выберите закладку Runtime, в разделе Run-time libraries, нажмите кнопку Add (рисунок 37) и добавьте только что импортированные два JAR-файла.

    Рисунок 38. Добавление библиотек времени исполнения

Диалоговое окно Runtime обновит файл MANIFEST.MF подключаемого модуля. Так же как и для J2EE-приложений, манифест определяет classpath времени исполнения. Вы можете увидеть манифест, перейдя на закладку MANIFEST.MF.

Компоновка окна просмотра с использованием элементов управления формой (widget) SWT

Сейчас мы скомпонуем окно просмотра.  Мы импортируем класс (переопределяя сгенерированный для нас шаблоном View) и затем исследуем соответствующий фрагмент кода. но перед этим мы должны указать подключаемые модули, от которых зависит наш подключаемый модуль. В нашем окне просмотра мы будем использовать элементы управления формой из Standard Widget Toolkit (SWT), поэтому нам нужно установить зависимости в подключаемом модуле Eclipse, содержащем элементы управления формой.

  1. Выберите закладку Dependencies и нажмите кнопку Add (рисунок 39). Найдите подключаемый модуль org.eclispe.ui.forms.

    Рисунок 39. Dependencies

  2. Импортируйте класс View, переопределяя сгенерированный класс. В каталоге src нажмите правой кнопкой мыши на пакете com.ibm.issw.temperature.form.views и выберите Import (рисунок 40).

    Рисунок 40.

  3. Выберите File System и затем нажмите кнопку Next. Просмотрите каталог C:\RCPEJBClient\View и импортируйте три файла в пакет, как показано на рисунке 41.

    Рисунок 41. Импорт ресурсов файловой системы

  4. Должно отобразиться предупреждение о том, что вы собираетесь переопределить существующий класс. Выберите Yes To All (рисунок 42).

    Рисунок 42. Предупреждение о переопределении класса

  5. Откройте импортированный TemperatureView.java (рисунок 43).

    Рисунок 43. Откройте импортированное окно просмотра

  6. Мы сконцентрируемся на двух методах (рисунок 44):
    • createPartControl(Composite) - используется для создания вашего окна просмотра из различных элементов управления SWT.
    • handleEvent() - во внутреннем классе обеспечивает логику, вызываемую при нажатии командной кнопки элемента управления SWT.

    Рисунок 44. Основные методы

  7. Метод createPartContol() приведен в листинге 1. Код использует класс FormToolkit для помощи в создании управляющих элементов в родительском компоненте, в данном случае - окне просмотра. Создаются необходимые метки, кнопка и текстовое поле, а кнопке назначается listener ("слушатель"). Listener - это внутренний класс View.

    Листинг 1

    public void createPartControl(Composite parent)
    {
    	toolkit = new FormToolkit(parent.getDisplay());
    	form = toolkit.createScrolledForm(parent);
    	form.setText(RcpMessages.getString("TemperatureView.Title"));
    	GridLayout layout = new GridLayout(2,false);
    	form.getBody().setLayout(layout);
    	Label label = toolkit.createLabel(form.getBody(),
    		"Enter temperature in Celsius: ");
    	Text textBox = toolkit.createText(form.getBody(), "", SWT.BORDER);
    	GridData gdText = new GridData(8);
    	textBox.setLayoutData(gdText);
    	Button button = toolkit.createButton(form.getBody(),
    		RcpMessages.getString("TemperatureView.Button"),
    		SWT.PUSH);
    	Label result = toolkit.createLabel(form.getBody(), "");
    	result.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    	MyListener listener = new MyListener();
    	listener.setInput(textBox);
    	listener.setResult(result);
    	listener.setParent(parent);
    	listener.setFormToolkit(toolkit);
    	button.addListener(SWT.Selection,listener);
    }
    

  8. Метод внутреннего класса обработки событий приведен в листинге 2. В этом классе читается значение текстового поля и вызывается EJB при помощи API EJB-клиента. Код ищет месторасположение EJB и получает удаленный интерфейс. Затем вызывается метод и метка результата заполняется полученным значением. Помните, что лучше всего спрятать EJB-вызов в бизнес-делегате, а не вызывать его в коде подключаемого модуля напрямую. Для целей данной статьи мы упростили код. Непосредственный вызов EJB из классов просмотра обычно не рекомендуется.

    Листинг 2.

    public void handleEvent(Event event)
    {
    	try
    	{
    		InitialContext ctx = new InitialContext();
    		String jndi = RcpMessages.getString("TemperatureView.JNDIName");
    		Object obj = ctx.lookup(jndi);
    
    		TempConverterHome homeRef = (TempConverterHome) PortableRemoteObject
    			.narrow(obj, TempConverterHome.class);
    		TempConverter serviceRef = homeRef.create();
    		retVal = serviceRef.celciusToFarenheight(Integer.parseInt(textBox.getText()));
    		System.out.println("TemperatureAction.testEJB EJB Successful 
    			Return=" +			+ retVal);
    		result.setText(textBox.getText() + " degrees Celsius is 
    			approximately " + 
    			Integer.toString(retVal) + " degrees Fahrenheit!");
    
    	} catch (Exception th)
    	{
    		System.out.println("TemperatureAction.testEJB EJB call ex="
    			+ th);
    		th.printStackTrace();
    		result.setText(th.getClass().getName() + ": " + 
    			th.getMessage());
    	}
    
    }
    

  9. Вы, возможно, заметили, что для избежания жесткого кодирования имени EJB JNDI и месторасположения сервера приложений используется файл свойств. При развертывании RCP-приложения вы можете изменить файл свойств и указать реальное месторасположение удаленного EJB.

    Листинг 3

    TemperatureView.JNDIName=ejb/TempConverter
    TemperatureView.Title=Celsius to Fahrenheit Temperature Converter
    TemperatureView.Button=Convert to Fahrenheit
    

  10. При построении подключаемого модуля обычно необходимо добавить его в файл plug-in.xml и выбрать объект расширения (в данном случае вы расширяете подключаемый модуль View). Это было сделано за нас, поскольку мы использовали шаблон View в мастере. Вы можете увидеть это на закладке Extensions или просмотреть исходный код plug-in.xml. Конфигурация расширения приведена в листинге 4.

    Листинг 4

    <extension
    	point="org.eclipse.ui.views">
          <category
                name="Temperature Category"
                id="com.ibm.issw.temperature.form">
          </category>
          <view
                name="Temperature View"
                icon="icons/sample.gif"
                category="com.ibm.issw.temperature.form"
                class="com.ibm.issw.temperature.form.views.TemperatureView"
                id="com.ibm.issw.temperature.form.views.TemperatureView">
          </view>
    </extension>
    

Создайте ваше собственное рабочее место RCP и перспективу

Мы разрабатываем RCP-приложение, используя среду Eclipse по умолчанию, которая оформлена как IDE и не идеальна для нашего случая. Поэтому, вместо нее мы создадим наше собственное рабочее место и перспективу. Мы импортируем классы, предоставленные в файле для загрузки, в наш подключаемый модуль, затем добавим записи в plug-in.xml для рабочего места и перспективы по умолчанию.

  1. Нажмите правой кнопкой мыши на папке src и выберите Import (рисунок 45).

    Рисунок 45. Импорт классов

  2. Выберите File system, затем Next. Просмотрите папку C:\RCPEJBClient\RCPCode\src и импортируйте три класса, как показано на рисунке 46.

    Рисунок 46. Импорт классов

  3. Классы импортируются в (default package), которым является root (рисунок 47).

    Рисунок 47. Импорт классов

  4. Исследуем классы:
    • RcpWorkbenchAdvisor - используется для создания нашего рабочего места. Код устанавливает некоторые настройки, например размер и заголовок, а также запрещает некоторые элементы по умолчанию.

      Листинг 5

      public class RcpWorkbenchAdvisor extends WorkbenchAdvisor {
      
      	public String getInitialWindowPerspectiveId() {
      		return "MyRCPPerspective";
      	}
      	
      	public void preWindowOpen(IWorkbenchWindowConfigurer configurer) {
              super.preWindowOpen(configurer);
              configurer.setInitialSize(new Point(750, 600));
              configurer.setShowCoolBar(false);
              configurer.setShowStatusLine(false);
              configurer.setTitle("Temperature Converter");
      
          }
      
      }
      

    • MyRCPPerspective - окно просмотра, добавляется к перспективе. Это начальная схема перспективы. Код запрещает также область редактора, поскольку мы не создаем подключаемый модуль для редактирования файлов.

      Листинг 6

      public class MyRCPPerspective implements IPerspectiveFactory {
      
      	public void createInitialLayout(IPageLayout layout) {
      	layout.addView("com.ibm.issw.temperature.form.views.TemperatureView",
      		IPageLayout.LEFT,0.66f,IPageLayout.ID_EDITOR_AREA);;
      		layout.setEditorAreaVisible(false);
      	}
      
      }
      

    • platform - главный класс RCP-приложения. Создается рабочее место и запускается RCP-приложение.

      Листинг 7

      public class TempRCPApplication implements IPlatformRunnable {
      	
      	public Object run(Object args) throws Exception {
      		WorkbenchAdvisor workbenchAdvisor = new RcpWorkbenchAdvisor();
      		Display display = PlatformUI.createDisplay();
      		try {
      			int returnCode = PlatformUI.createAndRunWorkbench(display,workbenchAdvisor);
      			if(returnCode == PlatformUI.RETURN_RESTART)
      			{
      				return IPlatformRunnable.EXIT_RESTART;
      			}
      			else
      			{
      				return IPlatformRunnable.EXIT_OK;
      			}
      			
      		} finally {
      			display.dispose();
      		}
      	}
      
      }
      

  5. Этот код мы должны добавить в наш plug-in.xml. Выберите закладку Extension и затем нажмите кнопку Add (рисунок 48).

    Рисунок 48. Добавление расширений

  6. Так как мы пишем приложение, то должны расширить org.eclipse.core.runtime.applications (рисунок 49).

    Рисунок 49. Добавление расширений

  7. Выберите Finish.
  8. В диалоговом окне Extension Details добавьте RcpApplication в поле Id (рисунок 50).

    Рисунок 50. Добавление расширений

  9. Нажмите правой кнопкой мыши на точке расширения и выберите New => application (рисунок 51).

    Рисунок 51. Добавление расширений

  10. Нажмите правой кнопкой мыши на (application) и выберите New => run (рисунок 52).

    Рисунок 52. Добавление расширений

  11. В диалоговом окне Extension Element Details найдите класс TempRCPApplication (рисунок 53).

    Рисунок 53. Extension Element Details

  12. Чтобы добавить перспективу, добавьте еще одно расширение и выберите точку расширения org.eclipse.ui.perspectives (рисунок 54).

    Рисунок 54. Extension Point Selection

  13. Нажмите правой кнопкой мыши на точке расширения и выберите New => perspective (рисунок 55).

    Рисунок 55. Добавление расширений

  14. В диалоговом окне Extension Element Details найдите класс перспективы, как показано на рисунке 56:

    Рисунок 56. Extension Element Details

  15. Обновите ID, чтобы он соответствовал названию класса (рисунок 57):

    Рисунок 57. Extension Element Details

  16. Теперь должны появиться расширения, как показано на рисунке 58. Сохраните изменения конфигурации подключаемого модуля, выбрав либо File => Save, либо нажав комбинацию клавиш Ctrl-S.

    Рисунок 58. Добавление расширений

В качестве альтернативного подхода вы можете добавить подключаемый модуль вручную, добавив его непосредственно в файл plug-in.xml, приведенный в листинге 8. Добавленный код выделен жирным шрифтом:

Листинг 8

<plug-in>

   <extension
         point="org.eclipse.ui.views">
      <category
            name="Temperature Category"
            id="com.ibm.issw.temperature.form">
      </category>
      <view
            name="Temperature View"
            icon="icons/sample.gif"
            category="com.ibm.issw.temperature.form"
            class="com.ibm.issw.temperature.form.views.TemperatureView"
            id="com.ibm.issw.temperature.form.views.TemperatureView">
      </view>
   </extension>
   <extension
         point="org.eclipse.core.runtime.applications">
      <application>
         <run class="TempRCPApplication"/>
      </application>
   </extension>
   <extension
         point="org.eclipse.ui.perspectives">
      <perspective
            class="MyRCPPerspective"
            name="com.ibm.issw.temperature.form.perspective1"
            id="MyRCPPerspective"/>
   </extension>

</plug-in>

Тестирование вашего RCP EJB-клиента

Мы готовы запустить RCP EJB-клиент. Сначала мы помодульно протестируем наше RCP-приложение в Application Developer. Затем мы экспортируем наш подключаемый модуль и настроим его для запуска вне среды разработки.

Тестирование в Application Developer

В Eclipse 3.0 вы можете создать конфигурацию запуска для выполнения подключаемых модулей. Эти конфигурации запуска необходимо настроить на использование WebSphere V6 JRE (входящий в состав IBM Application Client for WebSphere Application Server и WebSphere Application Server), который добавляется в Perspective Preferences. Однако вместо использования Eclipse мы будем использовать Application Developer, в котором JRE уже установлен.

  1. В основном меню Application Developer выберите Run =>Run.... (рисунок 59).

    Рисунок 59. Создание конфигурации запуска

  2. В мастере Launch Configuration выберите Run-time workbench и New (рисунок 60).

    Рисунок 60. Создание конфигурации запуска

  3. Назовите конфигурацию MyRCPClient. В разделе Program to Run выберите ваш подключаемый модуль com.ibm.issw.temperature.form.RcpApplication в поле Run an application и WebSphere v6 JRE в поле JRE (рисунок 61).

    Рисунок 61. Создание конфигурации запуска

  4. В поле VM arguments введите код, показанные на рисунке 61, скопировав код из предоставленного файла C:\RCPEJBClient\Snippet1.txt (листинг 9). Пока ничего не запускайте. Аргументы VM указывают каталог, в котором установлен IBM Application Client for WebSphere Application Server. Если вы установили его в другой каталог, используйте его. В противном случае используйте экземпляр WebSphere в Application Developer, расположенный в <Application Developer_INSTALL_ROOT>/runtimes/base_v6.

    Листинг 9

    -Djava.naming.provider.url=corbaloc::localhost
    -Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
    -Dserver.root=C:\WebSphere6ND\AppClient
    -Dcom.ibm.CORBA.ConfigURL=file:C:\WebSphere6ND\AppClient/properties/sas.client.props
    -Djava.ext.dirs="C:\WebSphere6ND\AppClient\java\jre\lib\ext;
    	C:\WebSphere6ND\AppClient\java\jre\lib;C:\WebSphere6ND\AppClient\classes;
    	C:\WebSphere6ND\AppClient\lib;C:\WebSphere6ND\AppClient\lib\ext;
    	C:\WebSphere6ND\AppClient\properties
    

  5. На закладке Plug-in мы должны включить подключаемые модули, от которых зависит наш подключаемый модуль. Это легко сделать, следуя последовательности нажатий, показанных на рисунке 62.

    Рисунок 62. Зависимости подключаемого модуля

  6. Выберите Apply, затем Run. Клиент должен выглядеть так, как показано на рисунке 63.

    Рисунок 63. Выполняющийся клиент

  7. Введите значение, затем выберите Convert to Farenheit.
  8. Должен отобразиться результат, аналогичный показанному на рисунке 64. (Первый вызов будет выполняться дольше, чем последующие, поскольку необходимо установить соединение с WebSphere Application Server.)

    Рисунок 64. Результаты работы клиента

Создание и запуск RCP-приложения вне Application Developer

Для запуска RCP-приложения вне Application Developer нам будет необходимо использовать мастер Export plug-in. В Eclipse 3 нет механизма экспорта для RCP-приложений, но вы могли бы использовать двоичный файл для завершения этого процесса. В целях обучения мы развернем его вручную.

  1. Нажмите правой кнопкой мыши на проекте подключаемого модуля и выберите Export (рисунок 65).

    Рисунок 65. Экспорт проекта подключаемого модуля

  2. В диалоговом окне Export (рисунок 66) выберите deployable plug-ins and fragments и нажмите Next.

    Рисунок 66. Экспорт проекта подключаемого модуля

  3. В диалоговом окне "Deployable plug-ins and fragments" выберите наш подключаемый модуль, в поле deploy it as укажите вариант directory structure, затем разверните его в каталог, как показано на рисунке 67. Нажмите Finish.

    Рисунок 67. Экспорт проекта подключаемого модуля

  4. Запустится мастер PDE Export wizard (рисунок 69).

    Рисунок 68. Мастер PDE Export

  5. Для запуска нашего приложения нам необходим BAT-файл.  Скопируйте BAT-файл из C:\RCPEJBClient\MyRCPApp.bat в каталог, в который вы экспортировали ваш подключаемый модуль.
  6. BAT-файл будет использовать клиента приложения JRE (в предположении, что IBM Client for WebSphere Application Server находится в C:\WebSphere6ND\AppClient; если это не так, обновите сценарий и поменяйте каталог, изменив переменную в начале файла так, чтобы она указывала на клиент приложения или на WebSphere Application Server в случае, если вы не используете клиент.).
    (Мы тестируем наше RCP-приложение с WebSphere Application Server Base. Если в рабочих условиях вы будете вызывать EJB-приложение, развернутое на кластере, аргумент Djava.naming.provider.url=corbaloc::localhost должен иметь URL, указывающий кластер, например: corbaloc::<host1>:<port>,:<host2>:<port>.)

    Листинг 10

    set WAS_CLIENT_HOME=C:\WebSphere6ND\AppClient
    
    start %WAS_CLIENT_HOME%\java\jre\bin\javaw 
    -Djava.naming.provider.url=corbaloc::localhost  
    -Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory 
    -Dserver.root=%WAS_CLIENT_HOME%  
    -Dcom.ibm.CORBA.ConfigURL=file:%WAS_CLIENT_HOME%/properties/sas.client.props  
    -Djava.ext.dirs=%WAS_CLIENT_HOME%\java\jre\lib\ext;%WAS_CLIENT_HOME%\java\jre\lib;%WAS_CLIENT_HOME%	classes;%WAS_CLIENT_HOME%\lib;%WAS_CLIENT_HOME%\lib\ext;%WAS_CLIENT_HOME%\properties 
    -cp startup.jar org.eclipse.core.launcher.Main  
    -application com.ibm.issw.temperature.form.RcpApplication
    

  7. Поскольку мы вручную экспортировали подключаемый модуль, нам необходимо скопировать startup.jar и базовые подключаемые модули из каталога нашей установки Eclipse. В Application Developer Eclipse расположен в каталоге eclipse установленного Application Developer (рисунок 69).

    Рисунок 69. Копирование startup.jar

  8. Вставьте startup.jar в каталог, в котором был развернут подключаемый модуль.

    Рисунок 70. Вставка startup.jar

  9. Затем, скопируйте следующие подключаемые модули:
    • org.eclipse.core.expressions_3.0.0
    • org.eclipse.core.runtime_3.0.1
    • org.eclipse.help_3.0.0
    • org.eclipse.jface_3.0.0
    • org.eclipse.osgi_3.0.1
    • org.eclipse.platform_3.0.1.1
    • org.eclipse.swt.win32_3.0.1
    • org.eclipse.swt_3.0.1
    • org.eclipse.ui.forms_3.0.0
    • org.eclipse.ui.workbench_3.0.1.1
    • org.eclipse.ui_3.0.1
    • org.eclipse.update.configurator_3.0.0
    Помните, что вы можете автоматизировать этот процесс при помощи бинарной компоновки или ANT.

    Рисунок 71. Копирование необходимых подключаемых модулей.

  10. Запустите приложение при помощи MyRCPApp.bat. (Снова первый запрос будет выполняться дольше, чем последующие.)

    Рисунок 72. Запуск клиента

Заключение

В этой статье описывается, как создать клиентские EJB-приложения, используя Eclipse Rich Client Platform (RCP). Платформа Eclipse содержит богатый набор элементов управления (widget), окон просмотра (view), рабочих областей (framework) (таких как Eclipse Modeling Framework) и других расширений, которые могут быть использованы для создания мощных клиентских приложений. Знание процесса интегрирования Eclipse RCP-приложений с WebSphere Application Server необходимо для создания интегрированных клиентских приложений.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=2694