Автор работы: Пользователь скрыл имя, 07 Декабря 2011 в 12:25, курсовая работа
Тенденции, которые можно наблюдать на сегодняшний день, свидетельствуют к переходу на новый уровень проектирования систем – систем с сервис-ориентированной архитектурой (Service-Oriented Architecture, SOA). И наиболее перспективной технологией, на сегодняшний день, на которой реализуется SOA, является технология web-сервисов. В этой работе будут рассмотрены способы создания web-сервисов с использованием нескольких технологий – JAX-RPC, позволяющая создавать и обращаться к web-службам на платформе Java и BPEL – язык описания бизнес-процессов, построенных на взаимодействии web-служб.
1 ВВЕДЕНИЕ 4
2 ПОСТАНОВКА ЗАДАЧИ 4
3 РАЗРАБОТКА ПО МЕТОДИКЕ RUP 5
4 ФУНКЦИОНАЛЬНАЯ ДЕКОМПОЗИЦИЯ СИСТЕМЫ 6
4.1 ВАРИАНТ ИСПОЛЬЗОВАНИЯ: ОБРАБОТАТЬ ЗАКАЗ 7
4.2 ВАРИАНТ ИСПОЛЬЗОВАНИЯ: ПОДТВЕРДИТЬ ЗАКАЗ 7
4.3 ВАРИАНТ ИСПОЛЬЗОВАНИЯ: ОТМЕНИТЬ ЗАКАЗ 8
4.4 ВАРИАНТ ИСПОЛЬЗОВАНИЯ: ПОЛУЧИТЬ ДОКУМЕНТЫ ЗАКАЗА КЛИЕНТА 8
5 СТРУКТУРНАЯ ОРГАНИЗАЦИЯ СИСТЕМЫ 8
5.1 ОПИСАНИЕ РАЗРАБОТАННЫХ СЕРВИСОВ 9
5.1.1 Сервис хранения документов заказов (WebSellerDB) 9
5.1.2 Сервис обработки заказов (WebSeller) 9
5.2 СХЕМА ДАННЫХ 10
6 КРАТКОЕ ОПИСАНИЕ И РОЛЬ ИСПОЛЬЗУЕМЫХ ТЕХНОЛОГИЙ 11
6.1 XML-ТЕХНОЛОГИИ 11
6.2 ТЕХНОЛОГИИ WEB-СЛУЖБ 12
6.2.1 WSDL 12
6.2.2 JAX-RPC 12
6.2.3 SOAP Handlers 15
6.3 КОРОТКО ОБ ИСПОЛЬЗУЕМЫХ ТЕХНОЛОГИЯХ APACHE 16
6.3.1 Apache Software Foundation 16
6.3.2 Jakarta Tomcat 17
6.3.3 Apache Axis 18
6.3.4 Apache Xindice 18
6.3.5 Другие инструменты Apache 19
6.4 ЯЗЫК BPEL 20
6.5 BPEL ENGINE, ACTIVEBPEL, ACTIVEWEBFLOW PROFESSIONAL 21
7 ОБОСНОВАНИЕ ТЕХНИЧЕСКИХ РЕШЕНИЙ 21
7.1 РАЗРАБОТКА XML-СХЕМЫ ДОКУМЕНТА ЗАКАЗА 21
7.2 РАЗРАБОТКА WSDL-ОПИСАНИЙ 23
7.3 ОРГАНИЗАЦИЯ ДОСТУПА К БД 23
7.3.1 Класс XindiceHelper 24
7.3.2 Класс WebSellerDBHandler 24
7.4 BPEL-ПРОЦЕСС ДЛЯ СЕРВИСА WEBSELLER 27
7.4.1 Инициализация 28
7.4.2 Процедура проверки кредитоспособности 28
7.4.3 Управление состоянием заказа 29
7.4.4 Обработка ошибок 31
8 РАЗВЕРТЫВАНИЕ (DEPLOYMENT) WEB-СЛУЖБ 32
9 ТЕСТОВЫЕ ПРИМЕРЫ 33
9.1 КРАТКОЕ ОПИСАНИЕ ТЕСТОВ И РЕЗУЛЬТАТОВ ИХ РАБОТЫ 33
9.1.1 Пример выполнения теста с таймаутом 34
10 ЗАКЛЮЧЕНИЕ 35
11 ИСПОЛЬЗОВАННЫЕ ТЕХНОЛОГИИ И ИСТОЧНИКИ ИНФОРМАЦИИ 36
ПРИЛОЖЕНИЕ А. СТРУКТУРА КАТАЛОГОВ ДИСКА 38
ПРИЛОЖЕНИЕ Б. ГЛОССАРИЙ 39
СПИСОК ТЕРМИНОВ 39
ПРИЛОЖЕНИЕ В. СОЗДАНИЕ РАБОЧЕГО ОКРУЖЕНИЯ 41
ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ 41
УСТАНОВКА ИСПОЛНЯЕМОЙ СРЕДЫ 41
Переменные окружения 41
Процесс установки 42
НАСТРОЙКА СРЕДЫ РАЗРАБОТКИ 43
Интегрирование сред разработки BPEL, WS и Java 43
Настройка JUnit и Ant 44
Настройка отладки проекта в Eclipse 45
Настройка CLASSPATH в Eclipse 45
ПРИЛОЖЕНИЕ Г. ЗАДАНИЯ ANT (ANT TARGETS) 48
WSDL определяет диалект XML для описания возможностей web-служб. При помощи WSDL мы определяем, какие действия может выполнять эта служба – элементы <message/> и <portType/>, какие типы данных используются – элемент <types/>, как клиент будет обращаться к web-службе (по какому протоколу, HTTP, SMTP и т.д.) – элемент <binding/>, и где клиент может найти web-службу, какой у нее URL – за это отвечает элемент <service/>.
Если описать основное назначение JAX-PRC в одном предложении, то можно сказать, что этот API определяет правила для преобразования информации WSDL о типах портов в Java и наоборот. Есть несколько простых правил, рассмотрим их ниже.
Элемент <service/> определяет то, где можно найти web-службу, посредством интерфейса <port/>, который в нем содержится.
JAX-RPC определяет интерфейс с именем javax.xml.rpc.Service. Конкретный класс, который будет реализовывать этот интерфейс, должен существовать во время исполнения. Интерфейс Service содержит методы, которые клиент может использовать для вызова фактической web-службы.
Есть два различных стиля, в которых клиенты могут использовать для вызова web-службы посредством интерфейса Service. Один – это использование proxy-объекта, который возвращается одним из методов getPort() интерфейса Service. Этот proxy-объект предоставляет методы web-службы локально, преобразуя тип порта из документа WSDL в Java. Еще один вариант – это использовать объект javax.xml.rpc.Call. Объект Call представляет один вызов web-службы. Он позволяет нам устанавливать параметры и другие переменные вызова, а затем исполнять запрос.
Отображение типов
Технология web-служб
основана на обмене XML-сообщениями. Мы
хотим создавать приложения на Java, поэтому
нужно найти способ преобразовывать конструкции
XML в объекты Java. Реестр отображения типов
(public TypeMappingRegistry
javax.xml.rpc.Service.
JAX-RPC API был определен таким образом, чтобы позволить нам использовать его независимо от протокола, который используется для вызова web-служб. Тем не менее, сегодня большинство web-служб используют SOAP в качестве протокола вызова. Поэтому в спецификации JAX-RPC есть специальный раздел, который объясняет, как использовать JAX-RPC по отношению только к SOAP.
Взаимодействие с web-службой по протоколу SOAP может происходить одним из двух способов, или стилей. Один стиль называется стилем rpc, а другой – это документоориентированным стилем (document style). Вкратце стиль rpc означает, что вызов web-службы рассматривается как вызов функции, когда функции передаются параметры и возвращается результирующее значение. Документоориентированный стиль подразумевает, что мы посылаем документ XML web-службе, а в ответ можем получить, а можем и не получить другой документ XML.
Поверх стиля вызова существуют два основных способа кодирования данных в сообщение SOAP: один – это использовать кодировку SOAP по умолчанию, определенную в спецификации SOAP, а другой называется буквенным XML (literal XML). При работе с буквенной кодировкой (или вообще при отсутствии кодировки) вы не кодируете никаких данных, а добавляете порцию данных XML в тело SOAP.
Почти во всех случаях используются только две из этих комбинаций: web-службы либо поддерживают RPC-стиль вызова с кодировкой SOAP по умолчанию, либо они поддерживают документоориентированный стиль с буквенной кодировкой XML. Спецификация JAX-RPC требует, чтобы любая реализация API поддерживала две упомянутые выше комбинации, другие возможные комбинации являются необязательными. Фактически спецификация требует, чтобы клиентский API в этих двух случаях не отличался, так чтобы могли использовать web-службы в обоих стилях одинаковым образом. Из этого правила есть исключение в случае, когда отсутствует простое отображение типа, определенного в документе WSDL, в тип Java.
Один простой пример этого – это если бы схема XML определяла, чтобы атрибуты были частью документа XML. Атрибуты не могут быть отображены в типы Java. В этих случаях интерфейс будет содержать объект, который будет просто оболочкой конструкции XML.
Механизм SOAP Handlers позволяет встраивать обработчики для входящих и исходящих SOAP-сообщений. Эти обработчики можно организовывать в цепочки, определив порядок вызова обработчиков во время прохождения запроса.
Axis предоставляет интерфейс org.apache.axis.Handler. Рассмотрим некоторые методы:
Таблица 1 Описание основных методов класса org.apache.axis.Handler
Метод | Когда вызывается |
init() | Когда создается цепочка, содержащая данный Handler |
cleanup() | Когда цепочка, содержащая данный Handler, заканчивает обработку запроса |
invoke(MessageContext) | Вызывается
для фактической обработки |
onFault(MessageContext) | Вызывается, когда Handler выбрасывает исключение |
SOAP Handlers можно применять для разных задач, например: журналирование запросов, система безопасности или даже изменение SOAP-сообщения. В интерфейсе Handler также присутствует метод generateWSDL(MessageContext), который вызывается, когда клиент хочет получить WSDL сервиса (например, набрав адрес сервиса в браузере + “?wsdl”).
Файл deployment descriptor
позволяет конфигурировать цепочки обработчиков
для сервиса элементами <requestFlow>, <responseFlow>, <chain> и <handler> (http://ws.apache.org/axis/
Apache
Software Foundation
(ASF, [APACHE]) – это некоммерческая
организация, которая поддерживает open
source проекты. Отличительной особенностью
ASF, среди прочих подобных организаций,
является лицензия, под которой выпускается
ПО ASF – Apache License 2.0 (http://www.apache.org/
На данный момент под управлением ASF находится около 30 проектов, соответствующих разным направлениям в разработке ПО, от XML проектов до проектов серверных технологий.
В этом курсовом проекте использовались некоторые проекты ASF – это:
Коротко опишем каждый из этих продуктов.
Такие приложения как ActiveBPEL Engine и Apache Axis не могут работать отдельно и должны быть установлены в web-контейнер. Jakarta Tomcat ([TOMCAT]) – это одна из возможных реализаций такого web-контейнера.
Описание Jakarta Tomcat выходит за рамки данного курсового проекта. Подробнее о нем можно узнать на официальном сайте проекта (см. [TOMCAT]) или в одной из множества книг по этому проекту, например, [TOMCATBOOK].
Однако следует отметить несколько замечаний по структуре каталогов Tomcat и их назначению. Здесь и далее, будем считать, что переменная окружения %CATALINA_HOME% указывает на корневую папку, куда установлен Tomcat.
Среди прочих, необходимо выделить три каталога: