WebDAV

advertisement
WebDAV
Интеграция поддержки протокола webDAV в систему.
Фактически, библиотека Milton работает не с самими данными, а с их
представлением в виде объектов определенных типов. В ней описаны Java
интерфейсы, которые должны быть реализованы в классах приложения. Milton
предоставляет отдельные интерфейсы для каждого метода webDAV. Это позволяет
реализовать в приложении только ту функциональность, которая действительно
необходима.
Метод
Интерфейс
GET
GetableResource
HEAD
GetableResource
POST
PostableResource
PUT
PutableResource
PROPFIND PropFindableResouce
MKCOL
MakeCollectionableResource
DELETE
DeletableResource
COPY
CopyableResource
MOVE
MoveableResource
LOCK
LockableResource
Основным способ интеграции данного инструмента является добавление в
состав веб-приложения Milton сервлета – Java-программы, выполняющейся на
стороне сервера и расширяющей его функциональность. Именно такой подход
применяется в системе С3.
Единственным параметром, который Milton-сервлет ожидает от приложения,
является имя класса, реализующего интерфейс ResourceFactory. Объект именно
этого класса создается сервлетом при каждом запросе webDAV клиента. Его задача
– предоставление для дальнейшей обработки объекта, который содержит данные,
адресованные в запросе. Интерфейсы, реализованные в предоставляемом объекте,
определяют
набор
действий,
которые
могут
быть
выполнены
с
инкапсулированными данными. Например, для того, чтобы данные моги быть
загружены с сервера по протоколу webDAV, соответствующий ресурс должен
реализовывать интерфейс GetableResource. Базовым является интерфейс Resource,
который описывает методы авторизации и аутентификации, получения имени
ресурса и даты его изменения. От него наследуются остальные интерфейсы,
определяющие функциональность связанную с конкретными ресурсами. Так,
например,
для
того,
чтобы
данные
моги
быть
загружены
с
сервера,
соответствующий ресурс должен реализовывать интерфейс GetableResource,
который описывает методы получения длинны и типа ресурса, а также метод,
отвечающий за пересылку данных sendContent().
В простейшем случае, когда осуществляется только просмотр файловой
структуры на сервере, в приложении каталогам должны соответствовать объекты с
интерфейсом
CollectionResource,
а
файлам
-
объекты
с
интерфейсом
PropfindableResource.
Из-за архитектурных особенностей ресурсы С3 не могут быть напрямую
переданы для обработки сервлету, поэтому для его интеграции в систему были
написаны классы-обертки, которые реализуют все необходимые интерфейсы
(диаграмма 1.). Логически этот слой классов связывает понятие «ресурс»
приложения с одноименным понятием библиотеки. Фактически классы прослойки
являются адаптером, позволяющим сервлету работать с разработанной ранее
объектной моделью приложения. Будем называть объекты из уровня прослойки, с
которыми работает библиотека, dav-ресурсами.
Каждый запрос характеризуют два атрибута: путь к ресурсу и метод, которым
должна быть осуществлена обработка ресурса. Имя корневого каталога в
передаваемом пути должно соответствовать имени рабочей группы, содержащей
адресуемый ресурс. Доступные методы для каждого ресурса определяются внутри
библиотеки по набору интерфейсов, которые данный ресурс реализует. Выбор
ресурса по указанному пути осуществляется объектом класса DavResourceFactory.
Его метод getResource() запускает процесс построения иерархии dav-объектов,
отражающий виртуальную каталожную структуры группы (диаграмма 2.).
Для связи dav-ресурсов с ресурсами приложения служат объекты типа
DavContext, которые хранят в себе ссылки на рабочую группу и её корневой
каталог, а также на сервисы (ResourceService, GroupService и UserServic), которые
позволяют выполнять необходимые действия над объектами приложения. Данные
объекты передаются в dav-ресурсы при создании и определяют их контекст.
Реализация класса DavContext позволяет уйти от централизованного хранения
контекста, что необходимо для корректной работы потоков, порождаемых при
поступлении запроса от клиента. С каждым запросом связана отдельная иерархия
ресурсов со своим контекстом, так что данные разных потоков не пересекаются.
Диаграмма 1. Диаграмма классов-обёрток
Диаграмма 2. Последовательность создания корневого каталога группы по
запросу пользователя
Download