Вторая волна разработки Java-приложений: Знакомство с Google App Engine

Быстрое создание Web-приложений при помощи Groovy, Eclipse и JDO

Открытые технологии и разнообразие инфраструктур постепенно меняют отличительные черты разработки на Java, позволяя создавать приложения быстрее и с меньшими затратами. В этой серии Эндрю Гловер, авторству которого принадлежит термин вторая волна разработки Java-приложений, рассказывает о движущей силе этого процесса, описывая некоторые характерные средства и технологии. Эта статья, первая в данной серии, приветствует начало второй волны Java-разработки, поясняя, как максимально эффективно использовать ее отличительные технологии при помощи платформы Google App Engine для Java.

Эндрю Гловер, президент компании, Stelligent Incorporated

Эндрю ГловерЭндрю Гловер является президентом компании Stelligent Incorporated , которая помогает другим фирмам решать проблемы качества программного обеспечения. Для этого используются эффективные стратегии тестирования и технологии непрерывной интеграции, которые позволяют коллективам разработчиков постоянно контролировать качество кода, начиная с ранних стадий разработки. Просмотрите блог Энди , там можно найти список его публикаций.



28.03.2011

Вселенная Java – это целый мир, включающий в себя богатое разнообразие разработчиков, компаний, а главное – приложений, многие из которых эксплуатируются в течение более чем десяти лет. Сообщество Java вложило немало денег, времени и усилий в платформу Java, в результате чего мы теперь имеем такое изобилие открытых и коммерческих технологий, средств и законченных решений.

Эти бесчисленные вложения в платформу Java незаметно преобразовали процесс разработки Java-приложений. В настоящее время существуют следующие ключевые тенденции, которые стремительно меняют его характерные черты:

Об этой серии

Характерные черты разработки на Java существенно изменились с моменты первого релиза платформы. Благодаря зрелости открытых инфраструктур и аренде надежных сред развертывания, есть возможность собирать, тестировать и поддерживать Java-приложения без серьезных временных и денежных затрат. В этой серии Эндрю Гловер описывает ряд технологий, лежащих в основе новой парадигмы создания приложений на Java.

  • использование на 100% технологий с открытым кодом для создания приложений;
  • возможность аренды инфраструктуры, требующейся на всех стадиях жизненного цикла приложений, в том числе их эксплуатации.

Ни один из аспектов явления, которое я называю второй волной Java-разработки, не является новым или революционным. Тем не менее, лежащие в его основе технологии достигли той степени зрелости, при которой стало возможно создавать более совершенные приложения быстрее и дешевле, чем когда бы то ни было за всю историю Java. Разумеется, это один из важнейших факторов для компаний во всем мире.

Эта статья открывает новую серию, в которой подробно рассматривается вторая волна разработки Java-приложений. Вы узнаете о разработке и развертывании Web-приложений на таких платформах, как Amazon EC2 и Google App Engine при помощи CouchDB (которую называют базой данных для Web), а также других средств и технологий, предоставляющих возможности для сборки, тестирования и развертывания систем в рекордно короткие сроки и с минимальными затратами.

В первой статье мы поговорим о платформе Google App Engine (см. раздел Ресурсы). Вы познакомитесь с ней на примере неувядаемого приложения типа "Здравствуй, мир!", а также узнаете о том, как создавать Web-приложения при помощи Groovy, JDO (Java Data Objects) и специального встраиваемого модуля (плагина) App Engine для Eclipse. Однако вначале следует обсудить коммерческое значение второй волны Java-разработки.

Быстро и дешево

Слова быстро и дешево не так часто произносятся в контексте разработки приложений на Java. Как правило, они ассоциируются с созданием менее серьезных приложений – вотчиной небольших компаний с ограниченными ресурсами. Однако "сермяжная правда" заключается в том, что IT-расходы часто занимают центральное место в бюджете как больших, так и маленьких компаний. Это служит отличной мотивацией к снижению этой статьи расходов с максимальным сохранением коммерческой выгоды.

Именно с этой точки зрения вторая волна Java-разработки представляет наибольший интерес. Благодаря множеству открытых библиотек, инфраструктур и даже готовых решений компании могут быстрее создавать программные системы, поскольку им больше не приходиться писать такой объем кода, как ранее. Десять лет назад, когда я только начинал свою карьеру Java-разработчика, выбор доступных библиотек и инфраструктур был значительно беднее, а сами технологии были, как правило, коммерческими. Приходилось покупать среду разработки (IDE), СУБД, инфраструктуру объектно-реляционного отображения (более того, даже драйвер для подключения к базе данных мог стоить денег) и, разумеется, компьютеры для развертывания приложения. А что теперь? Высококачественные технологии, чьи возможности с лихвой покрывают все перечисленное выше, доступны бесплатно.

Более того, вы можете арендовать платформы для развертывания приложений, такие как EC2от Amazon и Google App Engine, что обходится значительно дешевле, чем покупка всей необходимой инфраструктуры.

Создавать, покупать или арендовать? Вот в чем вопрос

Многие компании имеют собственное аппаратное обеспечение для эксплуатации приложений, таких как базы данных, серверы приложений, системы управления изменениями, или для отслеживания недостатков. Тем не менее, в настоящее время без всей этой аппаратуры вполне можно обойтись, развернув программное обеспечение в виде сервисов на сторонней инфраструктуре.

Сегодня у вас есть возможность аренды за небольшую плату полного набора средств, необходимых для организации процесса разработки программного обеспечения, что позволит освободить компанию от расходов на необходимую аппаратуру. Например, вместо покупки сервера для системы управления изменениями, такой как Subversion или Git (кстати, обе эти системы распространяются с открытым исходным кодом), вы можете использовать публичный сервис с аналогичными функциями, например GitHub. Компания, поддерживающая GitHub, предоставляет все необходимое аппаратное обеспечение, взимая за это определенную плату (как правило, помесячную) с компаний-пользователей. По аналогичным принципам можно арендовать системы отслеживания недостатков, управления автоматизированными тестами и требованиями, например, Hosted JIRA или Pivotal Tracker.

Все то же самое относится к аппаратному обеспечению, на котором выполняются ваши собственные приложения. Вы можете избавиться от старых компьютеров, на которых работает некоторое Web-приложение, перенеся его на инфраструктуру, предоставляемую Amazon, Google или другими компаниями на этом рынке. Эти компании позволяют арендовать аппаратное обеспечение в различных масштабах для хостинга Web-приложений. Более того, они берут на себя вопросы обеспечения масштабируемости, резервного копирования и даже безопасности. Вы только представьте себе на секунду: Amazon и Google давно "собаку съели" на этих вопросах, прочно заняв лидирующие позиции в области эффективных платформ для развертывания приложений. Это правда, от нее никуда не деться.

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

В общем, "быстро и дешево" более не означает "низкокачественно". Как раз наоборот, тактика второй волны разработки Java-приложений негласно подразумевает наличие грамотно организованного процесса обеспечения качества приложений.


Один день с Google App Engine

Google App Engine – это полнофункциональная платформа для создания и развертывания Web-приложений, написанных на Java или Python, на расширяемой инфраструктуре компании Google. Она не требует покупки лицензии (если, конечно, вы не используете библиотеки с коммерческими лицензиями), а также немедленной платы за использование канала или дискового пространства. Инфраструктурой App Engine можно пользоваться на 100% бесплатно до тех пор, пока ваше приложение не достигнет определенного порога интенсивности использования, не станет занимать 500 МБ места на диске и, цитируя Google, не начнет потреблять "процессорного времени и пропускной способности канала, достаточных для обслуживания примерно 5 миллионов посещений в месяц". Совершенно очевидно, что к тому моменту как Google начнет взимать с вас плату, ваше приложение уже достигнет существенной популярности.

Создать первое приложение и развернуть его на платформе Google App Engine невероятно просто. Google создал специальный плагин для Eclipse, который берет на себя большую часть работы. Более того, он включает в себя основные компоненты приложения "Здравствуй, мир!" на основе сервлетов, что поможет вам начать работать с платформой. Развертывание этого приложения было одной из тем недавней вводной статьи Рика Хайтауэра Платформа Google App Engine, часть 1: Знакомство (в этой статье также приводятся скриншоты приложения). Если вы еще не проработали примеры, приведенные в статье Рика, то выполните следующие действия.

Версионность

App Engine позволяет присваивать номера версий, задаваемых в строковом виде, при развертывании приложений. Это удобно при поддержке нескольких релизов одной системы. Вы можете указывать, какая версия является основной при помощи URL и информационной панели Google (учтите, что все развернутые версии приложения остаются доступными по своим URL до тех пор, пока вы явным образом их не удалите). Номер версии необходимо указывать при каждом развертывании вашего проекта на платформе Google. Строка с номером версии не должна включать точки, например, версия "1.1" является некорректной, в отличие от "1-1". Версию можно указывать в файле appengine-web.xml, который находится в каталоге war/WEB-INF, созданном в момент инициализации нового проекта. Для самого первого развертывания версию вручную задавать необязательно, т.к. она генерируется автоматически и находится в первой строке appengine-web.xml.

  1. Создайте учетную запись Google App Engine (она предоставляется бесплатно), нажав на ссылку Sign up под заголовком Getting Started на странице http://code.google.com/appengine/.
  2. Загрузите плагин Google App Engine для Eclipse с сайта http://code.google.com/appengine/downloads.html и установите его.
  3. Создайте новый проект, нажав на кнопку New Web Application Project (проект нового Web-приложения) в Eclipse. При этом на экране появится окно, в котором следует выбрать пункт Use Google Web Toolkit (использовать инструментарий GWT). Далее присвойте проекту название и задайте имя пакета.
  4. Выберите ваш проект в иерархии и нажмите на кнопку Deploy App Engine Project (развернуть проект на платформе App Engine).
  5. Введите параметры вашей учетной записи (той самой, которую вы создали на шаге 1).
  6. Свяжите ваш локальный проект с идентификатором приложения, созданным в момент инициализации учетной записи App Engine. Всего у вас может быть до 10 идентификаторов.
  7. Нажмите на кнопку Deploy (развернуть). При этом в консоль Eclipse будет выведено множество текстовых сообщений (плагин берет на себя большую часть работы по подготовке классов, необходимых для использования сервиса хранения данных в инфраструктуре Google). По окончании развертывания вы должны увидеть сообщение "Deployment completed successfully" (развертывание успешно выполнено).
  8. Перейдите на страницу своей учетной записи Google и найдите ссылку Versions (версии) на информационной панели. На ней вы должны увидеть развернутую версию приложения и ее URL. Нажмите на этот URL, а затем на ссылку, связанную с вашим сервлетом, и вы увидите простенькое, но столь отрадное текстовое сообщение "Hello, world" (Здравствуй, мир).

Сокращение объема кода при помощи грувлетов

Итак, вы успешно развернули свое первое приложение на платформе Google App Engine, не написав ни строчки кода. По правде говоря, если вы планируете использовать возможности App Engine, то код писать все же придется, но помните, что вы можете задействовать множество готовых решений. К таковым относятся предоставляемые Google сервисы, например, сервис хранения данных или управления учетными записями, а также библиотеки с открытым исходным кодом, которые были перенесены на инфраструктуру Google. Все эти решения позволяют вам сократить объем собственного кода, а значит – сократить число ошибок.

Одной из моих любимых открытых библиотек (ее даже точнее было бы назвать платформой), которая практически всегда помогает сократить объем кода при создании приложений, является Groovy (см. раздел Ресурсы). Команда разработчиков Groovy недавно выпустила версию платформы, совместимую с Google App Engine, благодаря чему вы можете заменить сервлеты грувлетами (Groovlets), сделав код более лаконичным. Грувлеты представляют собой простые скрипты на Groovy, выполняющие схожие с сервлетами функции. Поскольку вы уже знаете, как выглядит сервлет, печатающий строку "Здравствуй, мир!", пришло время рассмотреть аналогичный грувлет, код которого, как вы скоро убедитесь, будет значительно короче.

Развертывание грувлета на платформе Google App Engine при помощи плагина для Eclipse сводится к выполнению следующих простых шагов.

  1. Загрузите последнюю версию Groovy (на момент написания этой статьи таковой являлась 1.6.3) с сайта http://groovy.codehaus.org/Download.
  2. Поместите файл groovy-all-1.6.3.jar в каталог war/WEB-INF/lib внутри вашего приложения для App Engine. Кстати говоря, в этот каталог вы можете помещать все библиотеки, которые требуются для работы вашего приложения (при этом существуют некоторые тонкости, о которых мы поговорим позже).
  3. Добавьте содержимое листинга 1 в файл web.xml в каталоге war/WEB-INF. Эти строки связывают грувлеты с адресами запросов.
    Листинг 1. Связывание URL с грувлетами в файле web.xml
    <servlet>
     <servlet-name>GroovyServlet</servlet-name>
     <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
     <servlet-name>GroovyServlet</servlet-name>
     <url-pattern>*.groovy</url-pattern>
    </servlet-mapping>
  4. Создайте директорию groovy, в которой будут храниться грувлеты, в каталоге WEB-INF. В этой директории создайте новый файл под названием helloworld.groovy и поместите в него строку println "Hello, Groovy baby!"
  5. Измените версию вашего приложения на, например, 1-1 и разверните его еще раз. Теперь перейдите по URL приложения на информационной панели, а затем нажмите на ссылку /helloworld.groovy в браузере. Вы должны увидеть очаровательное сообщение, выведенное Groovy на платформе Google.

Это было несложно, не так ли? Все, что вам пришлось сделать - это добавить JAR-файл Groovy, изменить web.xml, создать директорию groovy и грувлет, а также развернуть приложение. Вы оценили, насколько короче код грувлета по сравнению с сервлетом, который выполняет те же действия? Если у вас есть выбор, писать и поддерживать класс с большим или малым объемом кода, но одной и той же функциональностью, что вы предпочтете?


Groovy + Java = работающее приложение. Быстро

Далее мы рассмотрим использование Groovy совместно с Google App Engine для быстрого создания работающего приложения. Для этого нам понадобится простая HTML-страница, грувлет, а также Java-класс на основе JDO для сохранения информации о событиях (в данном случае, соревнованиях по триатлону). Приложение будет простым, но вы увидите, насколько легко можно его расширять, добавляя новые функции. Разработка новой функциональности с использованием различных технологий будет описана в последующих статьях.

Быстрое создание классов для работы с JDO

Платформа Google App Engine предоставляет возможности сохранения данных при помощи JDO – стандартной Java-технологии для хранения и манипулирования данными (см. раздел Ресурсы). Для большинства Java-разработчиков хранение данных подразумевает работу с реляционной базой данных, однако в случае работы с App Engine используется специальная закрытая технология BigTable, которая не является реляционной. В то же время это не имеет большого значения, поскольку Google максимально скрывает детали сохранения атрибутов данных. Главное – то, что вы можете использовать обыкновенные Java-объекты (или, как в нашем случае, объекты Groovy) для манипулирования данными аналогично тому, как вы делали бы это в любом другом приложении. Единственное условие заключается в том, что необходимо использовать JDO (Hibernate, являющийся, вероятно, наиболее популярной инфраструктурой ORM для Java, несовместим с App Engine).

JDO - это довольно простая технология. При работе с ней вы создаете объекты POJO (простые Java-объекты), возможно, связанные с другими экземплярами, и помечаете их специальными аннотациями @PersistenceCapable на уровне классов. Эта аннотация указывает на то, что объекты отмеченного класса являются сохраняемыми в хранилище данных. При этом сохраняемые поля следует отметить аннотацией @Persistent. Например, допустим, что нам требуется сохранять информацию о соревнованиях по триатлону (пока мы ограничимся только самими событиями, игнорируя их результаты). Каждое соревнование должно иметь название, описание, указывающее на вид триатлона, а также дату. При этом POJO-класс сохраняемых объектов будет выглядеть так, как показано в листинге 2.

Листинг 2. Простой класс JDO, описывающий соревнование по триатлону
import java.util.Date;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.IdentityType;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Triathlon {

 @Persistent
 private Date date;

 @Persistent
 private String name;

 @Persistent
 private String description;

}

Вне зависимости от модели данных, будь она реляционной или той, что используется в BigTable, хранение данных подразумевает наличие ключей, которые гарантируют уникальность элементов данных и позволяют избегать конфликтов. Например, в нашем случае роль ключевого атрибута может играть название соревнования по триатлону. Если несколько соревнований могут называться одинаково, то ключом может быть сочетание названия и даты проведения. Какие бы атрибуты вы ни выбрали на роль ключа, вам необходимо это указать в классах JDO при помощи аннотации @PrimaryKey. Кроме того, вы можете выбрать стратегию ручной или автоматической (т.е. выполняемой инфраструктурой Google) генерации ключей. Мы выберем второй вариант, максимально упростив его: ключом будет являться атрибут типа Long, значение которого будет генерировать Google на основе заданной стратегии. Пример добавления ключевого атрибута показан в листинге 3.

Листинг 3. Добавление первичного ключа в класс JDO
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.jdo.annotations.IdentityType;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Triathlon {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Long id;

 @Persistent
 private Date date;

 @Persistent
 private String name;

 @Persistent
 private String description;

 public Triathlon(Date date, String name, String description) {
  super();
  this.date = date;
  this.name = name;
  this.description = description;
 }

 //...здесь находятся set- и get-методы

 public String toString() {
  return ReflectionToStringBuilder.toString(this);
 }

 public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(this);
 }

 public boolean equals(Object obj) {
  return EqualsBuilder.reflectionEquals(this, obj);
 }
}

Как видно из листинга 3, JDO-объекты, описывающие соревнования по триатлону, содержат ключевой атрибут, значение которого генерируется инфраструктурой Google. Кроме того, мы добавили несколько стандартных методов (toString, hashCode и equals), которые не только добавляют полезную функциональность, но и сильно облегчают задачи журналирования и отладки. Вместо написания кода этих методов мы воспользовались библиотекой commons-lang из проекта Apache (см. раздел Ресурсы). Наконец, класс также включает конструктор, который существенно упрощает создание инициализированных объектов по сравнению с вызовом большого числа set-методов.

В данном примере класс JDO был специально сделан максимально простым (причем для краткости были опущены get- и set-методы, а также связи). Хранение и манипулирование данными в App Engine подразумевает, что вы просто создаете модель своей предметной области, добавляя к ней ряд аннотаций. Все остальное Google берет на себя.

После добавления аннотаций к классам сохраняемых объектов нам остается один последний шаг. Он заключается в получении ссылки на объект типа PersistenceManager, необходимый для взаимодействия с инфраструктурой хранения данных. Это стандартный класс в JDO, выполняющий действия, прямо следующие из его названия: сохранение, изменение, выборку и удаление объектов из хранилища данных. Другими словами, его функциональность аналогична классу Session в Hibernate. Экземпляр этого класса создается при помощи объекта-фабрики (PersistenceManagerFactory). Данная фабрика представляет собой достаточно тяжеловесный объект, поэтому Google советует создавать ее в виде синглетона, к которому должны направляться все запросы на создание экземпляров PersistenceManager. Пример создания такого синглетона приведен в листинге 4.

Листинг 4. Простой класс-синглетон, создающий экземпляры PersistenceManager
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;

public class PersistenceMgr {

 private static final PersistenceManagerFactory instance =
   JDOHelper.getPersistenceManagerFactory("transactions-optional");

 private PersistenceMgr() {}

 public static PersistenceManager manufacture() {
  return instance.getPersistenceManager();
 }
}

Как видите, наш класс PersistenceMgr  довольно прост. Его единственный метод, manufacture, возвращает экземпляр PersistenceManager, полученный от единственного объекта PersistenceManagerFactory. Также обратите внимание на отсутствие кода, указывающего на использование инфраструктуры Google, в листинге 4 и других примерах, демонстрирующих работу с JDO. Все примеры оперируют стандартными классами и интерфейсами JDO.

Оба класса, показанные в примерах выше, находятся в каталоге src. Кроме того, следует добавить библиотеку commons-lang в каталог war/WEB-INF/lib.

Итак, создав простой POJO-класс на основе JDO для хранения событий, а также удобный в использовании класс PersistenceMgr, пора переходить непосредственно к разработке приложения. Вначале следует реализовать возможность ввода информации о соревнованиях по триатлону.


Ввод данных через Web-интерфейс

Большинство приложений используют HTML-формы для ввода данных, а затем пересылают их серверному коду на обработку. Разумеется, существует множество особенностей, но этот принцип остается неизменным вне зависимости от используемых технологий и инфраструктуры. В этом смысле в Google App Engine нет ничего нового, причем мы уже создали все серверные ресурсы, необходимые для сохранения данных. Все, что нам осталось — это создать форму для ввода информации, а также связать ее с серверным обработчиком. Выражаясь в терминах парадигмы MVC (Model-View-Controller), нам требуется контроллер, роль которого часто берут на себя сервлеты. Однако вместо них мы будем использовать грувлеты, поскольку в этом случае придется писать меньше кода.

Сама HTML-форма достаточно проста. Она описывается в несложной HTML-странице, на которой используются несколько каскадных таблиц стилей (CSS). Благодаря этим стилям форма выглядит более похожей на страницы приложений Web 2.0, чем на те, которые использовались десять лет назад (рисунок 1).

Рисунок 1. Простая форма для ввода данных
A simple HTML form

Как видно из рисунка 1, форма позволяет вводить название, описание и дату соревнования. Дата, однако, имеет собственную структуру, состоящую из трех полей.

Быстрое создание грувлетов

Грувлеты превращают создание контроллеров в тривиальную задачу. Они до минимума сокращают объем требующегося кода и автоматически предоставляют доступ к необходимым объектам. Внутри грувлета у вас есть неявный доступ к объектам, представляющим клиентский запрос и ответ сервера (request и response соответственно). Грувлет для нашего приложения, извлекающий все атрибуты из клиентского запроса, который был отправлен через HTML-форму при помощи метода request.getParameter("name"), показан в листинге 5.

Листинг 5. Пример грувлета
def triname = request.getParameter("tri_name")
def tridesc = request.getParameter("tri_description")
def month = request.getParameter("tri_month")
def day = request.getParameter("tri_day")
def year = request.getParameter("tri_year")

В ранее созданном JDO-классе содержится поле типа Date, в то время как контроллер в листинге 5 извлекает целых три разных значения типа Date. Вследствие этого необходим объект DateFormatt  для преобразования комбинации "месяц, день, год" в единый экземпляр Date (листинг 6).

Листинг 6. Пример преобразования даты
def formatter = new SimpleDateFormat("MM/dd/yyyy")
def tridate = formatter.parse("${month}/${day}/${year}")

Наконец, получив всю информацию, отправленную клиентом через HTML-форму, мы можем сохранить ее в хранилище данных Google благодаря классу JDO и объекту PersistenceMgr из листинга 4. Пример приведен в листинге 7.

Листинг 7. Использование JDO для сохранения данных
def triathlon = new Triathlon(tridate, triname, tridesc)
def mgr = PersistenceMgr.manufacture()

try {
 mgr.makePersistent(triathlon)
} finally {
 mgr.close()
}

Вот и все! Разумеется, в это приложение можно добавлять множество других страниц, например, для сохранения результатов соревнований, поэтому, вероятно, будут использоваться другие формы для ввода дополнительной информации (типа "мастера"). Однако главный вывод заключается в том, что, написав несколько фрагментов кода, можно быстро создать простое Web-приложение, сохраняющее данные внутри инфраструктуры Google при помощи классов JDO (написанных на Java) и грувлетов (написанных на Groovy). При этом для развертывания приложения достаточно указать номер версии в файле appengine-web.xml и нажать на кнопку Deploy.

Само демонстрационное Web-приложение, содержащее всего одну форму ввода, не потрясает воображение, но гораздо интереснее то, что мы только что развернули его в распределенной, децентрализованной среде. При этом не пришлось запускать Web-контейнер и даже указывать, где именно должно производиться развертывание. С одинаковым успехом приложение может быть развернуто в Калифорнии, на моем жестком диске или на Луне. Основная прелесть технологии в том, что это не имеет значения: где бы приложение ни работало, Google берет на себя его обеспечение. Полностью. Более того, Google самостоятельно решает проблемы глобализации, позволяя вам быть уверенными в том, что для пользователей в Индии ваше приложение будет функционировать так же, как для, скажем, аргентинцев.

При всех перечисленных выше достоинствах вам все же необходимо держать в голове некоторые вещи. Во-первых, инфраструктура Google поддерживает не все Java-технологии. Ее ограничения чем-то напоминают ограничения первоначальной версии J2ME, выпущенной несколько лет назад. App Engine совместим не со всеми базовыми библиотеками Java или библиотеками с открытым кодом. В частности, как упоминалось ранее, вы не сможете использовать Hibernate (в основном потому, что в App Engine нет реляционных баз данных). Во-вторых, у меня были определенные трудности с использованием открытых библиотек, работающих с кодировкой base64 (вместо этого Google предлагает использовать свой сервис URL Fetch). Помните, что App Engine – это платформа, поэтому вам придется создавать приложения специально для нее и в течение какого-то времени у вас может не быть пути назад.


Будущее уже наступило

Алан Кей (Alan Kay), один из родоначальников объектно-ориентированного программирования, однажды сказал: "Лучший способ предсказать будущее – изобрести его". В этом я с ним полностью согласен. Вне зависимости от того, что разные люди понимают под будущим Java-технологий, я считаю, что оно уже наступило.

Как вы могли заметить, Google App Engine – это и есть платформа будущего, однако вам придется считаться с ее законами. Учтите, что я затронул лишь несколько аспектов работы с App Engine, в то время как она предоставляет весьма широкие возможности. При этом существуют альтернативные решения для тех, кому требуется больше гибкости (например, если вы не можете жить без Hibernate или реляционных баз данных) в сочетании с возможностью аренды сторонней инфраструктуры. Одним из таких решений является Amazon EC2, представляющий собой виртуальный сервер на распределенной платформе. О нем мы поговорим в следующей статье серии о второй волне Java-разработки.

Ресурсы

Научиться

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

Комментарии

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=Технология Java
ArticleID=643555
ArticleTitle=Вторая волна разработки Java-приложений: Знакомство с Google App Engine
publish-date=03282011