Данные - sdast

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
КЕМЕРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Математический факультет
Кафедра вычислительной математики
ДИПЛОМНАЯ РАБОТА
«Построение системы хранения
и управления результатами научных исследований»
студента 5 курса
Линник Константина Станиславовича
Специальность 010503 – «Математическое обеспечение
и администрирование информационных систем»
Научный руководитель:
ассистент Н.А. Гейдаров
_____________________
Консультант:
Зав. кафедрой, д.ф.-м.н.,
профессор Ю.Н. Захаров
_____________________
Работа допущена к защите:
Работа защищена:
"____"_______________2010г.
Зав. кафедрой д.ф.-м.н.,
“____” _____________2010г.
профессор Ю.Н. Захаров
__________________________
с оценкой _________________
Председатель ГАК:______________
__________________________
__________________________
Кемерово 2010
1 Содержание
1
Содержание........................................................................................................ 1
2
Введение ............................................................................................................ 4
3
4
5
2.1
Актуальность............................................................................................... 4
2.2
Цель .............................................................................................................. 4
2.3
Задачи........................................................................................................... 4
Анализ ................................................................................................................ 5
3.1
Основная терминология ............................................................................. 6
3.2
Роли .............................................................................................................. 6
Требования к системе ....................................................................................... 7
4.1
Функциональные требования к системе: ................................................. 7
4.2
Архитектурные требования к системе ..................................................... 7
4.3
Системные требования............................................................................... 7
Проектирование ................................................................................................ 8
5.1
Среда разработки ........................................................................................ 8
5.2
Репозиторий ................................................................................................ 8
5.3
Лицензия ...................................................................................................... 8
5.4
Выбор платформы ...................................................................................... 9
5.5
Выбор базы данных .................................................................................. 10
5.5.1
6
Map-Reduce ......................................................................................... 11
5.6
Клиент ........................................................................................................ 11
5.7
FTP Сервер ................................................................................................ 12
Реализация ....................................................................................................... 13
1
6.1
Архитектура .............................................................................................. 13
6.1.1
Ядро системы ...................................................................................... 13
6.1.1.1
IoC контейнер ............................................................................... 13
6.1.1.2
Авторизация и аутентификация ................................................. 14
6.1.2
Представительский слой.................................................................... 15
6.1.3
Модель ................................................................................................. 15
6.1.4
Данные ................................................................................................. 18
6.1.4.1
Шаблон .......................................................................................... 19
6.1.4.2
Пакет.............................................................................................. 19
6.1.4.3
Пользователь ................................................................................ 19
6.1.4.4
Системный документ ................................................................... 19
6.1.5
Конфигурация ИС .............................................................................. 20
6.1.5.1
application.properties ..................................................................... 20
6.1.5.2
applicationContext.xml .................................................................. 20
6.1.5.3
web.xml .......................................................................................... 21
6.1.6
Расширение ИС................................................................................... 21
6.1.6.1
Подготовка интерфейса модели ................................................. 21
6.1.6.2
Реализация интерфейса ............................................................... 22
6.1.6.3
Реализация контроллера .............................................................. 22
6.1.6.4
Регистрация в диспетчере ........................................................... 23
6.1.6.5
Создание страницы-представления............................................ 23
6.1.6.6
Настройка прав доступа .............................................................. 23
6.2
Модульное тестирование ......................................................................... 24
6.3
Инсталлятор .............................................................................................. 24
2
6.3.1
Удаление.............................................................................................. 25
6.3.2
Сборка.................................................................................................. 25
6.4
Пользовательский интерфейс .................................................................. 26
6.4.1
6.4.1.1
Элементы ...................................................................................... 26
6.4.1.2
Представления .............................................................................. 27
6.4.2
Шаблоны ............................................................................................. 27
6.4.3
Пакеты ................................................................................................. 27
6.4.4
Поиск ................................................................................................... 28
6.4.5
Пользователи ...................................................................................... 28
6.4.6
Просмотр ............................................................................................. 29
6.5
7
Конструктор ........................................................................................ 26
6.4.6.1
Представление по-умолчанию .................................................... 29
6.4.6.2
Пользовательское представление ............................................... 29
Пример работы с ИС ................................................................................ 30
6.5.1
Установка ............................................................................................ 30
6.5.2
Создание пользователей .................................................................... 31
6.5.3
Создание шаблона .............................................................................. 32
6.5.4
Создание задачи.................................................................................. 33
6.5.5
Создание представления .................................................................... 34
Заключение ...................................................................................................... 36
7.1
Функциональные требования .................................................................. 36
7.2
Архитектурные требования ..................................................................... 36
8
Приложение I. Список литературы ............................................................... 37
9
Приложение II. Глоссарий ............................................................................. 38
3
2 Введение
2.1 Актуальность
В процессе моделирования научных задач и дальнейшего исследования
полученных результатов, производится большой объем данных. С ростом
объема
данных,
возрастает
время
доступа.
Необходимо
постоянно
затрачивать время на поддержание порядка и структуры данных. В
противном случае, будет невозможно найти нужные данные за приемлемое
время. Главной проблемой является невозможность обобщения различных
данных и выделения общей структуры ввиду их разной природы. В итоге
результаты хранятся отдельно от данных, могут быть разбросаны в
нескольких местах и как следствие теряются.
2.2 Цель
Целью данной работы была разработка Информационной Системы, которая
сократила бы усилия, направленные на поддержку структуры данных.
Немаловажным является централизация данных, что обеспечит единый
механизм управления и доступность по сети.
2.3 Задачи
 Выбор платформы и базы данных
 Проектирование модульного ядра
 Создание модулей
 Тестирование системы
 Документирование
4
3 Анализ
Данные, получаемые в результате моделирования и дальнейшего анализа,
имеют схожую структуру в пределах одной задачи. Поэтому необходима
возможность группировать данные по задачам. При этом каждой задаче
сопоставляется некоторый шаблон, по которому заполняются данные.
Поскольку данные имеют разную структуру, то и способ представления этих
данных тоже различается, необходимо дать возможность ассоциировать
представление с определенным классом задач. Пользователь должен иметь
возможность редактировать только свои пакеты данных.
Был проанализирован типичный процесс работы над задачей:
1. Подготовка расчетной программы
2. Выбор начальных данных
3. Запуск процесса моделирования
4. Анализ сырых данных
5. Визуализация
Как правило, сырые данные занимают большой объем на жестком диске и в
дальнейшем используются гораздо реже, чем обработанные данные.
Обработанные же данные, такие как графики, результаты визуализации
должны
быть
доступны
непосредственно
при
просмотре
задачи.
Следовательно, необходим инструмент, позволяющий найти нужные данные,
и быстро получить доступ к ним, имея только браузер.
5
Рисунок 1. Пакет данных
3.1 Основная терминология
 Пакет — набор метаданных определенного шаблона, а также
ассоциированные с ними вложения и данные
 Метаданные — структурированные данные, созданные по
определенному шаблону, с возможностью поиска по ним
 Данные — множество файлов произвольной структуры, без
возможности поиска
 Вложения — небольшое количество файлов малого размера,
хранящихся непосредственно в пакете, для быстрого доступа
 Шаблон — шаблонная структура данных, на основании которой будут
заполняться метаданные
3.2 Роли
В ИС были выделены 4 роли:
Администратор — управление пользователями и ролями
Расширенный пользователь — создание и модификация шаблона
Пользователь — создание задачи, заполнение метаданных, загрузка файлов
Гость — просмотр данных, поиск по метаданным
Пользователь может одновременно иметь несколько ролей.
6
4 Требования к системе
4.1 Функциональные требования к системе:
Спроектировать и реализовать систему, позволяющую пользователям:
1. Создавать шаблоны
2. Хранить и изменять как набор файлов, так и метаданные
3. Производить поиск по метаданным
4. Разделять права доступа к различным частям системы
5. Создавать пользовательские представления данных
4.2 Архитектурные требования к системе
1. Масштабируемость
2. Модульность
3. Расширяемость
4. Сопровождаемость
4.3 Системные требования
Для работы с системой необходим браузер (Firefox 3.5, Internet Explorer 8) и
канала связи с сервером, на котором развернута ИС. В качестве FTP-клиента
можно использовать встроенные средства операционной системы.
Требования к серверу в основном касаются памяти: 300 МБ на жестком диске
для первичного развертывания и 256 МБ оперативной памяти для запуска. В
дальнейшем требования растут пропорционально объему загруженных
данных и количеству пользователей. Сервер должен быть обеспечен каналом
связи для обмена данными с пользователями.
7
5 Проектирование
5.1 Среда разработки
Для разработки проекта была выбрана интегрированная среда NetBeans1 от
компании
Oracle
(ранее
Sun).
Данная
среда
обладает
богатым
инструментарием для разработки веб-приложений.
5.2 Репозиторий
В качестве репозитория для проекта был выбран Google Code 2 . Он
предоставляет систему контроля ревизий Subversion 3 , удобный редактор
документации с wiki-разметкой, багтрекер. Использование репозитория
позволяет осуществлять совместную разработку командой программистов,
повышает надежность хранения данных и хранит всю историю изменений
кода, позволяя откатиться к любой версии. Также исходный код приложения
свободно доступен по сети Internet. Современные среды разработки
поддерживают интеграцию с репозиторием и предоставляют удобные
инструменты для управления кодом.
5.3 Лицензия
Для размещения проекта в репозитории было необходимо выбрать одну из
лицензий, по которой будет распространяться исходный код приложения. В
качестве таковой была выбрана Apache Software License 24. Данная лицензия
является одной из самых свободных, давая пользователю право использовать
программное обеспечение для любых целей, свободно распространять,
изменять, и распространять изменённые копии. Еще один повод для выбора
данной
лицензии
—
большинство
компонентов
распространяются под лицензией ASL2.
1
http://netbeans.org/
http://code.google.com/p/sdast
3
http://subversion.apache.org
4
http://www.apache.org/licenses/LICENSE-2.0
2
8
и
модулей
ИС
5.4 Выбор платформы
В качестве базовой платформы была выбрана Java EE5. Java EE является
промышленной
технологией
и
в
основном
используется
в
высокопроизводительных проектах, в которых необходима надежность,
масштабируемость, гибкость. Популярности Java EE также способствует то,
что Sun предлагает бесплатный комплект разработки, SDK. Данная
платформа построена на идеологии открытости, что позволяет подменить
реализацию практически любой её части.
Альтернативой является платформа .NET от Microsoft. Возможности данной
платформы богаче, но главным минусом является значительная закрытость и
отсутствие альтернативных реализаций для многих компонентов платформы.
В качестве более высокоуровневой надстройки был использован Spring
Framework 6 . Spring обеспечивает решение многих задач, с которыми
сталкиваются Java разработчики и организации, желающие создать
информационную систему, основанную на Java платформе. Из-за широкой
функциональности трудно определить наиболее значимые структурные
элементы, из которых он состоит. Spring не всецело связан с Java EE
платформой, несмотря на его масштабную интеграцию с ней, что является
важной причиной его популярности.
Spring
Framework
—
вероятно,
наиболее
известен
как
источник
расширений, нужных для эффективной разработки сложных бизнесприложений вне тяжеловесных программных моделей, которые исторически
были доминирующими в промышленности. Ещё одно его достоинство в том,
что он ввел ранее неиспользуемые функциональные возможности в
сегодняшние господствующие методы разработки, даже вне платформы
Java.
5
6
http://java.sun.com/javaee/
http://www.springsource.org/
9
Spring предлагает последовательную модель и делает её применимой к
большинству типов приложений, которые уже созданы на основе платформы
Java. Считается, что Spring Framework реализует модель разработки,
основанную на лучших стандартах индустрии, и делает её доступной во
многих областях Java.
5.5 Выбор базы данных
Первоначально планировалось использовать RDBMS PostgreSQL7. В связке
с ORM библиотекой Hibernate 8 . Но в процессе реализации понадобилось
поддерживать большое количество классов слоя доступа к данным, код
оказался слишком неустойчивым (незначительные изменения в постановке
задачи
приводили
к
Неструктурированная
серьезным
модификациям
исходного
кода).
природа данных плохо подходила к реляционной
модели данных.
Были рассмотрены альтернативные способы хранения данных и найдено
NoSQL СУБД CouchDB9, являющаяся документно-ориентированной.
Подобно другим документно-ориентированным СУБД, CouchDB не требует
описания
схемы
данных,
и
предназначена
для
работы
с
полу-
структурированной информацией.
Отличительная особенность данных СУБД в том, что данные сохраняются не
в строках и колонках, а в виде документов в формате JSON, моделью
которых является не таблица, а дерево. Типизация отдельных полей не
поддерживается. Целостность БД обеспечивается исключительно на уровне
отдельных документов, но не связей между ними. Языком выборки данных
являются Map-Reduce функции, на языке JavaScript. Главным плюсом
7
http://www.postgresql.org/
http://www.hibernate.org/
9
http://couchdb.apache.org/
8
10
является отсутствие требований к единству записей (по аналогии с
кортежами в реляционной алгебре).
5.5.1 Map-Reduce
Подход к обработке данных, пришедший из функциональных языков и
позволяющий параллельно обрабатывать большие объемы данных. В
CouchDB данный подход используется для построения пользовательских
представлений поверх распределенных документов.
Ход работы состоит из двух этапов:
1. Map — операция предварительной обработки данных, применение
некоторой функции к каждому документу. Поскольку отсутствует sideeffect, данный этап легко разделяется на независимые потоки.
Результаты данного этапа сохраняются в B-дереве, что позволяет в
дальнейшем быстро находить нужные документы. На вход поступает
документ, на выходе получаются набор пар Ключ-Значение, которые
передаются на следующий шаг.
2. Reduce — опциональная операция свертки данных, поступивших из
предыдущего этапа. К данным применяются фильтры для отбора
данных по некоторым условиям, подсчета групповых функций.
5.6 Клиент
Доступ к функциональным возможностям программы осуществляется через
тонкого клиента — веб-браузер. Данные между клиентом и сервером
передаются практически без изменений в формате JSON посредством AJAX
запросов.
Для визуализации пользовательского интерфейса применяется библиотека
JQuery 10 и интерфейсная надстройка JQueryUI 11 . Данные библиотеки
10
11
http://jquery.com
http://jqueryui.com
11
предоставляют богатые возможности по работе со страницей в браузере,
передачи данных посредством AJAX.
Для доступа на запись к основным данным можно использовать любой FTPклиент. В гостевом режиме можно использовать любой современный
браузер.
5.7 FTP Сервер
Доступ к данным предоставляется при помощи встроенного FTP-сервера
Mina12. Данный сервер предоставляет интерфейсы для тесной интеграции с
приложением на платформе Java, и
может быть сконфигурирован при
помощи Spring IoC. Также он запускается вместе с ИС и получает
информацию о правах доступа из базы данных, что позволяет упростить
управление пользователями и правами, а также сократить избыточность
данных.
12
http://mina.apache.org/ftpserver/
12
6 Реализация
6.1 Архитектура
6.1.1 Ядро системы
6.1.1.1 IoC контейнер
Inversion of Control — важный принцип объектно-ориентированного
программирования,
используемый
для
уменьшения
связанности
в
компьютерных программах. Использование данного контейнера в системе
позволяет заменять модули и компоненты без необходимости пересборки
всего приложения. В качестве контейнера была выбрана реализация Spring
IoC.
Центральной частью Spring Framework является Inversion of Control
контейнер, который предоставляет средства конфигурирования и управления
объектами Java с помощью обратных вызовов. Контейнер отвечает за
управление жизненным циклом объекта: создание объектов, вызов методов
инициализации и конфигурирование объектов путем связывания их между
собой.
Объекты, создаваемые контейнером, также называются Управляемые
объекты или Beans. Обычно конфигурирование контейнера осуществляется
путем загрузки XML файлов, содержащих Определение Bean’ов и
предоставляющих информацию необходимую для создания bean’ов.
Объекты могут быть получены либо с помощью Поиска зависимости, либо
Внедрения зависимости. Поиск зависимости — шаблон проектирования,
когда вызывающий объект запрашивает у объекта-контейнера экземпляр
объекта с определенным именем или определенного типа. Внедрение
зависимости
—
шаблон
проектирования,
13
когда
контейнер
передает
экземпляры объектов по их имени другим объектам либо с помощью
конструктора, либо свойства, либо фабричного метода.
Рисунок 2. Последовательность работы
6.1.1.2 Авторизация и аутентификация
Для аутентификации и авторизации и применяется модуль Spring Security,
позволяющий не только управлять доступом к тем или иным разделам сайта,
но и разграничить доступ к тем или иным методам внутренних интерфейсов
системы при помощи аннотаций.
14
6.1.2 Представительский слой
Возможности, предоставляемые модулем Spring MVC, оказались слишком
велики,
поэтому
был
реализован
упрощенный
вариант
диспетчера.
Диспетчер пользовательских запросов конфигурируется при помощи бина
urlMapping в applicationContext.xml. Отдельные обработчики должны
реализовывать интерфейс IProcessable.
6.1.3 Модель
В основу интерфейсов модели положен принцип Rich Domain, т.е. публично
доступны только методы обработки данных, но не сами данные. Это имеет
смысл, поскольку в доменных объектах данные не хранятся, а происходит
только обмен данными с базой. Каждый доменный объект реализует
соответствующий интерфейс.
Исключение
составляет
интерфейс
IUsr,
являющийся
транспортом
информации о пользователях и правах между ИС и FTP сервером, и, как
следствие, почти не содержащий логики.
Интерфейс Реализация Назначение
IAttachment Attachments
Предоставление доступа к вложениям в пакеты
IFiles
Обработка директорий при создании новых
Files
пакетов
IFilter
Filter
Поиск пакетов по критерию
IPackages
Packages
Управление пакетами
ITemplates
Templates
Управление шаблонами
IUsers
Users
Управление пользователями
IUsr
Usr
Транспортный формат данных для описания
пользователя
Таблица 1. Интерфейсы модели
15
Рисунок 3. Модель Пользователь
16
Рисунок 4. Модель Задача
17
Рисунок 5. Модель Шаблон
6.1.4 Данные
В базе данных находятся документы трех видов: шаблон, пакет,
пользователь.
18
6.1.4.1 Шаблон
{
"_id": "_design/имя_шаблона",
"_rev": "ревизия",
"data": {"Шаблон незаполненных данных"},
"desc": "Краткое описание шаблона",
"views": [
{
"name": "имя представления",
"code": "function(данные_пакета){код, возвращающий строку, преобразованную из исходных
данных;}"
}
]
}
Листинг 1. Структура шаблона
6.1.4.2 Пакет
{
"_id": "идентификатор документа",
"_rev": "ревизия",
"owner": "логин владельца",
"description": "краткое описание",
"template": "шаблон",
"data": {"данные"},
"_attachments": {
"файл.вложение": {
"content_type": "image/jpeg",
"revpos": 2,
"length": 103999,
"stub": true
}
}
}
Листинг 2. Структура пакета
6.1.4.3 Пользователь
{
"_id": "идентификатор документа",
"_rev": "ревизия",
"login": "логин пользователя",
"password": "пароль",
"name": "Имя пользователя",
"roles": [
"admin",
"user",
"anonymous"
]
}
Листинг 3. Структура пользователя
6.1.4.4 Системный документ
Документ _design/default содержит необходимые системные запросы:
 filterByOwner — поиск пакетов по имени
 filterByTemplate — список шаблонов
19
 filterByUser— список пользователей
6.1.5 Конфигурация ИС
В ИС имеются несколько конфигурационных файлов разного уровня.
6.1.5.1 application.properties
В данном файле настраиваются параметры доступа к СУБД (адрес, порт,
название базы), путь к корневой директории FTP сервера, параметры
логгера. Данные параметры могут быть изменены администратором
системы.
#CouchDB configuration
db.host=127.0.0.1
db.port=5984
db.name=hydrodynamics
#embedded ftp server configuration
ftp.path=d:/Stuff/Temp/ftp
Листинг 4. Настройка ИС
6.1.5.2 applicationContext.xml
В данном файле описываются конкретные реализации интерфейсов и
взаимосвязь между ними, права доступа к разделам веб-интерфейса. Данный
файл конфигурации используется IoC контейнером. Всего в файле 6
разделов:
1. Подключение файла свойств application.properties
2. Настройка бинов, реализующих интерфейсы модели
3. Настройка контроллеров, обрабатывающих AJAX запросы
4. Настройка диспетчера и сопоставление строки запроса обработчику
5. Настройка FTP сервера, чтение конфигурации из файла
application.properties
6. Настройка прав доступа к разделам веб интерфейса для Spring
Security
Разработчику системы могут быть интересны разделы 2,3,4,6. Далее будет
более подробно рассмотрен процесс добавления нового компонента в ИС.
20
6.1.5.3 web.xml
Самый низкоуровневый конфигурационный файл, в котором подключается и
стартует IoC контейнер, FTP сервер, Диспетчер запросов, Диспетчер прав
доступа, и логгер. Модифицироваться будет крайне редко.
6.1.6 Расширение ИС
Рисунок 6. Диаграмма классов
6.1.6.1 Подготовка интерфейса модели
Все интерфейсы находятся в пакете org.blazer.sdast.model. Создается
интерфейс, содержащий необходимые методы, каждый метод описывается
средствами JavaDoc. В интерфейсе перед методами можно задать аннотацию
21
с правами доступа, если аннотации нет, то вызов метода будет доступен
всем.
public interface IAttachments {
@Secured({"IS_AUTHENTICATED_ANONYMOUSLY"})
String getAttachment(String doc, String name);
@Secured({"ROLE_USER"})
String putAttachment(String doc, String name, String contentType, String string);
}
Листинг 5. Настройка доменных прав
6.1.6.2 Реализация интерфейса
Создается класс, реализующий ранее созданный интерфейс. Все реализации
модели находятся в пакете org.blazer.sdast.model.impl. После этого класс
описывается во втором разделе файла applicationContext.xml.
<bean name="Packages" class="org.blazer.sdast.model.impl.Packages" >
<constructor-arg ref="Database"/>
<constructor-arg ref="Files"/>
</bean>
Листинг 6. Задание реализации интерфейса
Здесь name — имя класса, по которому он будет создаваться IoC
контейнером, class — имя созданного ранее класса,
constructor-arg —
аргументы, передающиеся в конструктор, ref — ссылка на имя другого
объекта. Если объект должен быть НЕ синглтоном, то в бин нужно добавить
атрибут scope="prototype".
6.1.6.3 Реализация контроллера
Создается класс, реализующий единственный метод process интерфейса
IProcessable, где request и response — полученные диспетчером запрос и
ответ соответственно.
public String process(HttpServletRequest request, HttpServletResponse response);
Листинг 7. Сигнатура метода process
Все обработчики находятся в пакете org.blazer.sdast.web.
22
Обработчик описывается в третьем разделе файла applicationContext.xml. В
большинстве случаев обработчику будет передана ссылка на объект
обслуживаемой им модели.
<bean name="JsonTemplates" class="org.blazer.sdast.web.JsonTemplates">
<constructor-arg ref="Templates"/>
</bean>
Листинг 8. Описание обработчика
Также обработчик должен сам задать кодировку, поскольку ниже уровнем, в
диспетчере, это не сделано по техническим причинам.
response.setContentType("text/javascript;charset=UTF-8");
Листинг 9. Задание кодировки
6.1.6.4 Регистрация в диспетчере
Для того чтобы обработчик начал принимать запросы от пользователя, он
должен быть зарегистрирован в диспетчере. Диспетчеру передается
ассоциативный массив, где ключом является начальный фрагмент запроса, а
значением — соответствующий обработчик.
<bean name="urlMapping" class="java.util.HashMap">
<constructor-arg>
<map>
<entry key="/packages.json" value-ref="JsonPackages"/>
<entry key="/templates.json" value-ref="JsonTemplates"/>
…
</map>
</constructor-arg>
</bean>
Листинг 10. Настройка диспетчера
6.1.6.5 Создание страницы-представления
В корневой директории создается jsp – страница с пользовательским
интерфейсом. Данная страница будет обмениваться AJAX-запросами с
контроллером. Интерфейс и пользовательская логика создается средствами
HTML и JavaScript. Имеет смысл подключить библиотеку JQuery.
6.1.6.6 Настройка прав доступа
Заключительный этап — настройка доступа к представлению. Доступ
настраивается в шестом разделе файла applicationContext.xml. Настройка
23
аналогична диспетчеру: ключом является перехватываемый запрос, а
значением — список ролей.
<sec:http auto-config="true">
<sec:intercept-url pattern="/users.jsp" access="ROLE_ADMIN"/>
<sec:intercept-url pattern="/constructor.jsp" access="ROLE_ADVANCED"/>
<sec:intercept-url pattern="/pkg.jsp" access="ROLE_USER"/>
<sec:intercept-url pattern="/templates.jsp" access="ROLE_USER"/>
<sec:intercept-url pattern="/*.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<sec:http-basic />
</sec:http>
Листинг 11. Права доступа
6.2 Модульное тестирование
Для автоматизации тестирования ИС применяются две библиотеки JUnit13 и
Mockito14. Тесты состоят из набора тестовых методов. Каждый тест состоит
из трех этапов. Этап подготовки: на этом этапе подготавливаются
необходимые объекты, которые будут поданы на вход тестируемому классу,
часть объектов заменяется стабами (объектами имитирующими поведение
некоторого реального объекта) для упрощения тестирования.
Этап
тестирования: на этом этапе выполняются тестируемая последовательность
действий, на вход подаются созданные ранее объекты и стабы. Этап
сравнения:
на
этом
этапе
анализируются
полученные
результаты,
возвращенные результаты сравниваются с эталонами.
Среда разработки NetBeans позволяет автоматизировать выполнение тестов,
и проанализировать результаты тестирования.
6.3 Инсталлятор
ИС состоит из множества компонентов и для развертывания необходимо
совершить
строгую
последовательность
действий.
Для
написания
инсталлятора использовалась бесплатное средство Nullsoft Scriptable Install
System (NSIS)15.
13
http://sourceforge.net/projects/junit/
http://mockito.org/
15
http://nsis.sourceforge.net/Main_Page
14
24
Прежде всего, необходимо установить зависимости: платформу JDK 1.6,
СУБД CouchDB 0.11, сервер приложений Tomcat 6. Затем на сервер
приложений загружается архив с приложением, а в СУБД копируется дамп
базы. Установочный пакет занимает 8 Мб, при этом объем зависимостей 150
Мб, поэтому было целесообразно вынести зависимости из установочного
пакета.
Для каждой зависимости сначала проверяется её наличие в системе, при
отсутствии таковой инсталлятор ищет установочный пакет в папке, из
которой был запущен, и либо запускает процесс установки, либо пытается
загрузить компонент из интернета.
После установки на рабочем столе появляется ярлык для доступа к вебинтерфейсу приложения, а в диспетчере служб16 появятся две записи Apache
Couch DB для СУБД и Tomcat 6 для сервера приложений. Что позволит
управлять ИС стандартными средствами Windows.
6.3.1 Удаление
Для удаления необходимо удалить приложение и все установленные
зависимости. Сделать это можно через стандартный интерфейс установки и
удаления программ.
6.3.2 Сборка
В основе проекта среды разработки NetBeans лежит средство автоматизации
сборки Apache Ant 17 , поэтому для автоматизации сборки инсталлятора в
проект было добавлено задание, автоматически вызывающее сборку
установочного пакета. Для корректного выполнения задания необходимо в
свойствах проекта задать путь к файлу makensis.
16
17
services.msc из командной строки
http://ant.apache.org/
25
6.4 Пользовательский интерфейс
6.4.1 Конструктор
Конструктор доступен только пользователям с ролью расширенный. В
конструкторе можно создать новый или отредактировать имеющийся
шаблон. Также можно задать пользовательские представления.
Рисунок 7. Конструктор шаблонов
6.4.1.1 Элементы
В шаблоне могут находиться элементы трех типов:
Массив — установлена галочка [V]
Строка — примитивный объект, если нет подобъектов
Объект — составной объект, если имеются подобъекты
Кнопкой (+) добавляются новые элементы в соответствующий уровень, а
кнопкой (Х) элементы удаляются вместе со всеми подобъектами
26
6.4.1.2 Представления
Представления создаются анонимной функцией, которая на вход получает
данные пакета (
Пакет). Данная функция должна вернуть HTML строку. Внутри функции
доступна библиотека JQuery. Если не задано ни одного представления в
режиме просмотра будет использовано представление по-умолчанию.
6.4.2 Шаблоны
В данном разделе представлен список доступных шаблонов, с возможностью
добавления новых пакетов либо редактирования шаблона в конструкторе.
Данный раздел доступен всем пользователям.
Рисунок 8. Список шаблонов
6.4.3 Пакеты
В данном разделе приведен список пакетов со ссылками на просмотр и
редактирование. Также можно отфильтровать по имени шаблона. Данный
раздел доступен всем пользователям.
27
Рисунок 9. Список пакетов
6.4.4 Поиск
В данном разделе можно произвести поиск по пакетам данных. Критерий
поиска — выражение на языке JavaScript. Для удобства вместо doc.data.a
можно заменить на $a. Поиск является неиндексированным и, поэтому, время
поиска увеличивается пропорционально размеру базы. Данный раздел
доступен всем пользователям.
Рисунок 10. Поиск по пакатем
6.4.5 Пользователи
Данный раздел доступен только пользователям с правами администратора.
Окно состоит из двух частей: списка пользователей, доступных для выбора, и
свойств пользователя, таких, как имя, логин, пароль и список ролей.
28
Рисунок 11. Управление пользователями
6.4.6 Просмотр
6.4.6.1 Представление по-умолчанию
Во всех пакетах доступно представление default, которое просто выводит
иерархически все поля пакета.
Рисунок 12. Представление по-умолчанию
6.4.6.2 Пользовательское представление
Данная функция создает следующее пользовательское представление.
29
function(data){
var str = "<b>"+data.data.str+"</b><br/>";
for(var i=0;i<data.data.obj.length;i++){
str+="<i>"+data.data.obj[i].var+"</i><br/>";
}
return str;
}
Листинг 12. Код пользовательского представления
Рисунок 13. Пользовательское представление
6.5 Пример работы с ИС
6.5.1 Установка
В процессе установки необходимо будет выбрать путь для установки.
Рисунок 14. Выбор пути для установки
Если в папке с установочным пакетом не будут найдены файлы
зависимостей, то они будут загружены из интернета.
30
Рисунок 15. Загрузка зависимостей
6.5.2 Создание пользователей
После запуска нужно создать пользователей в разделе Пользователи. Для
этого нужно войти под пользователем Администратор с логином admin и
паролем 1324. Пользователь Расширенный будет создавать шаблоны, а
пользователь User создавать задачи. Выбор пользователя производится
щелчком мыши по списку.
31
Рисунок 16. Редактор пользователей
6.5.3 Создание шаблона
Зайдя под созданным пользователем с расширенными правами, заходим в
раздел Конструктор и создаем шаблон для задачи, описывающей течение
жидкости в прямоугольной области с препятствием. Данный класс задач
описывается такими параметрами, как свойства области (координаты начала,
конца области, шага сетки по осям X и Y), характеристики течения (скорость,
вязкость), препятствие (координата по оси X, высота). Именовать поля лучше
латиницей, это упростит поиск и код пользовательского представления.
Поля добавляются кнопкой (+), удаляются (X), при наведении родительский
элемент для удобства подсвечивается. Установка флажка превращает
элемент в массив.
32
Рисунок 17. Конструктор
6.5.4 Создание задачи
Зайдя под пользователем user в раздел шаблоны, ищем созданный шаблон и
заполняем поля. Интерфейс почти полностью повторяет Конструктор. После
сохранения задачи можно будет прикреплять файлы, и загружать данные на
ftp сервер в папку задачи. Доступ на загрузку осуществляется по имени и
паролю пользователя, создавшего задачу.
33
Рисунок 18. Редактирование задачи
6.5.5 Создание представления
Любой задаче доступно представление по-умолчанию, которое просто
выводит
иерархию
полей.
Создадим
представление,
выводящее
характеристики задачи в виде таблицы, и все вложения в виде рисунков. Для
этого в конструкторе необходимо создать представление, вставив следующий
код. Данный код использует для вывода библиотеку jQuery.
34
function(data){
var node = $("<div>");
var tbl = $("<table>");
tbl.append($("<tr>")
.append($("<td>").text("измерение"))
.append($("<td>").text("начало"))
.append($("<td>").text("конец"))
.append($("<td>").text("шаг"))
);
for(var i=0;i<data.data.dimension.length;i++){
tbl.append($("<tr>")
.append($("<td>").text(data.data.dimension[i].name))
.append($("<td>").text(data.data.dimension[i].begin))
.append($("<td>").text(data.data.dimension[i].end))
.append($("<td>").text(data.data.dimension[i].step))
);
}
node.append(tbl);
for(var i in data._attachments){
node.append($("<img>").attr("src","attachments.json?doc="+data._id+"&name="+i))
}
return node.html();
}
Листинг 13. Код пользовательского представления
Рисунок 19. Представление по-умолчанию и новое представление
35
7 Заключение
7.1 Функциональные требования
В ИС реализованы были реализованы все функциональные требования:
управление
шаблонами,
пакетами
данных,
пользователями,
имеется
возможность создать пользовательское представление.
7.2 Архитектурные требования
Прежде всего, интересна горизонтальная масштабируемость, достигаемая
возможностью репликации базы данных и файлов между серверами.
Положенный в основу ИС принцип инверсии зависимости обеспечивает
модульность системы и взаимозаменяемость отдельных элементов с
условием удовлетворения интерфейсам.
Публичные интерфейсы обеспечивают расширяемость функциональных
возможностей системы. В работе была описана типичная последовательность
действий по добавлению нового функционала.
Размещение
коллективной
кода
ИС
работы,
в
открытом
багтрекера
репозитории,
и
возможностью
wiki-документации
дальнейшее сопровождение и развитие системы.
36
с
обеспечит
8 Приложение I. Список литературы
1. Apache
Ant
1.8.1
Manual
Интернете]. -
[В
2010
г.. -
http://ant.apache.org/manual/.
2. Apache
FTPServer
documentation
Интернете]. -
[В
2010
г.. -
http://mina.apache.org/ftpserver/documentation.html.
3. Beginning CouchDB [Книга] / авт. Lennon Joe. - [б.м.] : Apress, 2009.
4. Class
Mockito
[В
Интернете] //
mockito.org. -
2010
г.. -
http://mockito.googlecode.com/svn/tags/latest/javadoc/org/mockito/Mockito
.html.
5. JQuery documentation [В Интернете]. - 2010 г.. - http://docs.jquery.com.
6. JUnit 4.x Howto [В Интернете] / авт. Simpson Blaine. - Axis Data
Management Corp., 2009 г.. - http://pub.admc.com/howtos/junit4x/.
7. NSIS
Users
Manual
[В
Интернете] //
NSIS. -
2009
г.. -
http://nsis.sourceforge.net/Docs/.
8. Spring Framework. Reference documentation 3.0 [В Интернете]. - 2009
г.. -
http://static.springsource.org/spring/docs/3.0.x/spring-framework-
reference/html.
9. Spring Security. Reference documentation 3.0.2 [В Интернете]. - 2010
г.. -
http://static.springsource.org/spring-
security/site/docs/3.0.x/reference/springsecurity.html.
10.Version control with Subversion. [В Интернете]. - 2008 г.. - r3305. http://svnbook.red-bean.com/en/1.5/index.html.
37
9 Приложение II. Глоссарий
Java EE — Java Platform, Enterprise Edition
JSON — JavaScript Object Notation
NoSQL — класс СУБД, не использующих реляционную алгебру
ORM — Object-Relational Mapping, отображение объекта в базе данных
RDBMS — Relational Database Management System
SDK — System Developer Kit
Subversion — Система контроля ревизий с централизованным репозиторием
Багтрекер — система учета и контроля ошибок, найденных в программах,
пожеланий пользователей, а также слежения за процессом устранения этих
ошибок и выполнения или невыполнения пожеланий
ИС — Информационная Система, в данном случае Хранилище Данных
SDaSt
Репозиторий — хранилище исходных текстов вместе с историей их
изменения и другой служебной информацией
СУБД — Система Управления Базой Данных, в данном случае CouchDB
38
Download