среда, 3 декабря 2014 г.

Как подружить IDE Eclipse и WebSphere Liberty Profile

В шестой версии спецификации Java EE было введено понятие профилей. Как определено в спецификации, профиль - это набор технологий и API, предназначенный для создания соответствующего типа приложений. В Java EE 6 определены следующие профили:

  • Full Platform - предназначен для разработчиков, которым нужен полный набор технологий Java EE для создания корпоративных приложений.

  • Web Profile - обеспечивает поддержку веб-технологий и является подмножеством full platform. Предназначен для разработчиков, не нуждающихся в полном наборе технологий Java EE.

Хорошая новость заключается в том, что сервер приложений IBM WebSphere Application Server обеспечивает поддержку обоих профилей. Если вам нужна вся мощь платформы Java EE, то вы можете воспользоваться IBM WebSphere Application Server Full Profile, если же вам нужна удобная среда для разработки и эксплуатации веб-приложений с дополнительными возможностями (EJB, MOM, Web-services, NoSQL-СУБД, интеграция с z/OS), то к вашим услугам IBM WebSphere Application Server Liberty Profile, о работе с которым я расскажу в данной статье.



Многие разработчики под WebSphere Application Server помнят времена седьмой версии, когда для работы с данным сервером приложений нужно было либо покупать специальное ПО от IBM, либо использовать платный MyEclipse. Можно конечно было собирать и разворачивать приложение с помощью Ant/Maven, но тогда становится недоступной такая удобная возможность, как hot deploy. Собирать и разворачивать большое приложение, содержащее множество библиотек, только для того, чтобы посмотреть, как же теперь отображается измененная jsp/facelet-страница, несколько неразумно.

Теперь жизнь разработчиков стала гораздо проще. Во-первых, мы имеем полную интеграцию сервера приложений и среды разработки. Во-вторых, для разработки под сервер приложений WebSphere AS его не нужно устанавливать, всю подготовительную работу можно выполнить, не выходя из Eclipse.

Давайте рассмотрим, как это сделать.

Прежде всего следует скачать и установить Eclipse IDE for Java EE Developers. После запуска IDE в чистом workspace откроется стандартная перспектива Java EE.


Нас сейчас интересует вкладка Servers.


Чтобы обеспечить интеграцию IDE и сервера приложений, необходимо установить соответствующий коннектор. Для этого нужно запустить мастер New Server, нажав на ссылку No servers are available. Click this link to create a new server....


Коннектор для IBM WebSphere Liberty Profile в состав Eclipse IDE for Java EE Developers по умолчанию не входит, его необходимо добавить. Для этого нужно воспользоваться мастером Install New Extension, запустив его с помощью ссылки Download additional server adapters.


Подгрузка информации о доступных коннекторах занимает некоторое время. В конце концов в списке появится пункт WebSphere Application Server V8.5 Liberty Profile Tools. После выделения данного пункта станет доступной кнопка Next.


После нажатия на кнопку Next запустится стандартный мастер установки нового ПО в Eclipse. На первом шаге данного мастера необходимо согласиться со всеми предложенными лицензиями.


Затем нас предупредят о том, что поддержка WebSphere Application Server V8.5 Liberty Profile будет установлена. Остается только с этим согласиться.


Запускается процудура установки, которая может занять несколько минут.


После успешного завершения установки коннектора он станет доступным в списке типов серверов диалогового окна New Server.


Выберем данный тип сервера и нажмем кнопку Next. Появится мастер настройки подключения к серверу приложений. Необходимо заполнить имя подключения (Name), выбрать каталог, в который установлен Liberty Profile, и указать JVM, под которой тот будет работать. Так как сам Liberty Profile еще не установлен, то необходимо запустить соответствующий мастер, нажав на ссылку download or install.


В появившемся диалоговом окне Install Runtime Environment необходимо отметить вариант Download and install a new runtime environment from и выбрать сервер, с которого будет осуществляться установка. Я выбираю Wasdev.net в качестве источника установки и IBM WebSphere Application Server Liberty Profile November Beta из появившегося списка доступных версий.


После нажатия кнопки Next появится окно Install Add-ons, заполнение которого займет некоторое время.


После заполнения окна необходимо нажать кнопку Next. В появившемся окне Installation Folder необходимо выбрать каталог, в который будет установлен Liberty Profile.


После нажатия кнопки Finish запускается процесс установки. Данный процесс может занять 20-30 минут. По окончании установки нас предупредят об этом.


И вернут на первый шаг мастера определения нового сервера Liberty Profile Runtime Environment.


После нажатия кнопки Next появится окно определения свойств сервера. В данном окне мы можем задать имя сервера (Server Name) и просмотреть его конфигурацию. По умолчанию нам доступны следующие возможности Liberty Profile: jsp-2.2, servlet-3.1 и Конечная точка HTTP, говорящая о том, что запущенный сервер будет доступен по порту 9080 (HTTP) и 9443 (HTTPS).


После нажатия кнопки Finish подключенный к Eclipse сервер приложений Liberty Profile отобразится на вкладке Servers. Теперь с ним можно работать: запускать и останавливать, а так же разворачивать приложения и синхронизировать конфигурацию.


Подготовим тестовый проект в Eclipse IDE. Выберем тип проекта Web/Dynamic Web Project, чтобы продемонстрировать азы использования Liberty Profile - работу с сервлетами и JSP.


Настроим свойства проекта. Прежде всего нас интересуют Target Runtime - WebSphere Application Server V8.5 Liberty Profile и Dynamic web module version - 3.0.


Добавим в проект простейший сервлет: Java-класс, аннотированный @WebServlet и являющийся наследником класса HttpServlet.


Наш сервлет не выполняет никакой работы, просто выводит на страницу выражение Get the Liberty!.

Развертывание приложения на WebSphere Liberty Profile осуществляется точно так же, как и на любом другом сервере приложений или контейнере сервлетов, например Apache Tomcat. Из контекстного меню сервера на вкладке Servers выбираем пункт Add and Remove. В появившемся диалоговом окне перетаскиваем проект на правую сторону. Для использования функции hot deploy отмечаем галочку If server is started, publish changes immediately.


При нажатии на кнопку Finish осуществляется развертывание приложения на сервере. После завершения данного процесса можно обратиться к нашему сервлету по URL http://localhost:9080/ИМЯ_ПРОЕКТА/МЭПИНГ_СЕРВЛЕТА.


Продемонстрируем работу функции hot deploy. Поменяем код сервлета, добавим туда вывод еще двух восклицательных знаков. Если в Eclipse включена функция компиляции после сохранения файла исходного кода, то обновленный сервлет автоматически компилируется и становится доступен серверу приложений.


Остановим приложение и добавим в него JSP-страницу. Поприветствуем ее.


После запуска приложения данная страница станет доступной по URL: http://localhost:9080/ИМЯ_ПРОЕКТА/ИМЯ_JSP.


Обновим код JSP, добавим восклицательный знак после Good Old JSP и сохраним страницу. Данные изменения сразу же становятся доступны серверу приложений.


Теперь добавим новую JSP без выключения и перезапуска сервера. Так и назовем ее AddMeOnTheFly.jsp. Данная страница становится сразу же видна серверу приложений.


Выводы. Мы рассмотрели процесс установки и настройки IBM WebSphere Application Server Liberty Profile в Eclipse IDE. Видно, что ситуация радикально изменилась со времен WebSphere Application Server 7.0. Корпорация IBM становится все более и более открытой к нам - разработчикам - и предлагает новые инструменты, упрощающие работу со своим сервером приложений. Достаточно просто скачать и установить Eclipse, чтобы начать использовать практически всю мощь Java EE. Это - довольно большое достижение. Сам иногда использую Liberty даже для написания прототипов, которые в принципе и не требуют WebSphere, просто это удобно.

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

Get the Liberty!

Понравилось сообщение - подпишитесь на блог

15 комментариев:

Unknown комментирует...

А есть информация, когда появится поддержка Java 8 в WAS и в рамках какой версии WAS это случится? А то уже заждались...

Pavel Samolisov комментирует...

Вы не обязаны использовать IBM JVM при работе с Liberty Profile, тот успешно запускается и работает с Oracle JDK 8.

Launching libertyServer (WebSphere Application Server 2014.11.0.0/wlp-1.0.3.20141103-0814) on Java HotSpot(TM) Client VM, version 1.8.0_25-b18 (en_US)
[AUDIT ] CWWKE0001I: The server libertyServer has been launched.

Если говорить о IBM JVM 8, то не могу назвать официальные сроки выхода. Сейчас вы можете подключиться к Open beta program for IBM SDK, Java Technology Edition, Version 8.

Unknown комментирует...

То есть не только при разработке, но в продакшене WAS можно запустить на Oracle JDK, вместо родной IBM'овской? С какой версии WAS доступна данная фича? Есть статьи с описанием, как подружить WAS с Oracle JDK?

Pavel Samolisov комментирует...

Я говорю только о Liberty Profile. Минимально поддерживаемыми версиями для Liberty Profile являются JDK 6: IBM Java SE 6.0 (J9 2.6) SR 1, Oracle Java 6 update 26; JDK 7: IBM Java Technology Edition 7.0.4.1, Oracle on Windows and Linux, the minimum supported level is Java SDK/JRE/JDK 7.0.17, Oracle on Mac OS X, the minimum supported level is Java SDK/JRE/JDK 7.0 Update 15.

Это данные из официальной документации.

Full Profile по прежнему требует IBM JVM.

Pavel Samolisov комментирует...

Коллеги, тем, кто хочет побольше узнать о WebSphere Application Server 8.5.x, в частности какие функции включены в Liberty Profile, рекомендую статью Improve Your Availability, Scalability and z/OS Mobile Access With WebSphere Application Server V8.5.

ZeroSetup комментирует...

Не удалось увидеть работающий Hot-swap на WebSphere Application Server 8.5.5.8/wlp-1.0.11.cl50820151201-1942) on Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_60-b27 (en_US)

Все время делает рестарт приложения.

Pavel Samolysov комментирует...

Вы имели ввиду Hot Deploy?

ZeroSetup комментирует...

Да, Hot Deploy. Меня это заинтересовало, ибо ни Spring Loaded, ни www.hotswapagent.org не совсем устраивают, на JRebel денег нет. Немало помучался, последнее - пытался в конфигруции включить Developer Mode, но безрезультатно.
Automatically Publish when resource change включал-выключал.
Здесь что-то непонятное описано, применимо ли?
http://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/trun_app_hotupgrade.html

http://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/urun_rapp_classload.html?lang=en


И еще иногда перестает нормально публиковать и приходится пересоздавать сервер в Eclipse.

Да, WAS Liberty Kernel не хватает для развертывания web-приложения(это как Вы пишете 11 Мб), нужно ставить WAS Libery with Java EE 7 Web Profile, а он поболе(85.5 MB в развернутом виде).

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

Вот такие впечатления.





Pavel Samolysov комментирует...

Весь вебпрофиль может быть не нужен, для спринговых приложений может хватить только нескольких фич, servlet-3.0/3.1, jdbc и т.д., сила Либерти именно в этой модульности. По поводу консоли управления - посмотрите Admin Center. Остальные вопросы поизучаю, постараюсь ответить.

Pavel Samolysov комментирует...

И да, огромное спасибо, что поделились столь развернутым описанием ваших впечатлений.

ZeroSetup комментирует...

Так ведь этот праздник в бесплатном варианте имеет ограничение на 2Гб памяти:

https://developer.ibm.com/wasdev/docs/websphere-application-server-everyone/

Впридачу: The 2GB limit is organisation-wide.

Тяжело аргументировать покупку, если для реализации проекта JEE есть GlassFish, TomEE и вроде Apache Wicket.

Понимаю, IBM-у нужно деньги зарабатывать. Наверно часто он идет как часть "решения IBM", т.е. железо, ОС и WAS - все от IBM.

А ведь его модульность, действительно очень привлекательна.

Pavel Samolysov комментирует...

@ZeroSetup

Железо, ОС, DB2 и WAS как часть общей платформы идут на мейнфреймах, да и то несколько месяцев назад анонсированы новые сервера LinuxONE, представляющие собой мейнфреймы, снабженные только IFL-процессорами, т.е. позволяющие запускать только Linux, позиционируемые как неограничено масштабируемая платформа для работы как IBM'овского, так и Open Source софта. Да что говорить, там поддерживаются даже Ubuntu и KVM. На остальных - дистрибьютед платформах, как мы их называем, - WebSphere Application Server покупают просто как сервер приложений, успешно ходят из него в Oracle Database и запускают на нем самые разные системы, как самописные, разработанные на самом предприятии или подрядчиком, так и известные пакетные приложения, например EMC Documentum. Насколько я знаю, даже Oracle SOA Suite может работать на WebSphere Application Server'е, правда скорее всего на Classic.

Почему же заказчики покупают сервер приложений с поддержкой от известного вендора, вместо того, чтобы использовать бесплатные решения? Частично я освещал эту тему в статье А почему бы мне не заплатить за мой Spring Framework? Ключевое - нефункциональные требования. Да, и Apache TomEE, и Glassfish (похоже R.I.P), и JBoss (платный?) являются платформами для того же самого стека Java EE, но дьявол как обычно кроется в мелочах. И задача продавца из IBM, который будет помогать вам аргументировать покупку, заключается в том, чтобы понять, а нужны ли вам эти опции. Нужны ли Dynamic Routing, Auto Scaling, Intelligent Management и т.д.

Другая причина, по которой покупают промышленные сервера приложений, - поддержка известным производителем. Существуют системы, несколько часов/сутки простоя которых стоят дороже, чем лицензии на сервер приложений и СУБД. Речь даже не столько о финансовых учреждениях, хотя большинство россиян столкнулись со знаменитым простоем карточного процессинга одного известного банка пару лет назад. Представьте себе простой любого московского аэропорта, крупной железнодорожной компании (единственной в стране крупной железнодорожной компании :)), энергосбыта и т.д. Я конечно не говорю, что у всех у них WebSphere Application Server, но менеджменту зачастую нужно, чтобы в случае критичных проблем тут же приехал (связался по телефону) человек и починил за четко установленное в SLA время. Я не знаю ни одного случая внедрения TomEE в нашей богоспасаемой стране, ровно как и фирмы, гарантирующей 24/7 поддержку данного сервера приложений. Аналогичные соображения про Glassfish, знаю только, что есть коммерческая версия данного сервера, но ее поддерживают коллеги из Туманного Альбиона и похоже только там + та Европа, что западнее Белоруссии. Red Hat более активен.

Pavel Samolysov комментирует...

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

ZeroSetup комментирует...

В установленном в Eclipse "WebShere Software Installer" есть "Dojo Toolkit".
Известны ли планы IBM насчет "Dojo Toolkit", а то в "IBM developerWorks" давно нет новых материалов про него. В интернетах тоже тишна. А IBM была(и остается?) одним из основных контрибьюторов проекта. Еще IBM разработчик важного компонента Dojo - GridX.

ZeroSetup комментирует...

Кажется мы говорили о разном, Вы про "Hot Deploy", то есть при изменении класса он автоматически подменяется в развернутом приложении. Но при этом приложении перезапускается.
А я про "Hot Swap", то есть замена класса без перезапуска приложения.
Описано здесь:
HotSwap vs hot deploy
http://arhipov.blogspot.lt/2016/02/hotswap-vs-hot-deploy_12.html

Это должно быть реализовано на уровне Java VM, я запустился под IBM J9 но ничего не заработало, пробовал флаг -Xdebug для java, но безуспешно. Хотя где-то читал, что в IBM J9 лучше сделан HotSwap, чем у Sun-Oracle, что можно и сигнатуру метода менять, а не только содержимое.

Опять не понимаю IBM, если есть такая kill-фича для разработчиков, почему ничего не слышно, в интернетах ничего не нашел.

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!