Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / КСТ / Разработка веб-приложений.pdf
Скачиваний:
246
Добавлен:
23.02.2015
Размер:
2.74 Mб
Скачать

1. Установка и настройка инструментальных средств

1.1.Установка и подготовка к работе операционной системы

Развертывание операционных систем семейства Linux производится с DVD-

диска, следуя указанием помощника. В данном руководстве предполагается установ-

ка ОС «Fedora 13». Для настройки необходимого программного обеспечения не пропустите момент с вопросом о нужном ПО. Войдя в режим настройки, отметьте СУБД

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

После установки системы скопируйте содержимое DVD, например, в папку /root/

Download. Вам нужно будет вручную установить несколько дополнительных пакетов.

Для этого запустите терминал, введите команду su и введите пароль администратора, который был задан при установке ОС. Запустите файловый монитор командой mc и

войдите в папку /root/Download/Fedora/Packages. Для установки недостающих пакетов будет использована команда rpm -i имя_пакета. Для ускорения набора имен файлов

пользуйтесь клавишей Tab для автоматического продолжения имени файла. Далее

эта манипуляция будет обозначаться многоточием «...». Если ваша машина подключена к Интернету и нет проблемы с трафиком, то можно не создавать локальный репозитарий, а использовать сетевую установку и обновление пакетов.

Для создания локального репозитария из пакетов дистрибутива ОС, находясь в

папке /root/Download/ Fedora/Packages, введите команды:

rpm -i createrepo-...

# установка генератора репозитариев

createrepo .

# точка обязательная!

Будет создана папка repodata для созданного репозитария с пакетами ОС для команды yum.

Далее следует выполнить следующие операции:

перейти с правами root в папку /etc/yum.repos.d:

для исключения поиска по штатным сетевым репозитариям переместить все старые файлы для зарегистрированных репозиториев в другую папку с ко-

пиями;

туда же добавить файл fedora-local.repo следующего содержания:

[localrepo]

name=Fedora $releasever - My Local Repo failovermethod=priority baseurl=file:///root/Download/Fedora/Packages enabled=1

gpgcheck=0

Проверьте работоспособность локального репозитария командой: yum list postgresql

Должно наблюдаться упоминание локального репозитория localrepo в списке

поиска. Проделанная работа позволит командой yum install пакет устанавливать не-

достающие пакеты из локального репозитария, где все пакеты будут иметь согласованную версию.

8

1.2. Установка программного обеспечения

Дляработысвеб-приложенияминеобходимоустановитьнаПКпрограммноеобе-

спечение. Для выполнения экспериментов требуется программное обеспечение разра-

ботчика Java Netbeans 6.8, СУБД PostgreSQL и веб-сервер. Все программное обеспече-

ние распространяется свободно и может быть загружено с соответствующих сайтов.

Установите базовое программное обеспечение JDK v.6.16, которое можно взять

на сервере по адресу http://www.sun.com/download/. Обратите внимание на номер ис-

полнения — 16. Поставляемое вместе с дистрибутивами ОС Linux исполнение с номе-

ром 18 не стабильно. Консоль администратора сервера GlassFish работать не будет.

Дистрибутив сервера Java EE можно получить по адресу http://www.sun.com/ javaee/downloads. Установка среды разработки приложений и сервера выполняется

файлом netbeans-6.8-ml-javaee-linux.sh. Все параметры установки желательно оста-

вить предлагаемыми по умолчанию.

Важно! После установки сервера скопируйте файл jdbc-драйвера postgresql-9.0-801.jdbc4.jar в папку .../sges-v3/glassfish/domains/domain1/lib для работы с СУБД PostgreSQL.

Для упрощения процедур запуска сервера и его утилит желательно в папку /etc/profile.d поместить файл javaee.sh со следующим содержанием (необходимы полномочия администратора):

#java EE 6 initialization

#Created Cyx 01-02-2010 JAVAHOME=/usr/lib/jvm/java-1.6.0-openjdk PATH=$PATH

if ! echo "$PATH" | egrep -qi $JAVAHOME/bin ; then PATH="$PATH:$JAVAHOME/bin:/opt/sges-v3/bin" export PATH

fi

Здесь /opt/sges-v3/bin — путь установки утилит сервера GlassFish.

Загрузку сервера надо производить из терминала, имея полномочия администратора. Для этого загрузите терминал и наберите команду su, после ввода пароля терминал будет иметь статус администратора. Запуск сервера производится командой asadmin start-domain, остановка сервера — командой asadmin stop-domain.

Если запуск сервера сопровождается сообщением о занятости порта 4848, проверьте файл /etc/hosts. Для локального адреса 127.0.0.1 нужно дописать имя вашего

компьютера (например, my-home, которое вводилось при установке ОС).

Для проверки работоспособности сервера нужно запустить браузер и отправить

запрос http://localhost:8080. Должна появиться стартовая страница сервера.

При разработке приложений с использованием среды Netbeans 6.8, запускае-

мой от имени рядового пользователя, может возникать проблема с правами допуска

к файлам сервера (он установлен с правами root). Поэтому целесообразно изменить права доступа к файлам сервера из папки /opt/sges-v3/glassfish/domains командой

chmod -R 777 domain1/

chown -R admin:admin domain1/

или запускать среду Netbeans 6.8 от имени root, что нежелательно из общих соображений безопасности. Здесь admin ­— имя пользователя Linux.

9

Для создания веб-приложений нужно использовать среду Netbeans 6.8, инструк-

цию по установке которой можно получить по адресу: http://netbeans.org/community/releases/68/install_ru.html.

Для работы с СУБД PostgreSQL следует выполнить команду (нужны полномо-

чия администратора):

yum install postgresql-server

Будут добавлены нужные пакеты и зарегистрирован пользователь с именем postgres.Далееследуетвыполнитькомандуpasswd postgres изадатьпарольдляпользователя postgres (рекомендуем postgres). Перейти в папку /var/lib/pgsql/data (если ее

нет, то создать). Разыскать папку с данными для сервера postgresql (обычно в /var/lib/ pgsql/data) и проверить права доступа, владельца и группу (postgres, 700). Если обна-

ружилось расхождение, нужно выполнить команду:

chown postgres /var/lib/pgsql/data chmod -R 700 /var/lib/pgsql/data

Далее выполните последовательно команды:

еsu postgres

initdb -D /var/lib/pgsql/data

postgres -D /var/lib/pgsql/data >logfile 2>&1 & createdb test

psql test

Настройте сервер как службу для запуска при старте ОС:

с правами root в окне «Система – Администрирование – Службы» установить

флаг у postgresql;

перезагрузиться и проверить готовность сервера из окна пользователя с име-

нем postgres командой psql test.

ДляработысСУБДPostgreSQL рекомендуетсяиспользоватьпакетpgAdmin III,уста-

новкукоторогоможновыполнитькомандойyum install pgadmin3 (нужендоступксетевымре-

позитариям). Запуск утилиты производится из меню «Приложения – Программирование».

1.3. Создание таблиц в базе данных

Для того чтобы в pgAdmin подключиться к серверу PostgreSQL, необходимо соз-

дать новое соединение, выбрав пункт меню «Файл – Добавить сервер» или кнопку на панели инструментов. В появившемся окне (рис. 1.1) нужно заполнить поля:

Имя — имя соединения, отображаемое в браузере объектов.

Хост — IP-адрес сервера. Если клиент подключается к серверу, находящему-

ся на том же самом компьютере, то указывается localhost.

Порт — номер порта, по которому работает сервер. Определяется настройка-

ми сервера. По умолчанию 5432.

Пользователь — имя пользователя, соединяющегося с сервером. Имя пользователя должно быть предварительно создано администратором сервера

PostgreSQL. По умолчанию в этом поле указано имя привилегированного

пользователя postgres.

Пароль — пароль пользователя (postgres).

10

Рис. 1.1. Регистрация сервера

После установки соединения можно создать базу данных и таблицы. На панели инструментов есть кнопка «Создать новый объект» . С помощью этой кнопки можно создать базу данных и любой объект базы данных. Обычно таблицы создаются в следующем порядке: справочники – таблицы без внешних ключей, далее таблицы с

внешними ключами – ссылками на справочники и так далее.

При создании таблицы (рис. 1.2) заполняются следующие поля. На вкладке

«Свойства» задаются имя таблицы и владелец. На вкладке «Колонки» (рис. 1.3) опре-

деляются новые столбцы. На вкладке «Ограничения» задаются ограничения целост-

ности таблицы. На вкладке «Привилегии» задаются права доступа. На вкладке SQL будет сформирован скрипт, которым будет создана таблица. После нажатия кнопки ОК

таблица будет создана и отобразится в браузере объектов в разделе «Таблицы» базы данных.

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

11

Рис. 1.2. Создание таблицы

Рис. 1.3. Колонки таблицы

12

Создание внешнего ключа производится на вкладке «Ограничения» для новой

таблицы. Первыми обычно создаются ограничения первичного ключа, далее — вто-

ричного. В этот момент сами поля нужного типа должны быть уже добавлены в описание таблицы. При добавлении вторичного ключа выполняются три шага (рис. 1.4):

а) на закладке «Свойства» выбирается из списка РАНЕЕ созданная внешняя таблица;

б) на закладке «Колонки» задаётся соответствие локального поля и ключа внешней таблицы;

в) на закладке «Действие» выбираются действия при обновлении и удалении записи внешней таблицы.

а

б

в

Рис. 1.4. Создание внешнего ключа: а – задание внешней таблицы; б – задание соответствия колонок; в – задание действий

Для редактирования и просмотра данных таблицы в pgAdmin есть инструмент в меню «Сервис – Просмотр данных» или кнопка . Данные редактируются в табличном формате.

Упражнения

1. С использованием возможностей pgAdmin III создайте в базе данных с именем test таблицы, необходимые для последующих экспериментов.

Таблица городов:

CREATE TABLE cities

(

id_city serial NOT NULL,

"name" character varying(40) NOT NULL, population integer NOT NULL,

CONSTRAINT "PK_id_city" PRIMARY KEY (id_city)

)

WITH (

13

OIDS=FALSE

);

ALTER TABLE cities OWNER TO postgres;

Таблица людей:

CREATE TABLE persons

(

id_person serial NOT NULL,

“name” character varying(20) NOT NULL, “family” character varying(20) NOT NULL, father character varying(20) NOT NULL, city_id integer NOT NULL,

b_day date NOT NULL,

CONSTRAINT "PK_person" PRIMARY KEY (id_person), CONSTRAINT "FK_city" FOREIGN KEY (city_id)

REFERENCES cities (id_city) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION

)

WITH ( OIDS=FALSE

);

ALTER TABLE persons OWNER TO postgres;

Таблица работников:

CREATE TABLE staffs

(

id_staff integer NOT NULL,

worker character varying(40) NOT NULL, “start” date NOT NULL,

finish date,

person_id integer NOT NULL,

salary numeric(12,2) NOT NULL DEFAULT 0.00, CONSTRAINT "PK_staffs" PRIMARY KEY (id_staff), CONSTRAINT “FK_person" FOREIGN KEY (person_id)

REFERENCES persons (id_person) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION

)

WITH ( OIDS=FALSE

);

ALTER TABLE staffs OWNER TO postgres;

2.С использованием инструмента «Просмотр данных» добавить тестовые записи для городов(3–4города),персон(3–4человека),работников(3–4работника).Обратить внимание на формат ввода и вывода данных в полях записей.

Регистрация базы данных на сервере GlassFish

Работа с базой данных в веб-приложении возможна только тогда, когда сервер

знает имена соединения и ресурса, чтобы иметь возможность получать и сохранять в

ней данные. Для регистрации БД на сервере необходимо запустить сервер (asadmin start-domain), запустить браузер и для вызова консоли администратора сервера отправить запрос:

http://localhost:4848

14

После запуска консоли и получения меню администратора для создания пула

соединений раскрыть узел Resource-JDBC-Connection Pools. Далее нажать кнопку

New и заполнить поля (курсив в скобках — комментарии):

Name:

testConn

(любое удобное имя соединения)

Resource Type:

java[.sql.DataSource

Database Vendor:

Postgresql

 

В таблице Additional Properties заполнить поля:

User

postgres

 

Password

postgres

 

databaseName

test

(имя созданной ранее БД)

serverName

localhost

 

Сохранить настройки соединения кнопкой Finish/Save.

Для создания ресурса доступа к базе данных test раскрыть узел Resource –

JDBC – JDBC Resources. Далее нажать кнопку New и заполнить поля:

JNDI Name

jdbc/testDB

(имя создаваемого ресурса)

Pool Name

testConn

(имя созданного выше соединения)

Нажать Ok и сохранить настройки.

1.4.Разработка

веб-приложений в Netbeans 6.8

Этот материал дает представление об основах использования NetBeans IDE для разработки веб-приложений. Он демонстрирует создание простого приложения, развертывания его на сервере и просмотр его в браузере. Приложение использует технологию JavaServer Pages™ (JSP) для запроса у клиента его имени. Далее оно

использует компонент JavaBeans™ для сохранения имени в течение сеанса с пользо-

вателем и возврата к следующей странице.

1.4.1.Установка проекта веб-приложения

1.Выбрать команду File > New Project (Ctrl-Shift-N) из главного меню. В разделе

Categories выбрать Java Web. В Projects выбрать Web Application, затем на-

жать кнопку «Далее».

2.Ввести HelloWeb в поле Project Name.

3.Задать в поле Project Location любую папку компьютера. Для нужд этого обу-

чающего курса эта папка будет именоваться $PROJECTHOME.

4.(Опционально.) Установить флаг Use Dedicated Folder for Storing Libraries и

задать папку для общих библиотек.

5.Нажать кнопку «Далее». Откроется панель Server and Settings. Выбрать вер-

сию Java EE, которую вы желаете использовать для приложения.

6.Выбрать сервер для развертывания приложения. Показываются только за-

регистрированные серверы. Заметим, что Context Path стал /HelloWeb, который создан на основе ранее введенного имени проекта.

7.Нажать кнопку «Далее». На панели Frameworks нажать кнопку «Завершить»

для создания проекта.

15

IDE создаст папку проекта $PROJECTHOME/HelloWeb. Папка проекта содержит код проекта и метаданные, такие как скрипт Ant создания проекта. Проект открывается

в среде разработки. Страница приветствия index.jsp открывается в редакторе кода в

главном окне. Структуру проекта можно просматривать в окне Files и Projects (рис. 1.5).

Рис. 1.5. Структура проекта

1.4.2. Создание и редактирование веб-приложения

Создание и редактирование файла с кодом приложения — основная функция

среды IDE. Это основная часть вашей ежедневной работы. Среда обеспечивает широкий диапазон инструментов для помощи разработчику, если вы предпочитаете ручные или генерируемые средой части кода.

1.4.2.1.Создание пакета и файлов кода Java Package

1.В окне Projects раскройте узел Source Packages. Узел Source Packages пока

пуст.

2.Нажмите правую кнопку мыши на узле Source Packages и выберите

New > Java Class. Задайте поля NameHandler, Class Name и наберите org.mypackage.hello в окне Package. Нажмите кнопку Finish. Новый файл

NameHandler.java откроется в редакторе.

3.В редакторе объявите строковую переменную:

String name;

4.Добавьте конструктор класса: public NameHandler()

5.Добавьте строку в конструктор NameHandler(): name = null;

1.4.2.2.Генерирование методов get и set

1.Правой кнопкой щелкнуть по полю name в редакторе и выбрать команду «Ре-

организация кода > Инкапсулировать поля» (Refactor > Encapsulate Fields).

Откроется диалог Encapsulate Fields (рис. 1.6), содержащий имена полей.

Обратите внимание: Fields' Visibility по умолчанию установлено в private,

Accessors' Visibility — в public. Это обозначает, что доступ для модификации

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

16

Рис. 1.6. Диалог Encapsulate Fields

2.Нажать кнопку «Реорганизация кода» (Refactor). Методы get и set будут сгенерированы для поля name. Модификатор для переменных класса устанав-

ливается в private, а методы доступа создаются как public. Класс выглядит следующим образом:

package org.mypackage.hello;

/**

*

* @author nbuser */

public class NameHandler {

private String name;

/** Creates a new instance of NameHandler */ public NameHandler() {

name = null;

}

public String getName() { return name;

}

public void setName(String name) { this.name = name;

}

}

17

1.4.2.3.Редактирование файла Default JavaServer Pages

1.Перенести фокус ввода в файл index.jsp, кликнув на закладку в верхней части окна редактора.

2.В палитре Palette (Ctrl-Shift-8), расположенной в окне редактора справа, рас-

крыть HTML Forms и перенести элемент Form в точку после тега <h1>.

Покажется диалог Insert Form (рис.1.7).

Рис. 1.7. Диалог Insert Form

3.Задать следующие значения:

Action: response.jsp

Method: GET

Name: Name Input Form

Нажать кнопку OK. Форма HTML будет добавлена в файл index.jsp.

4.Перетащить элемент Text Input в точку перед тегом </form>, затем задать следующие значения:

Name: name

Type: text

Нажать кнопку OK. Тег HTML <input> добавлен между тегами <form>.

5.Перетащить элемент Button в точку перед тегом </form>. Задать следующие значения:

Label: OK

Type: submit

Нажать кнопку OK. Кнопка HTML добавляется между тегами <form>.

6.Набрать Enter your name: перед первым тегом <input>, затем изменить текст

Hello World! между тегами <h1> в Entry Form.

7.Правым кликом в редакторе выбрать Format (Alt-Shift-F) для форматирова-

ния кода. Файл index.jsp будет выглядеть следующим образом:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP Page</title> </head>

<body>

<h1>Entry Form</h1>

<form name="Name Input Form" action="response.jsp"> Enter your name:

18

<input type="text" name="name" /> <input type="submit" value="OK" />

</form>

</body>

</html>

1.4.2.4.Создание файла JavaServer Pages

1.В окне Projects правым кликом по узлу HelloWeb выбрать New > JSP. Откро-

ется помощник New JSP File. Задать имя файла — response. Нажать Finish.

Узел файла response.jsp появится в окне проекта ниже index.jsp, и новый файл откроется в редакторе.

2.На правой палитре редактора раскройте узел JSP и перетащите элемент Use

Bean в точку ниже тега <body> в редакторе кода. Будет открыт диалог Insert

Use Bean. Задайте значения, приведённые на рис. 1.8:

ID: mybean

Class: org.mypackage.hello.NameHandler

Scope: session

Нажмите кнопку OK. Тег <jsp:useBean> добавляется ниже тега <body>.

Рис. 1.8. Диалог Insert Use Bean

3.Перетащите Set Bean Property с палитры перед тегом <h1> и нажмите кноп-

ку OK. В появившемся теге <jsp:setProperty> удалите пустой атрибут value и отредактируйте следующим образом: замените значение для name и property.

<jsp:setProperty name="mybean" property="name" />

Как указано в документации на <jsp:setProperty>, вы можете задать значение

свойства различным способом. В этом случае введенное пользователем зна-

чениеиз index.jsp станетпаройname/value,передаваемойвобъекте request.

Когда вы устанавливаете свойство использованием тега <jsp:setProperty>,

вы можете задать значение, соответствующее имени свойства в объекте request. Поэтому заданием свойства для имени можно получить значение, введенное пользователем.

4.Измените текст между тегами <h1>, как показано ниже:

<h1>Hello, !</h1>

5.Перенесите элемент Get Bean Property из палитры и поместите после запя-

той между тегами <h1>. Задайте следующие значения в окне диалога Insert

Get Bean Property:

Bean Name: mybean

Property Name: name

Нажмите кнопку OK. Заметьте, что тег <jsp:setProperty> сейчас добавлен

между тегами <h1>.

19

6.Правый клик в редакторе и выбор Format (Alt-Shift-F) для форматирования текста кода. Теги <body> файла response.jsp имеют вид:

<body>

<jsp:useBean id="mybean" scope="session" class="org.mypackage.hello.NameHandler" />

<jsp:setProperty name="mybean" property="name" />

<h1>Hello, <jsp:getProperty name="mybean" property="name" />! </h1>

</body>

1.4.3. Выполнение проекта веб-приложения

Среда IDE использует Ant-скрипт для построения и исполнения приложения.

Среда генерирует скрипт на основе опций, заданных в помощнике New Project так же,

как из диалогового окна Project Properties.

1.В окне Projects сделать правый клик по узлу проекта HelloWeb и выбрать Run

(F6).

Примечание. По умолчанию проект будет создан с доступным режимом

Compile on Save, поэтому нет необходимости в его компиляции перед исполнением приложения в среде IDE.

Страницы index.jsp и response.jsp открываются в браузере (рис. 1.9).

а

б

Рис. 1.9. Внешний вид страниц приложения:

а– index.jsp, б – response.jsp

2.Введите имя в текстовом поле и нажмите кнопку OK. Отобразится страница response.jsp, обеспечивающая простое взаимодействие с пользователем.

1.4.4.Создание приложения JavaEE 6

Приложение в технологии JavaEE 6 содержит страницы для отправки клиенту

и ряд бинов для взаимодействия с базами данных. Общая схема взаимодействия ча-

стей приложения приведена на рис. 1.10. Идеология технологии JavaEE 6 ориентирована на работу с классами для представления объектов различной природы, включая

записи баз данных.

Обычный сеанс взаимодействия пользователя с веб-приложением включает

следующие шаги.

1.Клиент направляет запрос на сервер, который формирует начальную страницу (обычно index.xhtml), отправляемую на браузер клиента. Начальная страница может

содержать ссылки и формы для продолжения диалога с приложением на сервере.

2.Клиент своими манипуляциями задаёт команду (ссылка или кнопка), отправляемую на сервер.

20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!"#$%&

 

 

'

 

 

(!")*!"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!"#$%&

 

 

 

 

 

 

 

 

 

+ ,

 

 

 

(!")*!"

 

 

 

 

 

 

& - .

Рис. 1.10. Диаграмма взаимодействий компонент в Java EE 6

3. Сервер извлекает ссылку на следующую страницу из поступившей коман-

ды или вызывает метод-обработчик, который возвращает имя следующей страницы,

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

21

4.При нажатии кнопки передачи данных на форме в свойство будет записано принятое и перекодированное значение от клиента из поля ввода, а далее вызывает-

ся метод-обработчик для командной кнопки.

5.Обработчик обращается к методам фасада для сохранения принятых данных

от пользователя в базе данных и возвращает имя следующей страницы.

6.Метод фасада использует подсистему хранения для выполнения операций с записями таблицы базы данных.

Классы сущности, фасада и вида представляют собой обычные классы — бины,

подчиняющиеся правилам их создания и использования. Эти правила включают сле-

дующие требования:

класс должен иметь среди прочего конструктор без параметров;

экземпляры классов должны иметь приватные поля для хранения значений свойств;

для доступа к свойствам экземпляры должны иметь методы чтения (get) и методы записи (set) свойств с соблюдением соглашений об именах (описа-

ны ниже).

1.4.4.1.Создание проекта веб-приложения

1.Выбрать File > New Project (Ctrl-Shift-N) из главного меню.

2.Выбрать Web Application из Java Web категории и нажать кнопку Next.

3.Набрать SimpleEE6App для имени проекта и задать расположение проекта.

4.Снять выделение Use Dedicated Folder. Нажать кнопку Next.

5.Выбрать сервер GlassFish v3 и версию Java EE в EE 6 Web. Нажать кнопку

Next (рис. 1.11).

Рис. 1.11. Окно выбора сервера

6. Выбрать JavaServer Faces в панели Frameworks. Нажать Finish (рис.1.12).

После этого IDE создаст и откроет проект, затем JSF-страницу index.xhtml и от-

кроет ее в редакторе.

22

Рис. 1.12. Окно выбора инструментов

1.4.4.2. Создание класса сущности и фасада сессии

Сущность следует понимать как таблицу базы данных, в которой хранятся эк-

земпляры (записи). Класс сущности является объектом (POJO — plain old Java object),

обозначаемым аннотацией @Entity. Java Persistence API позволяет использовать хранение данных веб-приложений без необходимости создавать модуль EJB.

Фасад сессии для класса сущности в этом приложении — сессионный бин без состояния. Архитектура Enterprise JavaBean (EJB) 3.1 является частью спецификации

Java EE 6 и позволяет создавать бины сессии без бизнес-интерфейса и паковать ком-

поненты EJB прямо в архив WAR.

Создание класса сущности

С использованием помощника New Entity Class порядок действий следующий:

1.Правый клик в узел проекта. Выбрать New > Other.

2.Выбрать Entity Class из категории Persistence. Нажать Next.

3.Набрать Message в поле Class Name.

4.Набрать entities в поле Package.

5.Нажать Create Persistence Unit.

6.Выбрать Data Source (например, jdbc/sample для JavaDB).

7.Нажать Create в окне New Persistence Unit (рис. 1.13).

23

Рис. 1.13. Окно выбора хранилища

8.Нажать Finish в окне New Entity Class.

9.В редакторе добавить поле message ниже поля id. private Long id;

private String message;

Примечание. Обратите внимание на использование в именах свойств символов только нижнего регистра . В противном случае при исполнении файлов xhtml могут быть проблемы с обнаружением объявленных свойств в экземплярах класса сущности. Аналогичные проблемы могут возникнуть при использовании сущностей баз данных. Для их предупреждения при проектировании таблиц БД нежелательно использовать при именовании таблиц и полей верхний регистр. Хотя последнее затруднение может быть исправлено при создании классов сущностей вручную, если возникают проблемы с неопознанными именами свойств и связей между таблицами.

10.Правый клик в редакторе. Выбрать Insert Code (Ctrl+I) и Getter and Setter.

11.В окне Generate Getters and Setters (рис. 1.14) выбрать поле message и на-

жать Generate. IDE сгенерирует методы get и set для поля message.

Рис. 1.14. Окно выбора полей для генераторов

12. Сохранить изменения.

24

Создание фасада сессии

В этом примере клиентский бин доступа является локальным клиентом, имеются опции для использования локального интерфейса или вида без интерфейса для

демонстрации бина.

Выполните следующую последовательность действий.

1.Правый клик по узлу проекта. Выбрать New > Other.

2.Выбрать Session Beans for Entity Classes в категории Java EE. Нажать Next.

3.Выбрать сущность Message и нажать Add. Нажать Next.

4.Набрать boundary в поле package. Нажать Finish (рис. 1.15).

Рис. 1.15. Окно создания сущности

Сессионный фасад MessageFacade.java открывается в редакторе. Аннотация @Stateless объявляет класс без состояния.

@Stateless

public class MessageFacade { @PersistenceContext(unitName = "SimpleEE6AppPU") private EntityManager em;

public List<Message> findAll() {

CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Message.class));

return em.createQuery(cq).getResultList();

}

public List<Message> findRange(int[] range) {

CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Message.class));

Query q = em.createQuery(cq); q.setMaxResults(range[1] - range[0]); q.setFirstResult(range[0]);

return q.getResultList();

}

25

public int count() {

CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); Root<Message> rt = cq.from(Message.class); cq.select(em.getCriteriaBuilder().count(rt));

Query q = em.createQuery(cq);

return ((Long) q.getSingleResult()).intValue();

}

}

Методы findAll, findRange и count используют технологию Criteria API для созда-

ния запросов.

1.4.4.3.Создание вида и страницы JSF

1.Правый клик. Выбрать New > Other.

2.Выбрать JSF Managed Bean в категории JavaServer Faces. Нажать Next.

3.Набрать MessageView в поле Class Name.

Вы используете Managed Bean с именем MessageView как значение для атрибу-

тов компонент inputText и commandButton на JSF-странице index.xhtml.

4.Набрать my.presentation для Package.

5.Набрать messageView для Name.

6.Установить Set Scope в Request. Нажать кнопку Finish (рис. 1.16).

Рис. 1.16. Окно создания управления бином

IDE создаст класс бина MessageView.java и откроет его в редакторе. В окне Projects на рис. 1.17 видны созданные файлы.

26

Рис. 1.17. Окно проекта

В редакторе MessageView.java видны аннотации @ManagedBean и @RequestScoped и имя бина.

@ManagedBean(name="messageView")

@RequestScoped

public class MessageView {

/** конструктор без параметров MessageView */ public MessageView() {

}

}

Вам надо добавить аннотацию @EJB для использования инъекции для получения ссылки на бин MessageFacade. Методы findAll и create показаны в фасаде.

1.Правый клик в редакторе. Выбрать Insert Code.

2.Выбрать Call Enterprise Bean.

3.Выбрать MessageFacade в окне Call Enterprise Bean. Нажать OK (рис. 1.18).

Рис. 1.18. Окно Insert Code

27

IDE добавит следующий код (выделен жирным) в бин. public class MessageView {

/** Creates a new instance of MessageView */ public MessageView() {

}

// Injects the MessageFacade session bean using the @EJB annotation

@EJB

} MessageFacade messageFacade;

4. Добавить следующий код в класс.

// Creates a new field private Message message;

//Creates a new instance of Message public MessageView() {

} this.message = new Message();

//Calls getMessage to retrieve the message public Message getMessage() {

} return message;

//Returns the total number of messages public int getNumberOfMessages(){

} return messageFacade.findAll().size();

//Saves the message and then returns the string "theend" public String postMessage(){

this.messageFacade.create(message); } return "result";

Подправить выражения для импорта (Ctrl-Shift-I) и сохранить все изменения.

1.4.5.Модификация страницы Index.xhtml

1.Открыть файл index.xhtml.

2.Добавить объявление библиотеки core:

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f=”http://java.sun.com/jsf/core”>

и текст между тегами <h:body>:

<h:body>

<f:view>

<h:form>

<h:outputLabel value="Message:"/> <h:inputText

value="#{messageView.message.message}"/>

<h:commandButton

action="#{messageView.postMessage}" value="Post Message"/>

</h:form>

28

</f:view>

</h:body>

При ручном добавлении текста будут появляться подсказки для автопродолже-

ний начатых фрагментов (рис. 1.19).

Рис. 1.19. Окно автоматических подсказок

3. Сохранить изменения.

1.4.6.Создание страницы Results.xhtml

1.Правый клик по узлу проекта. Выбрать New > Other.

2.Выбрать JSF Page в категории JavaServer Faces. Нажать кнопку Next.

3.Набрать result в окне File Name.

4.Установить опцию Facelets. Нажать Finish.

Исправить файл result.xhtml между тегами <h:body>.

<h:body>

<h:outputLabel value="Thanks! There are "/> <h:outputText value="#{messageView.numberOfMessages}"/> <h:outputLabel value=" messages!"/>

</h:body>

1.4.7.Исполнение приложения

1.Правый клик по узлу проекта. Выбрать Run.

2.Впишите сообщение в текстовое поле и нажмите кнопку Post Message (рис. 1.20).

Рис. 1.20. Окно ввода сообщения

Сообщение будет сохранено в базе данных, число сообщений будет показано

на странице ответа (рис. 1.21).

Рис.1.21. Окно выдачи результата

29

Соседние файлы в папке КСТ