Статьи

CapeDwarf — Google App Engine на Java EE

У меня много лошадей Пройдя весь путь от ранних спецификаций Java EE и выполнив «облачную» экскурсию с Java EE 7, мне было любопытно посмотреть, что в наличии у недавно анонсированного проекта CapeDwarf , чтобы представить платформу Google как сервис, предлагающий « Google App Engine » на предпосылке.

История до сих пор
я играл с App Engine. Это было первое настоящее предложение PaaS для меня в тот день. И мне понравилось. Что мне не нравится, так это то, что вы должны проверить, хорошо ли играет GAE с вашим вкусом Java. В конце июня Google и Red Hat объявили об официальном партнерстве для работы над GAE TCK, которое рано или поздно должно привести App Engine к Wildfly.

Установка и настройка вашей среды
Начнем прямо сейчас. Получить CapeDwarf и поиграть с ним. В ядре есть Wildfly или JBoss AS 7. CapeDwarf является только модулем расширения и должен быть встроен. Есть два основных способа получить его: Grep последняя сборка со страницы загрузок , которая будет бета 5 ( выпущен 2013-07-10) или соберите его самостоятельно. Я попробовал последний способ первым. Он поддерживается очень коротким файлом readme на странице проекта GitHub, но я бы не рекомендовал делать это. Это занимает примерно 30 минут (чистое время сборки), потому что вы также должны собрать AS 7.2.0. Если вы получили zip-дистрибутив, все, что вам нужно сделать, это разархивировать его и запустить сервер с поддержкой CapeDwarf через:

$JBOSS_HOME/bin/standalone.bat/.sh -c standalone-capedwarf.xml

На первый взгляд это похоже на запуск AS 7, потому что это занимает намного больше времени из-за запуска JGroups.
По крайней мере, на моей машине.

После этого вам необходимо добавить пользователя с правами администратора и войти в консоль сервера по адресу
http: // localhost: 9090 /. Затем вы проверяете, есть ли расширение, посетив вкладку «Расширения». Теперь все готово.

Использование примера приложения Guestbook

Все, что осталось сделать, — это запустить выбранную IDE (в моем случае NetBeans) и запустить небольшой демонстрационный проект. Давайте перейдем к примеру с гостевой книгой, которая также является частью
официального gae-sdk . У вас уже должны быть Maven и Java 7. Пример гостевой книги доступен в качестве официального архетипа, и вы можете просто получить его, используя следующую команду mvn:

mvn archetype:generate -B
-DarchetypeGroupId=com.google.appengine.archetypes
-DarchetypeArtifactId=guestbook-archetype -DarchetypeVersion=1.7.7
-DgroupId=net.eisele.demo -DartifactId=guestbook -Dversion=1.0 -Dpackage=net.eisele.demo

Все, что вам нужно с точки зрения зависимостей, находится в центре, поэтому вам даже не нужно настраивать другой репозиторий! Откройте сгенерированный проект прямо сейчас и начните настраивать некоторые вещи. Во-первых, вам нужно изменить
appengine.target.version в
pom.xml на 1.8.3. Далее необходимо добавить соответствующие индексы хранилища данных. Насколько я понимаю, GAE делает это самостоятельно. CapeDwarf, использующий несколько существующих технологий Red Hat, должен получить указание запустить индексы. Добавьте 
файл datastore-indexes.xml в папку
src / main / webapp / WEB-INF / со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="true">
    <datastore-index kind="Greeting" ancestor="true" source="manual">
        <property name="date" direction="asc"/>
    </datastore-index>
 
</datastore-indexes>

Если вы добавите 
атрибут <finalName> ROOT </ finalName> в
раздел
<build> pom, вы готовы к работе. Разверните приложение через консоль управления или поместите его в
папку $ JBOSS_HOME / standalone / deployments . Вот и ты. Перейдите по
адресу http: // localhost: 8080 / и наблюдайте, как происходит волшебство.


Вы можете отправлять приветствия или даже войти с адресом электронной почты и оставлять персональные комментарии. Вы можете делать все, не меняя ни одной строки кода. Вы даже можете развернуть тот же кусок кода в App Engine. Далее, если вы перейдете по
адресу http: // localhost: 8080 / _ah / admin /, вы получите симпатичную небольшую консоль администратора, которая дает вам доступ к базовому хранилищу данных.

Даже Datanucleus прекрасно работает в этой настройке, и вы можете запустить примеры, изменив
 javax.jdo.PersistenceManagerFactoryClass в
jdoconfig.xml на 
org.datanucleus.api.jdo.JDOPersistenceManagerFactory . Если вы правильно выбрали версии зависимостей (
jdo-api: 3.0.1, datanucleus-core: 3.1.5 ) и используете правильный плагин maven datanucleus, все должно выглядеть так:

 <plugin>
        <groupId>org.datanucleus</groupId>
        <artifactId>maven-datanucleus-plugin</artifactId>
        <version>3.1.2</version>
        <configuration>
          <api>JDO</api>
          <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration>
        </configuration>
        <executions>
          <execution>
            <phase>process-classes</phase>
            <goals>
              <goal>enhance</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

Ты хорош, чтобы пойти с этим. Попробуйте. Это действительно легко.

Что нужно улучшить

На данный момент реализация ограничена. Кажется, что команда проекта сосредотачивается на официальном GAE-TCK. Большинство API завершено, и только девять из 26 сервисов не поддерживаются в соответствии с
домашней страницей CapeDwarf . Учитывая это, я бы ожидал увидеть немного больше документации. Пока это в основном сводится к официальной документации Google. Если вы столкнетесь с чем-то особенным, вы сами. Если у вас есть вопросы относительно TCK, недавно созданная
группа Google отвечает на них. Хорошие новости: руководитель проекта 
Алеш Джастинотзывчив и полезен, как и все парни из Red Hat Java. Если вы ищете примеры, в проекте CapeDwarf есть широкий набор тестовых покрытий на основе Arquillian. Это хорошее место, чтобы начать сейчас.

Google App Engine — альтернатива Java EE 8?

Какой итог? Я бы назвал инфраструктуру GAE зрелой. Будучи запущенным в апреле 2008 года и обнародованным в конце 2011 года, у него было пять лет для удовлетворения потребностей клиентов. Смотреть на определения из облачной темы в ранних версиях спецификаций Java EE 7 и сравнивать их с тем, что GAE уже достигла, вызывает сожаление. В то время как EE имеет весьма приличный технический разрез по уровням приложений, GAE, по крайней мере, частично разбивает это на сервис-ориентированный способ. Несмотря на то, что в SE / EE такие вещи, как безопасность, распространены почти повсеместно (JAAS, JASPIC, отдельные спецификации), GAE просто предоставляет
API пользователей для управления пользователями и
API AppIdentity.для интеграции с другими системами. Помимо этого, он также предоставляет API и абстракции для функций, которые Java EE просто не предлагает в готовом виде. Я имею в виду
Multitenancy API или что-то вроде
API Capabilities . Если кто-то хотел вначале облегчить работу с PaaS от Google и попытаться подумать о более позднем переходе на локальное аппаратное обеспечение на базе Java EE, он должен был тщательно подумать о картографировании технологий и приобретении определенных служб Google. На сегодняшний день CapeDwarf уже существенно изменил правила и снизил риск блокировки поставщика.

Если вы посмотрите на спецификацию, у нее есть свои недостатки. Google отвечает. Исключительно. На данный момент я не вижу ни одного консультативного совета или подобной вещи на месте. Так что, если Google решит отступить (например, Reader катастрофа), многие люди застрянут. С другой стороны, открытый TCK, по крайней мере, делает спецификацию бесплатной для всех (ASL2.0). И это то, что в основном сделали CapeDwarf и
AppScaleвозможное. На данный момент, это не лучшая Java EE, по крайней мере для меня. Но учитывая тот факт, что мы снова смотрим в облачное будущее с Java EE 8, это может стать основой для новых спецификаций, которые должны быть выполнены. Это также может быть хорошим руководством для того, что я бы назвал «тематически-ориентированными API». Забота о потребностях бизнеса, а не только о технологических проблемах. Это будет интересное движение в ближайшие несколько лет, и мне любопытно посмотреть, не прыгнут ли на этот поезд другие продавцы раньше или позже. Грустно видеть, что Google вытащил себя из JCP и активно развивался внутри органа по стандартизации.

Дальнейшие ссылки и чтения

Блог ведущего проекта 
http://in.relation.to/Bloggers/Ales

CapeDwarf на Github 
https://github.com/capedwarf/

Загрузка CapeDwarf 
http://www.jboss.org/capedwarf/downloads

TCK App Engine 
https://github.com/GoogleCloudPlatform/appengine-tck