 | Уровень сложности: средний Крис Анищик, программист, IBM Бенджамин Мускалла, программист, Innoopract Informationssysteme GmbH
23.04.2008 Технология Ajax (асинхронный JavaSript + XML) и концепция Web 2.0 получили распространение среди разработчиков как способ придать Web-приложениям дополнительную динамику. Rich Ajax Platform (RAP) представляет собой средство разработки Ajax-приложений с использованием технологии Eclipse. Авторы статьи знакомят читателя с RAP, рассказывают о том, как организуется среда разработки на платформе RAP, приводят ряд демонстрационных скриншотов и в завершение иллюстрируют сказанное несколькими наглядными примерами.
Цель проекта RAP — дать возможность разработчикам создавать функционально насыщенные интернет-приложения (Rich Internet Applications), используя подход Eclipse. Но что стоит за этим термином — "подход Eclipse"? Скажем так: RAP позволяет разработчикам создавать браузер-ориентированные Ajax-приложения с использованием всего объема библиотек языка Java™ и Eclipse API. Для этого предлагаются поддерживающие Web-технологии реализации SWT, JFace и Eclipse Workbench. Цель настоящей статьи — познакомить читателя с RAP при помощи нескольких несложных примеров.
Два этапа установки
Установка RAP чрезвычайно проста и состоит всего из двух этапов: загрузки RAP и настройки Eclipse для использования с данной платформой.
Этап 1: Загрузка RAP
Загрузите RAP с сайта Eclipse.org. Лучше всего взять самую новую стабильную версию; мы при написании статьи использовали выпуск 1.0. Загрузив с сайта архивный файл, содержащий целевую RAP-платформу, распакуйте ее в папку по своему выбору (см. рисунок 1). Эта папка будет играть очень важную роль — именно ее вы будете использовать при настройке целевой платформы на следующем этапе.
Рисунок 1. Целевая платформа RAP
Этап 2. Установка целевой платформы
В среде программирования Eclipse Plug-in Development Environment (PDE) используется концепция целевой платформы. Целевая платформа собирается из набора плагинов, соответствующих той платформе, в рамках которой вы работаете (т. е. на которую нацелены создаваемые вами продукты). По умолчанию в качестве целевой устанавливается платформа, на которой Eclipse была запущена в вашем конкретном случае. Это означает, что плагины, которые вы разрабатываете в данный момент, окажутся предназначенными для исполнения на данном работающем экземпляре системы. Однако главное то, что целевую платформу можно менять. Например, вы можете выбрать в качестве целевой платформы инсталляцию Eclipse V3.2 или даже среду исполнения какого-то другого программного продукта. (Этот элегантный прием позволяет вам пользоваться последней версией Eclipse независимо от того, для чего именно предназначены ваши разработки.)
В данном случае нам необходимо определить в качестве целевой платформу RAP, поскольку именно она является для нас рабочей. Для этого в пункте меню Window >
Preferences... > Plug-in Development > Target Platform нужно указать местонахождение целевой платформы — папку, в которую вы разархивировали плагины RAP на этапе 1 (рисунок 2).
Рисунок 2. Назначение RAP целевой платформой
Теперь, когда ваша целевая платформа установлена должным образом, вы можете создавать RAP-приложения. Но прежде чем мы перейдем к собственно коду, давайте рассмотрим небольшой пример — он даст нам представление о возможностях RAP и поможет научиться запускать RAP-приложения.
 |
RAP и Google Web Toolkit
Google Web Toolkit (GWT) и RAP похожи в том, что оба они позволяют создавать функционально насыщенные интернет-приложения при помощи Java. Важнейшее их отличие состоит в том, что GWT выполняется на стороне клиента, тогда как RAP — на сервере. Благодаря этому обстоятельству с помощью RAP вы получаете полноценный доступ к Java API и можете воспользоваться знаменитой моделью плагинов Eclipse через посредство OSGi. В терминах Eclipse эту ситуацию можно изложить следующим образом: GWT представляет собой что-то вроде автономного SWT-приложения (т. е. всего лишь некий набор инструментов), тогда как RAP дает возможность полноценного RCP-подхода к Web-приложениям. |
|
Примеры
Наше знакомство с RAP мы начнем с примера. Для взаимодействия с RAP нам необходимо создать стартовую конфигурацию для запуска RAP. Для этого нужно открыть диалог Run (Run > Open Run Dialog...) и создать новую OSGi-ориентированную стартовую конфигурацию. После этого необходимо удостовериться в том, что следующим VM-аргументам установлены нужные значения: -Dorg.osgi.service.http.port=8000
-Dosgi.noShutdown=true (рисунок 3). Эти аргументы дают возможность RAP запускать себя через порт 8000 и не позволяют Eclipse завершиться сразу после запуска.
Рисунок 3. Стартовая конфигурация RAP
Ну а теперь можно запустить браузер и перейти на
http://localhost:8000/rap?startup=controls, чтобы познакомиться с демонстрационным скриншотом панели управления RAP. Этот пример основан на хорошо известном ControlExample из набора SWT Examples.
Рисунок 4. Панель управления RAP
Примеры приложений
Рассмотрим два примера, в основе которых лежат шаблоны клиентской платформы RCP (Rich Client Platform), предоставляемые средой программирования PDE.
Пример "Hello World"
У программистов уже стало доброй традицией приводить в качестве иллюстрации программу, которая выдает сообщение "Hello World". Начнем с того, как создать такое простое RAP-приложение.
Рисунок 5. "Hello World" в исполнении RAP
Основное различие между RAP- и RCP-версией приложения заключается в характере зависимости плагинов и в точке входа приложения. Если мы посмотрим на манифест плагина (см. листинг 1), то увидим, что эти зависимости различны.
Листинг 1. Зависимости RAP-приложения "Hello World" (MANIFEST.MF)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld Plug-in
Bundle-SymbolicName: rap.helloworld; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: rap.helloworld.Activator
Require-Bundle: org.eclipse.rap.ui
Eclipse-LazyStart: true
|
Обратили внимание на зависимость от org.eclipse.rap.ui? Это плагин RAP,
аналогичный стандартному плагину org.eclipse.ui
из базы RCP. Если вы хорошо знакомы с OSGi и знаете, как работает заголовок Import-Package, вам вообще не нужно устанавливать зависимости с конкретными плагинами; вы можете ссылаться только на нужные вам пакеты. Это очень важный момент, потому что благодаря этому вы можете организовать свой код так, чтобы он работал и с RAP, и с RCP. Например, если мы взглянем на коды workbench advisor в RAP (листинг 2) и RCP (листинг 3), то увидим сходство этих кодов и подключенных в обоих случаях пакетов.
Листинг 2. Workbench advisor в RCP
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RCP");
}
}
|
Листинг 3. Workbench advisor в RAP
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RAP");
}
}
|
Другое ключевое различие между RAP- и RCP-приложениями заключается в точке входа (аналогично методу main(String[] args) в языке Java). В случае
RCP мы имеем точку расширения org.eclipse.core.runtime.applications,
где вы определяете IApplication (обратите внимание, что в версиях Eclipse до 3.3 ему соответствовало IPlatformRunnable). RAP-эквивалент RCP-приложения - это точка расширения
org.eclipse.rap.ui.entrypoint, которая определяет IEntryPoint. Сравнив типичный код точки входа в RCP- (листинг 4) и RAP-контексте (листинг 5), вы увидите, что между ними имеется определенное сходство. В обоих случаях мы создаем компоненты Display и Workbench для обеспечения возможности запуска workbench advisor.
Листинг 4. Точка входа RCP-приложения (org.eclipse.core.runtime.applications)
public class Application implements IApplication {
public Object start(IApplicationContext context) throws Exception {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART)
return IApplication.EXIT_RESTART;
else
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
public void stop() {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench == null)
return;
final Display display = workbench.getDisplay();
display.syncExec(new Runnable() {
public void run() {
if (!display.isDisposed())
workbench.close();
}
});
}
|
Листинг 5. Точка входа RAP-приложения (org.eclipse.rap.ui.entrypoint)
public class Application implements IEntryPoint {
public Display createUI() {
Display display = PlatformUI.createDisplay();
PlatformUI.createAndRunWorkbench
( display, new ApplicationWorkbenchAdvisor() );
return display;
}
}
|
Пример RCP Mail
Классический пример RCP
Mail (рисунок 6) после минимальных изменений может быть запущен в среде RAP (рисунок 7). Этот факт указывает на то, что в среде RAP доступны для использования, в частности, такие workbench-концепции, как виды, перспективы и редакторы (см. сравнение концепций в таблице 1). Если хотите, можете поиграться с исходными кодами двух последних примеров.
Таблица 1. RAP и RCP
| RAP | RCP |
|---|
| OSGi (на стороне сервера) | OSGi | | Standard Widget Toolkit (SWT) | RAP Widget Toolkit (RWT) | | JFace | JFace | | Workbench | Web Workbench |
Рисунок 6. RCP Mail
Рисунок 7. RAP Mail
Заключение
При помощи нескольких простых примеров и демонстрационных скриншотов статья знакомит читателей с платформой RAP. RAP позволяет разработчикам, не переучиваясь, использовать Eclipse для создания функционально насыщенных интернет-приложений (Rich Internet
Applications). RAP, кроме того, дает возможность организовать разрабатываемый код таким образом, чтобы он мог исполняться как локальным (RCP), так и удаленным (RAP) образом. По существу, RAP ставит Eclipse в один ряд с браузерами и Web 2.0.
Загрузка | Описание | Имя | Размер | Метод загрузки |
|---|
| Пример кода | os-eclipse-richajax.zip | 52 КБ | HTTP |
|---|
Ресурсы Научиться
- Оригинал статьи "Rich Ajax Platform, Part 1: An introduction" (EN).
-
Узнайте больше о Rich Ajax Platform (RAP) на сайте Eclipse.org.(EN)
-
Узнайте о новых возможностях и способах применения RAP, посетив RAP wiki.(EN)
-
Познакомьтесь со "списком рекомендованных публикаций по Eclipse." (EN)
-
Посмотрите полный список Eclipse-разработок на developerWorks.
-
Новичок в Eclipse? Из статьи "Начинаем работать с платформой Eclipse" (EN) на developerWorks вы узнаете о происхождении и архитектуре Eclipse, а также о том, как расширять ее возможности с помощью плагинов.
-
Усовершенствуйте свои навыки работы с Eclipse, посетив раздел Eclipse project resources на IBM developerWorks.(EN)
-
Послушайте интересные интервью и дискуссии с участием разработчиков программного обеспечения в разделе developerWorks podcasts.(EN)
-
Введение в платформу Eclipse см. в статье "Начинаем работать с платформой Eclipse" (EN).
-
Следите за разделом технических событий и трансляций на developerWorks.(EN)
-
Знакомьтесь с технологиями и функционированием продуктов IBM и open source при помощи бесплатных демонстрационных скриншотов в разделе developerWorks On demand demos.(EN)
-
Узнавайте о планируемых конференциях, выставках, Web-трансляциях и других событиях, представляющих интерес для разработчиков open source-продуктов из IBM.(EN)
-
Посетите раздел Open Source на developerWorks - здесь вы найдете многочисленные руководства, инструменты и обновления, которые помогут вам пользоваться технологиями с open source и применять их в сочетании с продуктами IBM.
Получить продукты и технологии
Обсудить
Об авторах  | |  | Крис Анищик (Chris Aniszczyk) — коммиттер Eclipse, сотрудник IBM Lotus, занимающийся разработками в рамках инициативы OSGi. В настоящее время основные усилия Криса направлены на совершенствование среды программирования плагинов Eclipse (Plug-in Development Environment, PDE), а также на пропаганду Eclipse среди сотрудников IBM Lotus. Крис — пламенный энтузиаст продуктов с открытым исходным кодом, активный популяризатор open source. Он пропагандирует Eclipse в своем блоге и удостоен чести представлять коммиттеров Eclipse в совете директоров Eclipse Foundation. Крис всегда готов поговорить об open source и Eclipse за стаканчиком чего-нибудь прохладительного. |
 | |  | Бенджамин Мускалла (Benjamin Muskalla) работает в качестве программиста и консультанта в компании Innoopract
Informationssysteme, Карлсруэ. Он является коммиттером проекта Rich Ajax Platform (RAP) и в первую очередь занимается внедрением компонентов workbench. Бенджамин, кроме того, активный участник разработки платформы Eclipse. |
Выскажите мнение об этой странице
|  |