пятница, 8 апреля 2016 г.

Развертывание ADF приложений в Oracle Java Cloud Service (Build and deploy ADF applications to Oracle Java Cloud Service)

Облачная служба Oracle Java Cloud Service – это PaaS-решение корпоративного класса, предоставляющее комплексную платформу и инфраструктуру для создания, развертывания и обслуживания приложений Java EE. В качестве контейнера приложений используется сервер приложений Oracle WebLogic. Поддерживаются все редакции Oracle WebLogic Server 11g и Oracle WebLogic Server 12c

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

Доступ к службе осуществляется по подписке. На месяц можно оформить бесплатную подписку

В этот статье я хочу рассказать как собирать и развертывать ADF проекты в Oracle Java Cloud Service (OJCS) , а так же  рассказать о его возможностях.

В OJCS для разработки используется сервис Developer. Что бы подписаться на него, нужно   зайти на следующую страницу: https://cloud.oracle.com/developer_service

 







После того как вы оформите подписку в dashboard у вас появится три сервиса (Database schema - для работы с бд, java - для развертывания приложений,developer - для разработки) со статусом initialized. Вам нужно дождаться статуса active, и можно приступать к работе(активация может проходить до месяца)

До активации:
После активации :


После того как Oracle  активирует сервисы, появится возможность зайти по следующей ссылке : https://myservices.us2.oraclecloud.com/mycloud/faces/dashboard.jspx , где us2 - название датацентра(так же ссылка на сервисы вам будет прислана на почту).  Приступим к созданию проекта. Откройте service console у Developer сервиса.  Откроется страница предлагающая создать ваш первый проект. Нажмите на "Create Project".


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


Далее нужно инициализировать проект. Можно создать пустой проект, создать проект с репозиторием в котором будет код проекта, и создать проект с простым SOAP сервисом. Выберем пункт "Initial Repository"


В последнем окне нужно указать тип Wiki Markup (язык форматирования для документации)  и указать адрес к репозиторию (я буду использовать созданный ранее проект с github : https://github.com/JealousyM/captcha




После нажатия кнопки "Finish" , начнет генерироваться проект.


И через некоторое время  появится окно со следующими вкладками :
  • Home - главная вкладка на которой выводятся последние события на проекте и его репозитории 

  • Code - вкладка с кодом проекта




  • Snippets  - вкладка для сохранения небольших фрагментов исходного кода
  • Merge requests - вкладка для инспекции кода 
  • Issues - вкладка для управления проектом. В ней можно создавать задачи разных типов(Task,Defect,Feature), назначать на разработчиков, устанавливать ожидаемое время разработки.  Это конечно не jira, но для небольшого проекта полезная вещь. Как минимум  не хватает почасового эстимэйта и возможности составления отчетов по задачам.


  • Agile - вкладка для создания спринтов. Agile - это подход к разработке программного обеспечения. Sprint - это итерация в  разработке длящаяся от 1 недели до месяца.


Что бы начать работать с вкладкой Agile, нужно создать Board, и указать какие задачи в ней будут отображаться.

Далее нужно создать сам спринт :


После создания спринта,  окно поделится на две части : Sprint(текущие задачи) и Backlog(задачи которые можно добавить в спринт). Задачи с бэклога в спринт добавляются простым перетягиванием задачи.


Так же после создания спринта появится кнопка "Active Sprints".  Если на нее нажать, отобразятся задачи в спринте и их статус.

После того как задачи назначены и спринт стартован, нужно выполнять задания. У меня это развертывание и деплой проекта. Следовательно можно говорить о следующих вкладках
  • Build -  вкладка на которой происходит настройка сборки приложения. При нажатии на нее открывается  обзор существующих сборок с кнопкой создания новой сборки (New Job)



При создании новой сборки появятся следующие вкладки:



OJCS для сборки использует Hudson. И если вы читал статью об автоматизации сборки в нем  (http://www.oracle-adf.info/2016/02/deploy-adf-hudson.html), то здесь будет разобраться не сложно.

На  первой вкладке нужно указать  название сборки и используемый JDK.

После, нужно зайти на вкладку Source Control и выбрать необходимый репозиторий для сборки :

Следующая важная вкладка Build steps, в ней нужно указать target-ы созданные ранее в  build.xml файле вашего приложения. Для ADF приложений для деплоя можно автоматически сгенерировать build файлы в JDeveloper (File->New->Ant->Application Build File).
В сгенерированный build.xml добавьте строку : <property environment="env" />

build.xml


<?xml version="1.0" encoding="UTF-8" ?>

<project name="Captcha">
<property environment="env" />
<property file="build.properties"/>
<target name="deploy" description="Deploy JDeveloper profiles">
<taskdef name="ojdeploy"
classname="oracle.jdeveloper.deploy.ant.OJDeployAntTask"
uri="oraclelib:OJDeployAntTask"
classpath="${oracle.jdeveloper.ant.library}"/>
<ora:ojdeploy xmlns:ora="oraclelib:OJDeployAntTask"
executable="${oracle.jdeveloper.ojdeploy.path}"
ora:buildscript="${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml"
ora:statuslog="${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml">
<ora:deploy>
<ora:parameter name="workspace"
value="${oracle.jdeveloper.workspace.path}"/>
<ora:parameter name="profile"
value="${oracle.jdeveloper.deploy.profile.name}"/>
<ora:parameter name="nocompile" value="false"/>
<ora:parameter name="outputfile"
value="${oracle.jdeveloper.deploy.outputfile}"/>
</ora:deploy>
</ora:ojdeploy>
</target>
</project>

build.properties  нужно подкоректировать  немного больше. Требуется прописать системные переменные OJCS  вместо сгенерированных. Вот список существующих переменных

ПеременнаяОписание
ORACLE_HOME
Путь, где установлен JDeveloper на Hudson 
Доступны следующие переменные(для разны версий JDeveloper):
  • ORACLE_HOME=/opt/Oracle/Middleware_11.1.1.7.1/jdeveloper
  • ORACLE_HOME_11G=/opt/Oracle/Middleware_11.1.1.7.1/jdeveloper
  • ORACLE_HOME_11_1_1_7_1=/opt/Oracle/Middleware_11.1.1.7.1/jdeveloper
  • ORACLE_HOME_12C3=/opt/Oracle/MiddlewareSOA_12.1.3/jdeveloper
Для SOA :
  • ORACLE_HOME_SOA=/opt/Oracle/MiddlewareSOA_12.1.3/jdeveloper
  • ORACLE_HOME_SOA_12_1_3=/opt/Oracle/MiddlewareSOA_12.1.3/jdeveloper
  • ORACLE_HOME_SOA_12_2_1=/opt/Oracle/MiddlewareSOA_12.2.1/jdeveloper
MIDDLEWARE_HOME
Путь где установлен  Oracle Fusion Middleware на сервере Hudson 
  • MIDDLEWARE_HOME=/opt/Oracle/Middleware_11.1.1.7.1
  • MIDDLEWARE_HOME_11G=/opt/Oracle/Middleware_11.1.1.7.1
  • MIDDLEWARE_HOME_11_1_1_7_1=/opt/Oracle/Middleware_11.1.1.7.1
  • MIDDLEWARE_HOME_12C3=/opt/Oracle/MiddlewareSOA_12.1.3
 Для SOA :
  • MIDDLEWARE_HOME_SOA=/opt/Oracle/MiddlewareSOA_12.1.3
  • MIDDLEWARE_HOME_SOA_12_1_3=/opt/Oracle/MiddlewareSOA_12.1.3
  • MIDDLEWARE_HOME_SOA_12_2_1=/opt/Oracle/MiddlewareSOA_12.2.1
WLS_HOME
Путь к   WebLogic  серверу:
  • WLS_HOME=/opt/Oracle/Middleware_11.1.1.7.1/wlserver_10.3
  • WLS_HOME_11G=/opt/Oracle/Middleware_11.1.1.7.1/wlserver_10.3
  • WLS_HOME_11_1_1_7_1=/opt/Oracle/Middleware_11.1.1.7.1/wlserver_10.3
  • WLS_HOME_12C3=/opt/Oracle/MiddlewareSOA_12.1.3/wlserver
Для  SOA :
  • WLS_HOME_SOA=/opt/Oracle/MiddlewareSOA_12.1.3/wlserver
  • WLS_HOME_SOA_12_1_3=/opt/Oracle/MiddlewareSOA_12.1.3/wlserver
  • WLS_HOME_SOA_12_2_1=/opt/Oracle/MiddlewareSOA_12.2.1/wlserver
После замены переменных сред, build.properties должен выглядеть так (для JDeveloper 11g)  :

oracle.commons=../../../../oracle_common/
install.dir=../../../..
oracle.home=${env.ORACLE_HOME_11G}
oracle.jdeveloper.workspace.path=${env.WORKSPACE}/Captcha.jws
middleware.home=${env.MIDDLEWARE_HOME_11G}
workspace=${env.WORKSPACE}
oracle.jdeveloper.ant.library=${env.ORACLE_HOME_11G}/jdev/lib/ant-jdeveloper.jar
oracle.jdeveloper.deploy.dir=${env.WORKSPACE}/Captcha/deploy
oracle.jdeveloper.ojdeploy.path=${env.ORACLE_HOME_11G}/jdev/bin/ojdeploy
javac.nowarn=off
oracle.jdeveloper.project.name=Captcha
oracle.jdeveloper.deploy.outputfile=${env.WORKSPACE}/Captcha/deploy/${profile.name}
output.dir=classes
javac.deprecation=off
oracle.jdeveloper.deploy.profile.name=*
javac.debug=on

Теперь, если в вашем приложении сгенерированы  и запушены эти два файла... необходимо на вкладке Build steps добавить Ant шаг и в targets прописать deploy.


Что бы собранное приложение развернулось на сервере, нужно  зайти на вкладку  "Post Build" и  поставить галочку напротив пункта "Archive the artifacts"  и указать  откуда копировать артифакт необходимый для деплоя( ear архив приложения, обычно находится в папке deploy) 




Настройка сборки готова. Нажав на Save  откроется окно обзора текущей сборки, где  отображаются последние состояния сборки, указываются доступные артифакты и можно в выполнить сборку (так же в настройках можно настроить автоматическую сборку  на вкладке Triggers)




  • Deploy - после того как  проект собран, его нужно развернуть на сервере. Для этого существует  вкладка "Deploy". Что бы создать новую конфигурацию, нажми на "New Configuration"  .  Там нужно указать  название конфигурации, название приложения , выбрать облако на которое будет устнавливаться приложение, выбрать сборку  и артифакт для развертывания и тип (последняя удачная сборка или выбор необходимой из списка)



    После этого можно запустить Deploy. При удачном развертывании приложения  появится ссылка приложение

Так же на вкладке Deploy есть ссылка на Weblogic console, где можно  увидеть состояние приложени, логи и тп.










  • Wiki  - при разработке в команде, нельзя обойтись без единой базы знаний. Так как в больших проектах, без техинческой и пользовательской документации не обойтись. На вкладке  Wiki, можно создавать страницы с текстом, связывать их и преклеплять файлы. При этом можно использовать два языка разметки :Wiki и Confluence 
  • Administration -  вкладка для администрирования проекта

В сети есть презентация Эмина Аскерова(обзор Oracle Java Cloud и Oracle Developer Cloud сервисов)
: https://www.youtube.com/watch?v=9kibya_rBM0

Описание по использованию  jcs(на английском): https://docs.oracle.com/cloud/latest/jcs_gs/jcs_tutorials.htm