chown –R sk /usr/local/jdk1.6.0/
chmod 774 / usr/local/jdk1.6.0/
chown –R sk /usr/local/apache-tomcat-5.5.20/
chmod 774 /usr/local/apache-tomcat-5.5.20/
Создается скрипт запуска Apache-Tomcat в /etc/rc.d/tomcat, содержимое которого приведено в Приложении Е.
Для запуска Apache-Tomcat в командной строке набирается: /etc/rc.d/tomcat start.
После старта открывается браузер и набирается «http://localhost:8080», тем самым загружая web-интерфейс для управления Apache-Tomcat (рисунок 2.3.1.1).
Рисунок 2.3.1.1 - Web-интерфейс для управления Apache-Tomcat
Все приложения написанные для Apache-Tomcat будут располагаться в каталоге /usr/local/apache-tomcat-5.5.20/webapps/.
Для СДО создается отдельный каталог /usr/local/apache-tomcat-5.5.20/webapps/sdo/.
2.3.2 Сервер БД Oracle Database 10g
Инсталлятор Oracle располагается в директории /shared/Oracle10g/. Установка проводится в директорию /u01/app/. Перед запуском инсталлятора необходимо владельцем этой директории сделать пользователя sk:
chmod –R 777 /shared/Oracle10g/
chown –R sk /u01
chmod –R 775 /u01
Т.к. ОС SuSe Linux Server Edition 10 не поддерживается Oracle, а поддерживается только 9-ая версия, при запуске инсталлятора нужно указать, чтобы игнорировалась версия ОС.
./runInstaller –ignoreSysPrereqs
Сразу же появляется сообщение о том, что недостаточно прав для работы с директорией /opt/oracle/, поэтому меняется владелец данной директории, тем самым получив к ней полный доступ.
chown –R sk.wheel /opt/oracle
В процессе инсталляции необходимо добавить русский язык в список выбранных (рисунок 2.3.2.1).
Затем, указывается директория, в которую будет проинсталлирован Oracle (рисунок 2.3.2.2).
В качестве кодировки БД выбирается Юникод – UTF8. Глобальное имя БД остается по умолчанию – orcl.
Рисунок 2.3.2.1 - Выбор языков для БД
Рисунок 2.3.2.2 - Выбор директории для установки сервера
Далее указывается директория для хранения файлов БД (рисунок 2.3.2.3).
Рисунок 2.3.2.3 - Выбор директории для файлов БД
Затем вводится пароль для всех системных пользователей (рисунок 2.3.2.4).
Рисунок 2.3.2.4 - Задание паролей для системных пользователей
После этого начинается копирование файлов системы. Перед окончанием установки потребуется запустить два скрипта от пользователя root, которые задают параметры для Oracle.
После установки система готова к использованию, но если перегрузить компьютер, то Oracle надо будет запускать заново. Поэтому необходимо сконфигурировать ОС на запуск Oracle.
Открывается /etc/oratab и изменяется последняя строка с N на Y, чтобы инстанция (в данном случае - orcl) запускалась вместе с сервером [7].
Необходимо описать переменные среды в /etc/profile:
### Oracle 10g ###
export ORACLE_HOME="/u01/app/oracle"
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
Файл /etc/rc.d/oracle стартует, перезагружает и останавливает сервер. Содержимое данного файла описано в Приложении Ж. Чтобы запустить Oracle в консоли вводится /etc/rc.d./oracle start.
Система должна запуститься. Обратившись по адресу http://localhost:1158/em в браузере загрузится Oracle Enterprise Manager. А если обратиться по адресу http://localhost:5560/isqlplus, то загрузится web-интерфейс для работы с PL/SQL.
Разработка СДО ведется с использованием объектно-ориентированного подхода. Следовательно, приложение представляет собой набор объектов взаимодействующих между собой. Поэтому при разработке приложения необходимо как можно правильнее разделить выполняемые задачи между объектами.
СДО строится по схеме Модель-Вид-Контроллер (MVC, Model-View-Controller). Модель представляет систему, вид отвечает за отображение модели, а контроллер обрабатывает данные, поступающие от пользователя.
В качестве вида выступает страница JSP, отображающие данные для пользователя и позволяющие вводить новые данные. После введения новых данных управление передается контроллеру, который проверяет правильность введенных данных. Роль контроллера выполняет сервлет. После проверки введенных данных, инициализируется модель. В данной системе каждой таблице базы данных, соответствует два класса модели: все свойства первого класса, соответствуют полям таблицы, а второй класс – отвечает за непосредственное взаимодействие с таблицей. Таким образом, проверенные контроллером данные, присваиваются объекту, который соответствует таблице БД. Этот объект сохраняется в таблице объектом, который отвечает за взаимодействие с этой таблицей. После того как модель обновилась, необходимо пользователю отобразить изменения, для этого делается выборка из БД и вид отображает внесенные изменения [8].
Одной из проблем, с которой пришлось столкнуться при разработке приложения - была проблема кодировки представления данных кириллицей из БД. Попытка устранения данной проблемы производилась на сервере БД Oracle, путем многочисленных перестановок с различными кодировками и попытками задать в переменных среды кодировку. Но все это было безуспешно. Однажды, была осуществлена попытка ввода данных через SQL*Plus по средствам web-интерфейса, а не через консоль, как это делалось ранее. После выборки, было обнаружено, что введенные данные нормально выводятся, используя все буквы кириллицы. Т.е. ошибка возникает во время ввода данных и явно, что сервер БД здесь не причем.
В конечном счете, выяснилось, что когда данные забираются из формы, они преобразуются в неизвестную кодировку. Поэтому при получении скриптом данных из формы их следует явно преобразовывать к нужной кодировке. Т.к. в разрабатываемой системе используется кодировка UTF-8, то преобразование кодировки производится следующим методом [9]:
request.setCharacterEncoding(“UTF-8”)
Вся информация, хранящаяся в БД, должна быть отображена на экране, т.е. для этого необходимо создавать специальные формы ввода, изменения и удаления данных. Т.к. общение со стороны клиента происходит через web-браузер, то наиболее удобным средством для создания и обработке на стороне клиента форм является JavaScript.
В качестве примера ниже приведен код формы ввода факультета:
<form name="form1" method="post" action="FacultyAdd">
<table width="200" border="0">
<tr>
<td>Название факультета:</td>
<td><input type="text" name="facultyName"></td>
</tr>
<tr>
<td>Сокращенное название факультета:</td>
<td><input type="text" name="facultyShortName"></td>
</tr>
<tr>
<td> <div align="center"> <input type="submit" name="Submit" value="Добавить"> </div> </td>
<td><input type="reset" name="Submit3" value="Очитстить"></td>
</tr>
</table>
</form>
В данном примере элементы формы выводятся в ячейки таблицы для ровного представления на странице. Рассмотрим, элементы формы:
<form name="form1" method="post" action="FacultyAdd"> - тэг, описывающий форму, параметр method определяет каким методом будут передаваться данные сервлету: post или get; параметр action определяет, какому сервлету передавать параметры из формы на обработку.
<input type="text" name="facultyName> - однострочный редактор, позволяется осуществить ввод текстовых данных.
<input type="submit" name="Submit" value="Добавить"> - кнопка, отправляющая данные из элементов ввода сервлету, указанному в параметре action формы.
<input type="reset" name="Submit3" value="Очистить"> - кнопка, сбрасывающая все параметры формы.
На рисунках 2.4.1.1 и 2.4.1.2 приведены формы ввода и изменения/удаления данных.
Рисунок 2.4.1.1 - Форма добавления/удаления факультета
Рисунок 2.4.1.2 - Форма изменения/удаления факультетов
Исходный код формы, приведен в Приложении И.
В разд. 2.4 была описана схема взаимодействия классов в приложении. Ниже рассматривается, непосредственная разработка классов.
Для работы с таблицей факультетов (Faculty), создается специальный класс Faculty. Описание класса осуществляется следующей конструкцией:
public class Faculty
Данный класс содержит свойства, соответствующие всем полям таблицы Faculty, т.е. facultyID, facultyName, facultyShortName. Описание этих свойств, производится следующим образом:
private int facultyID;
private String facultyName;
private String facultyShortName;
По правилам объектно-ориентированного программирования, не следует разрешать прямой доступ к полям класса, т.е. описывать их ключевым словом public. Осуществлять этот доступ следует при помощи специальных методов, которые будут устанавливать, и извлекать значения свойств класса.
Для извлечения значения свойства facultyID, используется следующий метод:
public int getFacultyID() {
return facultyID;
}
Для изменения и задания свойства facultyID, используется метод setFacultyID:
public void setFacultyID(int facultyID) {
this.facultyID = facultyID;
}
Во время создания объекта выполняется особый метод, называемый конструктором. Конструкторы бывают пустыми, т.е. в их задачу входит выделение адресного пространства для создающегося объекта, а бывают конструкторы с параметрами, которые помимо выделения адресного пространства, задают значения свойств объекта. Конструктор с параметрами выглядит следующим образом: