Статьи

OpenShift Express: развертывание приложения Java EE (с поддержкой AS7)

В последние несколько лет я все больше слышу об «облачных» сервисах. Изначально мне было не очень интересно их опробовать. Но несколько месяцев назад (год?) Я решил посмотреть, о чем идет речь. Я занимаюсь разработкой Java EE уже более 7 лет, поэтому я решил посмотреть, что нужно для развертывания приложения Java EE в облаке. Я начал искать документацию и другие обычные статьи в блогах и тому подобное.

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

Примерно в то же время я натолкнулся на эту сложную статью о том, как один из разработчиков настроил свое приложение с использованием Weld и JSF в Google App Engine — часть 1 , часть 2 . Блог был хорошо написан и объяснил, что нужно для того, чтобы ваше приложение Java EE было запущено и работало в облачной службе. Но важной частью информации в этих статьях было то, что пользователи, у которых было приложение, которое было реализовано в соответствии со стандартами Java EE (чтобы быть переносимым), должны были изменить многие части приложения, чтобы запустить их в облаке. Это было связано с тем, что многие технологии Java EE не поддерживались поставщиком облачных услуг. Это не выглядело привлекательным для меня. В конце концов, что бы я получил от этого. Поэтому я, как разработчик Java EE, не слишком интересовался экспериментами по развертыванию моего приложения в облаке.


Войдите в OpenShift!

Но в этом месяце мне попалось объявление OpenShift о возможности развертывания приложений JBoss AS7 Java EE в облаке. Кстати, я работаю в RedHat и являюсь частью команды JBoss AS7, но я не следил за тем, чем занималась команда OpenShift, поэтому это объявление стало приятной неожиданностью! Поэтому я решил попробовать. Прочитав часть документации на сайте проекта, я обнаружил, что OpenShift предлагает два разных сервиса. Одним из них был «OpenShift Express», а другим — «OpenShift Flex». OpenShift Express можно использовать бесплатно (это была еще одна хорошая новость для меня), в то время как OpenShift Flex требует учетных данных Amazon EC2, и вы будете платить за использование EC2 (однако в настоящее время существует бесплатная пробная версия). Я решил попробовать OpenShift Express, так как он был бесплатным и удовлетворял моим текущим потребностям — просто попробовать быстрое и простое развертывание приложения Java EE и доступ к этому приложению.

Итак, вот что я сделал, чтобы иметь возможность развернуть свое приложение Java EE, которое использует технологии, доступные в веб-профиле Java EE6 и которое прекрасно развертывается на моем локальном экземпляре AS7, в OpenShift Express. Вы, возможно, уже догадались, что я не специалист по OpenShift (или облачным сервисам в целом), поэтому в этой статье нет подробных технических подробностей, но есть более подробные инструкции по развертыванию приложений Java EE в OpenShift Express. ,

Итак, начнем тогда.

зарегистрироваться

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

Получить доступ к OpenShift Express

Итак, давайте получили страницу OpenShift Express . На этой странице вы увидите кнопку «Получить доступ к экспресс» с левой стороны. Нажмите на него, чтобы получить доступ к «Экспресс». Вы будете уведомлены (немедленно) по электронной почте на адрес электронной почты, который вы зарегистрировали. Проверьте почту, которая будет содержать ссылку на краткое руководство , чтобы помочь вам начать работу с OpenShift Express.

Установите клиентские инструменты

Краткое руководство содержит инструкции, которые помогут вам начать процедуру установки. Первый шаг включает в себя установку нескольких клиентских инструментов в вашей системе, которые помогут вам взаимодействовать с OpenShift. Следуйте этим инструкциям для установки клиентских инструментов (я не буду повторять их здесь, так как это хорошо объяснено в этом руководстве).

Создать домен

Теперь, когда у нас есть клиентские инструменты, мы готовы настроить наш «домен» в облаке OpenShift. Настройка домена создаст уникальное доменное имя, которое вы можете использовать для своих приложений. Доменное имя будет частью URL, который вы будете использовать для доступа к приложению и который вы опубликуете для доступа к своим пользователям. Команда для создания домена проста:

1
rhc-create-domain -l <email-id-you-registered-with> -n <domain-name-of-your-choice>

Выполнение этой команды запросит у вас пароль, который вы использовали для регистрации. Введите этот пароль и дождитесь завершения команды (несколько секунд).

«Rhc-create-domain» является частью клиентского инструмента, который вы установили ранее. Если вы еще не установили эти инструменты, вы не сможете использовать эти команды, поэтому не пропустите этот шаг! «Rhc-create-domain» принимает несколько дополнительных параметров. Чтобы увидеть список принятых параметров, вы можете выполнить следующую команду:

1
rhc-create-domain --help 

Создайте приложение jbossas-7.0

После того, как вы успешно создали домен, ваш следующий шаг — создать «приложение». В настоящее время OpenShift Express поддерживает различные «типы» приложений, каждое из которых поддерживается Git (системой контроля версий). На момент написания этой статьи поддерживаются следующие типы приложений: jbossas-7.0, perl-5.10, rack-1.1, wsgi-3.2 и php-5.3. Я заинтересован в развертывании приложения Java EE, поэтому я буду создавать приложение «jbossas-7.0». Этот тип приложения предоставляет вам экземпляр JBoss AS 7.0.0 в облаке OpenShift, в который вы можете развертывать свои приложения. Итак, давайте теперь создадим приложение типа jbossas-7.0.

Обратите внимание, что термин «приложение» может быть немного запутанным (по крайней мере, я нашел его немного запутанным), потому что все, что вы делаете в этот момент — это настройка сервера JBoss AS7.

Команда для создания приложения — rhc-create-app. Rhc-create-app принимает несколько опций. Для получения полного списка параметров выполните:

1
rhc-create-app --help

Чтобы создать приложение jbossas-7.0, мы запустим следующую команду:

1
rhc-create-app -a <application-name> -l <email-id-you-used-to-register> -t jbossas-7.0 -r <path-on-local-filesystem-for-the-repository>

Выполнение этой команды запросит у вас пароль, который вы использовали для регистрации. Введите этот пароль и дождитесь завершения команды (несколько секунд).

Опция -a позволяет указать имя для вашего приложения. Это имя будет частью URL, который вы используете для доступа к своему приложению. Если имя вашего приложения «foo» и (ранее созданное) имя домена «bar», то URL для доступа к вашему приложению будет http://foo-bar.rhcloud.com/.

Параметр -t в этой команде указывает тип приложения. В нашем случае нас интересует jbossas-7.0

Другим важным параметром является параметр -r, который вы будете использовать для указания на папку в вашей локальной файловой системе, где OpenShift будет хранить все данные, связанные с вашим приложением. Часть этих данных будет локальной копией git repo (системы контроля версий). Мы увидим это более подробно позже в этом блоге.

Доступ к URL вашего сервера

Поэтому, как только вы запустите команду и она успешно завершится, она выведет URL-адрес, по которому доступно приложение. Вы можете (немедленно) использовать этот URL для доступа к приложению. При доступе по этому URL вы увидите страницу приветствия, которая указывает на то, что приложение успешно установлено и доступно для доступа. Для меня URL-адрес недавно созданного приложения был http://jaikiran-jbossas.rhcloud.com/ .

Итак, на данный момент мы создали домен, а затем приложение и убедились, что он доступен для всего мира. Короче говоря, ваш облачный сервер запущен и теперь вы можете развертывать приложения Java EE на этом сервере.

Создание и развертывание приложения Java EE

Итак, давайте теперь перейдем к этапу создания и развертывания приложения Java EE. Я не имел в виду какое-то конкретное приложение, но хотел развернуть приложение, которое включало бы доступ к базе данных. Вместо того чтобы создавать новое приложение, я решил использовать одно из приложений быстрого запуска, которое поставляется с JBoss AS7. Приложения быстрого запуска для JBoss AS7 доступны для загрузки здесь . Как только вы загрузите архив быстрого запуска, разархивируйте его в любое место по вашему выбору. Создание примеров быстрого запуска потребует, чтобы в вашей системе был установлен инструмент сборки Maven. Подробную информацию о приложениях быстрого запуска и о том, как их создавать, можно найти здесь . Те, кто хочет попробовать это сами, могут захотеть взглянуть на это руководство.

Я выбрал приложение «Kitchensink» из этих быстрых стартов. Приложение kitchensink использует Java Persistence API (JPA) для сохранения и по умолчанию использует java: jboss / datasources / ExampleDS, который поставляется по умолчанию JBoss AS7. ExampleDS использует H2 в качестве своей базы данных. Вот как выглядит persistence.xml:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?> 
 <persistence version="2.0" 
   xsi:schemaLocation=" 
   <persistence-unit name="primary"
    <!-- If you are running in a production environment, add a managed  
      data source, the example data source is just for proofs of concept! --> 
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source
    <properties
      <!-- Properties for Hibernate --> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
      <property name="hibernate.show_sql" value="false" /> 
    </properties
   </persistence-unit
 </persistence>

Мне этого достаточно, чтобы показать, как развернуть приложение, а также показать поддержку БД, доступную в OpenShift Express.

После создания приложения развертываемая война называется jboss-as-kitchensink.war и доступна в моей локальной файловой системе. Следующим моим шагом будет развертывание моего сервера JBoss AS7, который мы настроили в облаке OpenShift Express. Посмотрим, как это делается.

Разверните приложение в OpenShift Express

Помните, что при создании «приложения» с помощью команды rhc-create-app мы использовали опцию -r, чтобы указать папку в нашей локальной файловой системе для создания локальной копии репозитория приложения. Это то место, которое теперь будет использоваться для развертывания наших приложений. В моем случае я использовал / home / jpai / OpenShift / myapps / demo в качестве места репо. Вот как выглядит эта папка:

1
2
3
4
5
6
7
8
9
demo 
 
 |--- deployments 
 
 |--- pom.xml 
 
 |--- README 
 
 |--- src

Существует несколько способов развертывания приложения в OpenShift Express. Один из способов — написать свой код и зафиксировать исходный код в папке src вашего локального репозитория, а затем отправить ваши изменения в удаленный репозиторий git. Затем это вызовет сборку Maven для вашего проекта в удаленном хранилище. Более подробная информация об этом подходе доступна в этом блоге .

В нашем случае мы сосредоточимся на том, как развернуть уже построенное приложение Java EE на вашем облачном сервере OpenShift Express. На предыдущем этапе мы создали файл jboss-as-kitchensink.war. Теперь скопируйте этот военный файл в подпапку «развертывания» вашего локального git-репозитория. В данном случае это / home / jpai / OpenShift / myapps / demo / deployments:

1
cp /home/jpai/jboss-as-quickstarts-7.0.0.Final/kitchensink/target/jboss-as-kitchensink.war /home/jpai/OpenShift/myapps/demo/deployments

После того, как вы скопировали его здесь, ваш следующий шаг — «зафиксировать» это изменение с помощью команды git commit:

1
2
3
4
5
jpai@jpai-laptop:demo$ git add deployments/jboss-as-kitchensink.war 
 jpai@jpai-laptop:demo$ git commit -m "Deploy kitchensink application" deployments/jboss-as-kitchensink.war 
 [master 1637c21] Deploy kitchensink application 
  1 files changed, 0 insertions(+), 0 deletions(-) 
  create mode 100644 deployments/jboss-as-kitchensink.war 

Таким образом, на этом этапе ваше приложение kitchensink было передано в ваш локальный репозиторий git. Далее мы должны «протолкнуть» этот коммит в удаленное git-репо

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
jpai@jpai-laptop:openshift$ git push origin master 
 Counting objects: 6, done
 Delta compression using up to 2 threads. 
 Compressing objects: 100% (4/4), done
 Writing objects: 100% (4/4), 393.71 KiB, done
 Total 4 (delta 1), reused 0 (delta 0) 
 remote: Stopping application... 
 remote: done 
 remote: Found .openshift/config/standalone.xml... copying to ... 
 .... 
 .... 
 .... 
 remote: Starting application...done 
 To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 
   6e57976..1637c21 master -> master

(обрезаны некоторые журналы из вышеприведенного вывода).

Таким образом, с этим «толчком» мы теперь развернули наше приложение на удаленном сервере OpenShift Express JBoss AS7. Jboss-as-kitchensink.war будет развернут в контексте веб-приложения «jboss-as-kitchensink». Таким образом, URL для доступа к приложению будет http://jaikiran-jbossas.rhcloud.com/jboss-as-kitchensink . Идите и получите доступ к этому URL. Приложение ничего не делает — оно позволяет добавить имя пользователя, адрес электронной почты и номер телефона, которые затем будут сохранены в базе данных.

Как я упоминал ранее, приложение kitchensink использует источник данных ExampleDS, который поддерживается базой данных H2. Таким образом, все данные будут храниться удаленно в базе данных H2.

Использование базы данных MySQL, доступной в OpenShift Express

OpenShift Express устанавливает шаблон источника данных MySQL для вас при создании типа приложения jbossas-7.0. Подробную информацию о базе данных можно найти в <path-to-local-repo> /. Openshift / config / standalone.xml:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<subsystem xmlns="urn:jboss:domain:datasources:1.0"
      <datasources
           <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"
                <connection-url>jdbc:h2:${jboss.server.data.dir}/test;DB_CLOSE_DELAY=-1</connection-url
                <driver>h2</driver
                <pool></pool
                <security
                     <user-name>sa</user-name
                     <password>sa</password
                </security
                <validation></validation
                <timeout></timeout
                <statement></statement
           </datasource
           <datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="false" use-java-context="true" pool-name="MysqlDS"
                <connection-url>jdbc:mysql://127.1.1.1:3306/mysql</connection-url
                <driver>mysql</driver
                <security
                 <user-name>admin</user-name
                 <password>changeme</password
                </security
           </datasource
           <drivers
                <driver name="h2" module="com.h2database.h2"
                     <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class
                </driver
                <driver name="mysql" module="com.mysql.jdbc"
                     <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class
                </driver
           </drivers
      </datasources
 </subsystem

Вы заметите, что помимо ExampleDS, который поставляется по умолчанию в AS7, OpenShift Express настроил источник данных MySQL, который будет доступен по адресу java: jboss / datasources / MysqlDS. Здесь важно отметить, что по умолчанию он отключен (то есть включен = ложь). Также обратите внимание, что пароль «changeme». По сути, эта конфигурация источника данных для MysqlDS в standalone.xml присутствует в качестве шаблона. Чтобы включить этот источник данных, мы сначала должны создать базу данных MySQL для нашего приложения. Это можно сделать с помощью следующей команды:

1
jpai@jpai-laptop:openshift$ rhc-ctl-app -a <application-name> -l <email-id-we-used-to-register> -e add-mysql-5.1

Rhc-ctl-app передается имя приложения (которое мы использовали во время rhc-create-app), а также идентификатор нашей учетной записи. Кроме того, мы используем опцию -e, чтобы указать, что мы хотим сделать. В этом случае мы запускаем команду «add-mysql-5.1». Выполнение этой команды запросит у вас пароль учетной записи, а при успешном завершении отобразит результат, подобный следующему:

1
2
3
4
5
RESULT: 
 Mysql 5.1 database added. Please make note of these credentials: 
 Root User: admin 
 Root Password: as43n34023n 
 Connection URL: mysql://127.1.1.1:3306/

Запишите имя пользователя, пароль и URL-адрес соединения. Теперь откройте <repo-home> /. Openshift / config / standalone.xml в текстовом редакторе и обновите конфигурацию MysqlDS, чтобы использовать URL-адрес подключения, имя пользователя и новый пароль. Также установите флажок enable в «true», чтобы источник данных был включен. В конечном итоге конфигурация источника данных будет выглядеть так:

1
2
3
4
5
6
7
8
<datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="true" use-java-context="true" pool-name="MysqlDS"
      <connection-url>jdbc:mysql://127.1.1.1:3306/mysql</connection-url
      <driver>mysql</driver
      <security
       <user-name>admin</user-name
       <password>as43n34023n</password
      </security
 </datasource>

Обратите внимание на соединение-URL. Он должен иметь формат jdbc: mysql: // <ip: port> / dbname. Как правило, вам вообще не нужно прикасаться к этому URL-адресу соединения, поскольку rhc-ctl-app add-mysql-5.1 и шаблон источника данных синхронизированы с IP / портом. Важными частями, которые необходимо изменить, являются пароль и флаг включения.

Как только этот файл обновится, сохраните изменения и передайте его в локальный репозиторий git:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
jpai@jpai-laptop:demo$ git commit -m "Enable the MysqlDS and fix the password" ./ 
 [master dd7b58a] Fix the datasource password 
 1 files changed, 1 insertions(+), 1 deletions(-) 
 Push these changes to remote repo: 
 jpai@jpai-laptop:openshift$ git push origin master 
 Counting objects: 9, done
 Delta compression using up to 2 threads. 
 Compressing objects: 100% (4/4), done
 Writing objects: 100% (5/5), 494 bytes, done
 Total 5 (delta 2), reused 0 (delta 0) 
 remote: Stopping application... 
 remote: done 
 .... 
 ..... 
 remote: Starting application...done 
 To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 
 2d38fa8..dd7b58a master -> master

Итак, теперь мы добавили MySQL DB и включили источник данных MysqlDS, который доступен по адресу java: jboss / datasources / MysqlDS jndi на сервере. Поэтому, если приложение kitchensink должно использовать MySQL в качестве своей базы данных вместо H2, тогда все, что ему нужно сделать, это использовать java: jboss / datasources / MysqlDS. Давайте теперь отредактируем файл persistence.xml, который мы видели ранее, и вместо этого будем использовать MysqlDS:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?> 
 <persistence version="2.0" 
   xsi:schemaLocation=" 
   <persistence-unit name="primary"
    <!-- Changed to use MysqlDS --> 
    <jta-data-source>java:jboss/datasources/MysqlDS</jta-data-source
    <properties
      <!-- Properties for Hibernate --> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
      <property name="hibernate.show_sql" value="false" /> 
    </properties
   </persistence-unit
 </persistence

Кроме того, просто чтобы «показать», что это новое приложение было обновлено для использования базы данных MySQL, я также отредактировал страницу index.xhtml приложения kitchensink, чтобы добавить на эту страницу сообщение об используемой базе данных MySQL:

1
2
3
4
5
<h3> 
       <span style="color: red;"
            This application uses MySQL database as its persistence store 
        </span
 </h3>

Далее я создам приложение kitchensink локально, используя Maven, чтобы отразить эти изменения и сгенерировать новый jboss-as-kitchensink.war. После создания давайте теперь снова скопируем его в наше локальное git-репо, а затем передадим изменение и отправим его в удаленное git-репо:

1
jpai@jpai-laptop:kitchensink$ cp target/jboss-as-kitchensink.war /home/jpai/OpenShift/myapps/demo/deployments
1
2
3
jpai@jpai-laptop:demo$ git commit -m "Use MySQL database for kitchensink application" ./ 
 [master ded2445] Use MySQL database for kitchensink application 
 1 files changed, 0 insertions(+), 0 deletions(-)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
jpai@jpai-laptop:openshift$ git push origin master 
 Counting objects: 7, done
 Delta compression using up to 2 threads. 
 Compressing objects: 100% (4/4), done
 Writing objects: 100% (4/4), 1.35 KiB, done
 Total 4 (delta 2), reused 0 (delta 0) 
 remote: Stopping application... 
 remote: done 
 remote: Found .openshift/config/standalone.xml... copying to... 
 ... 
 ... 
 ... 
 remote: Starting application...done 
 To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 
 1637c21..ded2445 master -> master 
 jpai@jpai-laptop:demo$

(обрезаны некоторые логи с выхода)

Поэтому на данный момент мы изменили наше приложение kitchensink на использование базы данных MySQL и развернули его на нашем сервере OpenShift Express AS7. Итак, давайте снова перейдем к URL-адресу приложения http://jaikiran-jbossas.rhcloud.com/jboss-as-kitchensink . Как видите, на этой странице теперь заметно наше сообщение об использовании MySQL DB. Попробуйте это приложение, добавив некоторую фиктивную информацию о пользователе.

Это оно! Мы успешно развернули наше приложение на сервере OpenShift Express, и приложение доступно для использования.

Резюме

До сих пор это был приятный опыт с OpenShift. Я планирую попробовать еще несколько вещей с OpenShift, в ближайшие дни и блог о любых интересных деталях.

Полезные ресурсы

Работая над развертыванием этого приложения, мне пришлось использовать некоторые документы и помощь сообщества OpenShift, чтобы понять, как все это делается. Вот список полезных ресурсов, связанных с OpenShift в целом:

OpenShift Express Руководство пользователя
Форумы OpenShift
OpenShift IRC #openshift на irc.freenode.net. Люди здесь очень полезны!
Блог Скотта Старка. Блоги Скотта содержат много полезной информации об AS7 в OpenShift и OpenShift в целом. Блог Скотта, безусловно, необходимо прочитать!

Где искать помощь

Ответы на вопросы OpenShift обычно даются на форумах OpenShift. Если у вас есть вопросы по AS7 в OpenShift, лучше всего задавать вопросы JBoss Cloud Group.

Ссылка: OpenShift Express. Развертывание приложения Java EE (с поддержкой AS7) от нашего партнера по JCG Джейкирана Пая в блоге Jaikiran My Wiki .

Статьи по Теме :