Содержание


Быстрое создание полнофункциональных трехуровневых web-приложений. Часть 2: создание уровня приложения

Используйте Rational Application Developer для быстрого создания многоуровневых Java EE-приложений и развертывания их на IBM Bluemix

Comments

В данном учебном руководстве, состоящем из трех частей, подробно рассматривается процесс создания многоуровневого Web-приложения с нуля при помощи IBM® Rational® Application Developer for WebSphere Software, Java Persistence API (JPA), Enterprise JavaBeans (EJB), REST Web-сервисов и (для полнофункционального Web 2.0-интерфейса) Dojo Toolkit. Мы создадим полнофункциональное Web-приложение, отображающее в таблице данные, которые можно редактировать, дважды щелкнув левой кнопкой мыши в соответствующей ячейке таблицы.

В первой части мы создали базу данных на IBM Bluemix, подключились к ней из Rational Application Developer и добавили в нее тестовые данные. Во второй части мы создадим уровень приложения, состоящий из EJB-компонентов (Enterprise Java Bean), управляющих бизнес-логикой, и логических JPA-объектов (Java Persistence API), взаимодействующих с базой данных. В третьей части (EN) мы создадим REST Web-сервисы, реализуем полнофункциональный Web 2.0-интерфейс и развернем приложение на Bluemix.

Создание JPA-уровня

Первым шагом является создание JPA-уровня для взаимодействия с базой данных.

Создание исполняющей среды Liberty

  1. В Rational Application Developer откройте перспективу Java EE и разрешите все возможности, которые будут запрашиваться.
  2. Выберите Window > Preferences. Найдите в списке и раскройте элемент Server, выберите Runtime Environments.
  3. Нажмите Add, выберите WebSphere Application Server V8.5 Liberty Profile и отметьте флажок Create a new local server: Screenshot of New Server Runtime Wizard with WebSphere Liberty server selected
    Screenshot of New Server Runtime Wizard with WebSphere Liberty server selected
  4. Нажмите Next.
  5. Укажите местоположение Liberty или нажмите ссылку для загрузки. Нажмите Finish.
  6. В диалоговом окне Preferences нажмите OK.

Создание EJB-проекта

  1. Выберите File > New > EJB project.
  2. Введите CustomerEJB в поле Project name. Убедитесь, что в поле Target runtime выбран вариант WebSphere Application Server 8V.5 Liberty Profile, и измените значение поля EAR project name на CustomerEAR: Screenshot of wizard for CustomerEJB project to run on Liberty
    Screenshot of wizard for CustomerEJB project to run on Liberty
  3. В разделе Configuration выберите Modify и добавьте JPA и Context and dependency injection (CDI): Screnshot of Project Facets with CDI, JPA and EJB selected
    Screnshot of Project Facets with CDI, JPA and EJB selected
  4. Нажмите OK.
  5. Нажмите Next и снова Next в мастере New EJB Project.
  6. На странице JPA Facet configuration выберите SQLDB из списка Connection: Screenshot of setting the database connection in the JPA Facet configuration dialog box
    Screenshot of setting the database connection in the JPA Facet configuration dialog box
  7. Нажмите Next.
  8. Снимите отметку с Create an EJB Client Jar.
  9. Нажмите Finish и подтвердите переключение в перспективу Java EE при появлении запроса. (Проигнорируйте уведомление об ошибке, появляющейся из-за отсутствия EJB – мы создадим его на следующем этапе.)

Создание логических JPA-объектов

Теперь создадим JPA-код для доступа к базе данных и JPA-компоненты управления для запроса и вставки данных:

  1. Щелкните правой кнопкой мыши по Customer EJB project и выберите JPA Tools > Configure JPA Entities: Screenshot of the first page of Configure JPA Entity wizard
    Screenshot of the first page of Configure JPA Entity wizard
  2. Нажмите кнопку Create New JPA Entities....
  3. В диалоговом окне Select Tables выберите подключение SQLDB, выберите схему (имя пользователя базы данных Bluemix SQL из первой части (EN) данной серии статей) и выберите таблицу CUSTOMER: Screenshot of Generate Custom Entities wizard
    Screenshot of Generate Custom Entities wizard
  4. Нажмите Next.
  5. На странице Table Associations нажмите Next.
  6. В Customize Defaults укажите в поле Key generator значение none.
  7. Нажмите Next, а затем Finish.
  8. В диалоговом окне Configure JPA Entities дождитесь отображения CUSTOMER в поле Tables и выберите ее. Нажмите Next.
  9. На странице Tasks добавьте запросы по умолчанию: выберите логический объект Customer, выберите Named Queries из списка задач и нажмите кнопку Default. В результате добавится набор операций и запросов по умолчанию, которые будут использоваться в дальнейшем при запросе данных из CUSTOMER: Screenshot showing the queries to be generated
    Screenshot showing the queries to be generated
  10. Нажмите Finish.
  11. При запросе подключения к базе данных выберите SQLDB и нажмите Finish.

Мастер создаст Java-класс, который будет читать и писать данные таблицы базы данных, избавляя вас от необходимости писать код и понимать синтаксис и аннотации JPA. Если потребуется изменить класс, вы можете либо изменить код, либо повторно запустить мастер. Помимо этого благодаря примерам для копирования существенно упрощается добавление запросов.

Следующей задачей является добавление JPA-класса manager. JPA-класс manager предоставляет набор вспомогательных методов (helper) для выполнения запросов и создания, обновления и удаления логических объектов. Логический JPA-объект можно рассматривать как представление строки в таблице, а JPA-класс manager – как таблицу (таким образом, он предоставляет операции уровня таблицы).

  1. Выберите только что созданный логический JPA-объект Customer: Screenshot of JPA Manager Bean wizard with Customer selected
    Screenshot of JPA Manager Bean wizard with Customer selected
  2. Нажмите Next, а затем Finish.

Развернув папку ejbModule, можно заметить, что теперь она включает в себя две папки, содержащие сгенерированные классы Customer (JPA-класс manager) и CustomerManager (предоставляет набор wrapper-методов для взаимодействия с кодом JPA Customer). Потратьте некоторое время на исследование исходного кода обоих классов.

Создание EJB-компонента обработки данных

Теперь, после построения уровня доступа к базе данных (JPA), можно приступить к созданию EJB-компонента обработки данных для реализации бизнес-методов и взаимодействия с JPA-кодом.

В данном примере логика приложения упрощена. Однако на EJB-уровне обычно реализуются бизнес-правила и все сложные вычисления. Этот уровень является также центральным местом размещения всей логики, что исключает необходимость ее повторения в нескольких пользовательских интерфейсах. (Например, если приложение имеет и Web-, и мобильный пользовательский интерфейс, вся бизнес-логика реализуется на EJB-уровне.) EJB-компоненты предоставляют также фасад для доступа к данным. Таким образом, типичный запрос к EJB приводит к взаимодействию EJB с несколькими JPA-классами.

Создание и настройка сессионного компонента

  1. Выберите проект CustomerEJB в Enterprise Explorer, щелкните правой кнопкой мыши и выберите New > Session Bean (3.x). Укажите ejbs в поле Java package, укажите в поле Class name значение CustomerEJB и отметьте флажок Local (оставьте имя по умолчанию): Completed Create EJB session bean wizard
    Completed Create EJB session bean wizard
  2. Нажмите Finish. В окне Java-редактора должен открыться исходный код сессионного компонента.
  3. В сессионном компоненте добавьте переменную для класса CustomerManager и укажите для нее требование внедрения зависимостей (dependency injection), используя аннотацию @Inject. Поместите курсор непосредственно перед конструктором и добавьте следующий код:
    @Inject
    private CustomerManager mgr;

    Аннотация @Inject гарантирует, что атрибут mgr будет внедряться контейнером, поэтому незачем беспокоиться о том, как создать экземпляр CustomerManager. В свою очередь, также будут внедряться зависимости класса CustomerManager (в частности, PersistenceUnit – класс, управляемый сервером приложений и выполняющий большой объем трудоемкой работы при взаимодействии с базой данных).
  4. При появлении ошибок компиляции нажмите комбинацию клавиш Ctrl-Shift-O для добавления необходимых директив import.
  5. Добавьте в класс два следующих метода (непосредственно после конструктора):
    public List<Customer> getCustomers()
        {
        	return mgr.getCustomer();
        }
        
        public void updateCustomer(String id, String name,
        						   String address, String country)    
        {
        	try {
    			Customer cust = new Customer();
    
    			cust.setAddress(address);
    			cust.setCountry(country);
    			cust.setName(name);
    			cust.setCustno(Integer.parseInt(id));
    			
    			mgr.updateCustomer(cust);
    		} catch (NumberFormatException e) {
    			// TODO Автоматически сгенерированный блок перехвата
    			e.printStackTrace();
    		} catch (Exception e) {
    			// TODO Автоматически сгенерированный блок перехвата
    			e.printStackTrace();
    		}
        }

    Метод getCustomers() извлекает список пользователей, а метод updateCustomer() поддерживает обновление данных о пользователе.
  6. Повторно нажмите Ctrl-Shift-O.
  7. 7. Сохраните код. При появлении ошибок компиляции нажмите комбинацию клавиш Ctrl-Shift-O для добавления директив import. При запросе List в import выберите java.util.List. Сохраните файл. Исходный код теперь должен выглядеть примерно так:
    package ejbs;
    
    import java.util.List;
    
    import javax.ejb.Local;
    import javax.ejb.LocalBean;
    import javax.ejb.Stateless;
    import javax.inject.Inject;
    
    import ejbs.view.CustomerEJBLocal;
    import entities.Customer;
    import entities.controller.CustomerManager;
    
    /**
     * Класс реализации сессионного компонента CustomerEJB
     */
    @Stateless
    @Local(CustomerEJBLocal.class)
    @LocalBean
    public class CustomerEJB implements CustomerEJBLocal {
    
        @Inject
        private CustomerManager mgr;
        /**
         * Конструктор по умолчанию. 
         */
        public CustomerEJB() {
            // TODO Автоматически сгенерированная заглушка конструктора
        }
        
        public List<Customer> getCustomers()
        {
            return mgr.getCustomer();
        }
        
        public void updateCustomer(String id, String name, String address, String country)    
        {
            try {
                Customer cust = new Customer();
                cust.setAddress(address);
                cust.setCountry(country);
                cust.setName(name);
                cust.setCustno(Integer.parseInt(id));
    			
                mgr.updateCustomer(cust);
            } catch (NumberFormatException e) {
                //TODO Автоматически сгенерированный блок перехвата
                e.printStackTrace();
            } catch (Exception e) {
               // TODO Автоматически сгенерированный блок перехвата
               e.printStackTrace();
            }
        }
    }

Promote-методы

EJB-компоненты имеют интерфейсы для определения методов, которые могут вызываться из других классов приложения. Для указания возможности вызова методов getCustomers() и updateCustomer() из Web-сервисов, созданных в первой части (EN) серии, эти методы необходимо поместить в интерфейс:

  1. Щелкните правой кнопкой мыши на редакторе CustomerEJB.java и выберите Java EE Tools > Promote methods.
  2. В диалоговом окне отметьте флажки для методов getCustomers() и updateCustomer(): Screenshot of the Promote Methods dialog with both methods selected
    Screenshot of the Promote Methods dialog with both methods selected
  3. Нажмите OK.

Настройка сервера Liberty

До создания Web-уровня и тестирования приложения необходимо настроить сервер Liberty на взаимодействие с DB2, а также настроить JNDI-соединение (Java Naming and Directory Interface) с базой данных:

  1. Добавьте проект на сервер: в представлении Servers щелкните правой кнопкой мыши на сервере WebSphere Liberty и выберите Add and Remove.... В появившемся диалоговом окне добавьте файл CustomerEAR на сервер и нажмите Finish.
  2. Создайте источник данных на сервере: в представлении Servers разверните элемент WebSphere Application Server V8.5 Liberty profile at localhost и выполните двойной щелчок левой кнопкой мыши в поле Server Configuration: Screenshot of server configuration editor
    Screenshot of server configuration editor
  3. В редакторе Server Configuration нажмите Add и выберите JDBC driver. Укажите DB2 в качестве ID: Screenshot of Liberty configuration with JDBC driver
    Screenshot of Liberty configuration with JDBC driver
  4. Нажмите кнопку Add рядом с Shared library reference. В поле Name введите DB2library.
  5. Укажите серверу местоположение библиотек DB2 JDBC: рядом с полем fileset reference нажмите Add и в свойстве base directory введите местоположение папки, содержащей файл JDBC-драйвера (db2jcc4.jar) – например, c:\ibm\sqllib\java: Screenshot of fileset configuration under shared library
    Screenshot of fileset configuration under shared library
  6. Добавьте источник данных: выберите Server Configuration, нажмите кнопку Add и выберите Data Source.
  7. Укажите SQLDB в поле ID и jdbc/SQLDB в поле JNDI name. В поле JDBC driver reference выберите из списка DB2: Screen shot of data source properties dialog box
    Screen shot of data source properties dialog box
  8. Добавьте информацию для аутентификации к источнику данных: выберите источник данных слева, нажмите Add и выберите DB2 JCC Properties. Укажите SQLDB в поле Database name и заполните поля host name, user name и password для доступа к базе данных: Screenshot of database authentication properties configuration
    Screenshot of database authentication properties configuration
  9. Сохраните файл server.xml.

Дальнейшие действия

Сервер настроен. Мы завершили процесс создания EJB- и JPA-кода. Теперь можно перейти к третьей части (EN), в которой мы создадим REST Web-сервисы и Web-интерфейс Dojo для отображения и изменения данных посредством REST-сервисов. В заключение, после тестирования приложения в локальном режиме, мы развернем его на IBM Bluemix.


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


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Rational, Облачные вычисления, Технология Java
ArticleID=1012263
ArticleTitle=Быстрое создание полнофункциональных трехуровневых web-приложений. Часть 2: создание уровня приложения
publish-date=07302015