Введение в Spring Roo: Часть 4. Быстрая разработка приложений в облачной среде при помощи Spring Roo и Cloud Foundry

Сделайте еще один шаг в освоении быстрой разработки при помощи Roo, создав приложение для работы в облачной среде с использованием Cloud Foundry, первой платформы с открытыми исходными кодами, созданной VMWare в качестве проекта сервиса. Узнайте больше о среде и разверните приложение в Cloud Foundry, используя Roo Shell.

10 апреля 2012 года – обновление с предоставленной автором заменой http://roo-conference.cloudfoundry.com/ для двух неправильных ссылок http://conference.cloudfoundry.com/. Ссылки были исправлены в элементе списка 11 раздела Развертывание простого HSQLDB-приложения в Cloud Foundry и элементе списка 6 раздела Ввод в эксплуатацию: замена HSQLDB на базу данных MySQL.

Шекхар Гулати, старший консультант, Xebia

Шекхар Гулати (Shekhar Gulati) работает Java-консультантом в Xebia India. Более шести лет он занимается корпоративными Java-приложениями. Имеет обширный опыт работы со Spring-проектами, такими как Spring, Spring-WS и Spring Roo. В сферу его интересов входят Spring, базы данных NoSQL, Hadoop, RAD-среды (такие как Spring Roo), облачные вычисления (в основном PaaS-сервисы, такие как Google App Engine, CloudFoundry, OpenShift). Является активным автором статей для JavaLobby, Developer.com, IBM developerWorks и своего собственного блога http://whyjava.wordpress.com/. Связаться с ним можно в Твиттере (@ http://twitter.com/#!/shekhargulati).



20.02.2013

В первой и второй частях серии статей , посвященных Spring Roo, мы создали полноценное корпоративное приложение, используя Spring Roo. Тогда я планировал написать статью об интеграции Spring Roo и Google App Engine Platform as a Service (PaaS). Spring Roo предоставляет поддержку создания Web-приложений, которые можно развернуть в Google App Engine, но существовали проблемы и ограничения, затруднявшие развертывание ранее созданных нами приложений. Я решил отложить эту статью до тех пор, пока не улучшится поддержка интеграции Spring Roo и Google App. В данной статье представлена Cloud Foundry (открытая платформа как сервис) и рассмотрено ее использование для развертывания примера приложения. Перед рассмотрением Cloud Foundry давайте немного поговорим о решении "платформа как сервис".

Что такое "платформа как сервис"

Платформа как сервис (Platform as a Service – PaaS) – это один из уровней облачных вычислений. К другим уровням относятся "программное обеспечение как сервис" (Software as a Service – SaaS) и "инфраструктура как сервис" (Infrastructure as a Service – IaaS). PaaS находится между SaaS и IaaS, так как предоставляет абстракцию инфраструктуры, а также платформу вычислений и стек решений.

Рисунок 1. Платформа как сервис: стратегический центр архитектуры облачных вычислений
Рисунок 1. Платформа как сервис: стратегический центр архитектуры облачных вычислений

PaaS применяется и профессиональными, и бизнес-разработчиками. Бизнес-разработчики, не пишущие код, могут использовать платформы (например, WaveMaker) для разработки своих приложений по принципу переноса компонентов в приложение, а профессиональные разработчики могут использовать платформы (например, Google App Engine) для создания и развертывания Web-приложений. PaaS предоставляет средства для поддержки полного цикла создания и доставки Web-приложений и сервисов. Некоторыми из крупных поставщиков PaaS являются Google App Engine for Java™ and Python, Microsoft® Azure for .Net and Java и Force.com.

До 2010 технология PaaS развивалась не так быстро, как SaaS и IaaS, возможно, из-за ограничений существующих PaaS-решений. Давайте рассмотрим проблемы существующих PaaS, которые должны решить PaaS-платформы следующего поколения, такие как Cloud Foundry.

Проблемы существующих PaaS-решений

  • Привязка к поставщику (отсутствие переносимости облачной среды). У разработчика или организации нет вариантов перехода из одной облачной среды в другую. Например, выбрав Google App Engine, разработчик должен оставаться с Google App Engine до тех пор, пока не удалит приложение при помощи консоли Google App Engine и не изменит существующее приложение в соответствии с требованиями нового поставщика облачной среды. После этого приложение еще нужно развернуть у нового поставщика.
  • Развертывание только в открытых облачных средах. Большинство существующих PaaS-решений предназначено только для открытых облачных сред, и это является причиной того, что многие предприятия отказываются от перехода на PaaS. Многие предприятия никогда не перейдут на открытую облачную среду, а возможность выбора закрытой облачной среды или использования комбинации открытой и закрытой среды им не предоставляется.
  • Косность мышления. Для создания приложений в открытой облачной среде разработчики должны поменять способ мышления. Ранее Google App Engine не предоставлял возможность работы с реляционными базами данных. При создании приложении нужно было использовать BigTable, что требовало изменения способа мышления до начала разработки, а также соответствующего начального обучения. В облачной среде разработчик может лишь развернуть WAR-файл приложения без каких-либо изменений.
  • Поддержка сред разработки. В настоящее время Java-программисты используют среды разработки, и почти все эти среды создают определенные трудности при написании приложений. Использование Google App Engine для создания простого приложения при помощи какой-либо общедоступной среды типа Spring или Struts требует ряда модификаций такой среды.
  • Привязка к конкретной среде. Существующие PaaS привязаны к определенным средам, таким как Java или Python в сочетании с BigTable в качестве серверной базы данных для Google App Engine, .Net и Java в сочетании с SQL Azure для Microsoft Azure, Java для Amazon Beanstalk. Использование любой из этих PaaS возможно только в конкретной среде.
  • Закрытый код. PaaS-решения с открытыми исходными кодами отсутствуют, что затрудняет изменение кода и добавление поддержки новых функциональных возможностей для совместного использования сообществом. Неоспоримым преимуществом Cloud Foundry является ее открытость, позволяющая разработчикам, не принадлежащим к головной организации, играть важную роль в развитии продукта.

2011 год – год PaaS

Компания Gartner заявила, что 2011 год будет годом решений "платформа как сервис". Причиной является появления большого количества новых PaaS-предложений от ведущих поставщиков корпоративного ПО. Среди PaaS-предложений, запущенных в этом году - Cloud Foundry от VMWare, OpenShift от RedHat, CloudBees и DotCloud (ссылки на дополнительную информацию по этим решениям приведены в разделе Ресурсы). Новые PaaS-решения не ограничиваются одним языком или одной средой разработки. Сейчас PaaS действительно становится платформой, поддерживающей создание приложений с использованием разных языков и сред разработки. Еще одно новшество PaaS-решений, подобных Cloud Foundry - поддержка нескольких облачных сред, о которой мы поговорим ниже. Эти изменения побуждают существующие PaaS-решения к реализации поддержки различных сред разработки. Далее мы сосредоточимся на Cloud Foundry, оставив другие PaaS-решения за рамками данной статьи.


Что такое Cloud Foundry

В апреле 2011 года компания VMWare представила открытое решение "платформа как сервис" под названием Cloud Foundry. Cloud Foundry – это мультиоблачная платформа с открытыми исходными кодами, поддерживающая много языков, сред разработки и приложений. Она пытается решить все перечисленные выше проблемы существующих PaaS-решений. Разработчики и организации могут использовать Cloud Foundry в качестве целевой платформы развертывания (т.е. для развертывания в открытой облачной среде, предлагаемой Cloud Foundry) или в качестве уровня, позволяющего выбрать облачную среду для развертывания, как открытую, так и закрытую. Три ключевые характеристики Cloud Foundry:

  1. Возможность выбора на всех уровнях. Говоря коротко, Cloud Foundry – это PaaS-решение с широкими возможностями выбора. Эти возможности не ограничиваются только языками программирования, но существуют на всех уровнях (сервисов и облачной среды). Cloud Foundry лучше всего представить диаграммой, показанной на рисунке 2.
    Рисунок 2. Возможности выбора в Cloud Foundry
    Рисунок 2. Возможности выбора в Cloud Foundry

    На рисунке 2 показаны варианты выбора, расположенные по трем сторонам треугольника. Первая сторона соответствует языкам (средам времени исполнения) и средам разработки. В настоящее время Cloud Foundry поддерживает языки Java, Groovy, Scala, Ruby и Node.js. Для этих языков поддерживаются среды разработки Rails3, Grails, Node, Sinatra, Lift и Spring. Вторая сторона соответствует прикладным сервисам и готовым сервисами, таким как MySQL (реляционная база данных), Redis (хранилище пар ключ/значение) и MongoDB (хранилище документов). Скоро появится поддержка RabbitMQ и других сервисов. Cloud Foundry предоставляет разработчикам выбор между базами данных SQL или NoSQL. Разработчики, привыкшие к MySQL и Java, не обязаны изучать что-то новое и могут использовать имеющиеся знания для создания нового или развертывания существующего приложения. Третья сторона соответствует вариантам облачной среды. Cloud Foundry можно развернуть в открытой облачной среде, такой как cloudfoundry.com, или в IaaS, такой как Amazon EC2. Можно также загрузить и развернуть Cloud Foundry в закрытой облачной среде организации, а разработчик может установить Cloud Foundry на своем ноутбуке в виде микрооблачной среды или среды разработки.

  2. Открытые исходные коды. Cloud Foundry – это проект с открытыми исходными кодами, доступный на Github (см. раздел Ресурсы). Разработчики могут создавать ответвления Cloud Foundry, добавлять новые функциональные возможности или исправлять существующие проблемы, внося свой вклад в проект. Компания ActiveState создала свою собственную облачную платформу для Python и Perl на основе Cloud Foundry (см. раздел Ресурсы). Это стало возможно благодаря тому, что Cloud Foundry является проектом с открытыми исходными кодами и разработчики могут добавлять в него поддержку других сервисов и языков.
  3. Переносимость облачной среды. Поскольку Cloud Foundry является проектом с открытыми исходными кодами, разработчики или организации могут свободно запускать Cloud Foundry везде, где захотят. RightScale продемонстрировала, что Cloud Foundry может работать на Amazon EC2 (см. раздел Ресурсы). Те, кто не хочет использовать открытую облачную среду Cloud Foundry по умолчанию, могут перейти на другую облачную среду, предлагаемую Cloud Foundry.

Начало работы с Cloud Foundry

Открытая облачная среда Cloud Foundry предлагается как бесплатный сервис на http://www.cloudfoundry.com/. Этот сервис пока находится на стадии бета-тестирования. Чтобы получить возможность использовать Cloud Foundry, необходимо создать свою учетную запись. Обычно процесс получения учетных данных занимает несколько дней. В настоящее время открытая облачная среда работает на облачной операционной системе VMWare vSphere. До получения учетных данных можно настроить облачную среду на своем компьютере, загрузив и установив Cloud Foundry.

После получения учетных данных можно использовать три способа взаимодействия с Cloud Foundry. Все клиенты взаимодействуют с REST-интерфейсом, предоставляемым Cloud Foundry. Эти REST Web-сервисы представляют собой простой JSON поверх HTTP.

  1. Клиент командной строки VMC. VMC – это пакет ruby gem, предоставляющий доступ к Cloud Foundry из командной строки. Он используется для развертывания приложений, созданных на любом языке. Адрес для загрузки: http://rubygems.org/gems/vmc.
  2. Spring Source Tool Suite (Spring Eclipse IDE или STS). STS – это второй вариант подключения к Cloud Foundry. STS представляет собой основанную на Eclipse интегрированную среду разработки, поставляемую с комплектом различных полезных инструментов Spring. Отличная справочная информация по STS опубликована на dzone. Для доступа к Cloud Foundry необходима установка плагина. Из этой интегрированной среды разработки можно выполнять сборку, тестирование и развертывание в облачной среде. Это действительно здорово! Дополнительная информация представлена в блоге группы SpringSource.
  3. Дополнение Spring Roo Cloud Foundry. Приложение можно развернуть из Roo Shell при помощи дополнения Spring Roo Cloud Foundry. Для поклонников Roo Shell это означает, что сборку и развертывание приложений можно выполнять в Roo Shell. Еще одним преимуществом Roo Shell является автозавершение по нажатию Tab. Введите несколько символов команды, нажмите клавишу Tab, и Roo Shell автоматически завершит ввод команды.

Теперь давайте посмотрим, как Java-разработчики могут обращаться к Cloud Foundry из Spring Roo. Мы развернем в Cloud Foundry приложение, созданное в первых двух статьях данной серии.


Интеграция Spring Roo и Cloud Foundry

Spring Roo предоставляет поддержку Cloud Foundry в виде дополнения. Дополнения – это механизм, посредством которого в Spring Roo добавляются новые функциональные возможности.

Предварительные требования

Для развертывания нашего приложения в Cloud Foundry при помощи Spring Roo выполните следующие действия:

  1. Если Spring Roo у вас еще не установлен, обратитесь за инструкциями к первой статье серии (EN). Я использую последнюю версию Spring Roo 1.1.5.RELEASE.
  2. Загрузите исходный код приложения conference (см. раздел Загрузка). Это приложение, которое разрабатывалось в первых двух статьях. В качестве базы данных используется HSQLDB. Позже мы перенесем это приложение на MySQL.

Развертывание простого HSQLDB-приложения в Cloud Foundry

После подготовки среды разработки разверните приложение conference. Загруженное приложение conference использует в качестве базы данных HSQLDB. Для развертывания приложения в Cloud Foundry выполните следующие действия:

  1. Разархивируйте файл conference.zip в удобное место.
  2. В командной строке перейдите в каталог, в который разархивировали conference.zip.
  3. Скомпонуйте проект, выполнив в командной строке команду mvn clean install.
  4. Находясь в каталоге conference, выполните команду Roo для загрузки командного процессора.
  5. Перед развертыванием приложения в Cloud Foundry установите дополнение Cloud Foundry, которое предоставит возможность выполнять операции в Cloud Foundry. Для установки дополнения Cloud Foundry выполните в Roo Shell следующие команды:
        roo> pgp automatic trust 
    
        roo> addon install bundle --bundleSymbolicName 
            org.springframework.roo.addon.cloud.foundry;1.1.5.RELEASE

    Первая команда предписывает Spring Roo автоматически доверять всем pgp-ключам, чтобы не нужно было выполнять эту процедуру при установке каждого дополнения. Вторая команда устанавливает версию 1.1.5 RELEASE дополнения Cloud Foundry. Команда будет выполняться несколько минут, поэтому будьте терпеливы.

  6. После установки дополнения необходимо войти в Cloud Foundry, чтобы иметь возможность выполнять операции. Для этого выполните в Roo Shell следующую команду:
         roo> cloud foundry login --email shekhargulati84@gmail.com --password ******
            --cloudControllerUrl http://api.cloudfoundry.com

    Команда cloud foundry login имеет три параметра – email, password и cloudControllerUrl. Параметры email и password обязательны. Значение cloudControllerUrl по умолчанию указывает на открытую облачную среду Cloud Foundry http://api.cloudfoundry.com. Для развертывания в микрооблачной среде или другой облачной среде необходимо указать этот URL-адрес.

  7. Все доступные для обращения к Cloud Foundry команды можно увидеть после ввода cloud foundry и нажатия клавиши Tab.
        roo> cloud foundry <Press Tab>                                                   
    
            cloud foundry bind       cloud foundry clear      cloud foundry create     
     
            cloud foundry delete     cloud foundry deploy     cloud foundry files 
    
            cloud foundry info       cloud foundry list       cloud foundry login      
    
            cloud foundry map        cloud foundry restart    cloud foundry start 
    
            cloud foundry stop       cloud foundry unbind     cloud foundry unmap      
     
            cloud foundry update     cloud foundry view
  8. Для просмотра информации, связанной с вашим экземпляром Cloud Foundry, выполните команду info, как показано ниже. Эта команда отобразит информацию об использовании памяти, количестве развернутых в Cloud Foundry приложений и количестве работающих сервисов. Отобразятся также максимальные значения выделенных ресурсов, т.е. максимальный размер оперативной памяти составляет 2 ГБ.
        roo> cloud foundry info 
            
    	   VMware's Cloud Application Platform 
    	   For support visit support@cloudfoundry.com 
    
    	   Target:     http://api.cloudfoundry.com (0.999) 
    
    	   User:     shekhargulati84@gmail.com 
    	   Usage:     Memory (0MB of 2048MB total) 
    	   Services (0 of 16 total) 
    	   Apps (0 of 20 total)
  9. Затем разверните приложение, выполнив команду cloud foundry deploy. Эта команда имеет два обязательных атрибута – appName и path. Атрибут appName представляет имя приложения, а атрибут path представляет путь к WAR-файлу. Путь вводить необязательно - просто нажмите клавишу Tab после path, и Spring Roo найдет путь за вас. Есть три необязательных атрибута – instances, memory и urls. По умолчанию запускается только один экземпляр приложения, но можно развернуть несколько экземпляров, если указать количество приложений в атрибуте instances. По умолчанию на экземпляр выделяется 256 МБ памяти. Для изменения этого значения используйте атрибут memory во время развертывания. Атрибут urls можно использовать для указания URL-адреса приложения. По умолчанию URL имеет вид <Название приложения>.cloudfoundry.com, т.е. для нашего приложения conference.cloudfoundry.com. Для развертывания приложения conference введите следующую команду:
        roo> cloud foundry deploy
             --appName conference --path /target/conference-0.1.0.BUILD-SNAPSHOT.war

    Атрибут path может иметь значение CREATE, если проект создается с использованием Maven. Если проект уже скомпонован, как в моем случае, вы увидите путь к war-файлу. В противном случае вы увидите CREATE, который предписывает сначала скомпоновать проект, а потом развернуть приложение.

  10. Развернутое приложение еще не запущено. Запустите приложение при помощи команды start:
    	cloud foundry start app --appName conference
  11. Просмотреть работающее приложение можно по адресу http://roo-conference.cloudfoundry.com/.

Ввод в эксплуатацию: замена HSQLDB на базу данных MySQL

Перейти с базы данных HSQLDB в локальной среде на MySQL в рабочей среде несложно. Прежде всего измените persistence store с HSQLDB на MySQL, используя Roo Shell, а затем создайте MySQL-сервис, используя дополнение Cloud Foundry, и свяжите сервис с приложением. Менять исходный код нет необходимости; единственное изменение выполняется в конфигурации. Не нужно даже иметь базу данных MySQL на локальном компьютере, поскольку тестирование выполняется непосредственно в облачной среде. Процесс разработки в Cloud Foundry так же прост, как и на локальной машине разработчика.

  1. Запустите Roo Shell и измените persistence store с HSQDB на MySQL, выполнив следующую команду:
        persistence setup --database MYSQL --provider HIBERNATE

    Эта команда изменит файлы pom.xml, database.properties и persistence.xml, указав MySQL в конфигурационных данных.

  2. Откройте другое окно командной строки и выполните команду mvn clean install -Dmaven.test.skip=true в корневой папке. Обратите внимание, что я пропускаю тестирование, поскольку у меня нет базы данных MySQL для приложения conference.
  3. После успешной сборки приложение готово к развертыванию. Однако перед развертыванием удалите старое приложение, чтобы можно было создать MySQL-сервис и повторно развернуть новое приложение. Не нужно удалять приложение при каждом изменении, поскольку можно использовать команду update для обновления развертывания.
        cloud foundry delete app --appName conference
  4. Теперь мы развернем наш новый war-файл, настроенный на MySQL.
    	cloud foundry deploy --appName conference --path 
            /target/conference-0.1.0.BUILD-	SNAPSHOT.war --memory 512MB
  5. Приведенная выше команда развертывает приложение, но его экземпляр пока не запускается. Поэтому до запуска приложения необходимо создать сервис MySQL и связать его с нашим сервисом. Для создания нового сервиса мы будем использовать команду Cloud Foundry create service, указав в ней serviceName и serviceType. Параметр serviceType может иметь значение MySQL, MongoDB или Redis.
    	cloud foundry create service --serviceName conference-db --serviceType mysql

    После создания сервис можно привязать при помощи команды bind service. Выполнение команды bind service гарантирует зависимость от источника данных MySQL в облачной среде. Этот процесс называется также внедрением зависимости (dependency injection) в облачную среду.

    	cloud foundry bind service --appName conference --serviceName conference-db

    Выполнения команды bind service можно избежать, указав атрибут appName в команде create service.
    	cloud foundry create service --serviceName conference-db --serviceType mysql
         	--appName conference
  6. Теперь можно запустить приложение conference при помощи команды start. Приложение будет доступно по адресу http://roo-conference.cloudfoundry.com/.
    	cloud foundry start app --appName conference
  7. Наконец, просмотрите список приложений и сервисов, выполнив команды Cloud Foundry list apps и list services:
    roo> cloud foundry list apps                     
    
    ================================= Applications ================================= 
    
    Name        Status    Instances   Services        URLs 
    ----        ------    ---------   --------        ---- 
    conference  STARTED   1           conference-db   conference.cloudfoundry.com 
    
    
    roo> cloud foundry list services 
    
    ================== System Services =================== 
    
    Service     Version     Description 
    -------     -------     ----------- 
    mongodb     1.8         MongoDB NoSQL store 
    redis       2.2         Redis key-value store service 
    mysql       5.1         MySQL database service 
    
    
    
    = Provisioned Services = 
    
    Name              Service 
    ----              ------- 
    conference-db     mysql

Заключение

В данной статье вы ознакомились с Cloud Foundry и узнали, чем она отличается от других PaaS-решений. Интеграция Cloud Foundry и Spring Roo предоставляет разработчикам среду быстрой разработки приложений для сборки и развертывания Spring-приложений из Roo Shell. В статье рассматривался процесс создания сервиса MySQL и связывания его с приложением.

В следующей статье серии мы рассмотрим другие сервисы Cloud Foundry, такие как Redis и MongoDB.


Загрузка

ОписаниеИмяРазмер
Образец кодаconference.zip---

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source, Технология Java
ArticleID=858634
ArticleTitle=Введение в Spring Roo: Часть 4. Быстрая разработка приложений в облачной среде при помощи Spring Roo и Cloud Foundry
publish-date=02202013