Содержание


Переход на Liberty Profile

Часть 3. Миграция приложения с JBoss на Liberty Profile

Comments

Серия контента:

Этот контент является частью # из серии # статей: Переход на Liberty Profile

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Переход на Liberty Profile

Следите за выходом новых статей этой серии.

Цель этой статьи – выявить и устранить несовместимости при преобразовании устаревших приложений J2EE™ 1.4, которые используют ресурсоемкие bean-компоненты EJB2.x, исполняющиеся в среде JBoss V5.0.1.GA, в облегченные приложения Java™ EE 6, которые используют EJB3-компоненты, исполняющиеся в среде IBM WebSphere Application Server V8.5.5 Liberty Profile.

Приведенный в статье пример иллюстрирует шаги при миграции со следующих технологий и инфраструктур Java.

  • Java Servlet 2.4
  • JavaServer™ Pages (JSP) 2.0
  • Enterprise Java Beans (EJB) 2.x
  • Java Database Connectivity (JDBC) 4.0
  • Java Authentication and Authorization Service for Java SE 6
  • Classic Hibernate.

Учебное приложение

Учебное приложение, используемое в этой статье, представляет собой измененную версию приложения Document Manager, которое использовалось в статье JBoss to Geronimo - Security Migration. Это приложение является характерным представителем существующих J2EE-приложений, исполняющихся в ресурсоемких контейнерах, таких как JBoss, с которыми организация может встретиться при осуществлении перехода к облегченным контейнерам Java EE, таким как Liberty Profile.

Приложение Document Manager поддерживает несколько сценариев применения, позволяющих пользователям просматривать документы и загружать их в это приложение. Приложение имеет определенные ограничения по безопасности. Приложение состоит из трех страниц (рис. 1).

  • Страница Login
  • Страница Documents
  • Страница Login Error
Рисунок 1. Структура учебного приложения
Sample application overview
Sample application overview

Приложение начинает работу со страницы Login. После входа пользователя в приложение он перенаправляется на страницу Documents. Существуют два типа пользователей: viewer (обычный пользователь) и editor (редактор). Пользователи обоих типов способны просматривать документы, однако загружать документы в приложение (Upload) способен только редактор.

Если пользователю присвоена роль editor, под списком документов отображается форма для загрузки документа в приложение. После того, как пользователь выберет документ и нажмет кнопку Upload, на исполнение запустится сервлет Upload, который вызовет метод upload сеансового bean-компонента DocumentManagerBean. Если не прошедший авторизацию пользователь попытается вызвать сервлет Upload, приложение Security выдаст исключение.

В приложении заранее определено два идентификатора пользователя:

  • пользователь user с паролем 1
  • пользователь editor с паролем 2.

Файл для загрузки, предлагаемый вместе с данной статьей, содержит приложение Document Manager, необходимое читателю для освоения материала статьи и выполнения описанных ниже шагов. Приложение содержится в файле OriginalDocumentManager.ear и состоит из следующих компонентов.

  • DocumentManager.ear - EAR-архив, в который упакованы все JAR-файлы и модули для приложения DocumentManager.
  • DocumentManagerWeb.war - Web-архив, содержащий все сервлеты и JSP-страницы, которые обрабатывают действия пользователя и отображают документы пользователя.
  • DocumentManagerEJB.jar - EJB-архив, содержащий компоненты типа stateless session bean и объекты типа data access object для извлечения документов пользователя из базы данных.
  • DocumentManagerSAR.sar - Архив проприетарного JBoss-сервиса, содержащий модуль JBoss custom JAAS login module, который осуществляет аутентификацию и авторизацию для приложения DocumentManager.
  • DocumentManagerHibernate.jar - Служебный JAR-архив, содержащий конфигурацию Hibernate и отображения классов.

Приложение представлено в виде EAR-архива (Enterprise Application Archive), как показано на рис. 2.

Рисунок 2. EAR-структура учебного приложения
Sample application EAR structure
Sample application EAR structure

В остальной части статьи демонстрируются следующие этапы.

  1. Настройка и исполнение учебного приложения.
  2. Анализ пригодности приложения для миграции в среду Liberty Profile. В этом разделе используется инструментарий Liberty Tech Preview, описанный в первой части.
  3. Миграция с JBoss на Liberty Profile. В этом разделе описываются проблемы портирования, выявленные при анализе на шаге 2. На данном шаге используется инструментарий WebSphere Configuration Migration Toolkit.

Сопутствующие материалы для данного пособия

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

Таблица 1. Компоненты учебного приложения
Имя файлаОписание
OriginalSampleApp.zipРабочее пространство Eclipse, содержащее учебное приложение, которое исполняется на сервере JBoss.
OriginalDocumentManager.earEAR-файл первоначального приложения Document Manager.
MigratedSampleApp.zipРабочее пространство Eclipse, содержащее учебное приложение, которое исполняется на сервере Liberty Profile.
MigratedDocumentManager.earEAR-файл мигрированного приложения Document Manager.
JBossConfig.zipКонфигурация сервера JBoss, содержащая драйвер Derby и источник данных.
server.xmlКонфигурация сервера Liberty Profile, содержащая драйвер Derby и источник данных.
DerbySampleDB.zipФайлы базы данных Derby, к которым обращается учебное приложение.

3. Миграция с JBoss на Liberty Profile

Теперь мы осуществим миграцию среды развертывания, исходного кода приложения и дескрипторов развертывания приложения, конфигурации сервера приложений JBoss и модуля JBoss custom JAAS login module. После этого мы сможем исполнять это приложение на сервере Liberty.

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

a. Миграция среды разработки

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

  1. Загрузите плагин WebSphere Developer Tools и установите его в среде Eclipse.
  2. Затем загрузите среду исполнения Liberty Profile. Нажмите на кнопку Download, чтобы получить установочный JAR-файл продукта IBM WebSphere Application Server V8.5.5.4 Liberty Profile, а затем выполните команду java -jar wlp-runtime-8.5.5.5.jar, чтобы создать папку с именем wlp.
  3. Создайте новый сервер из среды Eclipse. В представлении Server нажмите правой кнопкой и выберите New > Server > IBM > WebSphere Application Server Liberty profile, а затем нажмите Next.
  4. Выберите Choose an existing installation и перейдите в папку wlp, которую вы только что создали. Нажмите Next.
  5. Оставьте значения по умолчанию и нажмите Finish. В результате будет создан сервер Liberty Profile с именем defaultServer.

b. Повышение уровня спецификации

Сначала необходимо повысить уровень спецификации для модулей приложения. Для этого на странице Project Facets можно внести изменения в свойства проекта, чтобы указать другой уровень модуля и другую версию Java для Eclipse-проекта. В результате этих изменений будут обновлены дескрипторы развертывания и вы сможете связать свой проект с целевой средой исполнения. В результате задания целевой среды исполнения библиотеки поддерживаемой среды исполнения Java EE включаются в маршрут сборки проекта.

  1. Чтобы модернизировать EAR-проект посредством изменения свойств project facets, нажмите правой кнопкой на EAR-проект и выберите Document Manager > Properties > Project Facets (рис. 10).
  2. Для пункта EAR в столбце Version выберите значение 6.0.
  3. На вкладке Runtimes выберите WebSphere Application Server Liberty Profile и нажмите OK (рис. 10).
    Рисунок 3. Окно Project facets
    Project facets
    Project facets
  4. Чтобы изменить значения для EJB-модуля нажмите правой кнопкой на EJB-проект и выберите DocumentManagerEJB > Properties > Project Facets (рис. 11). Измените значение EJB Module на 3.1, а значение Java – на 1.7.
  5. На вкладке Runtimes выберите WebSphere Application Server Liberty Profile и нажмите OK.
    Рисунок 4. Присвоение значений свойствам среды исполнения
    Assign properties to runtime
    Assign properties to runtime
  6. Чтобы изменить значения для веб-модуля нажмите правой кнопкой мыши на DocumentManagerWeb > Properties > Project Facets (рис. 12).
  7. Измените значение Dynamic Web Module на 3.0 , а значение Java – на 1.7.
  8. На вкладке Runtimes поставьте флажок у пункта Liberty Profile и нажмите OK.
    Рисунок 5. Присвоение значений свойствам среды исполнения
    Assign properties to runtime
    Assign properties to runtime

1. Настройка и исполнение учебного приложения

a. Установка сервера баз данных Derby

Учебное приложение использует сервер Derby для сопровождения информации документов. Для работы приложения Document Manager вам потребуется база данных для обращения к данным документов, демонстрируемых этим приложением. С целью упрощения излагаемого материала в качестве базы данных будет использоваться Derby – потребляющая весьма мало ресурсов и простая в использовании база данных.

Загрузите файл db-derby-10.11.1.1-bin.zip со страницы выпусков Apache Derby. После завершения загрузки извлеките сжатый архивный файл. В данной статье эта папка будет иметь имя <DERBY_HOME>.

b. Импорт учебных баз данных в Derby

Из материала для загрузки, предлагаемого вместе с данной статьей, распакуйте содержимое архива DerbySampleDb.zip. Распакованный материал будет находиться в папке, которая в данной статье имеет имя <SAMPLE_DB>.

Для импорта базы данных в Derby выполните следующие шаги.

  1. Скопируйте папку <SAMPLE_HOME> в папку <DERBY_HOME>/lib. Вы увидите, что папка sampledb скопирована в папку <DERBY_HOME>/lib. В этой папке находятся файлы базы данных Derby, к которым обращается учебное приложение.
  2. Чтобы запустить Derby, перейдите в каталог <DERBY_HOME>/lib и запустите Apache Derby Network Server, для чего выполните команду java -jar ./derbyrun.jar server start.

c. Установка и конфигурирование сервера приложений JBoss

  1. Загрузите сервер JBoss для развертывания вместе с учебным приложением. После загрузки распакуйте содержимое сжатого архива JBoss. В данной статье эта папка будет иметь имя <JBOSS_HOME>.
  2. Из материала для загрузки, предлагаемого вместе с данной статьей, распакуйте из архива JBossConfig.zip копию конфигурации JBoss, необходимой для этого приложения. Распакованный материал будет находиться в папке, которая в данной статье имеет имя <JBOSS_CONFIG>.
  3. Скопируйте папку <JBOSS_HOME>/server/default в папку <JBOSS_HOME>/server/dworks.
  4. Скопируйте папку <JBOSS_CONFIG> в папку <JBOSS_HOME>/server. В результате этого конфигурации будут добавлены в папку dworks. Когда Windows предложит слить эти папки, нажмите OK.

    В конфигурацию dworks были добавлены следующие файлы (необходимые учебному приложению).

    • deploy/Derby-ds.xml - Конфигурация Derby datasource в JBoss.
    • deploy/DocumentManager.ear - EAR-файл приложения, развертываемого на сервере JBoss. Если сервер JBoss уже запущен, он автоматически развернет и запустит приложение; в противном случае приложение будет развернуто и запущено при следующем запуске этого сервера.
    • lib/derby.jar and lib/derbyclient.jar - Java-драйверы базы данных Derby.
  5. Запустите новый сервер, для чего выполните команду run.sh –c dworks (в Windows используйте run.bat) в каталоге <JBOSS_HOME>\bin.
  6. После запуска сервера убедитесь в том, что он исполняется. Для этого откройте веб-браузер и перейдите по адресу http://localhost:8080. Вы должны увидеть окно JBoss Welcome и иметь возможность обратиться к консоли сервера JBoss.

d. Исполнение учебного приложения на сервере JBoss

Запустите сервер JBoss, если он еще не запущен, для чего перейдите в каталог <JBOSS_HOME>/bin и выполните команду run.bat. Откройте веб-браузер и перейдите по адресу http://localhost:8080/document.

Войдите в систему как редактор с именем пользователя editor и паролем 2. Пользователь с действительными полномочиями editor будет иметь доступ по чтению к документам EditorXXX.doc и возможность загружать документы в приложение (только с целью отображения), см. рис. 3.

Рисунок 6. Доступ пользователя editor
Editor access
Editor access

Пользователь с действительными базовыми полномочиями user будет иметь доступ по чтению только к документам UserXXX.doc (рис. 4).

Рисунок 7. User access
User access
User access

2. Анализ пригодности приложения для миграции в среду Liberty Profile

В этом разделе мы настроим среду разработки для использования при миграции, выполним анализ миграции и выявим, какие изменения требуются для переноса приложения в среду WebSphere Application Server Liberty Profile.

a. Установка Eclipse IDE

Сначала нужно сформировать первоначальную среду развертывания, которая использовалась для сборки учебного приложения. Эта же IDE-среда будет использована в последующих разделах для анализа приложения на предмет проблем портирования и для миграции приложения с JBoss на Liberty.

  1. Загрузите и установите IDE-среду Eclipse Luna for Java EE Developers.
  2. Если у вас еще нет среды разработки Oracle для Java 6 или Java 7, загрузите и установите пакет Oracle Java 6 JDK для Linux или для Windows.
  3. Настройте переменные среды JAVA_HOME и PATH.


    В среде Windows (из командной строки):

    • Set JAVA_HOME=<jdk6-install-dir>
    • Export JAVA_HOME
    • Set PATH=%JAVA_HOME%\bin;%PATH%
    • Export PATH


    В среде Linux (из терминала):

    • Export JAVA_HOME=<jdk6-install-dir>
    • Export PATH=$JAVA_HOME/bin:$PATH

b. Импорт учебного приложения

Из материала для загрузки, предлагаемого вместе с данной статьей, распакуйте содержимое архива OriginalSampleApp.zip. Распакованный материал будет находиться в папке, которая в данной статье имеет имя <SAMPLE_APP>. Для импорта приложения в Eclipse выполните следующие шаги.

  1. Запустите Eclipse IDE.
  2. В меню Eclipse выберите File > Import > General > Existing Projects into Workspace и нажмите Next (рис. 5).
    Рисунок 8. Импорт архивного файла
    Import archive file
    Import archive file
  3. В диалоговом окне Import Projects выберите Select archive file и перейдите к <SAMPLE_APP>. Нажмите Finish (рис. 6).
    Рисунок 9. Проекты импорта
    Import project
    Import project

c. Анализ приложения

Инструменты Application Migration Toolkit и Liberty Tech Preview были описаны в первой части данного цикла. Инструмент Liberty Tech Preview, исполняющийся поверх инструмента Migration Toolkit, позволяет осуществлять миграцию с разных серверов приложений – включая JBoss, WebLogic Server, Oracle® Application Server и Apache Tomcat – на сервер Liberty Profile. Он также позволяет перейти с более старых и с текущих версий традиционных редакций продукта IBM WebSphere Application Server в среду Liberty Profile или в облако.

Загрузите и установите инструмент WebSphere Application Migration Toolkit в среде Eclipse, для чего выберите Help > Install New Software… и затем нажмите Add… Добавьте URL-адрес местонахождения репозитария:

https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/updates/wamt/MigrationToolkitCompetitive

Возможно, среде Eclipse придется перезапуститься в процессе установки. После установки инструмента запустите пакет Liberty Technology Rule Set в рабочем пространстве.

  1. В меню Eclipse выберите опцию Run > Analysis.
  2. Создайте новую конфигурацию Software Analyzer.
  3. В поле Name введите имя конфигурации, например, Liberty Technology Rules.
  4. На вкладке Scope выберите Analyze entire workspace для сканирования всех проектов в рабочем пространстве или Analyze selected projects для сканирования выбранных проектов в рабочем пространстве (рис. 7).
    Рисунок 10. Вкладка Scope
    Scope tab
    Scope tab
  5. На вкладке Rule выберите JBoss Application Migration с использованием списка Rule Sets list и нажмите кнопку Set… (рис. 8).
    Рисунок 11. Вкладка Rules
    Rules tab
    Rules tab
  6. В поле Target application server выберите Other Liberty Editions V8.5.5, а в поле Target Java выберите IBM Java 6 или IBM Java 7 в зависимости от установленной у вас версии Java (рис. 9).
    Рисунок 12. Окно Rule set configuration
    Rule set configuration
    Rule set configuration
  7. Нажмите OK, а затем Apply.
  8. Нажмите кнопку Analyze. Инструмент проанализирует приложение и сгенерирует список существующих и потенциальных проблем в представлении Software Analyzer Results.
  9. Рассмотрите проблемы в представлении Software Analyzer Results (позднее мы рассмотрим эти проблемы и исправим их). Обязательно просмотрите проблемы на вкладках XML File Review и Java Code Review.

В таблице 2 приведены результаты работы анализатора.

Таблица 2. Результаты работы анализатора
ТипПроблемаКомпонентОписание
Java, XMLCheck for Hibernate framework (Проверка на наличие инфраструктуры Hibernate) DocumentManagerDAO.java, Hibernate.cfg.xml в DocumentManagerHibernate Приложение использует инфраструктуру Hibernate. В общем случае, никаких дополнительных действий в процессе миграции не требуется, однако перед переходом к производственному использованию рекомендуется убедиться в соблюдении типовых методик WebSphere Application Server относительно Hibernate.
XMLJBoss specific files (Специфические файлы JBoss) jboss.xml, jboss-web.xmlИнформацию специфических дескрипторов развертывания JBoss необходимо перенести для использования в среде Liberty.
XMLUse WebSphere bindings to define EJB JNDI names (Использование связываний WebSphere для определения JNDI-имен EJB-компонента)jboss.xmlJNDI-имя определяется для каждого домашнего EJB-объекта (согласно требованиям спецификации EJB 2.1). Определение связывания необходимо мигрировать в среду WebSphere Application Server.
XMLUse WebSphere extensions to define web module context root (Использование расширений WebSphere для определения корня контекста веб-модуля)jboss.xmlКорень контекста необходимо мигрировать из файла сервера JBoss в расширения веб-модуля WebSphere Application Server.
XMLRemote interfaces for Enterprise JavaBeans(EJB) are unavailable (Remote-интерфейсы для EJB недоступны)ejb-jar.xmlRemote-интерфейсы для EJB не поддерживаются в среде Liberty Profile.
XMLEnterprise JavaBeans (EJB) 1.x/2.x unavailable (EJB-компоненты 1.x/2.x недоступны)ejb-jar.xmlСпецификации EJB 1.x/2.x не поддерживаются в Liberty Profile и в Liberty Core. Модернизируйте это приложение до уровня, позволяющего использовать спецификацию EJB 3.1 Lite.

3. Миграция с JBoss на Liberty Profile

Теперь мы осуществим миграцию среды развертывания, исходного кода приложения и дескрипторов развертывания приложения, конфигурации сервера приложений JBoss и модуля JBoss custom JAAS login module. После этого мы сможем исполнять это приложение на сервере Liberty.

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

a. Миграция среды разработки

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

  1. Загрузите плагин WebSphere Developer Tools и установите его в среде Eclipse.
  2. Затем загрузите среду исполнения Liberty Profile. Нажмите на кнопку Download, чтобы получить установочный JAR-файл продукта IBM WebSphere Application Server V8.5.5.4 Liberty Profile, а затем выполните команду java -jar wlp-runtime-8.5.5.5.jar, чтобы создать папку с именем wlp.
  3. Создайте новый сервер из среды Eclipse. В представлении Server нажмите правой кнопкой и выберите New > Server > IBM > WebSphere Application Server Liberty profile, а затем нажмите Next.
  4. Выберите Choose an existing installation и перейдите в папку wlp, которую вы только что создали. Нажмите Next.
  5. Оставьте значения по умолчанию и нажмите Finish. В результате будет создан сервер Liberty Profile с именем defaultServer.

b. Повышение уровня спецификации

Сначала необходимо повысить уровень спецификации для модулей приложения. Для этого на странице Project Facets можно внести изменения в свойства проекта, чтобы указать другой уровень модуля и другую версию Java для Eclipse-проекта. В результате этих изменений будут обновлены дескрипторы развертывания, и вы сможете связать свой проект с целевой средой исполнения. В результате задания целевой среды исполнения библиотеки поддерживаемой среды исполнения Java EE включаются в маршрут сборки проекта.

  1. Чтобы модернизировать EAR-проект посредством изменения свойств project facets, нажмите правой кнопкой на EAR-проект и выберите Document Manager > Properties > Project Facets (рис. 10).
  2. Для пункта EAR в столбце Version выберите значение 6.0.
  3. На вкладке Runtimes выберите WebSphere Application Server Liberty Profile и нажмите OK (рис. 10).
    Рисунок 13. Окно Project Facets
    Project facets
    Project facets
  4. Чтобы изменить значения для EJB-модуля нажмите правой кнопкой на EJB-проект и выберите DocumentManagerEJB > Properties > Project Facets (рис. 11). Измените значение 3.1, а значение Java – на 1.7.
  5. На вкладке Runtimes выберите WebSphere Application Server Liberty Profile и нажмите OK.
    Рисунок 14. Присвоение значений свойствам среды исполнения
    Assign properties to runtime
    Assign properties to runtime
  6. Чтобы изменить значения для веб-модуля нажмите правой кнопкой мыши на DocumentManagerWeb > Properties > Project Facets (рис. 12).
  7. Измените значение Dynamic Web Module на 3.0, а значение Java – на 1.7.
  8. На вкладке Runtimes поставьте флажок у пункта Liberty Profile и нажмите OK.
    Рисунок 15. Присвоение значений свойствам среды исполнениe
    Assign properties to runtime
    Assign properties to runtime

b. Миграция кода приложения

Технологии EJB 1.x/2.x и JAX-RPC – это два основных источника проблем при портировании Java EE-приложений на Liberty Profile. Обе эти технологии были удалены из спецификации Java EE и до настоящего времени не реализованы в Liberty Profile. Поскольку наши заказчиков гораздо чаще используют EJB 1.x/2.x, чем JAX-RPC, в этой статье мы покажем миграцию с технологии EJB 1.x/2.x. (прочтите эту статью, чтобы узнать больше о миграции веб-сервисов на базе JAX-RPC на веб-сервисы на базе JAX-WS).

Рассмотрим модернизацию EJB-компонентов типа stateless session bean с версии EJB 2.1 на версию EJB 3.1. Имеется много способов для модернизации EJB-компонентов с версии 2.x на версию 3.x. Показанные ниже шаги иллюстрируют один из таких способов с no interface view.

  1. Реализация изменений в компоненте session bean

    Класс session bean class с именем org.apache.geronimo.samples.document.ejb.DocumentManagerBean реализует интерфейс SessionBean. Этот класс имеет метод ejbCreate(), три бизнес-метода (upload(), getFilesByUserid(), addUserFile()) и callback-методы(см. листинг 1).

    Листинг 1. Компонент типа stateless session bean уровня EJB 2.x
    package org.apache.geronimo.samples.document.ejb; ... public class DocumentManagerBean implements javax.ejb.SessionBean { private static final long serialVersionUID = 5910882211249828856L; public String upload() { return "File successfully uploaded"; } public List<UserFile> getFilesByUserid(String userid) { List<UserFile> list = null; try { DocumentManagerDAO dmDao = new DocumentManagerDAO(); list = dmDao.getUserFilesByUserid(userid); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } public void addUserFile(String userId, String filename) { DocumentManagerDAO dmDao; try { dmDao = new DocumentManagerDAO(); dmDao.addUserFile(userId, filename); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Life cycle calls implementation ... }

    Классы bean-компонентов уровня EJB 3.1 не реализуют javax.ejb.SessionBean. Таким образом, нет необходимости реализовывать lifecycle-методы. Компонент типа stateless session bean задается с помощью аннотации @Stateless, а компонент типа stateful session bean задается с помощью аннотации @Stateful.

    В листинге 2 показан мигрированный компонент session bean уровня EJB 3.1 (DocumentManagerBean.java), соответствующий компоненту типа stateless session bean уровня EJB 2.1. Необходимо понимать, что вы преобразуете bean-компонент EJB2.x в компонент EJB3 no interface (без интерфейса), поэтому нет необходимости переносить интерфейс EJB2.x remote interface и интерфейс EJB2.x remote home interface. Соответственно, следующие интерфейсы можно удалить:

    • org.apache.geronimo.samples.document.ejb.DocumentManager
    • org.apache.geronimo.samples.document.ejb.DocumentManagerHome
    Листинг 2. Компонент stateless session bean уровня EJB 3.1 с no interface view
    package org.apache.geronimo.samples.document.ejb; import java.util.List; import javax.ejb.Stateless; import org.apache.geronimo.samples.document.dao.DocumentManagerDAO; import org.apache.geronimo.samples.document.hibernate.UserFile; @Stateless public class DocumentManagerBean{ public String upload(String userId, String filename) { addUserFile(userId, filename); return "File successfully uploaded"; } public List<UserFile> getFilesByUserid(String userid) { List<UserFile> list = null; try { DocumentManagerDAO dmDao = new DocumentManagerDAO(); list = dmDao.getUserFilesByUserid(userid); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } private void addUserFile(String userId, String filename) { DocumentManagerDAO dmDao; try { dmDao = new DocumentManagerDAO(); dmDao.addUserFile(userId, filename); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
  2. Вставка компонента session bean в сервлеты

    В этом приложении имеется два сервлета: UploadServlet и RetrieveServlet. Изменения в эти сервлеты вносятся в два приема.

    • Сначала вы сопровождаете класс сервлета аннотацией @WebServlet, указывающей на то, что этот класс является сервлетом.
    • Потом с помощью аннотации @EJB вы вставляете EJB-компонент вместо выполнения JDBC-просмотра home-интерфейса. Home-элементы не требуются в EJB3.

    Еще одна возможность состоит в том, чтобы сопроводить bean-компоненты EJB3 аннотацией @LocalHome и продолжать просмотр home-элементов в сервлете. Однако на данный момент сервер Liberty не поддерживает этих аннотаций. Возможно, будущие версии Liberty будут поддерживать EJB2 client view, однако на данный момент мы модернизируем сервлеты для использования аннотации @EJB вместе поиска home-элементов EJB2 (в разделе Ресурсы можно получить дополнительную информацию по миграции с EJB2.x на EJB3).

    В листинге 3 показаны изменения, внесенные в UploadServlet. Сначала мы добавили аннотацию @WebServlet над классом сервлета, добавили аннотацию @EJB для инъекции компонента session bean в сервлет и удалили поиск home-интерфейса JNDI из метода init(). Мы также удалили вызов метода create() для создания экземпляра EJB-компонента. Изменения сервлета RetrieveServlet аналогичны и не демонстрируются в этой статье (чтобы увидеть оба этих сервлета, загрузите мигрированное рабочее пространство из файла MigratedSampleApp.zip).

    Листинг 3. UploadServlet
    package org.apache.geronimo.samples.document.web; import java.io.IOException; … @WebServlet({"/UploadServlet"}) public class UploadServlet extends HttpServlet{ private static final long serialVersionUID = -2773446199481416101L; @EJB private DocumentManagerBean docManager; protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String filename = req.getParameter("file"); String userID = req.getUserPrincipal().getName(); req.setAttribute("result", docManager.upload(userID, filename)); req.getRequestDispatcher("jsp/main.jsp").forward(req, res); } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); } }

d. Миграция конфигурации JBoss

Теперь, после того как все изменения в программный код приложения внесены, мы воспользуемся инструментом WebSphere Configuration Migration Toolkit (который был описан во второй части цикла) для создания конфигурации сервера Liberty из конфигурации сервера JBoss (если у вас еще не установлен инструмент WebSphere Configuration Migration Tool, вы можете получить его по этой ссылке).

  1. В меню Migration Tools выберите WebSphere Application Server Migration > Configuration Migration > WebSphere Configuration Migration Tool for JBoss (рис. 13).
    Рисунок 16. WebSphere Configuration Migration
    WebSphere Configuration Migration
    WebSphere Configuration Migration
  2. В диалоговом окне WebSphere Configuration Migration нажмите Browse… и выберите папку home своего сервера; например, <JBOSS_HOME>\dworks. Нажмите Next (рис. 14).
    Рисунок 17. WebSphere Configuration Migration Toolkit
    WebSphere Configuration Migration Toolkit
    WebSphere Configuration Migration Toolkit
  3. На панели Specify target environment выберите WebSphere Application Server Liberty profile и нажмите Next.
  4. Если раскрыть каждый элемент дерева, можно увидеть все ресурсы его конфигурации. Некоторые из показанных настроек поступают из конфигурации JBoss по умолчанию; для работы данного приложения они не нужны.
  5. Снимите флажки со всех ресурсов, за исключением JDBCProvider: jdbc_DerbyDS и WebSphere Variables : VariableSubstitutionEntry: DERBY_JDBC_DRIVER_PATH. Остальные значения не нужны для этого приложения.
  6. В пункте VariableSubstitutionEntry:DERBY_JDBC_DRIVER_PATH укажите папку, содержащую JDBC-драйвер Derby. Итоговый выбор должен выглядеть, как на рис. 15.
    Рисунок 18. Просмотр найденных ресурсов
    Review issues found
    Review issues found
  7. Нажмите Next.
  8. Финальный экран этого мастера содержит сгенерированный файл server.xml. Нажмите Save File… и сохраните файл server.xml на локальном диске своей системы. Вы скопируете этот файл позднее, чтобы заменить файл server.xml для сервера Liberty.
  9. Нажмите кнопку Finish , чтобы закончить работу этого мастера. Пример сгенерированного файла server.xml показан в листинге 4.
    Листинг 4. Server.xml
     <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <server> <featureManager> <feature>jsp-2.2</feature> <feature>jdbc-4.0</feature> </featureManager> <jdbcDriver id="jdbc_DerbyDS" javax.sql.DataSource="org.apache.derby.jdbc.ClientConnectionPoolDataSource"> <library> <file name="${DERBY_JDBC_DRIVER_PATH}/derbyclient.jar"/> </library> </jdbcDriver> <dataSource id="jdbc_DerbyDS" jndiName="jdbc/DerbyDS" jdbcDriverRef="jdbc_DerbyDS"> <properties.derby.client databaseName="sampledb" maxPoolSize="20" minPoolSize="5" jndiname="jdbc/DerbyDS" connectionUrl="jdbc:derby://localhost:1527/sampledb;create=false" driverClass="org.apache.derby.jdbc.ClientDriver" driver="org.apache.derby.jdbc.ClientDriver" URL="jdbc:derby://localhost:1527/sampledb;create=false" idleTimeoutMinutes="5" create="false" url="jdbc:derby://localhost:1527/sampledb;create=false"/> </dataSource> <variable name="DERBY_JDBC_DRIVER_PATH" value=" C:\db-derby-10.11.1.1-bin\lib"/> </server>

e. Обновление конфигурации сервера Liberty

Хотя инструмент Configuration Migration Toolkit предоставляет файл server.xml с ресурсами JBoss, вам надо добавить еще несколько опций, которые требуются приложению. Liberty – это облегченный контейнер, поэтому он добавляет только те опции, которые требуются вашему приложению. Инструмент Configuration Migration Toolkit не способен определить, какие опции использует ваше приложение, поэтому вам придется добавить их вручную.

Для этого добавьте показанные в листинге 5 опции в файл server.xml сервера Liberty. Опции, которые требуются согласно конфигурации, добавляются автоматически, а опции, которые требуются приложению (показаны жирным шрифтом), необходимо добавить вручную.

Листинг 5. Добавление опций в файл server.xml
 <featureManager> <feature>ejbLite-3.1</feature> <feature>appSecurity-2.0</feature> <feature>servlet-3.0</feature> <feature>jsp-2.2</feature> <feature>jdbc-4.0</feature> </featureManager>

f. Отображение ролей на пользователей и группы в Liberty

Архив JBoss service archive, определяющий пользователей и группы, хранит их в нескольких файлах. SAR – это проприетарный JBoss-архив, содержащего конфигурацию аутентификации и авторизации (например, пользователи, группы и т. д.). В JBoss не существует способа отображения ролей, используемых в файле web.xml, на пользователей и группы, определенные в service archive. Другими словами, одинаковые имена используются и для пользователей и для групп.

Процесс отображения ролей на пользователей и группы в Liberty состоит из трех частей. Сначала вы определяете пользователей и группы (реестр пользователей) в файле server.xml, затем определяете отображение ролей (заданное в файле web.xml) на группы, заданные в файле реестра ibm-application-bnd.xml. После этого вы можете удалить проприетарный проект JBoss SAR.

  1. Сконфигурируйте базовый реестр пользователей с элементами user и editor. Информация о группе и пользователе поступает из файлов j2g_groups.properties и j2g_users.properties проекта SAR (листинг 6).
    Листинг 6. Добавление реестра basicRegistry в файл server.xml
     <basicRegistry id="basic" realm="sampleRealm"> <user name="user" password="1" /> <user name="editor" password="2" /> <group name="authenticated"> <member name="user" /> <member name="editor" /> </group> <group name="uploader"> <member name="editor" /> </group> </basicRegistry>
  2. Сконфигурируйте связывания приложения, отображающие роли на пользователей и группы в реестре пользователей или на специальные субъекты (листинг 7).
    Листинг 7. Отображение ролей безопасности на группы с помощью файла Server.xml
     <application type="ear" id="DocumentManager" name="DocumentManager" location="${server.config.dir}/apps/DocumentManager.ear"> <application-bnd> <security-role name="authenticated"> <special-subject type="ALL_AUTHENTICATED_USERS" /> </security-role> <security-role name="uploader"> <group name="uploader" /> </security-role> </application-bnd> </application>
  3. Удалите проект SAR из EAR-файла. Нажмите правой кнопкой на проекте DocumentManagerSAR и нажмите Delete. Поставьте флажок Delete project contents on disk и нажмите OK.

g. Миграция конфигурации Hibernate

Заключительный шаг состоит в миграции конфигурации Hibernate. В этом приложении конфигурация Hibernate находится в файле hibernate.cfg.xml, расположенном в папке DocumentManagerHibernate/src вместе с другими файлами отображения Hibernate.

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

  1. Откройте файл hibernate.cfg.xml в папке DocumentManagerHibernate/src и переключитесь на представление Source.
  2. Измените значение свойства connection.datasource с java:jdbc/DerbyDS на jdbc/DerbyDS.
  3. Измените значение свойства transaction.manager_lookup_class на использование класса поиска в WebSphere с именем org.hibernate.transaction.WebSphereExtendedJTATransactionLookup.

Данная статья содержит дополнительную информацию по использованию Spring и Hibernate с Liberty.

h. Развертывание и тестирование приложения на сервере Liberty

  1. Экспортируйте проект DocumentManager в виде EAR-файла с именем DocumentManager.ear.
  2. Сохраните файл DocumentManager.ear в папке apps сервера (рис. 16).
    Рисунок 19. Проект развертывания
    Deploy project
    Deploy project
  3. Запустите сервер Liberty. В веб-адресе перейдите по следующему URL-адресу приложения: http://localhost:9080/document/. Убедитесь в том, что ваша база данных Derby по-прежнему исполняется.
  4. Войдите в приложение в качестве пользователя user или editor с действительными полномочиями, согласно файлу server.xml.
  5. После успешного входа в приложение оно перенаправит пользователя на страницу Documents. Обратите внимание, что только пользователь editor имеет право загружать в приложение документы, согласно отображениям роли безопасности (рис. 17).
    Рисунок 20. Вход пользователя editor в приложение
    Editor login
    Editor login
    Рисунок 21. Вход пользователя user в приложение
    User login
    User login
    Рисунок 22. Ошибка входа в приложение
    Invalid login
    Invalid login

Заключение

В этом учебном пособии показано, как взять старое приложение для ресурсоемкого контейнера JBoss, программный код которого написан в соответствии со спецификацией J2EE 1.4, и беспрепятственного переместить его в облегченный контейнер IBM WebSphere Application Server Liberty Profile. В пособии также показано, как использовать инструмент Liberty Technology Preview для выявления возможных проблем портирования, чтобы быстро оценить пригодность приложения для облегченного контейнера Liberty Profile. Наконец, в пособии показано, как конфигурацию существующего сервера JBoss перенести на сервер Liberty Profile. Этот процесс позволяет очень быстро переместить не только код приложения, но и конфигурацию сервера, необходимую для исполнения этого приложения.

В пособии также рассматривается несколько сложных задач, с необходимостью выполнения которых вы можете столкнуться, таких как миграция модулей custom JAAS login module и bean-компонентов и клиентов EJB2. В большинстве случаев компоненты EJB2 можно без проблем мигрировать на EJB3, за исключением компонентов типа CMP bean. В качестве дополнения в пособии представлены ссылки на другие ресурсы, помогающие осуществлять миграцию на EJB3, миграцию с JAX-RPC на JAX-WS, а также миграцию приложений Spring и Hibernate.

Следуя указаниям этой статьи, вы сможете модернизировать свои приложения путем перехода со старых ресурсоемких контейнеров, таких как JBoss, на облегченный контейнер Liberty Profile.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=WebSphere
ArticleID=1031805
ArticleTitle=Переход на Liberty Profile: Часть 3. Миграция приложения с JBoss на Liberty Profile
publish-date=05182016