На этом этапе, какие бы облачные сервисы я ни пытался опробовать, потребовалось бы предоставить данные моей кредитной карты даже для того, чтобы опробовать пробное приложение. Я не был слишком заинтересован в том, чтобы предоставить данные своей кредитной карты, чтобы просто попробовать несколько моих приложений. Поэтому я как бы разочаровался в том, чтобы опробовать свои приложения в облаке, хотя я продолжал читать о том, что делают другие разработчики для развертывания своих приложений в облаке.
Примерно в то же время я натолкнулся на эту сложную статью о том, как один из разработчиков настроил свое приложение с использованием 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" xmlns = "http://java.sun.com/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 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" xmlns = "http://java.sun.com/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 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 .
Статьи по Теме :