Создание 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)
Прежде всего мы должны установить IBM Application Client for WebSphere Application Server, который входит в WebSphere Application Server V6 (если у вас нет клиента, то вы можете изменить вашу конфигурацию, указав на сервер JDK в тестовой среде Application Developer, либо в реальной установке WebSphere Application Server), а затем развернуть приложение в работающем WebSphere Application Server:
- J2EE-клиент устанавливается при помощи Installation wizard interface (интерфейс мастера установки). После запуска LaunchPad вашей WebSphere, выберите IBM Client for IBM WebSphere Application Server.
- По мере следования указаниям мастера мы установим клиента в каталог
C:\WebSphere6ND\AppClient . Находящийся в загруженном zip-файле пакетный файл Windows (BAT) использует именно этот class path; если вы выберете другой каталог, придется изменить BAT-файл для ссылки на этот новый каталог. На рисунке 3 изображен третий экран мастера, в котором вы выбираете каталог.
Рисунок 1. Мастер установки
- Мы также выбрали типичную установку и ввели
localhost для Hostname, как показано на рисунке 2.
Рисунок 2. Мастер установки
Затем мы будем использовать Application Developer для развертывания EAR в WebSphere Application Server. Это сделано просто для удобства создания и тестирования подключаемого модуля из этого же рабочего пространства. Вы можете также развернуть приложение в автономном экземпляре WebSphere Application Server, настроив Eclipse для взаимодействия с ним.
- Откройте Application Developer, используя меню Start, и перейдите в рабочее пространство, например
C:\RCPEJBClient\workspace , (рисунок 3).
Рисунок 3. Workspace Launcher
- Закройте страницу Welcome по умолчанию (Рисунок 4).
Рисунок 4. Страница Welcome Rational SDP
- Перейдите в J2EE Perspective, если она не загрузилась по умолчанию.
- Найдите вид Servers в нижнем фрейме и нажмите правой кнопкой мыши на WebSphere Application Server v6.0 (Рисунок 5). При этом Application Developer проверит, выполняется ли экземпляр WebSphere Application Server по умолчанию.
Рисунок 5. Закладка Servers
- Сервер опять должен перейти в состояние "Stopped". Нажмите правой кнопкой мыши на сервере и выберите Start (рисунок 6). (Для запуска сервера можно также перейти в каталог
<Application Developer_INSTALL_ROOT>/runtimes/profiles/default/bin и выполнить команду startserver server1 ).
Рисунок 6. Запуск сервера
- После запуска сервера вы можете запустить консоль администратора, нажав правой кнопкой мыши на сервере и выбрав команду Run administrative console (или открыть браузер и перейти по адресу
http://localhost:9060/admin ), как показано на рисунке 7.
Рисунок 7. Запуск консоли администратора
- Зарегистрируйтесь с любым пользовательским id (Рисунок 8).
Рисунок 8. Запуск консоли администратора
- Разверните раздел Applications и выберите Install New Application (рисунок 9).
Рисунок 9. Установка нового приложения
- Просмотрите
C:\RCPEJBClient , выберите TemperatureEAR.ear и затем нажмите Next (рисунок 10). Приложение TemeratureEAR представляет собой простой метод, преобразующий температуру из шкалы по Цельсия в шкалу по Фаренгейту (хотя, возможно, не слишком точно).
Рисунок 10. Установка нового приложения
- На странице Bindings (рисунок 11) оставьте значения по умолчанию и нажмите кнопку Next.
Рисунок 11. Установка нового приложения
- На следующей странице Step 1 процесса установки приложения выберите Deploy enterprise beans (развернуть корпоративные компоненты), а затем Step 7 Summary (рисунок 12).
Рисунок 12. Установка нового приложения
- В диалоговом окне Step 7 нажмите кнопку Finish (рисунок 13). Процесс установки должен занять минуту или две (рисунок 14).
Рисунок 13. Установка нового приложения
Рисунок 14. Сообщения при установке нового приложения
- После завершения процесса установки выберите Save to Master Configuration (рисунок 15).
Рисунок 15. Save to Master Configuration
- В диалоговом окне Save, нажмите кнопку Save (рисунок 16).
Рисунок 16. Save to Master Configuration
- Теперь мы запустим приложение. В меню Applications, выберите Enterprise Applications (рисунок 17).
Рисунок 17. Enterprise applications
- Выберите TemperatureEAR и нажмите Start (рисунок 18).
Рисунок 18. Enterprise applications
- Соответствующая пиктограмма в столбце Status должна показать, что приложение запустилось (рисунок 19).
Рисунок 19. Enterprise applications
- Выйдите из консоли администратора (рисунок 20).
Рисунок 20. Выход из консоли администратора
Теперь мы готовы создать клиентское приложение RCP в виде простого подключаемого модуля при помощи мастера Plug-in. При создании RCP-приложений вы обычно должны создать несколько подключаемых модулей с учетом возможности повторного использования. Например, вы могли бы переписать этот пример и создать один подключаемый модуль с вашими J2EE-зависимостями, второй для компонента View, а третий для RCP Shell. Это даст возможность повторно использовать различные подключаемые модули, например, код J2EE. Однако в этом упражнении мы создадим только один подключаемый модуль, в основном по причине ограничения размера этой статьи.
- Для создания проекта Plug-in в Application Developer выберите пункт File => New => Other в J2EE Perspective (рисунок 21).
Рисунок 21. Создание проекта plug-in
- В мастере New Project проверьте, что отмечен флажок Show All Wizards. Разверните Plug-in Development и выберите Plug-in Project (рисунок 22).
Рисунок 22. Мастер New Project
- На этом этапе может отобразиться запрос на разрешение подключаемых модулей для их разработки (рисунок 23). В этом случае нажмите кнопку OK.
Рисунок 23. Подтверждение разрешения подключаемых модулей
- В диалоговом окне "Create a new plug-in project" (рисунок 24) дайте название проекту:
com.ibm.issw.temperature.form . Это обычное соглашение по наименованию для подключаемых модулей. Убедитесь, что вы отметили варианты, показанные на рисунке 24:
- Ваш проект подключаемого модуля будет также Java-проектом, поскольку вы будете добавлять Java-код.
- В Eclipse 3.0 у вас есть возможность выбрать установку зависимостей времени исполнения с использованием файла манифеста, что мы и выберем.
Нажмите кнопку Next.
Рисунок 24. Создание нового проекта подключаемого модуля
- В следующем диалоговом окне заполните данные подключаемого модуля так, как показано на рисунке 25, затем нажмите Next.
Рисунок 25. Создание нового проекта подключаемого модуля
- Для создания подключаемого модуля мы будем использовать шаблон. Поскольку мы будем создавать подключаемый модуль с окном просмотра, выберите Plug-in with a view, затем нажмите Next (рисунок 26).
Рисунок 26. Создание нового проекта подключаемого модуля
- В следующем диалоговом окне мы определим информацию о классе View. Введите точно такую же информацию, которая показана на рисунке 27, затем нажмите Next.
Рисунок 27. Установка настроек просмотра
- Наконец, в диалоговом окне View Features (рисунок 28), снимите отметки на всех вариантах. (Мы будем импортировать свой собственный класс просмотра.) Нажмите кнопку Finish.
Рисунок 28. Установка настроек просмотра
- На запрос о переключении в перспективу Plug-in Development Perspective (рисунок 29) ответьте Yes.
Рисунок 29. Подтверждение переключения перспективы
Сейчас мы импортируем два JAR в наш новый подключаемый модуль:
j2ee.jar - Подключаемый модуль, взаимодействующий с API EJB-клиента, поэтому его необходимо включить в ваш classpath.
- JAR EJB-клиента - Содержит необходимые клиентские интерфейсы и сгенерированные прокси и заглушки (stub) для корректного подключения к выполняющимся корпоративным компонентам.
- В Application Developer нажмите правой кнопкой мыши на проекте подключаемого модуля и выберите пункт Import (рисунок 30).
Рисунок 30. Импорт JAR
- Выберите File System, затем нажмите Next (рисунок 31).
Рисунок 31. Импорт JAR
- Есть несколько мест, из которых можно получить
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
- Далее нам необходимо импортировать 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
- Наш проект подключаемого модуля должен теперь иметь два JAR-файла, как показано на рисунке 34.
Рисунок 34. Импортированные JAR-файлы
- Теперь нам нужно установить classpath времени компилирования для создания и компилирования в рабочем пространстве. Это позволит успешно компилировать код подключаемого модуля как в Eclipse IDE, так и при автоматизированной компоновке. Информация о classpath времени компоновки обновляется в Build Section редактора конфигурации подключаемого модуля. Выберите закладку Build, показанную на рисунке 35.
Рисунок 35. Раздел Build
- Перейдите на закладку Binary Build (рисунок 36) и выберите два JAR-файла. Если вы выберете компоновку подключаемого модуля в бинарный файл, в Build нужно включить JAR-файлы. Binary build дает возможность скомпоновать ваш бинарный файл и затем использовать загружаемый бинарный файл Eclipse RCP. Для этого упражнения мы вручную скопируем подключаемые модули для запуска приложения Eclipse RCP.
Рисунок 36. Раздел Binary Build
- Для успешного компилирования кода необходимо добавить JAR-файлы в classpath времени компилирования. Вы можете сделать это, добавив JAR-файлы в Extra Classpath Entries в нижней части раздела Build (рисунок 37). При этом обновляется Project Build Path в Eclipse.
Рисунок 37. Дополнительные записи Classpath
- Сделанные на странице Build изменения обновят файл
build.properties . Вы можете просмотреть этот файл, выбрав закладку build.properties.
- Для того чтобы код вашего подключаемого модуля во время исполнения мог найти J2EE и код EJB-клиента, необходимо добавить его в classpath времени исполнения подключаемого модуля. Это можно сделать в редакторе конфигурации подключаемого модуля, который должен открыться по умолчанию. (Если нет, щелкните дважды на файле plug-in.xml, чтобы его открыть.) Выберите закладку Runtime, в разделе Run-time libraries, нажмите кнопку Add (рисунок 37) и добавьте только что импортированные два JAR-файла.
Рисунок 38. Добавление библиотек времени исполнения
Диалоговое окно Runtime обновит файл MANIFEST.MF подключаемого модуля. Так же как и для J2EE-приложений, манифест определяет classpath времени исполнения. Вы можете увидеть манифест, перейдя на закладку MANIFEST.MF .
Сейчас мы скомпонуем окно просмотра. Мы импортируем класс (переопределяя сгенерированный для нас шаблоном View) и затем исследуем соответствующий фрагмент кода. но перед этим мы должны указать подключаемые модули, от которых зависит наш подключаемый модуль. В нашем окне просмотра мы будем использовать элементы управления формой из Standard Widget Toolkit (SWT), поэтому нам нужно установить зависимости в подключаемом модуле Eclipse, содержащем элементы управления формой.
- Выберите закладку Dependencies и нажмите кнопку Add (рисунок 39). Найдите подключаемый модуль org.eclispe.ui.forms.
Рисунок 39. Dependencies
- Импортируйте класс View, переопределяя сгенерированный класс. В каталоге src нажмите правой кнопкой мыши на пакете com.ibm.issw.temperature.form.views и выберите Import (рисунок 40).
Рисунок 40.
- Выберите File System и затем нажмите кнопку Next. Просмотрите каталог
C:\RCPEJBClient\View и импортируйте три файла в пакет, как показано на рисунке 41.
Рисунок 41. Импорт ресурсов файловой системы
- Должно отобразиться предупреждение о том, что вы собираетесь переопределить существующий класс. Выберите Yes To All (рисунок 42).
Рисунок 42. Предупреждение о переопределении класса
- Откройте импортированный TemperatureView.java (рисунок 43).
Рисунок 43. Откройте импортированное окно просмотра
- Мы сконцентрируемся на двух методах (рисунок 44):
- createPartControl(Composite) - используется для создания вашего окна просмотра из различных элементов управления SWT.
- handleEvent() - во внутреннем классе обеспечивает логику, вызываемую при нажатии командной кнопки элемента управления SWT.
Рисунок 44. Основные методы
- Метод
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);
}
|
- Метод внутреннего класса обработки событий приведен в листинге 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());
}
}
|
- Вы, возможно, заметили, что для избежания жесткого кодирования имени EJB JNDI и месторасположения сервера приложений используется файл свойств. При развертывании RCP-приложения вы можете изменить файл свойств и указать реальное месторасположение удаленного EJB.
Листинг 3
TemperatureView.JNDIName=ejb/TempConverter
TemperatureView.Title=Celsius to Fahrenheit Temperature Converter
TemperatureView.Button=Convert to Fahrenheit
|
- При построении подключаемого модуля обычно необходимо добавить его в файл
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-приложение, используя среду Eclipse по умолчанию, которая оформлена как IDE и не идеальна для нашего случая. Поэтому, вместо нее мы создадим наше собственное рабочее место и перспективу. Мы импортируем классы, предоставленные в файле для загрузки, в наш подключаемый модуль, затем добавим записи в plug-in.xml для рабочего места и перспективы по умолчанию.
- Нажмите правой кнопкой мыши на папке src и выберите Import (рисунок 45).
Рисунок 45. Импорт классов
- Выберите File system, затем Next. Просмотрите папку
C:\RCPEJBClient\RCPCode\src и импортируйте три класса, как показано на рисунке 46.
Рисунок 46. Импорт классов
- Классы импортируются в
(default package) , которым является root (рисунок 47).
Рисунок 47. Импорт классов
- Исследуем классы:
- 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();
}
}
}
|
- Этот код мы должны добавить в наш
plug-in.xml . Выберите закладку Extension и затем нажмите кнопку Add (рисунок 48).
Рисунок 48. Добавление расширений
- Так как мы пишем приложение, то должны расширить
org.eclipse.core.runtime.applications (рисунок 49).
Рисунок 49. Добавление расширений
- Выберите Finish.
- В диалоговом окне Extension Details добавьте
RcpApplication в поле Id (рисунок 50).
Рисунок 50. Добавление расширений
- Нажмите правой кнопкой мыши на точке расширения и выберите New => application (рисунок 51).
Рисунок 51. Добавление расширений
- Нажмите правой кнопкой мыши на (application) и выберите New => run (рисунок 52).
Рисунок 52. Добавление расширений
- В диалоговом окне Extension Element Details найдите класс TempRCPApplication (рисунок 53).
Рисунок 53. Extension Element Details
- Чтобы добавить перспективу, добавьте еще одно расширение и выберите точку расширения org.eclipse.ui.perspectives (рисунок 54).
Рисунок 54. Extension Point Selection
- Нажмите правой кнопкой мыши на точке расширения и выберите New => perspective (рисунок 55).
Рисунок 55. Добавление расширений
- В диалоговом окне Extension Element Details найдите класс перспективы, как показано на рисунке 56:
Рисунок 56. Extension Element Details
- Обновите ID, чтобы он соответствовал названию класса (рисунок 57):
Рисунок 57. Extension Element Details
- Теперь должны появиться расширения, как показано на рисунке 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-приложение в Application Developer. Затем мы экспортируем наш подключаемый модуль и настроим его для запуска вне среды разработки.
В Eclipse 3.0 вы можете создать конфигурацию запуска для выполнения подключаемых модулей. Эти конфигурации запуска необходимо настроить на использование WebSphere V6 JRE (входящий в состав IBM Application Client for WebSphere Application Server и WebSphere Application Server), который добавляется в Perspective Preferences. Однако вместо использования Eclipse мы будем использовать Application Developer, в котором JRE уже установлен.
- В основном меню Application Developer выберите Run =>Run.... (рисунок 59).
Рисунок 59. Создание конфигурации запуска
- В мастере Launch Configuration выберите Run-time workbench и New (рисунок 60).
Рисунок 60. Создание конфигурации запуска
- Назовите конфигурацию MyRCPClient. В разделе Program to Run выберите ваш подключаемый модуль com.ibm.issw.temperature.form.RcpApplication в поле Run an application и WebSphere v6 JRE в поле JRE (рисунок 61).
Рисунок 61. Создание конфигурации запуска
- В поле 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
|
- На закладке Plug-in мы должны включить подключаемые модули, от которых зависит наш подключаемый модуль. Это легко сделать, следуя последовательности нажатий, показанных на рисунке 62.
Рисунок 62. Зависимости подключаемого модуля
- Выберите Apply, затем Run. Клиент должен выглядеть так, как показано на рисунке 63.
Рисунок 63. Выполняющийся клиент
- Введите значение, затем выберите Convert to Farenheit.
- Должен отобразиться результат, аналогичный показанному на рисунке 64. (Первый вызов будет выполняться дольше, чем последующие, поскольку необходимо установить соединение с WebSphere Application Server.)
Рисунок 64. Результаты работы клиента
Для запуска RCP-приложения вне Application Developer нам будет необходимо использовать мастер Export plug-in. В Eclipse 3 нет механизма экспорта для RCP-приложений, но вы могли бы использовать двоичный файл для завершения этого процесса. В целях обучения мы развернем его вручную.
- Нажмите правой кнопкой мыши на проекте подключаемого модуля и выберите Export (рисунок 65).
Рисунок 65. Экспорт проекта подключаемого модуля
- В диалоговом окне Export (рисунок 66) выберите deployable plug-ins and fragments и нажмите Next.
Рисунок 66. Экспорт проекта подключаемого модуля
- В диалоговом окне "Deployable plug-ins and fragments" выберите наш подключаемый модуль, в поле deploy it as укажите вариант directory structure, затем разверните его в каталог, как показано на рисунке 67. Нажмите Finish.
Рисунок 67. Экспорт проекта подключаемого модуля
- Запустится мастер PDE Export wizard (рисунок 69).
Рисунок 68. Мастер PDE Export
- Для запуска нашего приложения нам необходим BAT-файл. Скопируйте BAT-файл из
C:\RCPEJBClient\MyRCPApp.bat в каталог, в который вы экспортировали ваш подключаемый модуль.
- 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
|
- Поскольку мы вручную экспортировали подключаемый модуль, нам необходимо скопировать
startup.jar и базовые подключаемые модули из каталога нашей установки Eclipse. В Application Developer Eclipse расположен в каталоге eclipse установленного Application Developer (рисунок 69).
Рисунок 69. Копирование startup.jar
- Вставьте
startup.jar в каталог, в котором был развернут подключаемый модуль.
Рисунок 70. Вставка startup.jar
- Затем, скопируйте следующие подключаемые модули:
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. Копирование необходимых подключаемых модулей.
- Запустите приложение при помощи
MyRCPApp.bat . (Снова первый запрос будет выполняться дольше, чем последующие.)
Рисунок 72. Запуск клиента
В этой статье описывается, как создать клиентские EJB-приложения, используя Eclipse Rich Client Platform (RCP). Платформа Eclipse содержит богатый набор элементов управления (widget), окон просмотра (view), рабочих областей (framework) (таких как Eclipse Modeling Framework) и других расширений, которые могут быть использованы для создания мощных клиентских приложений. Знание процесса интегрирования Eclipse RCP-приложений с WebSphere Application Server необходимо для создания интегрированных клиентских приложений.
|