Введение
Несколько лет назад в области создания Интернет-приложений наметилась тенденция к переходу от стандартных HTML/JavaScript/CSS технологий к платформам, которые позволяют запускать в среде веб-браузера программы, по внешенему виду и поведению не отличающиеся от оконных(desktop) приложений. Такой вид программных продуктов принято называть Rich Internet Applications(RIA), что в переводе обозначает «богатые интернет-приложения». Несмотря на то, что некоторые из технологий RIA выпущены довольно давно(конец 90-х годов), широкое распространение они получили не более 3-4 лет назад.
Разговор об особенностях RIA стоит начать с концептуального отличия от приложений на основе HTML. Обычные сайты-сервисы работают по принципу перехода на другую страницу по гиперссылкам и отправки формы на сервер средствами веб-браузера. Другими словами, работа таких приложений сконцентрирована вокруг клиент-серверной архитектуры с тонким клиентом. HTML, являясь языком разметки документов и отображаемый браузером, идеально подходит для этого. Последовательность действий пользователей представляет собой постоянную отправку запросов на сервер. При таком подходе существует ряд проблем:
- Сохранение пользовательских данных между сеансами работы приложения и их синхронизация с сервером.
- Проблема отправки и получения данных с сервера только по мере необходимости, а не на каждое действие пользователя.
- Проблема запуска приложения при отсутствии подключения к сети.
Какое решение этих проблем предлагает концепция RIA? С точки зрения архитектуры она переводит такие программы в категорию приложений с толстым клиентом. Все RIA имеют схожую особенность: наличие промежуточной части, которая передается по сети клиенту и отвечает за взаимодействие с сервером и отображение пользовательского интерфейса, намного превосходящего HTML-аналоги. На рисунке 1 можно увидеть принципы организации взаимодействия с пользователями в случае HTML и RIA приложений.

Рисунок 1 — Принципы работы HTML и RIA-приложений
Решение проблемы сохранения пользовательских данных происходит за счет средств платформы RIA(платформенно-независимая среда для запуска RIA приложений). Промежуточная часть, загружаемая из сети, обращается к ней для сохранения и чтения информации. Отсюда появляется возможность отправлять и получать данные с сервера только по мере необходимости, за счет кеширования на стороне клиента. Вопрос нестабильного подключения также решаем. Платформы RIA могут выполнить установку приложения на компьютере пользователя. Это означает, что для файлов программы будет отведено место на диске и её можно будет запустить без наличия сети. Таким образом, можно отметить основные отличительные черты RIA:
- на компьютер пользователя загружается клиентская часть приложения, которая отвечает за взаимодействие с сервером и обладает возможностями кэширования данных и работы без подключения к сети;
- запускается в браузере или в виде оконного приложения и требует установки платформы RIA;
Постепенное развитие стандартов сети Интернет привело к реализации подобных технологии на практике. Наиболее известными на данный момент являются следующие:
Название |
Компания-производитель |
Дата выпуска |
Google Web Toolkit(GWT) |
Google Inc. |
2006 |
Adobe Flex/AIR |
Adobe Inc. |
2008 |
JavaFX |
SUN/ORACLE |
2009 |
Silverlight |
Microsoft Corporation |
2007 |
Java Applets |
SUN/ORACLE |
1995 |
Таблица 1 — Наиболее распространенные технологии RIA
Выбор этих продуктов обусловлен распространенностью в Интернет и наличием у пользователей установленных платформ для запуска RIA. В следующих разделах статьи для демонстрации основных технических особенностей каждой технологии будут созданы компактные приложения. Задача программ — получить краткую статистику загрузки сервера приложений через определенные периоды времени и отобразить ее пользователю. В ответ на каждый запрос сервер отправляет следующие данные, упакованные в JSON:
- доменное имя сервера;
- полную емкость выделенной памяти;
- объем свободной памяти;
- максимальный объем памяти;
- количество запущенных потоков.
Такое образом, клиентские части демонстрационных приложений разные, а на стороне сервера их запросы обслуживает Java-сервлет.
Приложение на GWT
Краткое описание технологии. Разработчик RIA создает интерфейс и логику программы на языке Java, а GWT компилирует исходный код в тщательно оптимизированный JavaScript. Файл скрипта подключается к веб-странице и во время загрузки отображает интерфейс приложения. При этом, во-первых, решается проблема наличия особого плагина для браузера — по сути в случае GWT нужно, чтобы было включено выполнение сценариев Javascript(поддерживают все современные браузеры). Во-вторых, GWT обладает большой библиотекой компонентов для создания полноценных RIA и их число постоянно растет, благодаря большому сообществу разработчиков. На базе этих компонентов можно делать традиционные оконные интерфейсы в браузере.
Преимущества:
- Используют меньший, более компактный, кэшируемый код Javascript;
- Автоматически поддерживают браузеры IE, Firefox, Mozilla, Safari и Opera;
- В состав библиотеки входят средства для обработки событий перехода по списку посещенных ранее страниц в браузерах(кнопка «Назад»).
Кроме того, работая в Java, можно использовать:
- Средства отладки, позволяющие отслеживать значения переменных, работать с точками останова и т.д.;
- Автоматизированные модульные тесты (на основе Junit и др.) как в программе, так и в браузере;
Что касается содержимого библиотек, то GWT включает в себя:
- Встроенные компоненты пользовательского интерфейса, которые служат кросс-браузерными строительными блоками приложения;
- Удаленный вызов программного кода помогает с клиент-серверными взаимодействи-ями(RPC, AJAX);
- Средства интеграции кода GWT в существующий код JavaScript;
- Инструменты разработчиков для упрощения взаимодействия с дизайнерами интерфейсов(UIBind).
Недостатки
- Обязательное знание Java. Несмотря на огромную популярность этого языка в создании веб-приложений, новичку, не знающему базовых принципов пользовательских интерфесов Swing или AWT, будет крайне сложно.
- Кроссбраузерность имеет свои подводные камни. Компоненты пользовательского интерфейса, которые входят в состав дистрибутива, тщательно протестированы и действительно работают одинаково во всех браузерах. Однако сообществом выпускаются новые компоненты, к поведению которых в разных средах следует относиться осторожно. Проблема заключается опыте разработчика.
- Скорость работы GWT-компилятора. Это исполняемый класс на языке Java, который в качестве аргументов принимает пути к исходным текстам. В небольшом проекте автора время компиляции доходило до 2 минут. В качестве альтернативы для запуска приложения можно использовать специальный hosted-режимi, когда проект не компилируется, а запускается специальными средствами в выбранном браузере(GWT версии 2.0). Кроме того, можно компилировать проект только для одного браузера, изменив конфигурацию, что уменьшит время сборки.
Фрагмент кода приложения
currentRequest = requestBuilder.sendRequest(query.toString(), new RequestCallback() {
public void onResponseReceived(Request request, Response response) {
pleaseWaitLabel.setVisible(false);
if (response.getStatusCode() == 200 && response.getText() != null && !response.getText().equals("")) {
JSONValue resVal;
JSONObject resObject;
JSONString serverName;
JSONNumber totalMemory;
JSONNumber freeMemory;
JSONNumber maxMemory;
JSONNumber threadCount;
try {
resVal = JSONParser.parse(response.getText());
} catch (JSONException e) {
Window.alert("Ошибка при обновлении статистики. Получены неверные данные");
return;
}
if ((resObject = resVal.isObject()) == null) {
Window.alert("Ошибка при обновлении статистики. Получены неверные данные");
return;
}
if ((serverName = resObject.get("serverName").isString()) == null) {
Window.alert("Ошибка при обновлении статистики. Получены неверные данные");
return;
}
…..............................................................................................................
setServerName(serverName.stringValue());
setTotalMemory(Integer.toString((int) totalMemory.doubleValue()));
setFreeMemory(Integer.toString((int) freeMemory.doubleValue()));
setMaxMemory(Integer.toString((int) maxMemory.doubleValue()));
setThreatCount(Integer.toString((int) threadCount.doubleValue()));
} else {
Window.alert("Ошибка при обновлении статистики. Получены неверные данные");
}
}
public void onError(Request request, Throwable exception) {
pleaseWaitLabel.setVisible(false);
Window.alert("Ошибка при обновлении статистики. Повторите попытку позже");
}
});
Приложение на Flex/AIR
Краткое описание технологии. Adobe Flex это набор утилит для разработки RIA на платформе Adobe Flash с использованием языка ActionScript 3. Flash предоставляет гораздо больше возможностей, чем можно получить от HTML в плане интерактивности. Но тем не менее разработка на Flash это очень сложный процесс для простых программистов. Flash нацелен больше на дизайнеров. Flex убирает этот барьер, предоставляя программный способ разработки RIA. MXML, язык на основе XML, используется для описания формата пользовательского интерфейса и поведения, а ActionScript™ 3, мощный объектно-ориентированный язык программирования, используется для создания логической модели поведения программы-клиента.
Преимущества
Приложения RIA, созданные во Flex, могут работать в обозревателе, использующем ПО Adobe Flash® Player, или как обычная программа, если в ОС установлено кросс-платформенное приложение Adobe AIR™. Благодаря этому, приложения Flex поддерживают работу как со многими распространенными типами обозревателей, так и операционными системами для настольных компьютеров. При использовании AIR приложения Flex могут получать доступ к локальным данным и системным ресурсам ПК. Тем не менее, модель безопасности AIR не допустит повреждения информации пользователя и системных файлов, запуская приложения в изолированной среде. Flash Player и Adobe AIR доступны для свободной загрузки на сайте Adobe.com. На данный момент 99% ПК имеют Flash Player одной из самых последних версий(9 или 10). Создание пользовательского интерфейса происходит с помощью MXML — относительного простого и интуитивно-понятного языка, следовательно опытные разработчики могут освоить его быстро.
Недостатки
- Язык ActionScript был первоначально скриптовым языком для Flash-плеера, который притерпел изменения в Actionscript 3. Как объектно-ориентированный язык ему не хватает массы особенностей, которые Java или .NET разработчики принимают как само собой разумеющееся.
- Количество сторонних библиотек (в частности, open-source) на порядки меньше, чем в Java.
- Несмотря на то, что Flex SDK предоставляется бесплатно, основная среда разработки Flex Builder является коммерческим продуктом.
Фрагмент кода приложения
<mx:HTTPService
contentType="application/x-www-form-urlencoded"
id="service"
method="GET"
resultFormat="text"
showBusyCursor="true"
url="/status"
fault="httpFault(event)"
result="httpResult(event)"
useProxy="false"
/>
public function httpResult(event:ResultEvent):void {
//get the raw JSON data and cast to String
pleaseWaitLabel.setVisible(false);
var jObj:Object = JParser.decode(event.result.toString());
serverNameValueLabel.text = jObj.serverName;
totalMemoryValueLabel.text = jObj.totalMemory;
freeMemoryValueLabel.text = jObj.freeMemory;
maxMemoryValueLabel.text = jObj.maxMemory;
threadCountValueLabel.text = jObj.threadCount;
}
public function httpFault(event:FaultEvent):void {
Alert.show("Ошибка при обновлении статистики, повторите попытку позже");
timer.stop();
}
Приложение Java-апплет
Краткое описание технологии. Java-апплет — это прикладная программа на Java в форме байт-кода. Java-апплеты выполняются в веб-браузере с использованием виртуальной Java-машины (JVM), или в Sun's AppletViewer, автономном инструменте для тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995. Создаются на языке программирования Java, но могут быть написаны и на других языках, которые компилируются в байт‐код Java, таких, как Jython.
Преимущества
- кроссплатформенность;
- апплет поддерживается большинством браузеров;
- он кэшируется в большинстве браузеров, а потому будет быстро загружаться при возвращении на веб-страницу;
- уровень доступа апплета к клиентским данным настраивается пользователем компьютера;
Недостатки
- разработка апплетов требует от программиста среднего уровня знания языка Java, необходимо иметь представление о библиотеках Swing или AWT для создания пользовательского интерфейса;
- он требует установки Java-расширения, которое не во всех браузерах доступно по умолчанию. На данный момент плагин установлен на 90% клиентских ПК;
- для повышения безопасности апплета, ограничивается доступ к пользовательской системе: в частности, он не имеет прямого доступа к диску клиента или буферу обмена;
- некоторые организации допускают только программное обеспечение, установленное администраторами. В результате многие пользователи не могут видеть апплеты по умолчанию.
- апплеты могут потребовать использования определенной версии JRE.
Фрагмент кода приложения
private void updateServerStatus() {
clearStatistics();
pleaseWaitLabel.setVisible(true);
Timer t = new Timer(3000, new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
try {
pleaseWaitLabel.setVisible(false);
URLConnection conn = new URL(url).openConnection();
String json = readStreamToString(conn.getInputStream(), "UTF-8");
JSONObject j = new JSONObject(json);
serverNameValueLabel.setText(j.getString("serverName"));
totalMemoryValueLabel.setText(j.getString("totalMemory"));
freeMemoryValueLabel.setText(j.getString("freeMemory"));
maxMemoryValueLabel.setText(j.getString("maxMemory"));
threadCountValueLabel.setText(j.getString("threadCount"));
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.setRepeats(false);
t.start();
}
Приложение JavaFX
Краткое описание технологии. JavaFX — это платформа для создания RIA, которые могут запускаться на персональных компьютерах и мобильных устройствах. Технология JavaFX позволяет создавать приложения для работы с мультимедийным содержимым, графические интерфейсы пользователя для бизнес-приложений, игры для персональных компьютеров и мобильных устройств, насыщенные графикой, мультимедиа веб-сайты и др. Приложения JavaFX создаются с помощью декларативного языка программирования JavaFX Script. Для разработки приложений на языке JavaFX Script необходимо скачать и установить JavaFX SDK. Из кода, написанного на языке JavaFX Script, можно обращаться к любым библиотекам Java. Поэтому совместное использование языков Java и JavaFX Script позволяет решать разнообразные задачи, например, логика бизнес-приложения может быть написана на Java, а графический интерфейс пользователя — на JavaFX Script. Приложения, написанные на языке JavaFX Script могут запускаться на компьютерах с установленной средой исполнения Java 1.5 и выше. В настоящее время поддерживаются следующие операционные системы: Windows, Mac OS X, GNU/Linux и Solaris.
Преимущества
- Язык JavaFX Script поддерживает использование библиотек Java и позволяет получать компактный код.
Недостатки
- до сих пор остается проблема с запуском на клиентских машинах. JavaFX апплеты не запускаются в браузере Opera, все еще непонятно, что с Linux-системами. Правда это ситуация постепенно исправляется — JavaFX 1.2 по утверждению создателей работает на Ubuntu и OpenSolaris.
Фрагмент кода приложения
var parser = PullParser {
documentType: PullParser.JSON;
onEvent: function (e: Event) {
if (e.type==PullParser.INTEGER and e.name.equals("freeMemory")) {
freeMemoryValueLabel.text = Integer.toString(e.integerValue);
}
if (e.type==PullParser.INTEGER and e.name.equals("maxMemory")) {
maxMemoryValueLabel.text = Integer.toString(e.integerValue);
}
if (e.type==PullParser.TEXT and e.name.equals("serverName")) {
serverNameValueLabel.text = e.text;
}
if (e.type==PullParser.INTEGER and e.name.equals("threadCount")) {
threadCountValueLabel.text = Integer.toString(e.integerValue);
}
if (e.type==PullParser.INTEGER and e.name.equals("totalMemory")) {
totalMemoryValueLabel.text = Integer.toString(e.integerValue);
}
}
}
Приложение Silverlight
Краткое описание технологии. Silverlight предоставляет графическую систему, схожую с Windows Presentation Foundation, и объединяет мультимедиа, графику, анимацию и интерактивность в одной программной платформе. Он был создан чтобы работать с XAML и с языками Microsoft .NET. XAML используется для разметки страниц с векторной графикой и анимацией. В состав платформы входит плагин для браузера, который позволяет запускать приложения, содержащие анимацию, векторную графику и аудио-видео ролики, что характерно для RIA.
Преимущества
- Начиная с версии 2.0, логика программы может быть описана в любом из языков .NET, включая динамические языки программирования такие как Iron Ruby и Iron Python;
- .NET платформа является мощным средством для разработки бизнес-приложений;
- Большое количество сторонних компонентов от Infragistics, Syncfusion, Telerik(коммерческие продукты);
- Большое сообщество .NET разработчиков.
Недостатки
- Silverlight реализован для ОС Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows 7, Mac OS X 10.4, Mac OS X 10.5 и браузеров Internet Explorer 6.0/7.0/8.0, Mozilla Firefox 1.5/2.0/3, Safari 3.1, Google Chrome 3.0. В будущем также планируется поддержка Opera. Существующие расширения для браузеров в других операционных системах пока на стадии предварительного ознакомления.
Фрагмент кода приложения
void refreshStatistics(object o, EventArgs sender)
{
WebClient proxy = new WebClient();
proxy.OpenReadCompleted += new OpenReadCompletedEventHandler(proxy_OpenReadCompleted);
proxy.OpenReadAsync(new Uri(uri));
}
void proxy_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
JsonObject jsObject = (JsonObject)JsonObject.Load(e.Result);
serverNameValueLabel.Text = jsObject["serverName"];
totalMemoryValueLabel.Text = jsObject["totalMemory"].ToString();
freeMemoryValueLabel.Text = jsObject["freeMemory"].ToString();
maxMemoryValueLabel.Text = jsObject["maxMemory"].ToString();
threadCountValueLabel.Text = jsObject["threadCount"].ToString();
}
Выводы
Выводы о сравнении современных технологий RIA и результатах эксперимента по написанию приложений представлены в таблице 2. Далее сравнение по каждому параметру описано более подробно.
Платформа |
GWT |
Flex/AIR |
JavaFX |
Java-апплеты |
Silverlight |
Разработчик |
Google Inc. |
Adobe Inc. |
Sun Microsystems |
Sun Microsystems |
Microsoft |
Язык создания приложений |
Java |
Actionscript |
JavaFX Script |
Java |
C++, C#, Visual Basic, Object Pascal и множество других |
Поддержка браузером клиента |
100% при включенном Javascript |
~97-98% браузеров |
~70% браузеров |
~70% браузеров |
~50% браузеров |
Время изучения для новичка |
3-6 часов |
3-6 часов |
3-6 часов |
3-6 часов |
3-6 часов |
Время на разработку демонстраци- онного приложения |
~1час |
~2 часа |
~3 часа |
~1час |
~3 часа |
Лицензия |
Apache License 2.0 |
Mozilla Public License/Adobe AIR пользователь- ское соглашение |
JavaFX пользователь- ское соглашение |
SUN/ORACLE пользователь- ское соглашение |
Microsoft пользователь- ское соглашение |
Средства разработки |
Eclipse (бесплатно), NetBeans(бес-платно) |
Adobe Flex(коммерчес- кий продукт) |
Eclipse (бесплатно), NetBeans(бес-платно) |
Eclipse(бесплат- но), NetBeans(бес-платно) |
Microsoft Web Developer Studio(бесплат- но) |
Создание интерфейса в графическом редакторе средства разработки |
Да(при наличии коммер- ческого плагина) |
Да |
Нет |
Да |
Да |
Таблица 2 — Сравнение технологий RIA
Время изучения для новичка. Новичком в данном случае считается программист среднего уровня, которые не знаком ни с одной из рассматриваемых технологий. По мнению автора, написание каждого приложение может занять от трех до шести часов, если учесть время установки всех необходимых программ и чтение документации.
Время на разработку демонстрационных приложений. Автор статьи был знаком с тремя технологиями на момент написания приложений, а именно, GWT, Adobe Flex/AIR и Java Applets. Так что максимальное время для одной программы составило 3 часа. Работа с уже известными технологиями продолжалась от одного до двух часов.
Поддержка браузером клиента. О том, что на компьютере клиента установлены необходимые платформы и расширения для запуска RIA можно судить по данным статистики с сайта http://riastats.com. Лидерами охвата аудитории пользователей являются GWT и Adobe Flex/AIR. Это связано с тем, что в первом случае вообще не требуется установки никаких дополнительных программ, а во втором — сказывается широкое распространение Adobe Flash плеера на компьютерах пользователей Интернет.
Далее следуют технологии JavaFX и Java Applets, охватывающие примерно 70% пользователей. Главное условие их работы — наличие установленной JRE на ПК. Библиотеки для JavaFX входят в её состав начиная с версии 1.5, а поддержка апплетов есть уже давно. С технологией Java Applets не было проблем при запуске в браузере В случае с JavaFX автору так и не удалось этого сделать и приложение запускается только в оконном режиме. Возможно это связано с недавним обновлением JavaFX, когда приложения перестали запускаться в браузерах Opera и Firefox последних версий.
Лицензирование и стоимость вхождения для разработчиков.
- GWT выпускается в рамках лицензии Apache License 2.0. Она даёт пользователю право использовать программное обеспечение для любых целей, свободно распространять, изменять, и распространять изменённые копии. GWT можно бесплатно скачать с сайта разработчика. Продукты, написанные с помощью GWT могут иметь любую лицензию.
- Adobe Flex/AIR. Flex SDK доступен по лицензии Mozilla Public License, а Adobe AIR SDK — по пользовательскому соглашению с компанией Adobe. Оба продукта можно бесплатно скачать с сайта разработчика. RIA, написанные с использованием Flex SDK и AIR SDK могут выпускаться в рамках любой лицензии.
- JavaFX SDK распространяется в рамках пользовательского соглашения с компанией SUN/ORACLE. Лицензия не накладывает особых ограничений на распространение приложений на основе JavaFX и они могут быть в том числе и коммерческими.
- Java Applets. Компоненты для работы Java Applets входят в состав библиотеки JRE. Они доступны в рамках пользовательского соглашения с компанией SUN/ORACLE. JRE можно бесплатно загрузить с сайта производителя.
- Microsoft Silverlight выпускается в рамках пользовательского соглашения с компанией Microsoft. Оно не накладывает особые ограничения на написанные с помощью Silverlight SDK программы. Комплект SDK можно бесплатно скачать с сайта Microsoft.
Особенности организации клиент-серверного взаимодействия
Задача получения статистики загрузки сервера в общем случае состоит из двух этапов. Во-первых, осуществление HTTP-запроса к серверу, во-вторых, получение данных из ответа сервера. Для всех примеров за эти действия в приложении отвечают два объекта. Первый осуществляет HTTP-запрос и в случае получения ответа передает данные второму объекту. Далее он извлекает данные статистики из ответа и интерфейс пользователя обновляется.
Компоненты, отвечающие за осуществление HTTP-запроса входят в стандартную библиотеку SDK каждой технологии. Однако с компонентами, извлекающими данные статистики из ответа в формате JSON дело обстоит иначе. Если у GWT, JavaFX и Silverlight они включены в состав SDK, то у Flex/AIR дополнительно использована библиотека JSwoof(www.waynemike.co.uk/jswoof) для работы с JSON, а для Java-апплетов — пакет org.json(http://json.org) для Java.
Код клиент-серверного взаимодействия можно сравнить по количеству строк. Результаты находятся в таблице 3:
Платформа |
GWT |
Flex/AIR |
JavaFX |
Java-апплеты |
Silverlight |
Количество строк кода для организации клиент-сервер-ного взаимодействия |
~40 |
~30 |
~30 |
~20 |
~30 |
Таблица 3 — Сравнение количества строк кода для организации клиент-серверного взаимодействия
Наличие в составе библиотек необходимых компонентов.
Для написания демонстрационных приложений требовались компоненты двух видов:
- визуальные элементы пользовательского интерфейса;
- невизуальные компоненты для организации клиент-серверного взаимодействия.
В таблице 4 рассмотрено наличие необходимых компонентов в составе стандартных SDK.
Технология |
Наличие визуальных компонентов |
Наличие компонентов клиент-серверного взаимодействия |
GWT |
Да |
Да |
Flex/AIR |
Да |
Дополнительно использована JSWoof для работы с JSON |
JavaFX |
Да |
Да |
Java-апплеты |
Да |
Дополнительно использован пакет org.json для работы с JSON |
Silverlight |
Да |
Да |
Таблица 4 — Использование компонентов SDK
В случае Flex/AIR и Java-апплетов для создания примера использованы дополнительные библиотеки, которые не входят в состав стандартных SDK.
Способ описания пользовательского интерфейса
Для описания интерфейсов технологии используют 2 подхода:
- с помощью языка программирования(GWT, Java Applets). В этом случае все компоненты описаны в файле с исходным текстом в виде переменных. На этапе запуска приложения они инициализируются в коде и располагаются в окне приложения.
- декларативным методом, средствами специального языка на основе XML(XAML для Silverlight и MXML для Adobe Flex/AIR) и с помощью JavaFX Script. В исходном тексте соблюдается вложенность компонентов для их последующего расположения на экране. Для Silverlight и Adobe Flex/AIR характерно то, что исходный текст программы и XML-описание интерфейса могут храниться в одном файле.
Подходы, использованные в Silverlight, Adobe Flex/AIR и JavaFX позволяют разделить описание интерфейса и программный код приложения. В этом направлении последняя версия GWT предлагает средство UIBind для организации совместной работы HTML-дизайнеров и программистов. В состав исходных текстов можно включать файлы с HTML-кодом, в которые внедрены элементы пользовательского интерфейса. На этапе компиляции они будут связаны с кодом программы. Это позволяет отдельно работать над дизайном в HTML.
Техническая документация и сообщество разработчиков. Информационные ресурсы, посвященные каждой из технологий можно разделить на три категории:
- официальная техническая документация на сайте разработчика;
- статьи с примерами использования технологий, находящиеся в блогах и других информационных ресурсах;
- форумы, посвященные той или иной технологии.
GWT:
- code.google.com/webtoolkit/ — ресурс разработчиков.
- googlewebtoolkit.blogspot.com — официальный блог о GWT
Adobe Flex/AIR
- www.adobe.com/products/air и www.adobe.com/products/flex — страницы на сайте разработчика, с них можно перейти к блогам, демонстрационным примерам, технической документации
JavaFX:
- javafx.com — официальный сайт разработчиков технологии, полезен тем, что на нем есть ссылки на ресурсы сообщества JavaFX, посвященные документации и примерам программ.
- blogs.sun.com/javafx — блог о JavaFX.
Java Applets:
- java.sun.com/applets — страница на сайте компании SUN/ORACLE, посвященная технологии Java Applets. Там есть техническая документация и примеры приложений, а также ссылки на форумы и другие ресурсы.
Silverlight
- silverlight.net — официальный сайт разработчиков Silverlight.
О заинтересованности разработчиков в той или иной технологии, а значит и создании сообществ можно косвенно судить по количеству проектов, например, в каталоге Google Code(http://code.google.com). С другой стороны, немаловажную роль играет количество предложений о работе по каждой технологии(сайт indeed.com). Данные представлены в таблице 5 и рисунке 2:
Платформа |
GWT |
Flex/AIR |
JavaFX |
Java-апплеты |
Silverlight |
Количество проектов в каталоге Google Code |
1475 |
2388/703 |
119 |
166 |
180 |

Рисунок 2 — Количество вакансий разработчиков RIA
Выбор технологии, наиболее подходящей для решения задачи
По мнению автора, нельзя сказать, что какая-то из технологий является приоритетной для решения поставленной задачи. Дело в том, что в начальных условиях не были оговорены ограничения на ПО клиентских компьютеров, особые режимы работы и т. д. Что касается задачи, то её можно успешно решить с помощью каждой из технологий с одинаковым успехом. Об этом можно судить по написанным демонстрационным приложениям.
Исходные тексты можно скачать здесь(проект InelliJ IDEA 9)