Rich Ajax Platform: Часть 1. Введение

Web 2.0, подход Eclipse

Технология Ajax (асинхронный JavaSript + XML) и концепция Web 2.0 получили распространение среди разработчиков как способ придать Web-приложениям дополнительную динамику. Rich Ajax Platform (RAP) представляет собой средство разработки Ajax-приложений с использованием технологии Eclipse. Авторы статьи знакомят читателя с RAP, рассказывают о том, как организуется среда разработки на платформе RAP, приводят ряд демонстрационных скриншотов и в завершение иллюстрируют сказанное несколькими наглядными примерами.

Крис Анищик, программист, 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 за стаканчиком чего-нибудь прохладительного.



Бенджамин Мускалла, программист, Innoopract Informationssysteme GmbH

Бенджамин Мускалла (Benjamin Muskalla) работает в качестве программиста и консультанта в компании Innoopract Informationssysteme, Карлсруэ. Он является коммиттером проекта Rich Ajax Platform (RAP) и в первую очередь занимается внедрением компонентов workbench. Бенджамин, кроме того, активный участник разработки платформы Eclipse.



23.04.2008

Цель проекта 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
RAP target

Этап 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-приложения.

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
Стартовая конфигурация RAP

Ну а теперь можно запустить браузер и перейти на http://localhost:8000/rap?startup=controls, чтобы познакомиться с демонстрационным скриншотом панели управления RAP. Этот пример основан на хорошо известном ControlExample из набора SWT Examples.

Рисунок 4. Панель управления RAP
Панель управления RAP

Примеры приложений

Рассмотрим два примера, в основе которых лежат шаблоны клиентской платформы RCP (Rich Client Platform), предоставляемые средой программирования PDE.

Пример "Hello World"

У программистов уже стало доброй традицией приводить в качестве иллюстрации программу, которая выдает сообщение "Hello World". Начнем с того, как создать такое простое RAP-приложение.

Рисунок 5. "Hello World" в исполнении RAP
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
RAPRCP
OSGi (на стороне сервера)OSGi
Standard Widget Toolkit (SWT)RAP Widget Toolkit (RWT)
JFaceJFace
WorkbenchWeb Workbench
Рисунок 6. RCP Mail
RCP Mail
Рисунок 7. RAP Mail
RAP Mail

Заключение

При помощи нескольких простых примеров и демонстрационных скриншотов статья знакомит читателей с платформой RAP. RAP позволяет разработчикам, не переучиваясь, использовать Eclipse для создания функционально насыщенных интернет-приложений (Rich Internet Applications). RAP, кроме того, дает возможность организовать разрабатываемый код таким образом, чтобы он мог исполняться как локальным (RCP), так и удаленным (RAP) образом. По существу, RAP ставит Eclipse в один ряд с браузерами и Web 2.0.


Загрузка

ОписаниеИмяРазмер
Пример кодаos-eclipse-richajax.zip52 КБ

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=302549
ArticleTitle=Rich Ajax Platform: Часть 1. Введение
publish-date=04232008