Hello World на Google App Engine

Рубрика: Google, Java | 15 February 2010, 13:38 | juriy

Небольшая заметка о том, как создать и разместить свой проект на сервисе Google App Engine.

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

После того, как вы впервые войдёте в сервис appengine, вам нужно будет подтвердить свою “личность”. Google вышлет на номер указанного вами телефона SMS с текстом вроде Google App Engine Code: 1234567. Лично мне SMSка дошла меньше чем за минуту (такой способ куда лучше бумажной почты, которую Google использует для Adsense). Такая проверка проводится только для первого создаваемого приложения.

Следующий шаг – зарегистрировать имя-идентификатор для приложения.

Теперь регистрация окончена, приступаем к разработке. App Engine работает на Java 6 и именно эта платформа является рекомендуемой, хоть и Java 5 тоже поддерживается. Я навскидку не смог придумать, что может пойти не так, если приложение скомпилированное на Java 5 запустить на JVM шестой версии, но Google’у виднее.

Скачиваем и распаковываем Google App Engine SDK для Java http://code.google.com/appengine/downloads.html.

Теперь дело за малым – написать простое приложение и отправить на сервер :-)

Тут Google оставил меня без материала для заметки, поскольку минимальный Hello World уже есть в комплекте SDK. Хранится он в папке demos\new_project_template. Тут есть и build.xml и статический контент, и сервлет и даже пара файлов с конфигурацией для самых распространённых logging API: Log4J и JUL (java.util.logging). Скопировав содержимое в папку, где будет жить ваш проект, вы получите отличный каркасс для начала разработки. Единственное, что нужно теперь сделать – указать путь к развёрнутому SDK: либо в параметрах при запуске ant либо прямо в build.xml.

Перед тем, как запустить приложение на локальном “эмуляторе” appengine, давайте посмотрим, что ещё есть в “комплекте”. Кроме стандартного web.xml в WEB-INF лежит файл appengine-web.xml – дополнительная конфигурация для движка appengine:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
 <!-- Replace this with your application id
    from http://appengine.google.com -->
 <application>juriytest</application>
 <version>1</version>
</appengine-web-app>

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

Кроме того в src/META-INF находится файл jdoconfig.xml, который является (неожиданно) конфигурацией для JDO – persistance механизма, который используется в среде appengine. Сейчас его трогать не будем, пускай живёт, hello world и без него запустится.
В проекте есть файл index.html, как пример статичного контента и HelloAppEngineServlet.java, который является привычным сервлетом без экзотики.

Чтобы запустить приложение локально выполняем ant runserver из корня тестового проекта.
Для того, чтобы “доставить” приложение на живую платформу нужно использовать утилиту из SDK: bin\appcfg.cmd

appcfg.cmd update www

www тут – путь к “развёрнутому” проекту. Appengine не поддерживает war файлы, а вместо этого работает с директориями с той же структурой. После того, как build.xml собрал для нас проект в папку www указанной выше командой можно загрузить его на appengine.

Пара полезных моментов и “граблей”.

App Engine сохраняет всё что вы напишите в System.out и System.err в логи. При этом e.printStackTrace в логи упорно не попадает. Немного сбивает с толку.

Логи в административном интерфейсе обновляются не моментально, а только через несколько секунд.

Последние грабли стоили жизни моим нервным клеткам. В конфиге appengine указывается версия проекта. Не надейтесь, что если будет указана версия выше текущей развёрнутой, то новая версия заменит старую. Всё обстоит совершенно не так. Новая версия затирает развёрнутую версию с таким же индексом. Затем, пользователь выбирает, какая из версий будет доступна по умолчанию. То есть, я могу развернуть версии 1, 2, 3. После разворачивания версии 3, пользователи видели только версию 1, пока в интерфейсе администратора не будет указана другая.

На этом пока что всё. В следующей заметке опишу, как заставить app engine работать с groovy.

__________
Спонсор заметки: “Идеал”, раскрутка сайта в Украине

Комментариев: 6

6 Responses to “Hello World на Google App Engine”

Комментарии:

  1. dimat

    Еще проще взять Eclipse с их плагином и там все это делается одним кликом – создание приложение, запуск, деплой.

  2. Olostan

    Где-то пол года назад я провел один проект на Google Apps Engine.

    Сразу скажу возможные грабли:
    1. БД одна на все версии. Если от версии к версии менялась структура, то возможны проблемы. Функции “очисить базу” в админки небыло, мы писали свой код для очистки.
    2. Очень часто то, что локально работало быстро, после деплоя работало в 2-5 раз дольше, что повлекло привышение лимита времени выполнения.
    3. Удалить апп нельзя, а лимит аппов небольшой.

    В общем, все решаемо, но довольно много граблей.

  3. olex13

    ага, все кроме source code – одно на все версии: datastore, cron, taskqueue
    а версии на самом деле – мегаудобная штука!

    из недостатков еще: no static IPs, no support for naked domains, no fulltext search

  4. Juriy

    >> No support for naked domains
    Что вы имеете в виду? Приложения, которые разворачиваются на appspot работают как раз на naked домене. Прикручивать собственное доменное имя пока что не пробовал, но не думаю, что с этим возникнут проблемы.

  5. olex13

  6. mux

    BTW, Google App Engine цього року виходить з бети та міняє цінову політику – http://www.rozrobka.com/blog/google/1146.html

Leave a Reply