- PVSM.RU - https://www.pvsm.ru -
В этой статье рассматривается использование популярного инструмента ant для развертывания Java приложений в Windows Azure:
Перед началом работы рекомендуется ознакомиться с общей информацией о Windows Azure — Электронная книга Windows Azure – облачная платформа Microsoft [1] и 24 статьи про Windows Azure на русском языке [2]. Для работы с Java приложениями в Windows Azure мы будем использовать Windows Azure Starter Kit for Java [3] ( для пользователей Eclipse есть плагин Windows Azure Plugin for Eclipse [4] ). Windows Azure Starter Kit for Java [3] использует Apache Ant [5] в качестве инструмента в процессе сборки — документация по нему доступна здесь: Apache Ant manual [6] ( есть доступные материалы и на русском языке: Ant за 10 шагов (make ant java) [7] или Apache Ant 101: Моментальная компоновка Java-программ [8] ). В статье описывается использование эмулятора Windows Azure — установить его можно в Windows Azure Emulators On Your Desktop [9]
В разделе Downloads [3] находится ссылка на ZIP файл внутри которого содержится шаблон проекта — для начала работы достаточно просто распаковать содержимое архива. Помимо стандартных для Java компонент внутри проекта имеется несколько файлов облегчающих работу с Windows Azure.
Файл |
Описание |
.cspack.jar | Реализация ant задачи windowsazurepackage |
ServiceConfiguration.cscfg | Конфигурационный файл сервиса Windows Azure |
ServiceDefinition.csdef | Файл настройки сервиса Windows Azure |
package.xml | Конфигурационный файл ( скрипт ) для ant |
WorkerRole1approotHelloWorld.war | Простой пример реализации upload. |
WorkerRole1approotstartup.cmd | Этот скрипт старта ( batch файл ) запускается каждый раз при старте процесса выкладывания. В этом файле необходимо реализовать все действия которые необходимо сделать при старте экземпляра WindowsAzure — такие как установка и конфигурирование отдельных компонент, например установка и старт сервера приложений Java. |
samples | Внутри этой директории содержаться примеры установки и настройки популярных серверов приложений Java ( Tomcat, JBoss, GlassFish, Jetty и тд ) — эти примеры могут быть использованы для создания нужной реализации startup.cmd. |
WorkerRole1approotrun.cmd | Этот скрипт ( batch файл ) запускается каждый раз после того как процедура выкладывания стартует. Предполагается что этот скрипт выполняется все время пока приложение находится в рабочем состоянии. В случае если произошел выход из этого скрипта Azure полагает что данные экземпляр необходимо рестартовать. В шаблоне реализован пример run.cmd в котором можно увидить вызов другого скрипта — utilwhileproc.cmd с параметром java.exe Скрипт whileproc.cmd ( находится в WorkerRole1approotutil ) каждые 15 секунд проверяет проверку на то что процесс java.exe запущен. |
WorkerRole1approotutil unzip.vbs | Скрипт ( visual basic script ) реализует распаковку zip архивов — этот скрипт полезен при реализации startup.cmd в случаях когда может понадобиться распаковка zip архивов. |
WorkerRole1approotutil download.vbs | Скрипт ( visual basic script ) реализует загрузку указанного URL в папку approot. Этот скрипт может быть очень полезен при реализации startup.cmd в случаях когда необходимо скачать какие либо данные — это может быть скачивание дистрибутива большого размера ( для того чтобы не включать этот дистрибутив в пакет нашего приложения для Windows Azure ), например дистрибутива Java сервера. Ccылка ( URL ) может указывать на любой ресурс который не требует аутентификации ( в том числе это могут быть и данные размещенные в блобах с анонимным доступом — см. Restricting Access to Containers and Blobs [10] ) либо такие ссылки в которых вся информация необходимая для авторизации содержится в самой ссылке URL ( например это могут быть блобы с включенной shared access signature [11] ). |
certSampleRemoteAccessPrivate.pfx | Пример приватного ключа с сертификатом который можно загрузить через веб-портал Windows Azure для того чтобы разрешить доступ через Remote Desktop к запущенному экземпляру Windows Azure — см Remote Desktop [12] или Microsoft Windows Azure. Быстрый старт. Часть 4. Внутри виртуальной машины Windows Azure [13] |
certSampleRemoteAccessPublic.cer | Пример публичного ключа с сертификатом — этот ключ должен быть использован в паре с приватным ключом для получения доступа через Remote Desktop — более подробно см. Remote Desktop [12] или Microsoft Windows Azure. Быстрый старт. Часть 4. Внутри виртуальной машины Windows Azure [13] |
Шаблон проекта позволяет использовать различные серверы приложений Java: Tomcat, Jetty, JBoss и GlassFish ( использование с другими серверами приложений тоже возможно, но с некоторыми изменениями настроек ). Для конфигурирования шаблона для определённого Java-сервера необходимо взять соответствующий скрипт старта ( они находятся в папке samples ) и скопировать содержимое этого скрипта в скрипт startup.cmd ( полностью заменив таким образом его содержимое ). Далее, при необходимости внести какие-либо изменения в скрипт старта рекомендуется сразу вносить их в startup.cmd
Для примера мы будем рассматривать использование JDK v1.6 от Sun Oracle, но в целом, так же как и с Java-сервером, у нас есть свобода выбора другого JDK. Отмечу, что поскольку платформа Windows Azure в части вычислительных ресурсов является 64 битной, то необходимо использование 64 битной версии JDK и соответствующей версии Java сервера. Это в том числе означает что для использования 64 битного JDK и разработки/тестирования в эмуляторе Windows Azure на том компьютере на котором Вы будете заниматься разработкой нужна 64 битная Windows. Для начала проинсталлируйте выбранный JDK на компьютер, затем запакуйте папку с JDK в файл JDK.zip таким образом чтобы внутри архива была одна папка с названием JDK и все содержимое проинсталлированного JDK ( в том числе и JRE ) было внутри этой папки ( см. также Where can I get the latest JRE / JDK as a zip file [14] ). После того как jdk.zip создан его необходимо скопировать в approot:
Следующий шаг это добавление в approot выбранного сервера приложений Java — чтобы минимизировать изменения в скрипте старта рекомендуется использовать имена используемые по умолчанию. В зависимости от выбранного сервера переименуйте упакованный архив в ZIP c Java сервером в соответствии с таблицей
Cервер | Имя файла |
Apache Tomcat 7.x | tomcat7.zip |
GlassFish Server OSE 3.x | glassfish3.zip |
JBoss Application Server 6.x | jboss6.zip |
JBoss Application Server 7.x | jboss7.zip |
Jetty 7.x | jetty7.zip |
Затем скопируйте этот ZIP файл в approot ( для примера тут взят tomcat7.zip ) :
Следующий шаг это установка правильного значения для переменной SERVER_DIR_NAME в скрипте старта — переменная должна указывать на директорию в которую Java сервер будет распакован. Как правило, достаточно установить ее равным имени папки с Java сервером внутри ZIP файла. Причина по которой имя папки для распаковки Java сервера лучше всего выбирать равным имени папки внутри ZIP заключается в том что, как правило, разные релизы Java сервером имеют сильную связь между версией и именем директории. Примеры в samples содержат значения которые возможно уже не являются актуальными и не соответствуют последним релизам Java серверов, поэтому рекомендуется обновить значение SERVER_DIR_NAME в соответствии с используемой версией. Например, в примере для Apache Tomcat ( файл samples/startupApacheTomcat7.txt ) для значения этой переменной берется значение SET SERVER_DIR_NAME=apache-tomcat-7.0.22. Вполне вероятно что к моменту когда вы читаете этот документ версия 7.0.22 будет уже не последней, и соответственно вы будете использовать новую версию ( например 7.0.29 ), поэтому не забудьте соответствующим образом обновить значение переменной SERVER_DIR_NAME ( в данном случае на SERVER_DIR_NAME=apache-tomcat-7.0.29 ). Если этого не сделать весьма вероятно то что приложение не сможет даже корректно развернуться на запущенном экземпляре. Также хочется отметить что частым источником ошибок является использование лишних ( и незаметных ) пробелов при инициализации этой переменной — пожалуйста имейте в виду что строка инициализации должна выглядеть следующим образом ( без двойных кавычек ) "SET SERVER_DIR_NAME=apache-tomcat-7.0.29" и после знака =, как и после окончания строки инициализации ( после символа 9 в данном случае ) не должно быть пробелов.После этого шага Вы уже можете попробовать выполнить сборку и запустить этот проект в локальном эмуляторе Windows Azure — вы должны увидеть что Java сервер запускается, а приложение HelloWorld разворачивается корректно. Приложение HelloWorld входит в шаблон по умолчанию — Вы можете увидеть его в approot, значение WAR_NAME в скрипте старта также указывает на это приложение. После того как Вы попробовали запустить Java сервер и развернуть приложение "Hello World" можно приступать к следующим шагам — если не планируется подключать другое Java приложение, то можно пропустить следующий раздел и перейти сразу к сборке и тестированию приложения.
Для начала я хотел бы еще раз обратить внимание на то что проекты в Windows Azure являются проектами выкладывания ( deployment ), а не проектами программирования на Java ( более того в проекте Windows Azure может вообще не содержаться Java кода ). То есть предполагается что уже есть уже Java приложение, которое Вы разрабатываете и есть возможность создать WAR файл который содержит приложение. Тогда шаги по включению приложения в проект Windows Azure будут следующие:
Также как и с SERVER_DIR_NAME будьте аккуратны и проверьте что после = и в конце строки ( после .war ) нет никаких пробелов. Cодержимое approot должно выглядеть следующим образом :
Откройте командную строку Windows, перейдите в папку где находится проект и выполните ant:
ant -buildfile package.xml
Эта команда сообщает ant использовать информацию из package.xml для сборки приложения. Процесс сборки может занять некоторое время и быть достаточно продолжительным, в завимимости от размера приложения и производительности компьютера. В случае если сборка завершилась успешно Вы увидете в окне с командной строкой сообщение о том что "BUILD SUCCESSFUL", это может выглядеть например так :
По умолчанию проект сконфигурирован для локального выкладывания в эмулятор ( настройка задается параметром packagetype в файле package.xml — по умолчанию packagetype="local" ). Папка с именем "emulatorTools" создается сразу после папки "deploy" во время сборки проекта. Папка "emulatorFolder" содержит два скрипт ( batch файла ) которые позволяют более удобно работать с эмулятором Windows Azure — выкладывать проект, перезагружать сервис, запускать его :
Последним шагом является запуск сервера в эмуляторе:
cd emulatorToolsRunInEmulator
В случае если все прошло успешно приложение будет запущено на порту 8080 — это можно проверить открыв в веб-браузере ссылку http://localhost:8080/MyWebApp [15]
Для того чтобы сделать проект доступным для работы в облаке Windows Azure нам необходимо сделать несколько изменений в файле package.xml. В этом файле есть специальный тэг windowsazurepackage который определяет конфигурацию выкладывания проекта в локальную или удаленную облачную среду Windows Azure.
<windowsazurepackage packagefilename="WindowsAzurePackage.cspkg" packagedir="${wapackagedir}" packagetype="local" projectdir="${basedir}" definitionfilename="ServiceDefinition.csdef" configurationfilename="ServiceConfiguration.cscfg"
>
Обратите внимание на аттрибут packagetype — когда значение этого аттрибута packagetype="local" то структура собранного проекта будет точно такая же как для использования в облаке Windows Azure, но сама сборка не будет упакована для загрузки, а наоборот будет подготовлена для запуска в среде эмулятора Windows Azure. Если значение аттрибута packagetype="cloud" то сборка будет архивирована как .cspkg файл — через веб-портал Windows Azure вы можете загрузить файлы .cspkg и .cscfg в облако и тем самым выложить и запустить приложение в облаке.
Выкладывание приложения в облако Windows Azure выполняется достаточно просто — Вы заходите в портал Windows Azure под своим логин/паролем и делаете два простых шага:
После выполнения этих шагов приложение должно успешно развернуться и запуститься в облаке Windows Azure. Дополнительную информацию по развертыванию в Windows Azure можно посмотреть в Microsoft Windows Azure. Быстрый старт [16] и Microsoft Windows Azure. Быстрый старт. Часть 2 [17]. В следующих статьях мы рассмотрим использование удаленного доступа через Remote Desktop для работы с Java приложениями в Windows Azure, а также более подробно остановимся на использовании файлов конфигурации .cscfg и .csdef.
Автор: abokov
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/2388
Ссылки в тексте:
[1] Электронная книга Windows Azure – облачная платформа Microsoft: http://download.microsoft.com/documents/rus/msdn/Windows_Azure_web.pdf
[2] 24 статьи про Windows Azure на русском языке: http://blogs.msdn.com/b/vorobiev/archive/2010/12/31/24-windows-azure.aspx
[3] Windows Azure Starter Kit for Java: http://wastarterkit4java.codeplex.com/
[4] Windows Azure Plugin for Eclipse: http://go.microsoft.com/fwlink/?LinkId=236078
[5] Apache Ant: http://ant.apache.org
[6] Apache Ant manual: http://ant.apache.org/manual/
[7] Ant за 10 шагов (make ant java): http://www.opennet.ru/base/dev/ant_10.txt.html
[8] Apache Ant 101: Моментальная компоновка Java-программ: http://www.ibm.com/developerworks/ru/edu/j-apant/
[9] Windows Azure Emulators On Your Desktop: http://blogs.msdn.com/b/buckwoody/archive/2011/02/01/windows-azure-emulators-on-your-desktop.aspx
[10] Restricting Access to Containers and Blobs: http://msdn.microsoft.com/en-us/library/dd179354.aspx
[11] shared access signature: http://msdn.microsoft.com/en-us/library/ee395415.aspx
[12] Remote Desktop: http://java.interoperabilitybridges.com/articles/setting-up-remote-desktop-connectivity-for-your-java-app-in-windows-azure
[13] Microsoft Windows Azure. Быстрый старт. Часть 4. Внутри виртуальной машины Windows Azure: http://blogs.technet.com/b/isv_team/archive/2011/08/01/3444532.aspx
[14] Where can I get the latest JRE / JDK as a zip file: http://stackoverflow.com/questions/1619662/where-can-i-get-the-latest-jre-jdk-as-a-zip-file-i-mean-no-exe-installer
[15] http://localhost:8080/MyWebApp: http://localhost:8080/MyWebApp
[16] Microsoft Windows Azure. Быстрый старт: http://msdn.microsoft.com/ru-ru/windowsazure/hh362484
[17] Microsoft Windows Azure. Быстрый старт. Часть 2: http://msdn.microsoft.com/ru-ru/windowsazure/hh362518
[18] Сайт Windows Azure: https://www.windowsazure.com/ru-ru/
[19] Центр разработки Windows Azure: http://msdn.microsoft.com/ru-ru/windowsazure/
Нажмите здесь для печати.