null

Первое знакомство с ICEmobile

Наличие интерфейса для мобильных устройств - одно из наиболее часто возникающих требований к современным информационным системам. Платформа Java EE пока что не включает в себя специфицированных инструментов для создания мобильных интерфейсов, так что перед разработчиком возникает проблема выбора технологии, на которой создать такой интерфейс получится наиболее быстро и удобно. В этой заметке я расскажу о фреймворке ICEmobile, который позволяет создавать мобильные приложения на базе технологии JavaServer Faces.

Требования к фреймворку

Тут можно выделить три важных момента:

  • Во-первых, хочется, чтобы приложение выглядело "родным" на конкретной мобильной платформе.
  • Во-вторых, т.к. мы работаем на платформе Java EE, хочется, чтобы наше приложение было максимально интегрировано с этой платформой и использовало все её "плюшки" и "вкусности" (например, dependency injection для EJB-компонетов).
  • В-третьих, очень не хочется вносить в наше приложение изменения при портировании его с одной мобильной платформы на другую. В идеале хочется их вообще не вносить :)

Понятно, что первому требованию наилучшим образом удовлетворяют SDK, предоставляемые самими разработчикаим мобильных ОС, но в этом случае нам придётся писать отдельное приложение под каждую платформу. Второму и третьему требованиям полностью соответствует JSF, но он не предоставляет никаких специальных инструментов для создания именно мобильных приложений, т.е. "чистый" JSF нам придётся "допиливать" под мобильные приложения самостоятельно. Делать это самостоятельно, понятное дело, не очень хочется, да и не надо - к счастью, существуют наборы JSF-компонентов (ICEmobile, PrimeFaces Mobile), которые решают эту задачу.

Почему именно ICEmobile?

ICEmobile - это новый фреймворк от разработчиков ICEfaces, который пытается соответствовать всем трём перечисленным выше требованиям. Он интересен, в первую очередь, двумя "уберфичами", отличающими его от других подобных фреймворков:

Во-первых, противоречие между первым и вторым требованиями (из приведённого выше списка) в нём решено довольно изящным образом - само приложение является веб-приложением, но может исполняться не только в браузере, но и в специальном контейнере, который выпускается свой для каждой конкретной мобильной платформы. Т.е. задача обеспечения "родного" внешнего вида и возможности использования аппаратных средств устройства решается не программистом, а разработчиками контейнера. Более того, контейнер позволяет нам использовать нам аппаратные возможности устрйства (например, камеру и микрофон) прямо в нашем веб-приложении с помощью специальных компонентов.

Во-вторых, в состав ICEmobile входит технология CloudPush, которая позволяет нам использовать механизмы системных оповещений мобильных платформ. Причём существует возможность отображения таких оповещений даже когда наше приложение не запущено.

Помимо этого, надо отметить, что ICEmobile отлично интегрируется с распространёнными Java IDE (есть плагины для Eclipse и NetBeans), так что начать разрабатывать на нём очень просто.

Архитектура приложения

Приложение на базе ICEmobile - это обычное JSF-приложение, состоящее из xhtml-страниц с расположенными на них компонентами и managed beans, содержащих обработчики событий. Единственное его отличие от других JSF-приложений - то, что оно использует компоненты ICEmobile (по умолчанию им соответствует префикс "mobi"). При этом, вовсе не обязательно, чтобы ICEmobile-приложение использовало только mobi-компоненты - единственное ограничение тут в том, что "внешние" компоненты могут выглядеть чужеродно на мобильном устройстве - к ним стили ICEmobile применяться не будут.

Возможны два варианта запуска приложения - в браузере и в специальном контейнере. В первом случае "нативные" компоненты, использующие аппаратные возможности устройства, а также CloudPush работать не будут. В настоящий момент доступны контейнеры для Android, iOS и BlackberryOS.

Внешний вид компонентов можно задать с помощью тега deviceStylesheet. Если не указывать скин в явном виде, то фреймворк будет выбирать его автоматически, исходя из того, с какого устройства происходит обращение к устройству. В настоящий момент доступно 5 скинов - два для Android (версий 2 и 3), два для iOS (для iPhone и iPad) и один для BlackberryOS.

Более подробно про компоненты и темы ICEmobile я расскажу в одной из следующих заметок.

С чего начать разработку?

Начать разработку проще всего с разработки тестового HelloWorld-приложения. Для этого нам понадобятся:

В качестве примера посмотрим, как создать новое ICEmobile-приложение в IDE NetBeans:

0. Ставим NetBeans, сервер приложений (GlassFish и Tomcat идут в комплекте с IDE), плагины ICEfaces и ICEmobile.

1. Запускаем NetBeans, кликаем "Создать новый проект":

Новый проект

2. Выбираем категорию "Java Web", тип приложения - "Web Application":

Веб-приложение

3. Выбираем имя приложения, остальные параметры не трогаем:

Имя и местоположение

4. В следующем окне мастера все параметры оставляем в значениях по умолчанию. Кликаем "Далее".

5. В списке фреймворков выбираем "JavaServer Faces". На вкладке "Компоненты" устанавливаем флажок "ICEfaces 3.0.X". Кликаем кнопку "Больше" справа от этого флажка:

Используемые фреймворки

6. В появившемся всплывающем окне устанавливаем флажок "ICEmobile":

Добавляем компоненты ICEmobile в приложение

7. Кликаем "OK", кликаем "Готово".

Всё! Приложение создано, можно начинать "играться" с компонентами.

Что дальше?

После того, как мы создали первое тестовое приложение, можно попытаться запустить его в контейнере на каком-нибудь мобильном устройстве.

Документацию и демки компонентов можно посмотреть на официальном сайте проекта. Помимо этого, можно воспользоваться демонстрационным проектом, который я подготовил для своего доклада на JavaOne 2012 (а ещё его можно использовать как шаблон для создания своего проекта).

Коротко о себе:

Работаю ведущим программистом в компании Tune IT и ассистентом кафедры Вычислительной техники в Университете ИТМО .

Занимаюсь проектами, связанными с разработкой разного рода веб-приложений (порталы, CRM-системы, системы электронного документооборота), а также, в рамках научной работы на кафедре, изучаю возможности применения семантического анализа в задачах САПР.