Создание бизнес-процесса с помощью инструментов Rational и WebSphere

Реализация. Создание процесса Request External Reports

Разбить на страницы
Показывать лекцию целиком

В этой лекции мы опишем разработку и размещение бизнес-процесса, который можно экспортировать из WebSphere Business Integration Modeler в формате Business Process Execution Language for Web service (BPEL4WS). Мы создадим наш бизнес-процесс, используя выходные данные WebSphere Business Integration Modeler, которые мы можем получить от бизнес-аналитика. Поскольку в бизнес-процессе, экспортируемом из Modeler, по-прежнему отсутствуют готовые к реализации службы и настройки, необходимые для работы с бизнес-процессом в реальной системе, мы должны модифицировать код BPEL, чтобы система работы с бизнес-процессами могла исполнять этот бизнес-процесс.

Эта лекция включает в себя следующие разделы:

  • 10.1, "Общий обзор";
  • 10.2, "Импортирование WSDL и BPEL в IDE";
  • 10.3, "Интеграция процесса и его служб";
  • 10.4, "Интеграция процесса и его служб"Название раздела дается согласно оригиналу. – Примеч. ред . ;
  • 10.5, "Контроль пути через процесс";
  • 10.6, "Реализация операции для специалиста по обработке претензий";
  • 10.7, "Компоновка";
  • 10.8, "Тестирование и отладка процесса";
  • 10.9, "Размещение процесса на сервере".
  • 10.1 Общий обзор

    ИТ-специалист по процессам с помощью WebSphere Studio Application Developer Integration Edition V5.1.1 размещает бизнес-процесс, созданный бизнес-аналитиком в WebSphere Business Integration Modeler, на платформе WebSphere Business Integration Server Foundation V5.1. На рис 10.1 показана центральная роль ИТ-специалиста по процессу в реализации решения.

    (рис 10.1) Создание потока для бизнес-процесса

    Код BPEL экспортируется из WebSphere Business Integration Modeler ИТ-специалистом по процессу, а не бизнес-аналитиком. Перед экспортом необходимо исправить технические ошибки в коде BPEL, а ИТ-специалист имеет необходимые навыки исправления ошибок. Также ИТ-специалист может получить общий вид процесса в Modeler. Экспортирование кода BPEL описано в разделе 4.5.3, "Экспорт процесса RequestExternalReports в виде процесса BPEL4WS".

    В BPEL-процессе для взаимодействия с большинством внешних служб используются ссылки на партнеров. Все ссылки на партнеров, необходимые ИТ-специалисту по процессу, находятся в WSDL-файлах. Они были определены архитектором решения с помощью Rational Software Architect. Эти файлы были упакованы в один zip-файл для простоты управления. Этот zip-файл нужно импортировать в пакет Web-Sphere Studio Application Development Integration Edition.

    Все необходимые дополнительные WSDL-интерфейсы можно определить в WebSphere Studio Application Development Integration Edition или в вашем любимом WSDL-редакторе.

    Существует три вида служб, интеграцией которых занимается ИТ-специалист по процессу:

  • Существуют простые Web-службы, вызываемые бизнес-процессом. Они все обыч- но реализуются в виде EJB и располагаются на отдельном сервере WebSphere Application Server.

    Такие службы описаны в лекции 8, "Тестирование и размещение компонентов приложений".

  • Существуют службы, подключенные к ESB и реализованные WebSphere Business Integration Message Broker. Запросы и ответы реализуются как отдельные службы, а Process Choreographer играет роль службы, получающей ответы от ESB. Эти службы описаны в лекции 9, "Создание корпоративной сервисной шины".
  • Еще один вид связи, который нужно установить, – это связь между WebSphere MQ Workflow и WebSphere Business Integration Server Foundation. Система Wokflow имеет специальный механизм интеграции, использующий прокси-EJB, функционирующий на той же системе работы с процессами, что и бизнес-процесс. Таким образом, вызов процесса RequestExternalReports – это простая ссылка на партнера, в которой наш процесс вызывается данным EJB от имени процесса Workflow. Установка такого соединения относится к области ответственности ИТ-специалиста по Workflow.
  • Об этом мы поговорим в лекции 11, "Изменение процесса изучения претензий".

    Когда ИТ-специалист по процессу закончит формирование BPEL-процесса, процесс можно протестировать либо путем импорта компонентов приложения в тестовую среду WebSphere Studio Application Development Integration Edition, либо путем связывания тестовых версий служб, работающих на своих исходных платформах. После отладки и тестирования процесса он размещается в WebSphere Business Integration Server Foundation.

    10.2 Импортирование WSDL и BPEL в IDE

    WSDL-код, используемый в решении для работы с внешними оценщиками, был создан архитектором решения и является частью PSM (модели, специфичной для продуктов) – контракта между архитектором решения и ИТ-специалистами. Код BPEL был сформирован бизнес-аналитиком и является частью CIM (модели, независимой от вычислений) – контракта между бизнес-аналитиком и ИТ-специалистами. В данном разделе описывается, как ИТ-специалист переносит файлы WSDL и BPEL в WebSphere Studio Application Development Integration Edition.

    10.2.1 Импортирование WSDL из Rational Software Architect

    WSDL-определения будут применяться для создания ссылок на партнеров, операций и переменных в BPEL-модели. Архитектор решения экспортировал готовые WSDL-определения в zip-файл (см. раздел 6.4, "Обеспечение доступа к материалам"). Теперь мы импортируем этот zip-файл в WebSphere Studio Application Development Integration Edition и создадим необходимые нам ссылки на партнеров.

  • Запустите WebSphere Studio Application Development Integration Edition и откройте перспективу Business Integration (Бизнес-интеграция). Выберите пункт меню File (Файл) $$\to$$ New (Новый) $$\to$$ Service Project (Проект службы). Откроется мастер New Project (Новый проект) (рис 10.2).(рис 10.2) Создание нового проекта службы
  • Введите уникальное имя для нового проекта (ITSOLGI) и нажмите Finish (Готово). Новый проект службы будет создан в папке Service Projects (Проекты служб) представления Services (Службы).
  • Перед копированием WSDL-файла в проект службы, включающий наш новый BPEL-процесс, создайте новый Java-пакет для организации импортированных WSDL-файлов.

    Щелкните правой кнопкой мыши по проекту службы ITSOLGI и выберите пункт меню New (Новый) $$\to$$ Package (Пакет). Введите в поле имени пакета services и нажмите OK.

    Совет. Если вы решили загружать WSDL-код из другого проекта (или ссылаться на него), то вам нужно изменить свойства проекта службы ITSOLGI, чтобы он ссылался на другой проект. (рис 10.3) Создание нового Java-пакета
  • Импортирование необходимых WSDL-файлов.

    В проводнике по пакетам ( Package explorer ) щелкните правой кнопкой мыши по элементу Import (Импорт) > выберите zip-файл > найдите WSDL-файлы, упакованные архитектором решения (или используйте .\SG24-6636\RSA\ClaimsInvestigation WSDL files.wsdl), и выберите WSDL-код, применяемый службой Assessor Automation (см. табл. 10.1). Нажмите Finish (Готово).

  • Важный совет. WSDL-файлы должны импортироваться прямо в папку пакета, а не в подпапку. По умолчанию дерево папок копируется из Rational Software Architect и WSDL-файлы находятся в поддиректории. Это не создает никаких проблем при формировании BPEL-процесса, если имена папок представляют собой допустимые имена пакетов. Однако при размещении процесса WSDL-файлы не копируются из поддиректории в размещаемый EAR-файл. Хорошей практикой является перенос WSDL-файлов прямо в папку пакета с самого начала. Если же ваши WSDL-файлы оказались в неверной директории, как их переместить?
  • Если вы обнаружили ошибку до того, как начали разрабатывать и компоновать процесс, просто перенесите WSDL-файлы, используя навигатор.
  • Если вы начали разрабатывать и компоновать процесс или даже перешли к размещению прежде чем проблема обнаружилась, то при переносе WSDL многие ссылки будут переработаны, но все же не на 100 %. После переработки, используя кнопку поиска, найдите все пути к предыдущему местоположению WSDL и исправьте ссылки. Проще всего открыть затронутые этой ошибкой файлы в простом текстовом редакторе. Один из файлов, который перерабатываться не будет, – это файл <имя_процесса>.bpelex. В этом файле нужно будет изменить по одной ссылке на каждую связь с партнером. При вводе нового пути к WSDL-файлам убедитесь, что путь начинается с прямого слеша (/). Отсутствие слеша приведет к ошибке компоновки процесса.
  • 10.2.2 Импортирование BPEL из WebSphere Business Integration Modeler

    Прежде чем описывать методику импортирования BPEL из WebSphere Business Integration Modeler в WebSphere Studio Application Development Integration Edition, мы должны сказать, что первый вопрос, который должен решить ИТ-специалист, будет следующий:

  • нужно ли продолжить уточнение BPEL-процесса CIM в Modeler, а затем переносить его в WebSphere Studio Application Development Integration Edition
  • или нужно взять модель, полученную от аналитика, как есть, когда она будет готова для экспорта?
  • ИТ-специалист может редактировать бизнес-процесс Request External Reports, используя любой инструмент.

    Когда нужно импортировать BPEL в IDE

    В Modeler бизнес-процесс отображается с использованием Business Process Modeling Notation (BPMN)См. работу Stephen White, "Introduction to BPMN", по адресу http://www.bpmn.org/Documents/Introduction%20to%20BPMN.pdf .

    В WebSphere Studio Application Development Integration Edition существует три альтернативных способа редактирования бизнес-процесса, соответствующих разным стилям моделирования бизнес-процессов. Стиль Modeler выбирается как наиболее подходящий для бизнес-аналитика и единый для разных инструментов моделирования. Поскольку этот стиль не привязан к какой-то конкретной технологии работы с процессами, так проще сравнивать бизнес-процессы, смоделированные с использованием разных инструментов. Кроме того, проще понять логику всего потока. В случае сложных потоков, возможно, стоит продолжить уточнение логики потока в Modeler, прежде чем переносить ее в WebSphere Studio Application Development Integration Edition.

    Стили редактирования WebSphere Studio Application Development Integration Edition разрабатывались для того, чтобы максимально упростить связывание потока с необходимой технологией. В частности, два из этих стилей, BPEL-процесс на основе потоков и BPEL-процесс на основе последовательностей, оптимизированы для редактирования BPEL-процессов. Выбор зависит от вашего личного вкуса. В какой то момент будет необходимо отредактировать BPEL-поток с использованием WebSphere Studio Application Development Integration Edition, чтобы выполнить тонкую настройку выполнения потока.

    Существуют следующие вопросы:

  • В какой момент ИТ-специалист должен перейти от применения Modeler к использованию WebSphere Studio Application Development Integration Edition?
  • Когда следует, принимая во внимания возможности инструментов, экспортировать BPEL из Modeler?
  • Насколько детальным должно быть редактирование BPEL в Modeler?
  • В сценарии с работой с внешними оценщиками сделать выбор достаточно просто. Выбор основывается на нашем решении о том, что за моделирование интерфейсов и данных отвечает архитектор решения. Бизнес-аналитик определяет только модель функционирования бизнес-процесса, но не интерфейсы. Архитектор решения использует для моделирования интерфейсов Rational Software Architect. Архитектор решил выбрать Rational Software Architect, а не WebSphere Business Integration Modeler, поскольку существует требование включать интерфейсы прямо в UML-модель архитектуры. Специалист по процессам с самого начала должен работать в WebSphere Studio Application Development Integration Edition, поскольку ему нужно объединить BPEL-процесс с WSDL-интерфейсами. В Modeler нет возможности импортировать WSDL-определения интерфейсов.

    В других проектах разработки, управляемой моделями, выбор может быть другим. Моделирование данных может осуществляться в WebSphere Business Integration Modeler или в каком-нибудь специальном средстве моделирования данных. Как уже обсуждалось в разделе 3.2.8, "Цепочки инструментов", прежде чем серьезно приступать к работе над проектом, важно определить, что за какие задачи отвечает, какие инструменты используются и как интегрируются артефакты, полученные в разных инструментах.

    В нашем случае выбор ограничен, поскольку WebSphere Business Integration Modeler 5.1.1 не поддерживает импортирование WSDL. Однако в проекте, в котором WSDL-определения создаются в Modeler вместе с BPEL, у ИТ-специалиста есть гораздо больший простор для осуществления технической детализации модели процесса в WebSphere Business Integration Modeler до ее экспортирования в WebSphere Studio Application Development Integration Edition.

    В нашем сценарии лучшим вариантом было экспортировать простое определение BPEL-процесса из WebSphere Business Integration Modeler и дать задание ИТ-специалистам использовать WSDL-определения из Rational Software Architect для завершения определения процесса и его реализации, как это описывается в оставшейся части данной главы.

    Экспортирование BPEL из Modeler

    Модель бизнес-процесса, созданную бизнес-аналитиком, нужно сохранить в CIM-контракте между ролями проекта, относящимися к бизнесу и к ИТ.

    Затем ИТ-специалист берет на себя ответственность за дальнейшую детализацию модели.

    Проверка правильности BPEL в WBI Modeler

    Если переключить WebSphere Business Integration Modeler в режим BPEL, будут отображаться все ошибки и предупреждения, связанные с BPEL. Все эти ошибки необходимо исправить, прежде чем BPEL можно будет экспортировать. Предупреждения проблемой не являются. В подразделе "Проверка модели процесса" раздела 4.5.3 объясняется, как следует исправлять ошибки BPEL в процессе RequestExternalReport.

    Когда ошибок в модели процесса не останется, ее можно экспортировать, а ее определения импортировать в WebSphere Studio Application Development Integration Edition. Существует несколько вариантов каталога для импорта:

  • каталог данных;
  • каталог процесса;
  • каталог ресурсов;
  • каталог организации или его содержимое;
  • какой-то один процесс, бизнес-элемент, ресурс или подразделение организации.
  • Если экспортируется весь процесс, то вместе с ним будут экспортированы все бизнес-элементы, используемые процессом и его подпроцессами, а также все индивидуальные ресурсы и организационные подразделения, отвечающие за выполнение процесса. Бизнес-элементы, определения ресурсов, определения организации и местоположения экспортируются в формат файлов XML-схемы (XSD).

    В разделе "Экспортирование процесса", описывается экспорт процесса RequestClaimsAssessor из WebSphere Business Integration Modeler и все опции, которые нужно при этом включать.

    Импортирование BPEL в IDE

    Чтобы импортировать BPEL в IDE, выполните следующие шаги:

  • Щелкните правой кнопкой мыши по проекту службы ITSOLGI, выберите пункт меню Import (Импорт). Откроется мастер импорта. Выберите пункт File system (Файловая система), нажмите Next (Далее).
  • Укажите папку-источник, куда вы экспортировали BPEL из Modeler. При работе с материалами, поставляемыми с этим курсом, импортируйте файлы из директо- рии .\SG24-6636\Modeler, как показано на рис 10.4. Убедитесь, что в поле Into folder (В папку) указан проект служб, созданный в разделе 10.2.1, "Импортирова- ние WSDL из Rational Software Architect". Бизнес-процесс и бизнес-элементы будут импортированы в рабочее пространство. Убедитесь, что для импорта был выбран корень информационной модели, а также файлы BPEL и WSDL (рис 10.4).
  • (рис 10.4) Импортированные файлы процесса

    10.3 Интеграция процесса и его служб

    Откройте редактор бизнес-процессов, сделав двойной щелчок по файлу Service Projects (Проекты служб) $$\to$$ (ITSOLGI) $$\to$$ Claim.TOBE.RequestExternalReports $$\to$$ RequestExternalReports.bpel в представлении Services (Службы).

    Возможно появление ошибок. Пока не обращайте на них внимания. Мы исправим эти ошибки позже.

    В центре окна редактора можно видеть бизнес-процесс. Этот процесс унаследовал определение процесса из Modeler. Процесс в Modeler ориентирован в направлении справа налево, но в WebSphere Studio Application Development Integration Edition он ориентирован сверху вниз. В правой части редактора процесса (рис 10.5) можно видеть ссылки на партнеров, которые являются интерфейсами Web-служб, вызываемых операциями процесса. Эти службы в данный момент являются абстрактными. Modeler генерирует WSDL-файлы, но эти определения служб не имеют реализации. В нашем случае мы собираемся полностью заменить определения, поскольку они были созданы архитектором решения в Rational Software Architect.

    (рис 10.5) Редактор BPEL

    В левой части окна редактора находится палитра для редактирования процесса. Добавляйте новые операции в процесс, выбирая значок в палитре и перетаскивая его в редактор. Информация о каждом элементе процесса отображается в разделе Detail (Подробно) в нижней части окна редактора. Содержимое этой области меняется в зависимости от того, какой элемент процесса был выбран.

    На рис. 10.6 показаны рядом друг с другом редактор процесса из Modeler (слева) и редактор процесса из WebSphere Studio Application Development Integration Edition (справа).

    (рис 10.6) Импортированный процесс

    Элементы Modeler и определения WSDL и BPEL соответствуют друг другу следующим образом:

  • Локальные задачи (Local tasks) Modeler становятся вызывающими операциями (Invoke activities).
  • Если локальной задаче назначен кадровый ресурс, то в WebSphere Studio Application Development Integration Edition эта задача превращается в операцию персонала (Staff activity). Выполняемая вручную задача ManualChooseAssesor превращается в операцию персонала.
  • Разделения (Forks) и слияния (Merges) превращаются в операции назначения (Assign activity) и операции очистки (Empty activity).
  • Операции назначения вставляются между всеми операциями. Операции назначения связывают выходную структуру данных предыдущей операции с входными данными следующей операции.
  • 10.4 Интеграция процесса и его служб

    В этом разделе мы возьмем поток BPEL, импортированный из WebSphere Business Integration Modeler, и преобразуем его в исполняемый поток BPEL. Нужно написать несколько фрагментов Java-кода, но в основном процедура будет связана с использованием мастеров конфигурирования или графического редактора процессов. Преобразование BPEL-процесса в исполняемую форму включает в себя девять этапов:

  • В разделе 10.4.1, "Исправление списка ссылок на партнеров в модели", мы заменим абстрактные ссылки на партнеров в модели бизнес-процесса, созданной бизнес-аналитиком, ссылками на партнеров, которые вызывают реальные службы, указанные архитектором решения.
  • В разделе 10.4.2, "Интеграция ссылок на партнеров с процессом", новые ссылки на партнеров связываются с соответствующими операциями потока и в поток добавляются дополнительные операции, расширяющие BPEL-модель для приведения ее в соответствие с архитектурой решения.
  • В разделе 10.4.3, "Конфигурирование ссылок на партнеров", мы проверяем, чтобы каждая ссылка была должным образом сконфигурирована в соответствии со своей ролью в операции (вызываемой или вызывающей) и чтобы в ссылке был правильно указан тип порта (или интерфейс).
  • В разделе 10.4.4, "Конфигурирование операций", мы проверяем, чтобы каждой операции были присвоены глобальные входные и выходные переменные и чтобы действия, необходимые для каждой операции, были выбраны правильно.
  • В разделе 10.4.5, "Конфигурирование типов входных и выходных переменных", мы проверяем, чтобы каждая входная и выходная переменная имела верный тип, указанный в соответствующем входном или выходном сообщении для данной операции.
  • В разделе 10.4.6, "Связывание данных между входными и выходными переменными", мы связываем входящие и исходящие данные для каждой ссылки на партнера, внося необходимые корректировки, чтобы данные соответствовали требованиям, которые предъявляют службы, связанные со ссылками.
  • В разделе 10.4.7, "Конфигурирование потока для ожидания ответа от оценщиков", мы добавляем в поток корреляционный набор, позволяющий ему ожидать получения асинхронных сообщений от оценщиков, и конфигурируем три операции, которые должны ожидать ответа оценщика, чтобы они использовали данный корреляционный набор.
  • В разделе 10.5.1, "Проверка результатов, полученных от RequestAvailability", мы проверяем результаты запроса готовности оценщиков, используя Java-фрагмент, а также конфигурируем две дополнительные ссылки для вызова ручной или автоматической операции выбора оценщика, которому будет предложено выполнить оценку.
  • В разделе 10.5.2, "Создание операции While для проверки согласования оценки", добавляется операция while, которая проверяет, согласен ли выбранный оценщик произвести оценку.
  • 10.4.1 Исправление списка ссылок на партнеров в модели

    Если вы посчитаете в правой части окна редактора ссылки на партнеров, которые были сгенерированы по модели RequestExternalReports, импортированной из WebSphere Business Integration Modeler, и сравните полученный результат с количеством WSDL-интерфейсов, необходимых для кооперации RequestExternalReports и импортированных из Rational Software Architect, вы увидите несовпадение. Это несовпадение обусловлено тем, что в модели бизнес-процесса не детализованы дополнительные взаимодействия, которые необходимы для реализации асинхронных потоков.

    В табл. 10.1 приводятся WSDL-файлы для интерфейсов, в которых процесс RequestExternalReports играет роль либо клиента, либо сервера, и соответствующие ссылки на партнеров. Элементы, выделенные синим цветом, присутствуют в BPEL-модели, импортированной из WebSphere Business Integration Modeler, а элементы, выделенные красным цветом, – это отсутствующие элементы, которые нужно добавить наряду со способами маршрутизации запросов от ссылок на партнеров обратно – в поток процесса. Черные строки – это взаимодействия, не использующие компонент Automated Assessor.

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

  • Удалите ссылки на партнеров, импортированные с BPEL-процессом из модели Automated Assessors: откройте файл requestExternalReports.bpel в окне редактора, перейдите в представление Outline (Общий обзор), выделите все ссылки на партнеров и удалите их (рис 10.7).(рис 10.7) Удаление сразу всех ссылок на партнеров
  • Создайте новые ссылки на партнеров по WSDL-файлам, предоставленным архитектором: выбирайте по очереди все WSDL-файлы и перетаскивайте на канву редактора с открытым файлом RequestExternalReports.bpel. WebSphere Studio Application Development Integration Edition предложит вам подтвердить выбранные порты служб и типы портов (рис 10.8).(рис 10.8) Подтверждение выбора порта и типа порта
  • Добавляйте ссылки на партнеров в том порядке, в котором они находятся в потоке, и канва редактора будет выглядеть так, как показано на рис 10.9.

    (рис 10.9) Ссылки на партнеров, основанные на интерфейсах из Rational Software Architect

    10.4.2 Интеграция ссылок на партнеров с процессом

    Итак, мы импортировали процесс RequestExternalReports из WebSphere Business Integration Modeler в виде BPEL-процесса и определения интерфейсов из Rational Software Architect в виде ссылок на партнеров. Следующая задача – связать ссылки на партнеров с процессом, добавив в поток новые операции, соответствующие добавленным ссылкам.

    Связывание операций в потоке со ссылками на партнеров

  • Первая задача – связать каждую ссылку с соответствующей операцией.

    Выберите операцию в потоке и выберите действие со ссылкой из палитры, появляющейся около указателя мыши, как показано на рис 10.10. В качестве альтернативы щелкните правой кнопкой мыши по операции и выберите пункт меню Set Partner Link (Задать ссылку на партнера).

    (рис 10.10) Создание соединения между операцией и ссылкой на партнера

    Протяните линию к соответствующей ссылке на партнера. Используйте табл. 10.1, в которой указаны соответствия для установления этих связей.

    Альтернативным способом создания соединения является выделить операцию, а затем открыть закладку Implementation (Реализация) в редакторе свойств, расположенном под канвой графического редактора. Далее выберите нужную ссылку на партнера, как показано на рис 10.11. Этот метод можно использовать, если значки ссылки на партнера и операции находятся слишком далеко друг от друга и их нельзя соединить в одном окне.

    (рис 10.11) Указание типа ссылки на партнера в редакторе свойств
  • Переименуйте ссылки на партнеров в соответствии с записями в табл. 10.1 (это нужно только для ясности, на функционирование процесса это не влияет). После этого останется две ссылки, не связанные ни с одной операцией (AssessorAvailabilityLstPartner и AllocateAssessorResponsePartner). Третья новая ссылка, AssessorReportPartner, связана с операцией AssessorSendReport, имеющейся в потоке, но это не тот тип операции. Мы исправим эти проблемы далее.
  • Ссылки на партнеров и роли в процессе Assessor Automation
    Поток Компонент (владелец интерфейса) Assessor Automation: операция и роль Имя ссылки на партнера Имя WSDL-файла
    1 Assessor Automation RequestExternalReports Receive Server RequestExternalReportsProcess ExternalClaimsAssessorInterface.wsdl
    2 Assessor Management IdentifyAssessorsClient AssessorManagement AssessorManagement(2).wsdl
    2a Business Rules Engine ResponseTimeBasedOnPolicy Client RequestResponseTimePT RequestResponseTimePT(2a) wsdl
    3 Proxy Assessor System RequestAvailability Client AssessorAvailability AssessorAvailability(3).wsdl
    4 Assessor Proxy Нет Нет Availability(4).wsdl
    4a Assessor System Нет Нет AssessorAvailabilityPT(4a).wsdl
    3aСтроки, выделенные курсивом, должны быть добавлены в процесс Assessor Automation. Assessor Automation AssessorAvailability Receive Server AssessorAvailability List AssessorAvailablityList(3a).wsdl
    5 Business Rules Engine SelectAssessor Client SelectAssessors PreferredAssessor(5).wsdl
    6 Proxy Assessor System RequestAssessment Client AllocateAssessmentRequest AllocateAssessmentReport(6).wsdl
    7 Assessor Нет Нет DeliverAssessment(7).wsdl
    7a Proxy Assessor System Нет Нет DeliverAssessmentResponse(7a).wsdl
    6a Assessor Automation AllocateAssessorResponse Server AllocateAssessorResponse AllocateAssessorReponse(6a). wsdl
    8 Proxy Assessor System Нет Нет AssessorReport(8).wsdl
    9 Assessor Automation AssessorSend-Report Server AssessorReport AssesorReport(9)
    10 Claim System StoreReport Client StoreReportPartner StoreAssessmentReport(10).wsdl

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

    Сначала внесите исправления в операцию AssessorSendReport. Сейчас это вызывающая операция (invoke activity). Мы хотим сделать ее принимающей операцией (receive activity), чтобы она получала отчет об оценке претензии.

  • Щелкните правой кнопкой мыши по операции AssessorSendReport, выберите пункт меню Change Type (Изменить тип) $$\to$$ Receive (Прием).

    Далее добавьте две новые принимающие операции, названные так, как показано красным цветом в графе "Assessor Automation: операция и роль" табл. 10.1 - AssessorAvailabilityReceive и AllocateAssessorResponse.

  • Выберите принимающую операцию из палитры (рис 10.12) и перетащите ее в процесс. Введите в поле имени AssessorAvailabilityReceive.(рис 10.12) Выбор принимающей операции в палитре
  • Выделите коннектор, находящийся между вызывающей операцией RequestAvailability и операцией очистки Any assessor?, и удалите его (рис 10.13).(рис 10.13) Выделение коннектора
  • Соедините операции RequestAvailability и AssessorAvailabilityReceive: щелкните правой кнопкой мыши по RequestAvailability и выберите пункт меню Set Link between Flow activities (Задать связь между операциями потока).
  • Соедините операции AvailabilityReceive и Any assessor?. Чтобы настроить расположение содержимого потока, щелкните правой кнопкой мыши по области потока и выберите пункт меню Align Flow Contents Automatically (Выровнять содержимое потока автоматически).
  • Соедините операцию со ссылкой на партнера . Обратите внимание, что стрелка между ссылкой на партнера и операцией теперь имеет черный цвет и указывает на операцию, что обозначает направление сообщения.(рис 10.14) Вставка новой операции AssessorAvailabilityReceive в поток
  • Повторите эти действия для вставки в поток операции AllocateAssessorReponse и соединения ее со ссылкой. Результат показан на рис 10.15.(рис 10.15) Вставка новой операции AllocateAssessorReponse в поток
  • На этом этапе стоит сохранить рабочее пространство в zip-файле. Выберите проект службы ITSOLGI в навигаторе служб, щелкните по нему правой кнопкой мыши, выберите пункт меню Export (Экспорт) $$\to$$ Project Interchange $$\to$$ выберите ITSOLGI и введите имя файла, в который будет производиться экспорт. Нажмите Finish (Готово).
  • 10.4.3 Конфигурирование ссылок на партнеров

    Следующая задача – правильно назначить процессу и партнерам роли, относящиеся к ссылке на партнера, обеспечить правильный выбор типов портов и действий и выделение входных и выходных переменных для передачи входящих и исходящих сообщений для службы. На рис 10.16 показаны взаимосвязи между BPEL-процессом, интерфейсом Web-службы и EJB-реализацией.

    (рис 10.16) WSDL описывает интерфейс EJB-компонента, вызываемого из BPEL-процесса

    Роли

    При назначении процессу нужного количества ролей и ссылок на партнеров представляйте себе взаимосвязь между процессом и партнером как сеанс связи. Если в таком сеансе есть только один участник, то нужно выделять одну роль. Это относится и к взаимосвязи запрос/ответ, которая соответствует SOAP-сообщению типа запрос/ответ. С другой стороны, если существуют два участника сеанса связи, подобно обмену вопросами и ответами по голосовой почте, то используются два односторонних SOAP-сообщения, обмен которыми происходит асинхронно. Также возможна односторонняя связь, которая похожа на ситуацию, когда на голосовой почте оставляется сообщение, а ответ не ожидается.

    В нашем решении для работы с внешними оценщиками есть несколько связей типа запрос/ответ и несколько односторонних связей. У нас нет сеансов связи, в которых участвуют две роли. Это может показаться удивительным, поскольку у нас есть три асинхронных сообщения, но в каждом случае новый сеанс начинается с предыдущего запроса/ответа. Продолжая аналогию с телефоном, это похоже на запрос информации, которую кто-то собирает, а потом, позже, оставляет для вас сообщение.

    Когда мы решили, что для каждого типа ссылки на партнера выделяется одна роль, следующий вопрос, будет ли роль принадлежать процессу или партнеру. Определить принадлежность данной роли можно простым вопросом: кто (что) осуществляет обслуживание? Если обслуживание осуществляет процесс, то роль относится к процессу. Если обслуживание выполняет партнер, то роль принадлежит партнеру.

    Конфигурирование ссылок

    Легче всего сделать это при помощи представления Outline (Общий обзор). Нажимайте по очереди на ссылки на партнеров в верхней части представления.

  • Для каждой ссылки, соответствующей ситуации, когда процесс играет роль сервера, убедитесь, что в поле Partners Role Name (Имя роли партнера) указано -- None -- (Нет) на закладке Implementation (Реализация) редактора свойств (рис 10.17). Существует четыре ссылки, которым нужно назначить имя роли процесса (Process Role Name).(рис 10.17) Конфигурирование процесса RequestExternalReports
  • Проверьте тип ссылки, имя роли и тип порта для других ссылок, выделяя их в представлении Outline.
  • 10.4.4 Конфигурирование операций

    Раскройте категорию Flow (Поток) в представлении Outline (Общий обзор) и выделяйте по очереди каждую операцию.

    Для каждой операции на закладке Implementation (Реализация) проверьте правильность типа порта, операции, выбранные входные и выходные переменные и создайте все пропущенные переменные.

  • Для принимающей операции RequestExternalReports должен быть установлен флажок Create a new Process instance if one does not already exist (Создавать новый экземпляр процесса, если он еще не существует). Это первая операция процесса, и она создает новый экземпляр процесса каждый раз, когда обрабаты- вается новая претензия.
  • В только что созданной нами принимающей операции AllocateAssessorResponse нам нужно создать новую переменную-запрос с именем AssessorConfirmationResponse. В данном случае флажок Create a new Process (Создавать новый экземпляр) остается неустановленным, поскольку процесс Automated Assessor был блокирован в ожидании ответа. Он продолжает работу при получении ответа (рис 10.18).
  • (рис 10.18) Создание переменной Request в операции AllocateAssessorResponse

    Повторите эти шаги для операции AssessorAvailabilityReceive.

    Добавьте выходную переменную OutputCriteraVariable в операцию RequestExternalReports Reply.

    Конфигурация операций должна соответствовать той, которая приведена в табл. 10.2. Есть несколько пропущенных переменных, поэтому изучите таблицу внимательно.

    Настройка ссылок на партнеров, типов портов, операций и имен переменных
    Flow Имя операции в Assessor Automation Название типа порта Переменная запроса
    Имя ссылки на партнера Имена действий Переменные ответа
    1a RequestExternalReportsReceive RequestExternalReportProcess InputCriteriaVariable
    RequestExternalReportsProcess RequestExternalReport OutputCriteriaVariable
    2 IdentifyAssessors AssessorManagement IdentifyAssessorsInputCriteria Variable
    AssessorManagement requestListAssessors IdentifyAssessorsOutputCriteriaVariable
    2Данная ссылка на партнера делится на отдельные операции отправки и получения, расположенные в начале и в конце потока. ResponseTimePolicy RequestResponseTime PT ResponseTimeBasedOnPolicy InputCriterionVariable
    RequestResponseTime PT requestResponseTime ResponseTimeBasedOnPolicy OutputCriterionVariable
    3 RequestAvailability AssessorAvailability RequestAvailabilityInputCriteriaVariable
    AssessorAvailablity requestAssessor Availability RequestAvailabilityOutputCriteriaVariable
    3Данная ссылка на партнера делится на отдельные операции отправки и получения, расположенные в начале и в конце потока. AssessorAvailabilityReceive AssessorAvailabilityList
    AssessorAvailabilityLis availableAssessorsList
    5 SelectAssessors PreferredAssessor SelectAssessorInputCriteria Variable
    PreferredAssessor selectAssessor SelectAssessorOutputCriteria Variable
    6 RequestAssessment AllocateAssessmentRequest RequestAssessmentInputCriteriaVariable
    AllocateAssessment Request actionAssessor RequestAssessmentOutputCriteriaVariable
    6a AllocateAssessorResponse AllocateAssessorResponse AssessorConfirmationResponse
    AllocateAssessorResponse assessorConfirmationRequest
    9 AssessorSendReport AssessorReport AssessorSendReportOutput CriteriaVariable
    AssessorReport receiveAssessorReportRequest
    10 StoreReport StoreAssessorReport StoreReportInputCriteriaVariable
    StoreAssessorReport storeAssessorReportURL StoreReportOutputCriteriaVariable

    10.4.5 Конфигурирование типов входных и выходных переменных

    Следующий этап – это связывание определений сообщений с переменными запроса и ответа, относящимися к операциям. В табл. 10.3 перечислены сообщения, которые нужно связать с переменными. Чтобы связать сообщения с переменными, выделяйте переменные в представлении Outline (Общий обзор) и переходите на закладку Message (Сообщение) редактора свойств. Находите нужный WSDL-файл и выбирайте нужное сообщение, как показано на рис 10.19.

    (рис 10.19) Связывание сообщений с переменными
    Переменные и связанные с ними сообщения
    Поток WSDL-файл Переменные запроса и ответа Сообщение
    1 ExternalClaimAsse ssors.wsdl InputCriteriaVariable RequestExternalReportsRequest
    OutputCriteriaVariable requestAssessorResponseMessage
    2 AssessorManagement(2).wsdl IdentifyAssessorsInputCriteriaVariable requestListAssessorsRequest
    IdentifyAssessorsOutputCriteriaVariable requestListAssessorsResponse
    2a RequestResponseTimePT(2a).wsdl ResponseTimeBasedOnPolicy InputCriterionVariable requestResponseTimeRequest
    ResponseTimeBasedOnPolicy OutputCriterionVariable requestResponseTimeResponse
    3 AssessorAvailabilit y(3).wsdl RequestAvailabilityInputCriteriaVariable requestAssessorAvailabilityRequest
    RequestAvailabilityOutput CriteriaVariable requestAssessorAvailabilityResponse
    3a AssessorAvailablityList(3a).wsdl ListOfAvailableAssessors AvailableAssessorsList
    5 PreferredAssessor (5).wsdl SelectAssessorInputCriteriaVariable selectAssessorRequest
    SelectAssessorOutputCriteriaVariable selectAssessorResponse
    6 AllocateAssessmentReport(6).wsdl RequestAssessmentInputCriteriaVariable actionAssessorRequest
    RequestAssessmentOutputCriteriaVariable actionAssessorResponse
    6a AllocateAssessorReponse(6a).wsdl AssessorConfirmationResponse AssessorConfirmationRequest
    9 AssesorReport(9) AssessorSendReportOutputCriteriaVariable receiveAssessorReportRequest
    10 StoreAssessmentReport(10).wsdl StoreReportInputCriteriaVariable storeAssessorReportURLRequest
    StoreReportOutputCriteriaVariable storeAssessorReportURLResponse

    10.4.6 Связывание данных между входными и выходными переменными

    Все входные и выходные переменные теперь имеют типы, соответствующие данным во входящих и исходящих сообщениях. Следующий этап – это связать данные в переменных, полученных в одной операции, с входными переменными, необходимыми для связанной с операцией ссылки на партнера, а затем связать выходные результаты ссылки на партнера со входной переменной следующей операции. Это демонстрируется на рис 10.20, где показан управляющий поток и поток данных, а также метаданные, используемые для связывания полей в одном сообщении с полями в следующем сообщении.

    (рис 10.20) Связывание данных между сообщениями с помощью связующей операции

    Связующей операцией может быть:

  • фрагмент Java;
  • операция трансформации;
  • операция назначения (Assign activity).
  • Каждый вариант имеет свои преимущества и свои недостатки. Операция назначения – это самый простой способ установления прямых связей между полями одного сообщения и аналогичными полями в другой структуре. Трансформируются только пути к полям. Операция трансформации не требует написания кода и может осуществлять более сложные преобразования. Такая операция включает в себя обрабатывающие строки, которые могут оказаться сложнее, чем код. Фрагмент Java может представлять собой простой кусок кода, делающий не больше, чем операция назначения, или же выполняющий сложные преобразования.

    Для потока BPEL, экспортированного из Modeler, были сгенерированны несколько базовых операций назначения. Мы собираемся заменить эти операции и добавить несколько других связей, чтобы закончить ту часть потока, которая связана с трансформацией данных. Мы в определенной степени ограничены в использовании операций назначения, поскольку в ряде сообщений WSDL-определения требуют более сложной обработки, и нам нужно применять либо Java-фрагменты, либо операции трансформации. Операция назначения в Process Choreographer версии 6 стала гораздо более гибкой, и ее, по причине ее простоты и высокой производительности, можно использовать во многих связях, которые в версии 5 осуществлялись с применением трансформаций.

    У нас используется несколько видов связей, и мы рассмотрим разнообразные методы их установления в следующих разделах:

  • "Связывание операций Mapping IdentifyAssessors и ResponseTime". Используются две отдельных операции трансформации.
  • "Связывание операции RequestAvailability". Показано, как выполнять агрегацию при помощи операции трансформации.
  • "Связывание операции SelectAssessors". Используется еще одна простая операция трансформации.
  • "Связывание операции RequestAvailability". Предлагаются фрагменты Java, а также используется операция трансформации для агрегирования данных, получаемых с трех входов.
  • "Связывание операции StoreReport". Еще одна простая операция трансформации.
  • "RequestExternalReport Reply". Еще одна простая операция трансформации.
  • Связывание операций Mapping IdentifyAssessors и ResponseTime

    Первые две необходимые нам трансформации находятся в месте перехода от сообщения requestAssessorMessage к сообщению RequestListAssessorsMessag и к сообщению requestResponseTimeRequest. Мы используем две операции трансформации.

  • Удалите операцию Fork и две операции назначения, находящиеся между операцией RequestExternalReports Receive и операциями IdentifyAssessors и ResponseTimeBasedOnPolicy.
  • Создайте новую трансформирующую службу. Нажмите на соответствующий значок на панели действий или выберите пункт меню ).(рис 10.21) Создание трансформирующей службы
  • Нажмите Next (Далее), введите имя IdentifyAssessorsTransformer, нажмите Next (Далее), введите в поле Operation Name (Имя действия) toIdentifyAssessors, нажмите Add (Добавить) $$\to$$ Browse (Обзор), найдите файл ExternalClaimsAssessor.wsd, а в нем – входящее сообщение RequestExternalReports_RequestAssessorsMessage, нажмите Browse (Обзор), найдите исходящее сообщение RequestListAssessorsRequest:requestListAssessors.
  • Раскройте сообщения в редакторе трансформации и перетащите три поля входящего сообщения в соответствующие три поля исходящего сообщения. Результат показан на рис 10.22.(рис 10.22) Связывание полей во входящем сообщении операции IdentifyAssessors
  • Повторите эти шаги для операции ResponseTimeBasedOnPolicy. Назовите службу ResponseTimeBasedOnPolicyTransformer.
  • Перетащите два WSDL-файла трансформирующих служб в процесс RequestExternalReports.bpel и переименуйте операции трансформации в ToIdentifyAssessors and ToResponseTimeBasedOnPolicy (в соответствии с названиями действий – просто для простоты документирования). Теперь BPEL-процесс будет выглядеть следующим образом (рис 10.23).(рис 10.23) Вставка трансформирующих служб в поток RequestExternalReports
  • Вы можете просматривать эти новые ссылки на партнеров точно так же, как любые другие. Откройте закладку Implementation (Реализация) операции ToIdentifyAssessors и нажмите кнопку Edit (Редактировать) для просмотра и изменения связи полей. Вы также можете выбирать новые действия и новые трансформирующие службы для данной операции. В проводнике служб (Service Explorer) найдите файл Identify AssessorsTransformer.wsdl и откройте его с помощью стандартного WSDL-редактора.

    Связывание операции RequestAvailability

    Эта связь обеспечивает агрегацию результатов, полученных от операций IdentifyAssessors и ResponseTimeBasedOnPolicy и некоторых исходных данных из сообщения RequestExternalReports в новое сообщение. Новое сообщение посылается на партнерскую ссылку RequestAvailability с маршрутизацией через корпоративную сервисную шину внешним оценщикам, которые, возможно, займутся обработкой претензии.

    Очевидным способом решения данной задачи является использование еще одной операции трансформации, которая выполняет агрегацию. Можно повторить процедуру из предыдущего раздела для создания новой трансформирующей службы Transf ormerRequestAvailability. На этот раз к службе добавляются три входящих сообщения, как показано на рис 10.26.

    Ограничение. Однако если начать с запуска мастера трансформаций, а затем использовать ту же процедуру, что и для простых трансформаций, вы успеха не добьетесь. Решением является генерация трансформаций с помощью несколько иной процедуры, которая требует больше ручного ввода, и, следовательно, с ней нужно быть особенно осторожными. Если эту процедуру применять правильно, она вполне надежна. Именно эту процедуру мы описываем далее, и ее вам следует использовать, если трансформация задействует несколько входящих сообщений.
  • Убедитесь, что операции IdentifyAssessors, ResponseTimePolicy и RequestAvailability полностью соединены, как показано на рис 10.24.(рис 10.24) Добавление операции трансформации ToRequestAvailability
  • Перетащите в поток новую операцию трансформации, присвоив ей имя ToRequestAvailability и подключив ее непосредственно перед операцией RequestAvailability, как показано в правой части рис 10.24.
  • Откройте операцию ToRequestAvailability и задайте для ее переменной Response значение (рис 10.25) Переменные, заданные в операции трансформации ToRequestAvailability
  • Нажмите кнопку Aggregate (Агрегация) и выберите входные переменные, которые должны быть агрегированы:
  • InputCriteriaVariable,
  • IdentifyAssessorsOutputCriteriaVariable,
  • ResponseTimePolicyOutputCriterionVariable.
  • На следующей панели введите имя файла AggregateRequestAvailability.
  • Приведите в порядок содержимое потока, и вы увидите, что был вставлен фрагмент Java (Java Snippet). Переименуйте фрагмент в AggregateRequestAvailability.
  • Вернувшись к новой операции трансформации, нажмите кнопку New... (Новый), чтобы создать новый файл трансформации. В диалоговом окне Create a new transform (Создание новой трансформации) переименуйте следующие элементы:
  • имя партнерской ссылки и файла в TransformRequestAvailability;
  • целевое пространство имен в http://Claim.TOBE.RequestExternalReports (тот же пакет, к которому относится процесс);
  • тип порта в TransformRequestAvailabilityPT;
  • имя действия (Operation name) в ToTransformRequestAvailability.
  • Нажмите OK.
  • Теперь соедините трансформацию так, как показано на рис 10.26.(рис 10.26) Агрегация данных для вызова операции RequestAvailabilityСовет. Имена очень важны! Если вы переформатируете поток, гораздо проще будет восстановить операцию, утратившую свою позицию в потоке, при использовании хорошо продуманной системы имен.

    Мы решили назвать WSDL-файлы трансформирующих и агрегирующих служб так, чтобы они при сортировке в Service Navigator расположились по категориям "трансформация" и "агрегация". Альтернативным подходом является сохранение всех WSDL-файлов в пакете служб, присвоив им суффиксы Transformer или Aggregation, чтобы они сортировались в порядке сходства с исходной службой. Важно с самого начала продумать схему имен, а затем правильно применять ее. Единство схемы имен уменьшает вероятность трудноустранимых ошибок, вызванных путаницей в именах.

  • Связующая операция должна ждать до тех пор, пока все входящие данные не станут доступны. На закладке Join Behavior (Функционирование объединения) редактора свойств только что созданной операции ToRequestAvailability укажите в поле ).
  • (рис 10.27) Объединение результатов операций IdentifyAssessors и ResponseTimePolicy

    Связывание операции SelectAssessors

    Мы используем для этой связи еще одну трансформирующую службу. Назовем ее SelectAssessorTransformer. В качестве имени действия (Operation Name) укажите toSelectAssessor. В диалоговом окне создания связей трансформирующей службы укажите входное сообщение – listAvailableAssessors и выходное сообщение – selectAssessorRequest. Получившиеся связи показаны на рис 10.28.

    (рис 10.28) Связывание запроса операции SelectAssessor

    Перетащите службу в редактор процесса RequestExternalAssessors, назовите ее ToSelectAssessor и подключите ее между операциями Any Assessors? и SelectAssessors.

    Связывание операции RequestAvailability

    Трансформирующая служба для данной связи называется RequestAvailabilityTransformer.

  • Присвойте действию имя toRequestAvailability. Необходимо агрегировать два входящих сообщения: выходное сообщение операции SelectAssessors и исходное входное сообщение процесса, RequestExternalReports_RequestAssessors (см. рис 10.7). Выходное сообщение называется actionAssessorRequest.

    В этот момент мы сталкиваемся с проблемой. Для сообщения actionAssessor требуется два поля, которых нет во входящих сообщениях:

  • carDetails.registration.
  • assessor.assessorURL.
  • Информация о регистрации машины была случайно пропущена во входном кон- тейнере, переданном процессу RequestExternalReports рабочим потоком ClaimInvestigation_TOBE. Это можно исправить позже, а пока мы скопируем ин- формацию о марке машины в поле registration.
  • Отсутствие URL оценщика (AssessorURL) – более серьезная проблема. Интерфейс системы бизнес-правил (Business Rules Engine) возвращает только ID выбранного оценщика, а также ID претензии (claimID). Нам нужно заново установить связь между идентификатором оценщика (assessorID) и URL оценщика (assessorURL), чтобы шина ESB могла направлять запрос об оценке нужному оценщику.
  • Где следует осуществлять корреляцию данных?

    В этом курсе мы не акцентировали внимания на шаблонах проектирования, относящихся к моделированию данных, которые помогают решить, как следует передавать данные по процессу и связанным с ним службам. Есть пара архитектурных вопросов, на которые следует дать ответ, прежде чем обсуждать детали связи идентификатора оценщика и его URL:

  • Кому принадлежат данные, направляемые оценщикам?

    Ответ на этот вопрос простой: эти данные принадлежат системе управления оценщиками (AssessorManagement).

  • Кто отвечает за сбор информации, необходимой шине ESB для взаимодействия с оценщиками?
  • Второй ответ не столь очевиден. За связь между assessorID и assessorURL отвечает либо система работы с процессом, либо ESB. Оба подхода имеют преимущества и недостатки.

    Один шаблон потока данных должен обеспечивать как можно более слабую связь между данными в компонентах, и он требует, чтобы каждый компонент запрашивал необходимые данные у других служб по мере необходимости. Так что этот подход за то, чтобы передавать шине ESB только assessorID, claimID и информацию о функции, выполнения которой система работы с процессом ждет от ESB. Затем ESB находит в системе управления оценщиками assessorURL для выполнения маршрутизации, собирает необходимую информацию о претензии из системы работы с претензиями и направляет запрос RequestAssessment выбранному оценщику.

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

    Корреляция AssessorID и AssessorURL в системе работы c процессом

    Мы используем стандартный шаблон данных для интеграции процессов, поэтому нам нужно восстановить связь с assessorURL выбранного оценщика, применяя значение assessorID, которое возвращает система бизнес-правил. Выполните следующие действия:

  • Добавьте Java-фрагмент, называющийся AssessorURL.
  • Вставьте фрагмент AssessorURL в поток RequestExternalReports, как показано на рис 10.29.(рис 10.29) Вставка Java-фрагмента AssessorURL в поток
  • Создайте глобальную переменную с именем SelectedAssessor.
  • Создайте WSDL-сообщение SelectedAssessor, состоящее из двух частей:
  • AssessorID,
  • AssessorURL.

    Выполните приведенные ниже инструкции, чтобы добавить AssessorID и AssessorURL в файл RequestExternalReportsInterface.wsdl (можно также создать новый WSDL-файл).

  • Откройте файл RequestExternalReportsInterface.wsdl в графическом WSDL-редакторе.
  • В области Messages (Сообщения) щелкните правой кнопкой мыши и выберите пункт меню Add Child (Добавить потомок) $$\to$$ Message (Сообщение). Введите имя SelectedAssessor.
  • Щелкните правой кнопкой мыши по SelectedAssessor и выберите пункт меню Add Child (Добавить потомок) $$\to$$ Part (Часть). Укажите имя AssessorID и введите xsd:int.
  • Аналогичным образом добавьте часть AssessorURL с содержимым xsd:String.
  • Импортирование сообщения SelectedAssessor в службу TransformerRequestAssessment и установление связи от SelectedAssessor.assessorURL к actionAssessmentRequest. assessor.assessorURL.
  • Написание кода Java-фрагмента AssessorURL.
  • (Задачи пп. 5, 6 описываются в последующих разделах более подробно.)

    Добавление сообщения SelectedAssessor в службу TransformerRequestAssessment

    Теперь, когда у нас есть assessorURL для выбранного оценщика, нам нужно связать его с полем assessorURL в сообщении-запросе, посылаемом в операцию RequestAssessment. Нам нужно создать трансформирующую агрегирующую службу, подобную ToRequestAvailability.

  • Назовите службу ToRequestAssessment.
  • В переменной Response укажите RequestAssessmentInputCriterionVariable.
  • В поле имени файла введите AggregateRequestAssessment.
  • Агрегируемые входные переменные следующие:
  • InputCriterionVariable,
  • SelectAssessorOutputCriterionVariable,
  • SelectedAssessor.

    Вам нужно создать эти входные переменные и указать тип, соответствующий сообщению SelectedAssessor, созданному на предыдущем шаге.

  • В качестве имени файла трансформирующей службы укажите TransformRequestAssessment. Выполните описанные ранее шаги по заданию имени для партнерской ссылки, действия и т. п.
  • Приведите в порядок схему потока, когда закончите выполнения указанных шагов, чтобы она выглядела так, как показано на рис 10.30.
  • (рис 10.30) Часть схемы потока, связанная с выбором оценщиков и запросом на оценку

    На этом создание связей должно быть завершено. Теперь вам нужно задать значение AssessorURL в Java-фрагменте.

    Создание Java-фрагмента AssessorURL

    В этом фрагменте Java нам нужно получить список подходящих оценщиков, проверенных системой бизнес-правил, и идентифицировать оценщика, которого выбрала система правил. В этом списке оценщики представлены структурой данных, в которую входит assessorURL. Обнаружив выбранного оценщика, мы создаем глобальную переменную SelectAssessor для передачи assessorURL этого оценщика в трансформирующую службу ToRequestAssessor, которая вводит assessorURL в сообщение actionAssessment Request. Готовый фрагмент Java показан в примере 10.4. Мы рассмотрим этапы создания этого фрагмента с помощью функции автозаполнения в WebSphere Studio Application Development Integration Edition.

  • Выберите только что созданный фрагмент Java (Java Snippet) с именем AssessorURL и откройте закладку Implementation (Реализация) редактора свойств.
  • Вставьте инструкцию, которая объявляет, что мы будем обновлять ту часть глобальной переменной SelectedAssessor, которая относится к assessorURL.

    Щелкните правой кнопкой мыши и выберите пункт меню Update Variable (Обновить переменную) $$\to$$ Part (Часть) и выберите assessorURL в сообщении SelectedAssessor (пример 10.1).

    SelectedAssessorMessage SelectedAssessor = getSelectedAssessor(true);
    java.lang.String assessorURL = SelectedAssessor.getAssessorURL();
    <focus>
    SelectedAssessor.setAssessorURL(assessorURL);
  • В области focus объявите локальную переменную Assessor assessorList [], в которой будет храниться список оценщиков из сообщения - ответа операции IdentifyAssessors.

    Заполните объявление, получив список потенциальных оценщиков из переменной IdentifyAssessorsOutputCriteriaVariable:

  • щелкните правой кнопкой мыши и выберите пункт меню Get variable (Получить переменную) $$\to$$ Part... (Часть) и выберите IdentifyAssessorsOutputCriteriaVariable ;
  • используйте автозаполнение строки, нажав CTRL_Пробел $$\to$$ getParameters и т. д.
  • Готовая строка кода показана в примере 10.2.
    Assessor assessorList [] =
    getIdentifyAssessorsOutputCriteriaVariable().getParameters().
    getRequestListAssessorsReturn().getAssessors();
    Совет. Если вы начнете вводить Assess… и используете автозаполнение для ввода класса Assessor, будет ли это работать? Если нет, значит, в файле исходного кода Java, содержащем данный фрагмент, отсутствует инструкция импорта itso.lgi.assessormgmt. Itso.lgi.assessormgmt представляет собой целевое пространство имен для WSDL-сообщений AssessorManagement. WebSphere Studio Application Development Integration Edition создает Java- пакет с именем, совпадающим с названием этого пространства имен, в который помещаются все Java-классы, реализующие функции get и set для частей сообщения. Поищите в Service Navigator этот пакет и входящие в него классы. Если вы найдете их и они будут находиться в проекте ITSOLGI, то вам нужно заставить WebSphere Studio Application Development Integration Edition включить в код инструкцию импорта для этого пакета. Если первый метод не работает, попробуйте такие варианты:
  • Щелкните правой кнопкой мыши и выберите пункт меню Source (Исходный код) $$\to$$ Add Import (Добавить импорт) и выберите itso.lgi.assessormgmt.
  • Введите объявление старым способом, нажмите Save (Сохранить), щелкните правой кнопкой мыши, выберите пункт меню Source (Исходный код) > Organize Imports (Организовать инструкции импорта) > Save (Сохранить). (Этот вариант применяется, если не сработает первый вариант).
  • Должна быть создана инструкция import, которая заставит заработать автозаполнение и устранит все ошибки в только что написанном коде.
  • Добавьте строку кода, которая получит идентификатор выбранного оценщика из выходной переменной системы бизнес-правил – selectedAssessorOutputCriteriaVariable. Для хранения этого значения нам потребуется создать новую локальную переменную:
    Integer selectedAssessorID
    а затем нужно инициализировать ее, используя автозаполнение:
    = getSelectAssessorOutputCriteriaVariable().getParameters()
    .getSelectAssessorReturn().getAssessorID();
  • Создайте цикл для поиска выбранного оценщика и сохранения assessorURL в глобальной переменной. Мы использовали для создания этого цикла мастер шаблонов кода:
  • Введите for и нажмите CTRL_Пробел без пробела.
  • Выберите пункт for – iterate over an array with temporary variable (перебор значений массива с использованием временной переменной). Будет сгенерирован код, показанный в примере 10.3.
    for (int i = 0; i < assessorList.length; i++) {
               Assessor assessor = assessorList[i];
    <focus>
    }
  • В области focus мы вставляем инструкцию if для проверки совпадения assessorID:
  • Введите if и используйте автозаполнение для создания простого шаблона инструкции if:
    if (условие) { }
  • С помощью автозаполнения замените условие следующим выражением:
    assessor.getAssessorID() == selectedAssessorID
  • В инструкции if остановите сохранение assessorURL в глобальной переменной:
  • с помощью автозаполнения создайте локальное выражение присваивания:
    assessorURL = assessor.getAssessorURL();
  • щелкните правой кнопкой мыши, выберите пункт меню Set Variable (Задать переменную) $$\to$$ Part (Часть), выберите AssessorURL из сообщения SelectedAssessor, чтобы сгенерировать такой код:
    getSelectedAssessor(true).setAssessorURL(<focus>);
  • замените focus на локальную переменную assessorURL.
  • Готовый фрагмент Java должен сохраниться без ошибок. Полный исходный код показан в примере 10.4.

    // мы будем обновлять глобальную переменную SelectedAssessor assessorURL
    SelectedAssessorMessage SelectedAssessor = getSelectedAssessor(true);
    java.lang.String assessorURL = SelectedAssessor.getAssessorURL();
    // Получить список оценщиков, согласившихся на выполнение оценки
    Assessor assessorList[] =
         getIdentifyAssessorsOutputCriteriaVariable()
              .getParameters()
              .getRequestListAssessorsReturn()
              .getAssessors();
    // Получить assessorID выбранного оценщика
    Integer selectedAssessorID =
         getSelectAssessorOutputCriteriaVariable()
              .getParameters()
              .getSelectAssessorReturn()
              .getAssessorID();
    // Перебор списка согласившихся оценщиков, чтобы найти выбранного
    for (int i = 0; i < assessorList.length; i++) {
    SelectedAssessor.setAssessorURL(assessorList[i].getAssessorURL());
    SelectedAssessor.setAssessorID((assessorList[i].getAssessorID()).intValue());
         if (assessorList[i].getAssessorID() == selectedAssessorID) {
            break; // выйти из цикла на нужном оценщике или на последнем в
    списке
    }/
    / Обновить сообщение SelectedAssessor в глобальном контейнере
    setSelectedAssessor(SelectedAssessor);

    Добавление SelectedAssessor в RequestAssessmentTransformer

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

  • Откройте файл RequestAssessmentTransformer.wsdl в редакторе трансформаций. Это можно сделать несколькими способами. Вот один из них:
  • в Services Explorer щелкните правой кнопкой мыши по проекту ITSOLGI и выберите пункт меню Claim.TOBE.RequestExternalReports $$\to$$ RequestAvailabilityTransformer.wsdl ;
  • Open With (Открыть с помощью) $$\to$$ Transformer Editor (Редактор трансформаций).
  • Добавьте новое сообщение SelectAssessors в число входящих сообщений:
  • при открытом в редакторе трансформаций файле RequestAssessmentTransformer.wsdl, выберите пункт Transformer Editor (Редактор трансформаций) в главном меню, выберите пункт Add Input Message (Добавить входящее сообщение), укажите файл ProcessMessages.wsdl в директории ITSOLGI\Services\ITSOLGI Architecture;
  • укажите сообщение Selected Assessor.
  • Свяжите часть Selected Assessor сообщения SelectedAssessor с полем assessorURL сообщения actionAssessorRequest.
  • Чтобы пока завершить создание связей, свяжите поле makeOfCar с полями makeOfCar и registration, чтобы все поля были с чем-то связаны.

    Связывание операции StoreReport

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

  • Добавьте новую трансформирующую службу с именем StoreReportTransform:
  • укажите в поле Operation Name (Имя действия) значение toStoreReport;
  • в поле входного сообщения укажите сообщение receiveAssessorReportRequest из файла AssessorReport(9).wsdl;
  • в поле выходного сообщения укажите сообщение StoreAssessorReportURLRequest из файла StoreAssessorReport(10).wsdl;
  • свяжите поля и сохраните службу StoreReportTransform.
  • Перетащите службу .
  • (рис 10.31) Соединение операции трансформации ToStoreReport

    RequestExternalReport Reply

    Выполните следующие шаги:

  • Мы используем еще одну трансформирующую службу для выполнения агрегации полей из следующих сообщений-ответов:
  • PolicyID из RequestExternalReportsRequest;
  • assCompDate из StoreAssessorReportURLRequest;
  • claimID и reportLocation из StoreAssessorReportURL Response.
  • Выходное сообщение – requestAssessorResponseMessage.
  • Назовите новую агрегацию AggregateRequestExternalReportsReply, трансформирующую службу – TransformRequestExternalReportsReply, действие – ToRequestExternalReportReply.
  • Создайте агрегирующую трансформирующую службу, как описывалось выше (рис. 10.32).
  • (рис 10.32) Соединение операции трансформации ToRequestExternalReports Reply

    Заключение

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

    10.4.7 Конфигурирование потока для ожидания ответа от оценщиков

    Существует три задачи, которые ожидают ответа от оценщиков. Нам нужно настроить процесс на ожидание этих сообщенийВ общем дизайне взаимодействий предусмотрены множество последовательно запускаемых процессов, которые, как мы предполагаем, ведут взаимодействие способом, определенным бизнес-аналитиком. Это допущение является критическим для работоспособности нашей системы. Если сообщения для экземпляра процесса могли бы приходить в ином порядке, нам пришлось бы иметь дело с непоследовательными сообщениями. При такой реализации, вероятно, более подходящей была бы BPEL-операция Pick, а не Receive., и обеспечить прием сообщений, посылаемых в Automated Assessor, нужным экземпляром процесса.

    В Business Process Choreographer есть механизм сохранения идентификационной информации в так называемом корреляционном наборе (correlation set). В корреляционных наборах хранятся псевдонимы, необходимые для связывания полей из разных сообщений с переменными, используемыми для корреляции. Этот механизм более гибок, чем тот, который требует, чтобы все сообщения имели одинаковое поле ключа. Последний вариант непрактичен, если представить, что формат сообщений может определять бизнес-партнер в другой организации или что есть сообщения, форматы которых определяются множеством различных стандартов.

    Если работа длительно функционирующего экземпляра процесса приостанавливается, то Process Choreographer сохраняет данные о состоянии этого экземпляра в долговременном хранилище. Когда от WebSphere BI Message Broker приходит сообщение-ответ, Process Choreographer проверяет корреляционные наборы и снова запускает нужный экземпляр процесса.

    Для добавления корреляционных наборов выполните следующие шаги:

  • Нажмите на значок + на панели Correlation Sets (Корреляционные наборы) (рис 10.33), чтобы добавить новый корреляционный набор. Назовите новый корреляционный набор Claims.(рис 10.33) Добавление нового корреляционного набора
  • Выделите набор Claims и перейдите на закладку Properties (Свойства) окна Detail (Подробно). Нажмите кнопку New (Новое). Откроется окно Create message property (Создание свойства сообщения).
  • Введите в поле имени свойства значение claimID, а в раскрывающемся списке выберите тип xsd:int.
  • Нажмите кнопку New (Новый) в верхней части списка псевдонимов. Нажмите кнопку Browse (Обзор) в окне Create property alias (Создание псевдонима свойства) и выберите элемент ITSOLGI $$\to$$ services (службы) $$\to$$ ITSOLGI Architecture $$\to$$ WSDL $$\to$$ Proxy(1).wsdl. Выберите сообщение RequestExternalReports_requestAssessorMessage, нажмите OK. Раскройте элемент Part: Container: $$\to$$ MessageContainer: requestAssessor $$\to$$ claimID : Int $$\to$$ OK.
  • Повторяйте шаг 4, чтобы добавить псевдонимы, приведенные в табл. 10.4.
    Псевдонимы для корреляционного набора
    Имя операции Имя WSDL-файла Сообщение Часть
    RequestExternal Reports Receive Proxy(1) RequestExternal Reports_request AssessorMessage MessageContainer: requestAssessor: claimID
    Assessor Availability Receive Assessor AvailabilityLis(3a)t.wsdl listAvailable Assessors parameters -> claimID:int
    AllocateAssessor Repsonse AllocateAssessor Response(6a).wsdl Assessor Confirmation Request claimID:int
    AssessorSend Report AssessorReport(9).wsdl receiveAssessor ReportRequest claimID:int
    Далее мы свяжем корреляционный набор с каждой из принимающих операций.
  • Щелкните по операции RequestExternalReports Receive в редакторе BPEL и перейдите на закладку Correlation (корреляция) в окне Detail (Подробно).
  • Нажмите кнопку ).
  • (рис 10.34) Присвоение корреляционного набора принимающей операции

    Повторите шаги с 1 по 7, чтобы присвоить корреляционные наборы принимающим операциям, указанным в табл. 10.5.

    Свойства корреляционного набора
    Операция Направление Инициация Корреляционный набор
    RequestExternalReports Receive Receive Yes Claims
    AssessorAvailabilityReceive Receive No Claims
    AllocateAssessorRepsonse Receive No Claims
    AssessorSendReport Receive No Claims

    10.5 Контроль пути через процесс

    Следующие этапы конфигурирования посвящены логике контроля пути через процесс. Эта задача делится на две части:

  • В разделе 10.5.1, "Проверка результатов, полученных от RequestAvailability", если система управления оценщиками не находит оценщиков для выполнения оценки, управление для выбора оценщика передается специалисту по обработке претензий, а не системе бизнес-правил.
  • В разделе 10.5.2, "Создание операции While для проверки согласования оценки", мы имеем дело с ситуацией, когда выбранный оценщик в конце концов решил не выполнять оценку.
  • 10.5.1 Проверка результатов, полученных от RequestAvailability

    Партнерская ссылка RequestAvailability отвечает синхронным ответом, проходящим через корпоративную сервисную шину. Этот ответ представляет собой простое подтверждение того, что запрос о готовности, направляемый оценщикам, был получен шиной. Поскольку этот ответ не является частью бизнес-логики, мы игнорируем ответ в этом потоке. Он выходит за рамки нашего сценария. (Вспомните раздел 1.1.2, "Область сценария".)

    Мониторинг сценария сам по себе представляет собой большую тему, выходящую за рамки курса. Необходимо определить и проанализировать цели мониторинга (соглашения об уровне обслуживания) и создать бизнес-показатели, а также связать эти показатели с событиями, которые регистрируются в бизнес-процессе и ИТ-платформе. Эти события и показатели должны представляться в форме, подходящей для различных ролей, отвечающих за мониторинг и обслуживание процесса, от высших управляющих до эксперта по требованиям и операторов.

    Тем не менее нас интересует получение от оценщиков предложений по проведению оценки. Первый этап – это анализ ответов и проверка, все ли ответы получены. ESB ожидает ответов оценщиков в течение согласованного периода времени, а затем собирает предложения в единый список. ESB отправляет ответ обратно, используя автоматизированный процесс для работы с оценщиками. Автоматизированный процесс работы с оценщиками ждет, пока операция AssessorAvailability Receive передаст список системе бизнес-правил для автоматического выбора оценщика.

    Мы должны проверить, были ли вообще получены предложения. Если предложения отсутствуют, мы передаем проблему специалисту по обработке претензий, чтобы он решил ее вручную. Если предложения были получены, то управление передается в автоматизированную операцию SelectAssessor, которая вызывает службу Business Rules для выбора наилучшего оценщика из списка.

    Как можно сказать, были ли получены предложения? Единственный способ – это проверить, есть ли элементы в массиве assessorEstimationArray (рис 10.35).

    (рис 10.35) Массив assessorEstimationArray

    Результаты этой проверки используются для того, чтобы задать значение для ссылок А и В на рис. 10.38. Для каждой ссылки мы можем открыть закладку свойств и задать условие, которое должно быть выполнено для перехода по ссылке. Для определения данного условия мы планируем использовать либо простой редактор выражений, либо визуальный редактор выражений. Однако казалось, что ни тот, ни другой редактор выражений не может обрабатывать выражения достаточно сложные, чтобы можно было проверить существование массива AssessorEstimationArray. Вместо использования редакторов мы напишем немного Java-кода для установки глобальной переменной. Затем каждая ссылка в простом выражении сможет проверять эту переменную, чтобы можно было установить для ссылки условие истинности.

    Общий план реализации следующий:

  • Создать глобальную переменную для хранения длины массива AssessorAutomationArray.
  • Создать Java-фрагмент, устанавливающий значение глобальной переменной.
  • Создание визуального выражения для ссылок А и В с целью тестирования значения глобальной переменной и определения условия истинности для каждой из ссылок.
  • Создание глобальной переменной EstimationArrayLength

    Чтобы создать глобальную переменную EstimationArrayLength, выполните следующие шаги:

  • В редакторе процесса RequestExternalReports нажмите кнопку Variable +, чтобы создать новую глобальную переменную с именем EstimationArrayLength.
  • Этой переменной нужно присвоить тип xsd:int, чтобы она могла хранить значение длины. Для этого мы должны определить WSDL-сообщение, которое мы назовем EstimationArrayLength, в котором содержится часть xsd:int с именем lengthValue. Это сообщение будет храниться в том же WSDL-файле, что и переменные AssessorID и URL:
  • Создайте сообщение EstimationArrayLength и его часть lengthValue:
  • Откройте файл RequestExternalReportsInterface.wsdl в графическом редакторе WSDL.
  • Нажмите Messages (Сообщение) $$\to$$ Add Child (Добавить потомок) $$\to$$ EstimationArrayLength $$\to$$ Add Child (Добавить потомок). Назовите часть lengthValue. В поле ).
  • (рис 10.36) Создание сообщения EstimationArrayLength
  • Создание сообщения EstimationArrayLength
  • Выберите глобальную переменную EstimationArrayLength в процессе RequestExternalReport и откройте закладку Message (Сообщение) в редакторе свойств.
  • С помощью кнопки Browse (Обзор) выберите файл RequestExternalReports Interface.wsdl и укажите сообщение EstimationArrayLength в раскрывающемся окне Message (Сообщение) (рис 10.37).
  • (рис 10.37) Тип переменной EstimationArrayLength

    Создание Java-фрагмента "Any Assessors?" для установки значения lengthValue

    Чтобы создать Java-фрагмент "Any Assessors?", выполните следующие действия:

  • Измените пустую операцию "Any Assessors?" на Java-фрагмент, как показано на рис 10.38. В этом Java-фрагменте мы установим значение lengthValue в глобальной переменной EstimationArrayLength, чтобы его можно было проверять с помощью простых выражений, связанных со ссылками А и В.(рис 10.38) Проверка результатов в RequestAvailability
  • В Java-фрагменте мы должны установить доступ для обновления к глобальной переменной Estimation-ArrayLength:
  • Выделите Java-фрагмент Any Assessors? и откройте закладку Implementation (Реализация) в редакторе свойств.
  • Щелкните ). При этом будут созданы три инструкции.(рис 10.39) Результаты работы мастера обновления переменной
  • Первая инструкция создает в JVM $$\text{\texttrademark}$$ новый экземпляр EstimationArrayLengthMessage (поскольку параметр getEstimationArrayLength установлен в true). Это показывает, что Java-фрагменту требуется доступ по обновлению к глобальной переменной EstimationArrayLength.

    Вторая инструкция создает новый экземпляр целочисленного значения lengthValue. (Также этот экземпляр инициализируется значением, которое берется из глобальной переменной, но нас здесь это не интересует.)

    Третья инструкция использует новое целочисленное значение lengthValue для установки нового значения глобальной переменной. Это также дает побочный эффект – разблокирование переменной, поскольку для обновления она больше не нужна.

    Мастер обновления оставляет редактор готовым к заданию значения новой целочисленной переменной lengthValue. (рис 10.40).

    (рис 10.40) Выбор части переменной для обновления в Java-фрагменте

    Получите длину массива, хранящего ответы оценщиков. На этот раз мы используем встроенное автозаполнение, чтобы получить значение переменной AssessorEstimationArray. К сожалению, с помощью меню мы не можем добраться до нужной нам части сообщения. Используя Ctrl+Пробел для автозаполнения каждого элемента, мы в итоге получим следующую инструкциюВ нашем коде есть опечатка. Проверьте, чтобы в вашем коде ее не было!:

    lengthValue = getListOfAvailableAssessrs()1.getParameters().
    getResultAssessorCollection().getAssessorEstimations().length;

    Полный код Java-фрагмента приведен в примере 10.5.

    EstimationArrayLengthMessage EstimationArrayLength =
       getEstimationArrayLength(true);
    int lengthValue =
       getListOfAvailableAssessors()
         .getParameters()
         .getResultAssessorCollection()
         .getAssessorEstimations()
         .length;
    EstimationArrayLength.setLengthValue(lengthValue);

    Проверка значения lengthValue в ссылках А и В

    Последний этап процесса – это добавление визуальных выражений к двум ссылкам, идущим от Java-фрагмента "AddAssessors?", чтобы вызывалась операция ManualSelectAssessor или автоматическая операция SelectAssessor, но не обе сразу.

  • Щелкните по ссылке, ведущей к операции ManualSelectAssessor, и откройте закладку Condition (Условие) в редакторе свойств. Выберите визуальный редактор выражений для создания следующей инструкции:
    EstimationArrayLength.lengthValue == 0
  • с помощью меню в правой части редактора выберите из списка глобальных переменных переменную EstimationArrayLength.lengthValue;
  • нажмите на оператор равенства (==);
  • нажмите на функцию Number (Число) и введите 0.
  • Щелкните по ссылке, едущей к операции SelectAssessor, и повторите процедуру, чтобы создать следующую инструкцию:
    EstimationArrayLength.lengthValue ¬= 0
  • 10.5.2 Создание операции While для проверки согласования оценки

    Служба RequestAssessment посылает запрос выбранному оценщику на выполнение оценки претензии для LGI. В конечном счете запрос приводит к возврату трех потоков сообщений обратно в процесс RequestExternalReports:

  • Синхронный ответ от ESB, подтверждающий, что сообщение обрабатывается.
  • Асинхронное подтверждение от оценщика, что он будет (или не будет) выполнять оценку.
  • Асинхронный ответ, содержащий отчет об оценке.
  • Как и в случае запроса готовности оценщиков, мы игнорируем ответ от ESB. Он нужен только для мониторинга и не выходит за рамки данного сценария. Окончательный ответ, содержащий отчет, обрабатывается операцией AssessorSendReport. В этом разделе мы изучим обработку подтверждения, получаемого от оценщика, которое принимается операцией AllocateAssessorResponse.

    Выбор дизайна

    Если оценщик отклоняет запрос, такой вариант является необычным и вместо автоматического выбора второго по рейтингу оценщика система передает задание по поиску другого оценщика специалисту по обработке претензий.

    С точки зрения бизнеса важно, чтобы в случае возникновения в процессе необычной ситуации ответственность за принятие решения передавалась специалисту по обработке претензий. Хотя существуют технические возможности использования средств автоматизации для помощи специалисту по обработке претензий в выборе оценщика и в нетипичной ситуации, бизнес-спецификация, как она зафиксирована в BPEL-модели, созданной в WebSphere Business Integration Modeler, указывает на то, чтобы контроль над выбором осуществлял специалист. Эту спецификацию следует учитывать в исполняемом BPEL-коде, который генерирует ИТ-специалист. Однако достижение этой бизнес-цели возможно несколькими путями. Должна ли в процессе использоваться одна или несколько выполняемых вручную операций? Как следует формировать запросы ко второму, а возможно, и к последующим оценщикам? Эти вопросы не учитываются в бизнес-спецификации, и решение по ним должен принимать ИТ-специалист.

    Использование существующей ручной операции или добавление новой ручной операции?

    В потоке уже есть один пункт, где в выполнение ручной операции вовлекается специалист по обработке претензий, если для оценки претензии не оказывается подходящих оценщиков. Один из подходов к проектированию состоит в использовании этой операции для двух ситуаций:

  • отсутствуют подходящие оценщики;
  • выбранный оценщик отказывается выполнить оценку.
  • Альтернативным способом проектирования процесса является добавление новой ручной операции, связанной с обработкой отрицательного ответа оценщика. Результаты этой новой операции должны поступать в операцию RequestAssessment для дальнейшей работы процесса.

    Если мы изучим спецификацию пользовательского интерфейса процесса Claims, то вопрос о применении одной или двух операций почти наверняка отпадет сам собой – использовать следует две операции, поскольку специалисту в каждом из этих случаев необходима разная информация. Однако для данного сценария мы остановимся на одной операции, в которой специалисту будет предложено указать новый идентификатор оценщика, независимо от того, будет это первая попытка назначить оценщика или не первая.

    Проектирование управляющего цикла в BPEL

    Нам нужно создать в BPEL-процессе управляющий цикл для передачи управления в ручную операцию, если оценщик отказывается создавать отчет об оценке. Простой возврат управления в предыдущую точку потока путем соединения потока с циклом в BPEL недопустим. Можно использовать две альтернативы:

  • компенсацию;
  • операцию While.
  • Компенсация (Compensation) – это способ возврата при ошибке в операции. В своей простейшей форме каждая операция содержит такие две службы, как:

  • Прямая (forward) служба – та, которая выполняется при удачном стечении обстоятельств
  • Компенсационная служба – альтернативная служба, которая выполняется, если что-то пошло не так, с целью отмены всех изменений, выполненных прямой службой.
  • За дополнительной информацией о компенсационных службах обращайтесь к следующим источникам:

  • к статье Susan Hermann в developerWorks, "Modeling compensation in WebSphere Business Integration Server Foundation Process Choreographer", – хорошее описание использования компенсационных служб в in WebSphere Studio Application Development Integration Edition": http://www-128.ibm.com/developerworks/websphere/techjournal/0412_herrmann/0412_herrmann.html
  • к руководству по использованию компенсации в сценарии с обработкой страховых претензий, реализованном с применением более ранней версии WebSphere Studio Application Development Integration Edition: Larry Yusuf, "Create Compensation in a Business Process": https://www6.software.ibm.com/developerworks/education/i-merge7/index.html
  • В нашем случае компенсацию можно использовать для вызова операции Manual SelectAssessor вместо автоматической SelectAssessor (как компенсацию ошибки, связанной с отказом выбранного оценщика перейти к выполнению оценки). Однако более подробное исследование должно убедить нас, что наши намерения не вполне соответствуют модели компенсации:

  • Нам не нужно выполнять откат каких-то изменений в ресурсах: ничего не изменилось в результате отказа оценщика от выполнения оценки.
  • Компенсация работает на уровне всего процесса, а мы лишь хотим подкорректировать результаты нескольких операций. Нам пришлось бы выделять компенсируемые операции в отдельный процесс.
  • Выполнение ручной операции Manual SelectAssessor не является компенсационной службой для Automatic SelectAssessor. Мы собираемся выполнить ту же операцию, но несколько иначе.
  • Операция While предоставляет необходимые нам возможности. На рис 10.41 показано, какие операции были перенесены в операцию While и в каком месте всего процесса данная операция располагается.

  • Условие для while – это отсутствие положительного ответа от операции AllocateAssessment Response.
  • Операция Automatic SelectAssessors находится внутри цикла, хотя она всегда выполняется только при первой итерации. Это объясняется тем, что при первой итерации может не оказаться выбранных оценщиков и мы будем использовать ручную операцию ManualSelectAssessors уже в первом проходе, если автоматическая операция не нашла оценщика.
  • Мы не уделяем внимания входящим и выходящим данным для ManualSelectAssessor, поэтому ручную часть цикла может понадобиться дополнительно детализовать.
  • В начале операции While была добавлена пустая операция, просто для удобства графического отображения (рис 10.41).
  • (рис 10.41) Операция While для неподтвержденной оценки

    Создание операции While

    Внимание! Для работы с данным разделом обязательно выполните следующие инструкции:
  • Лучше всего начать создание операции While с добавления в поток ручной или автоматической пустой операции (Noop). Вам будет проще выбрать нужные операции и ссылки и сохранить написанные условия.
  • Перед редактированием абсолютно необходимо выполнить экспортирование в файл Project Interchange. В девяти случаях из десяти первая попытка такого редактирования заканчивается неудачно, а отмену выполнить нельзя.
  • Обязательно отключите для редактирования автоматическое размещение (auto arrange). Иначе выполнение вашей задачи станет практически невозможным.
  • Подключение операции While:
  • Перетащите операцию While из палитры в процесс и назовите ее while no committed assessment.
  • Выделите все операции между Any Assessor? и AssessorSendReport и перетащите их в операцию While.
  • Перетащите, назовите и подсоедините операцию Noop (используйте имя Manual or Automatic?). Обязательно сохраните те же ссылки (А и В) на операции ToSelectAssessors и ManualSelectAssessor с записанными для них условиями.
  • Вы получите множество сообщений об ошибках (пример 10.6).
    Error BPED0211E: Link 'Linknn' does not link immediate children of flow
    'RequestExternalReport' of process model 'RequestExternalReports'.
    RequestExternalReports.bpelITSOWorkshop/Claim/TOBE/RequestExternalReports
  • Чтобы исправить ошибки, выполните следующие шаги:
  • щелкните правой кнопкой мыши по потоку RequestExternalReports.bpel и выберите пункт меню Open with (Открыть с помощью) ... Text editor (Текстовый редактор);
  • вырежьте все неработоспособные определения ссылок из раздела <link> ...</link> главного потока и вставьте их в блокнот;
  • создайте новый раздел <link> ... <.link> в потоке while и вставьте в него все ссылки, как показано в примере 10.7.
  • <while condition="DefinedByJavaCode" name="Whilenocommittedassessment"
    wpc:displayName="While no committed assessment" wpc:id="37">
                  <wpc:condition>
    <wpc:javaCode><![CDATA[//@generated
    //
    //AssessorAcknowledgement.Ack.equals("YES")
    return getAssessorAcknowledgement().getAck().equals
    "YES";]]></wpc:javaCode>
                  </wpc:condition>
                  <target linkName="Link27"/>
                  <source linkName="Link5"/>
                  <flow name="Flow" wpc:displayName="Flow" wpc:id="38">
             <links>
    <link name="Link14"/>
                  <link name="Link15"/>
                  <link name="Link4"/>
                  <link name="Link16"/>
                  <link
    name="ManualSelectAssessorOutput_to_RequestAssessmentInput2"/>
                  <link name="Link19"/>
                  <link name="Link18"/>
                  <link name="Link17"/>
                  <link name="Link3"/>
                  <link name="Link25"/>
             </links>
  • Создайте переменную для хранения условия While:
  • добавьте сообщение AssessorAcknowledgement в файл ProcessMessages.wsdl для соединения с другими внутренними сообщениями, которые были определены доля процесса. создайте часть (Part) с именем Ack и типом xsd:string;
  • добавьте в процесс переменную с именем AssessorAcknowledgement;
  • укажите тип переменной AssessorAcknowledgement с помощью только что созданного сообщения.
  • Задайте и протестируйте условие для While:
  • добавьте операцию назначения ( Assign activity ) перед циклом While для инициализации переменной AssessorAcknowledgement.Ack значением No Assessors selected yet;
  • откройте закладку Condition (Условие) операции While в редакторе свойств и выберите редактор Visual Expression (Визуальный редактор выражений);
  • введите в качестве условия следующее выражение:
    AssessorAcknowledgement.Ack.equals("YES")!=true
  • Java имеет свои хитрости. Вы должны проверить, чтобы значение объекта не представляло собой тот же самый объект.

    10.6 Реализация операции для специалиста по обработке претензий

    Последний этап разработки – это реализация операции, выполняемой персоналом (staff activity).

    Операция персонала используется для представления той точки процесса, где требуется участие специалиста по обработке претензий (Claim handler). Такая операция рассматривается как специальный тип вызывающей операции, однако в ее сигнатуре не используется ссылка на партнера. Операция персонала определяется как действие, имеющее входящее и исходящее сообщения. Это действие и сообщения определяются в WSDL-файле, как правило в интерфейсах процесса. Затем в процессе определяются две переменные с типами сообщений, соответствующими входу и выходу действия, относящегося к операции персонала.

    Изучение свойств операции ManualSelectAssessor

    Мы изменим операцию персонала, созданную Modeler. Пока мы просто изучим некоторые специальные характеристики данной операции.

    Реализация

    Выделите операцию ManualSelectAssessor и откройте закладку Implementation (Реализация) редактора свойств. Можно видеть, что с операцией связан тип порта ManualSelectAssessorPT, который определяется в файле RequestExternalReportsInterfac e.wsdl, сгенерированном Modeler. Мы будем изменять действия и сообщения, используемые операцией персонала ManualSelectAssessor и показанные на рис 10.42.

    (рис 10.42) Типы портов и сообщения для ManualSelectAssessor, сгенерированные Modeler

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

    Web-клиенты

    Когда специалист по обработке претензий хочет выполнить какую-то часть работы, то переменная-запрос и ее содержимое передаются специалисту с помощью Web-клиента или клиента портала. Специалист принимает решение о том, какому оценщику следует направить запрос об оценке претензии, и Web-клиент возвращает ID оценщика в переменной-ответе.

    Наиболее вероятный метод взаимодействия между специалистом по обработке претензии и его фрагментами работы – это Process Web Client. Предлагаемое приложение позволяет прошедшему авторизацию специалисту войти в систему и осуществлять взаимодействие с процессами RequestExternalReports. При этом данный экземпляр процесса становится недоступным для других специалистов по обработке претензий. Специалист отвечает за выполнение операции путем передачи экземпляру процесса значения assessorID, что позволяет экземпляру процесса продолжить работу.

    Существует несколько вариантов Web-клиентов, которые можно написать или сконфигурировать в соответствии с нуждами бизнеса. Более полное объяснение приводится в разделе 9.2 книги серии Redbook "WebSphere Business Integration Server Foundation 5.1 Handbook", SG24-6318.

    Откройте закладку Client (Клиент) окна свойств операции ManualSelectAssessor (рис 10.43). Данные определения для заданных по умолчанию Web-клиентов и клиентов портала извлекаются из файла ClientSet.xml, который находится в директории ...\install_root\IBM\WebSphere Studio\Application Developer IE\v5.1.1\runtimes\ee_v51\ ProcessChoreographer\client.

    Мы можем изменять файл ClientSet.xml, задавая другой интерфейс клиента, или же можем изменять значения для JSP, предлагая другую реализацию заданных по умолчанию интерфейсов. Подробно об этом рассказывается в упомянутой выше книге серии Redbook. Мы будем использовать заданный по умолчанию Web-клиент и измененные входное и выходное сообщения.

    (рис 10.43) Закладка с определениями Web-клиента

    Роли персонала

    В ходе разработки сотрудники, которые могут выполнять операции персонала, абстрактно определяются как имеющие роли. На этом этапе, хотя разработчик указывает, сотрудник какого типа может выполнять операцию, он ничего не знает о технологии, которая будет применяться для идентификации человека, выполняющего роль, или для выполнения аутентификации.

    Откройте закладку Staff (Персонал) операции ManualSelectAssessor, и вы увидите, что специалист по обработке претензий (Claim Handler) уже определен в BPEL-модели, импортированной из Modeler (рис 10.44).

    (рис 10.44) Роли персонала, назначенные в операцию ManualSelectAssessor

    Чтобы не иметь дело с конфигурацией системы безопасности в ходе тестирования, измените слово Staff на Everybody.

    В период выполнения, когда процесс доходит до операции персонала, система WebSphere Process Choreographer создает элемент работы, который может быть обработан любым специалистом по обработке претензий. Контейнер WebSphere Process Choreographer связывает роль Claim Handler с реальным запросом к реализации менеджера сущностей, например пользовательскому реестру Windows или службе LDAP-директории. Этот механизм позволяет рабочей системе определить потенциального владельца, а затем обеспечить выполнение политики аутентификации.

    Поскольку связывание роли Claim Handler происходит в период выполнения, определение связи можно поместить в описании размещения процесса на WebSphere Business Integration Server Foundation.

    Истечение срока действия

    Операция персонала во многом напоминает вызывающую операцию (invoke activity), и в ней есть параметр истечения срока (expiration), если специалист по обработке претензии не отвечает. Существуют разные способы указания этого срока. По достижении этого времени операция персонала переходит в состояние STATE_EXPIRED. Это значение можно проверять в управляющих ссылках (Control Links) выходного терминала операции персонала. В одной управляющей ссылке вы можете проверить состояние (возвращается значение true, если состояние операции STATE_EXPIRED). Это приведет к тому, что выполнение продолжится по данной управляющей ссылке.

    Обычно действия на случай в модели, созданной бизнес-аналитиком, четко не прописываются, если специалист по обработке претензий становится владельцем претензии, но не выполняет операцию. ИТ-специалист должен проконсультироваться с бизнес-аналитиком и ИТ-архитектором, а не принимать решения по ситуации.

    На практике если считается, что данный вопрос не создаст проблем для бизнеса, то приемлемым решением будет выбрать подходящий срок, например один день, а затем выполнить итерацию цикла while. Мы не будем в данном сценарии писать код для истечения срока действия.

    Конфигурирование операции ManualSelectAssessor

    Для конфигурирования операции ManualSelectAssessor от нас потребуется:

  • Изменить тип порта, сгенерированный Modeler, с настройкой входящего и исходящего сообщений для ManualSelectAssessor.
  • Изменить конфигурацию операции ManualSelectAssessor, чтобы она использовала новый тип порта.
  • Изменить логику соединений операции while no committed assessment.
  • Изменения типа порта и действий для операции ManualSelectAssessor

    Мы будем использовать следующий интерфейс операции ManualSelectAssessor:

  • Вход: условие для операции While.

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

  • Выход: идентификатор оценщика, выбранного специалистом по обработке пре- тензий для выполнения оценки.

    Для этого понадобится новое сообщение – xsd:int. Web-клиент по умолчанию сконструирует форму из фрагментов выходного сообщения и выполнит конверсию типов, описанную в спецификации JAX-RPC.

  • Откройте файл RequestExternalReportsInterface.wsdl, как показано на рис 10.42. (рис 10.45).
  • Удалите два существующих действия в ManualSelectAssessorPT.
  • Нажмите Add Child (Добавить потомок) $$\to$$ Operation (Действие), введите requestAssessorID в поле имени, нажмите Add Child (Добавить потомок) $$\to$$ Input (Вход) $$\to$$ Add Child (Добавить потомок) $$\to$$ Output (Выход).
  • Выберите элемент Input (Вход), нажмите Create a new message (Создать новое сообщение). Назовите сообщение ManuallyChosenAssessorInput.
  • Выберите элемент Output (Выход), нажмите Create a new message (Создать новое сообщение). Назовите сообщение ManuallyChosenAssessorOutput.
  • Выберите новое сообщение ManuallyChosenAssessorInput, нажмите Add Child (Добавить потомок) $$\to$$ Part (Часть), назовите новую часть AssessorSelectionState. Оставьте заданный по умолчанию тип xsd:string.
  • Снова выберите сообщение ManuallyChosenAssessorInput, нажмите Add Child (Добавить потомок) $$\to$$ Part (Часть), назовите новую часть claimID. Укажите тип xsd:int.
  • Выберите новое сообщение ManuallyChosenAssessorOutput, нажмите Add Child (Добавить потомка) $$\to$$ Part (Часть), назовите новую часть AssessorID. Укажите тип xsd:int.
  • (рис 10.45) Входное и выходное сообщение для операции ManualSelectAssessorДля изменения конфигурации операции ManualSelectAssessor выполните следующие действия:
  • На закладке Implementation (Реализация) окна свойств операции Manual- SelectAssessor убедитесь, что в качестве переменных Request (Запрос) и Response (Ответ) установлены переменные ManualInputCriteriaVariable и ManualOutp utCriteriaVariable, которые уже должны существовать. Если они не существуют, создайте их.
  • Установите тип сообщения-запроса и сообщения-ответа, выделив переменные и открыв закладку Message (Сообщение) редактора свойств:
  • Для переменной ManualInputCriteriaVariable прокрутите список Message (Сообщение) до ManuallyChosenAssessorInput. Вам может понадобиться нажать кнопку Browse (Обзор) и найти файл RequestExternalReportsInput.wsdl, если сообщение не появляется. WSDL-файл кешируется.
  • Для переменной ManualOutputCriteriaVariable прокрутите список Message (Сообщение) до ManuallyChosenAssessorOutput.
  • Вернитесь в окно свойств операции ManualSelectAssessor, выберите только что созданное действие requestAssessorID в свойстве Operation (Действие) на закладке Implementation (Реализация).
  • Трансформации при переходе к ручной операции и от нее

    Следующие этапы посвящены управлению данными, входящими в операцию ManualSelectAssessor и покидающими ее. Поток в конце концов будет выглядеть так, как показано на рис 10.46.

    (рис 10.46) ManualSelectAssessorFlow

    Создание агрегации и трансформации на входе в ManualSelectAssessor

    Выполните следующие действия:

  • Создайте новую операцию трансформации и назовите ее ToManualSelectAssessor.
  • В качестве переменной-ответа (Response) укажите ManualInputCriteriaVariable.
  • Создайте агрегацию с именем AggregateManualSelectAssessor, которая будет объединять переменные InputCriterionVariable и AssessorAcknowledgement.
  • Создайте трансформирующую службу с именем TransformerManualSelect|Assessor:
  • добавьте сообщение AssessorAcknowledgement из файла RequestExternalReportsInterface.wsdl и сообщение RequestExternalReportsRequest из файла ExternalClaimsAssessorsInterface.wsdl в качестве входных сообщений трансформирующей службы;
  • выберите сообщение ManuallyChosenAssessorInput из файла RequestExternalReportsInterface. wsdl в качестве выходного сообщения;
  • соедините части claimID и Ack, как показано на рис 10.47.
  • (рис 10.47) Трансформация входа для ManuallyChosenAssessorInput

    Создание агрегации и трансформации на выходе из ManualSelectAssessor

    Создайте еще одну агрегирующую трансформацию, создав сначала новую операцию трансформации с именем ToAssessorURL, агрегацию с именем Aggregate-AssessorURl и трансформирующую службу TransformerAssessorURL:

  • Объедините AssessorID из сообщения ManuallyChosenAssessorOutput в файле RequestExternalReportsInterface.wsdl с ClaimID из сообщения RequestExternalReportsRequest в файле ExternalClaimsAssessorsInterface.wsdl (входящих сообщений). (рис 10.48).
  • Выберите сообщение SelectAssessorResponse из файла PreferredAssessor(5).wsdl в качестве исходящего сообщения.
  • (рис 10.48) Выходные трансформации для ManuallyChosenAsssessorOutput

    Изменение соединений операции While

    Перетащите две трансформирующие службы в операцию While и измените соединения, как показано на рис 10.46.

    Важно! Будьте осторожны и сохраните ссылку, ведущую к операции ManualSelectAssessor, с настройками фильтра условия.

    10.7 Компоновка

    На этом этапе после сохранения процесса у нас должно остаться только одно предупреждение – The deployment code for this process needs to be generated (нужно сгенерировать код размещения для данного процесса).

    Чтобы BPEL-процесс мог выполняться на сервере, нужен код размещения. Мы можем сгенерировать код для размещения процесса в WebSphere Studio Application Developer Integration Edition после того, как исправлены все ошибки. Система WebSphere Studio Application Developer Integration Edition генерирует EAR-модуль, который включает в себя EJB-модуль, созданный по определениям бизнес-процесса. Мы можем выполнять бизнес-процесс, разместив этот EAR-модуль на сервере.

    Чтобы подготовить процесс, прошедший тестирование на тестовом сервере, к размещению и использованию базы DB/2 в рабочей системе, нужно выполнить еще один дополнительный компоновочный этап (см. раздел "Компоновка для рабочего сервера"). Мы используем для хранения объектов на тестовом сервере базу Cloudscape $$\text{\texttrademark}$$, а в рабочей системе мы используем DB/2.

    10.7.1 Компоновка бизнес-процесса

    Чтобы осуществить компоновку бизнес-процесса, выполните следующие шаги:

  • Убедитесь, что в бизнес-процессе отсутствуют ошибки, сохранив все рабочее пространство.
  • Мы не хотим, чтобы экземпляр процесса автоматически удалялся по завершении работы, потому что мы хотим просмотреть результаты. По умолчанию экземпляр процесса по завершении работы удаляется. Чтобы изменить данное поведение, перейдите к всплывающему меню операции RequestExternalReports в верхней части потока и измените свойства сервера, как показано на рис 10.49.(рис 10.49) Сохранение экземпляра процесса после завершения
  • Чтобы сгенерировать код размещения, щелкните правой кнопкой мыши по процессу RequestExternalReport s, выберите пункт меню Enterprise Services (Корпоративные службы) $$\to$$ Generate Deploy Code (Сгенерировать код размещения). Откроется окно параметров генерации кода (рис 10.50).(рис 10.50) Генерация кода размещения BPEL
  • Выберите транспортные привязки процесса и его партнеров, где процесс будет выполнять роль сервера:
  • Оставьте JMS в качестве протокола вызова процесса.
  • Для трех других интерфейсов укажите привязки SOAP/http с использованием IBM Web service, как показано на рис 10.50.
  • Для каждого из трех интерфейсов определите стиль SOAP, как показано на рис 10.51. Файлы WSDL создавались совместимыми с WS-I и использующими интерфейс Document Literal (Документ литерал). За дополнительной информацией о совместимости SOAP и WS-I обращайтесь к книге серии Redbooks "WebSphere and .Net interoperability using Web services", SG24-6395.
  • (рис 10.51) Стиль привязок SOAP
  • Проверьте партнеров, на которые процесс ссылается. Менять, скорее всего, ничего не нужно. Нажмите OK, чтобы начать генерацию. Это займет несколько минут. После завершения генерации вы увидите 15 сообщений, относящихся к компенсационным объектам, которые устранить нельзя, но можно игнорировать.
  • Найдите EAR-модуль с именем ITSOLGIEAR (имя проекта + EAR) в представлении J2EE Hierarchy (Иерархия J2EE). Этот EAR-модуль включает в себя Web-модуль (ITSOLGIWeb) и EJB-модуль (ITSOLGIEJB).
  • Совет. При сохранении файла Project Interchange не сохраняйте размещаемые службы, а генерируйте их заново после восстановления проекта.

    10.7.2 Компоновка для рабочего сервера

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

  • Перейдите в представление J2EE Hierarchy и удалите карту и схему из ресурса Cloudscape. (рис 10.52).(рис 10.52) Удаление связей с Cloudscape
  • Экспортируйте файл ITSOLGI.ear.
  • 10.8 Тестирование и отладка процесса

    В WebSphere Studio Application Development Integration Edition предлагается тестовая серверная среда, которая содержит тот же серверный компонент, что и WebSphere Business Integration Server Foundation. Это означает, что вы можете тестировать бизнес-процессы без инсталляции и конфигурирования тестового сервера за пределами среды разработки. Также предлагаются функции для отладки, например для установки точек останова, пошагового выполнения бизнес-процессов и мониторинга данных в ходе выполнения.

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

    10.8.1 Подготовка к тестированию

    Для подготовки к тестированию выполните следующие шаги:

  • Создайте новый тестовый сервер. Откройте представление Server Configuration (Конфигурация сервера). Его можно найти в нижней части перспективы Services (Службы) или с помощью главного меню: пункт Window (Окно) $$\to$$ Show view (Показать представление) $$\to$$ Server Configuration (Конфигурация сервера). Щелкните правой кнопкой мыши и выберите пункт меню New (Новый) $$\to$$ Server and Server Configuration (Сервер и конфигурация сервера) (рис 10.53).(рис 10.53) Создание сервера и конфигурации сервера
  • Введите TestServer в качестве имени нового сервера и убедитесь, чтобы в поле Server Type (Тип сервера) был указан вариант Integration Test Environment (Среда для тестирования интеграции). Нажмите OK, чтобы создать новый сервер.
  • Новый сервер, TestServer, будет добавлен в папку servers в представлении Server Configuration (Конфигурация сервера). Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Add and remove projects (Добавление и удаление проектов).
  • Нажмите кнопку ), чтобы добавить созданный нами модуль ITSOLGIEAR EAR. Нажмите (рис 10.54) Добавление модуля ITSOLGIEAR на сервер TestServer
  • Снова щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Create tables and data sources (Создать таблицы и источники данных). Для выполнения процесса RequestExternalReports нам понадобится база данных, поскольку это длительно выполняемый процесс и необходимо сохранять в базе данных сведения об экземплярах процесса.
  • (рис 10.55) Окно подтверждения создания таблицы базы данных

    Проверьте сообщения, появляющиеся в окне подтверждения, и убедитесь в том, что таблица базы данных и источник данных были успешно созданы.

    10.8.2 Публикация бизнес-процесса на тестовом сервере

    Чтобы опубликовать тестовый сервер, выполните следующие действия. Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Publish (Публикация).

    Весьма возможно, что публикация службы будет неудачной и будут выведено одно из следующих сообщений об ошибке (примеры 10.8 и 10.9).

    Project ITSOLGIEJB deployment failed.
         BPEA0010E: Unexpected exception during execution.
    java.lang.reflect.InvocationTargetException:
    com.ibm.bpe.api.UnexpectedFailureException: BPEA0010E: Unexpected exception
    during execution.
    com.ibm.bpe.util.ProcessAssertionError: Assertion violation !(param-
    Value !=
    null  paramValue.length() != 0) in method >>at
    com.ibm.bpe.staff.StaffPluginUtil.deployStaffVerb(StaffP

    Данная ошибка вызвана отсутствием реализации роли Claim Handler. В данном сценарии можно обойти эту ошибку, указав в поле staff операции ManualSelectAssessor вариант Everybody.

    Project ITSOWorkshopEJB deployment failed.
    BPED0203I: Validated process model 'RequestExternalReports' with
    findings ( 0 information, 0 warnings, 1 errors ):
    BPED0267E: Syntactical error found in BPEL file
    'Claim/TOBE/RequestExternalReports/RequestExternalReports.bpel' (row: 223,
    column: 73). Detail message: cvc-complex-type.2.4.b: The content of
    element
    'wpc:webClientSettings' is not complete. One of
    '("http://www.ibm.com/xmlns/prod/websphere/business-process/v5.1/":customSe
    tting,
    "http://www.ibm.com/xmlns/prod/websphere/business-process/v5.1/":jsp)' is
    expected.
    java.lang.reflect.InvocationTargetException:
    com.ibm.bpe.plugins.DeploymentBPELProcessValidationException: BPED0203I:
    Validated process model 'RequestExternalReports' with findings ( 0
    information, 0 warnings, 1 errors ):
    BPED0267E: Syntactical error found in BPEL file
    'Claim/TOBE/RequestExternalReports/RequestExternalReports.bpel' (row:
    223,
    column: 73). Detail message: cvc-complex-type.2.4.b: The content of
    element
    'wpc:webClientSettings' is not complete. One of

    Если вы встретитесь со второй ошибкой, удалите строку <wpc:webClientSettings clientType="Web Client"/> из файла RequestExternalReports.bpel.

    10.8.3 Создание среды для тестирования

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

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

  • первый вариант работает на сервере WebSphere Application Server;
  • второй вариант работает в брокере.
  • Выбор зависит от того, какая версия системы управления оценщиками инсталлирована в WebSphere Application Server. Таблица оценщиков и их URL жестко прописаны в системе управления оценщиками. Одна версия указывает на WebSphere Application Server, а другая – на WebSphere Business Integration Message Broker.

    Выбор системы оценщика

    Чтобы выбрать систему, выполните следующие шаги:

  • Проверьте, какая система установлена в данный момент:
  • Откройте браузер и откройте административную консоль WebSphere Application Server на машине SAH414A, введя адрес http://sah414a:9090/admin/.
  • Откройте раздел установленных приложений, поставьте галочку напротив ).(рис 10.56) Административная консоль WebSphere Application Server
  • Скачайте файл AssessorManagementService.ear.
  • Вы можете просматривать EAR-файл, используя утилиту распаковки, например WinZip, или же можете импортировать этот файл в WebSphere Studio Application Development Integration Edition в виде нового EAR-проекта, как мы описываем здесь.
  • Выберите пункт меню File (Файл) $$\to$$ Import (Импорт) $$\to$$ EAR file (EAR-файл) $$\to$$ Next (Далее). Найдите файл AssessorManagementService.ear, нажмите Finish (Готово).
  • Откройте перспективу J2EE и представление J2EE Hierarchy (Иерархия J2EE), выберите элемент EJB Modules (EJB-модули) $$\to$$ AssessorManagementServiceEJB $$\to$$ Session Beans (Сеансовые компоненты) $$\to$$ AssessorManagement. Двойным щелчком откройте компонент AssessorManagementBean, откройте представление Outline (Общий обзор) в окне ниже, сделайте двойной щелчок мышью по удаленному интерфейсу requestListAssessors и изучите код, приведенный в примере 10.10.
  • //Создание жестко прописанного массива оценщиков и нового списка
    АssessorList
    Assessor stubAssessor = new Assessor();
    stubAssessor.setAssessorID( new Integer(9999));
    stubAssessor.setAssessorURL( "http://SAH414A:7080/Availability");
    Assessor anotherStubAssessor = new Assessor();
    // оценщик только один, просто две записи с одним пунктом назначения
    anotherStubAssessor.setAssessorID(new Integer(5555));
    anotherStubAssessor.setAssessorURL("http://SAH414A:7080/Availability");
    Assessor [] assArray = new Assessor[2];
    assArray[0] = stubAssessor;
    assArray[1] = anotherStubAssessor;
    AssessorList stubAssList = new AssessorList();
    stubAssList.setAssessors( assArray);
    stubAssList.setClaimId( claimID);

    Можно видеть, что размещаемый EAR-файл использует оценщика, реализованного в брокере.

    Чтобы использовать альтернативного оценщика ( примерПросим прощения за опечатку в URL – эта опечатка "верная". 10.11), найдите директорию .\SG24-6636\WAS\Flow2 и разместите файл Flow2_AssessorManagementService_SOURCE.ear в WebSphere Application Server. Версия для брокера находится в поддиректории Broker Assessor.

    stubAssessor.setAssessorURL(
    "http://SAH414A:9080/AssessorAvailaibilityApplicationsEJBRouter/services/
    Availa
    bility");
    Assessor anotherStubAssessor = new Assessor();
    // оценщик только один, просто две записи с одним пунктом назначения
    anotherStubAssessor.setAssessorID(new Integer(5555));
    anotherStubAssessor.setAssessorURL("http://SAH414A:9080/AssessorAvailaibilityAp
    plicationsEJBRouter/services/Availability");
    Ограничение. В настоящий момент для оценщика, работающего с WebSphere Application Server, не реализованы асинхронные ответы. Подтверждение и отчет следует отправлять вручную. По этой причине мы предпочитаем использовать реализацию с брокером. WebSphere MQ применяется для связывания этапов в ответе оценщика. Отсрочку для подтверждений и отчетов можно задавать путем включения и отключения очередей в потоках Flow7A и FLOW8, как описано в разделе 9.9.2, "Каркас системы оценщика и системы для работы с претензиями".

    Вызов служб оркестровки

    Как вы помните, система proxyAssessorSystem вызывает три односторонние SOAP-службы, принадлежащие к потоку RequestExternalReports. Как нам узнать, какой URL нужно записать в узлы HTTPRequest системы proxyAssessorSystem в брокере для этих служб?

    На этапе генерации кода размещения в разделе "Компоновка бизнес-процесса" вы указали адрес маршрутизации для каждой из трех служб - "http://localhost:9080/". Можно ли записать этот путь в ESB для узлов Http Request, которые отвечают Process Choreographer? Оказывается, нельзя.

    URL Web-службы, который вы должны указывать в брокере для вызова сервера за- просов о готовности в Choreographer, должен быть таким:

    http://SAH414:9080/ITSOLGIWeb/services/RequestExternalReportsAssessor
    AvailabilityListHTTPServicePort

    Откуда берется такой путь?

  • В WebSphere Studio Application Development Integration Edition откройте проект ITSOLGIWeb в папке Deployable services (Размещаемые службы).
  • Найдите файл web.xml (дескриптор размещения в Web) и откройте его.
  • Вы можете видеть, что в проекте определены три сервлета и JSP. Именно эти службы вызывает брокер.(рис 10.57) Web-службы, размещаемые в RequestExternalReports.bpelНажмите кнопку Details (Подробно) и изучите связи URL. Путь для службы AssessorAvailabilitylist будет выглядеть так:
    services/RequestExternalReportsAssessorAvailabilityListHTTPServicePort
    Добавьте этот путь к адресу маршрутизатора в URL, и вы получите полный путь к Web-службе, и его эквивалент для двух других служб:
    ITSOLGIWeb/services/RequestExternalReportsAssessorAvailabilityListHTTP
    ServicePort
  • Нам нужно изменить URL-адреса в брокере, поскольку они не совпадают с адресами Web-служб в новом процессе, который был нами создан. Сделать это можно без прямого редактирования потока в брокере сообщений. Это одноразовая модификация. После повторного размещения значение этого параметра в потоке снова будет восстановлено. Поэтому лучше будет изменить параметр в потоке:
  • Откройте в брокере административную перспективу, найдите папку Deployables (Размещаемые компоненты) в директории Broker Archives и откройте элемент LGIAvailability.
  • Выберите узел HTTP Request в потоке Output3a и замените URL Web-службы на URL RequestExternalReportsAssessorAvailabilityListHTTPService из модуля ITSOWorkshopWeb.
    http://SAH414:9080/services/RequestExternalReportsAssessorAvailability
    ListHTTPServicePort
  • Повторите процедуру для двух других Web-служб.
  • Снова разместите модули LGIReport и LGIAvailability.
  • Включите нормальную трассировку для обеих групп выполнения.
  • 10.8.4 Тестирование и отладка бизнес-процесса

    Прежде чем начинать тестирование Process Choreographer, убедитесь, что все необходимые службы, функционирующие в WebSphere Application Server и WebSphere Business Integration Message Broker, работоспособны. Используйте для этого инструмент Web Services Explorer из WebSphere Studio Application Development Integration Edition.

    10.8.5 Тестирование и отладка бизнес-процесса

    Чтобы протестировать бизнес-процесс, выполните следующие шаги:

  • Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Start (Запуск). Сервер будет запущен. Убедитесь, что на консоли появилось сооб- щение message server1 is opened for e-business. Вот несколько типичных проблем, возникающих на этой стадии, и пути их разрешения:
  • Наиболее распространенной причиной ошибок при запуске сервера являются пути, превышающие по длине максимально разрешенные в Windows. Быстрое решение – преобразование директории, содержащей рабочее пространство, с помощью Windows-команды SUBST.
  • Еще одной распространенной причиной проблем, например сообщений о синтаксических ошибках в файле Application.xml, является неверное применение службы.
  • Убедитесь, что вы скомпоновали, разместили, опубликовали, запустили и просматриваете simpleProcess, описанный в центре информации.
  • Откройте представление Servers (Серверы) и выберите пункт меню Launch Business Process Web client (Запустить Web-клиент бизнес-процесса). Откроется окно браузера.
  • Выберите в меню в левой части окна элемент my template (Мой шаблон). Вы увидите, что процесс RequestExternalReports готов (рис 10.58).(рис 10.58) Запущенный клиент Process Choreographer с выбранным элементом My Templates
  • Щелкните по полю RequestExternalReports $$\to$$ Start instance (Запустить экземпляр). Появится панель, отображающая входное сообщение (рис 10.59).(рис 10.59) Входное сообщение процесса
  • Введите данные. Единственное требование, чтобы данные соответствовали типам. В поле даты вводите дату в формате мм-дд-гггг.
  • Нажмите кнопку Start instance (Запустить экземпляр), чтобы запустить процесс.
  • На панели Created by Me (Создано мной) выберите только что запущенный процесс и выберите Monitor (Мониторинг).
  • Если все в порядке, процесс отобразит список выполненных задач и будет ожидать ввода. На рис 10.60 показан пример, в котором процесс ждет ответа от выбранного оценщика.(рис 10.60) Ожидание ответа от proxyAssessorSystem
  • Поскольку для имитации оценщиков мы используем брокер, в WebSphere MQ Explorer в очередях FLOW7A и FLOW8 будут содержаться по одному сообщению, а очереди будут приостановлены для имитации задержки. Освобождение сообщений в нужном порядке приведет к продолжению выполнения.
  • Отладка процесса

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

  • пошагово проверить выполнение экземпляра процесса;
  • добавить точки останова;
  • изучить данные на каждом из шагов.
  • Чтобы протестировать процесс в режиме отладки, выполните следующие действия:

  • Добавьте точку останова для проверки этапов выполнения. Щелкните правой кнопкой мыши по операции в BPEL-редакторе и выберите пункт меню Add Entry/Exit break point (Добавить элемент/точка останова для выхода).
  • Запустите сервер TestServer в режиме отладки. Щелкните правой кнопкой мыши по ) и выберите пункт Debug (Отладка). Откроется перспектива Debug (Отладка).(рис 10.61) Перспектива Debug (Отладка)
  • Выполняйте процесс пошагово, нажимая кнопки step over (Пропуск блока) или step in (Вход в блок) в представлении Debug (Отладка). В представлении Variables (Переменные) в правой части перспективы отображаются значения переменных.

    В качестве примера на рис 10.62 показан процесс, приостановленный на входе во Java-фрагмент, агрегирующий результаты запроса о том, какие оценщики являются потенциальными кандидатами для проведения оценки и каково значение ResponseTimePolicy для данного клиента.

    (рис 10.62) Процесс, приостановленный на входе во Java-фрагмент

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

    Убедитесь, что представление Debug (Отладка) отображается в верхнем левом окне и выбран текущий экземпляр процесса. В верхнем правой окне отобразится список переменных.

  • Откройте переменную IdentifyAssessorsOutputCriteriaVariable и убедитесь, что служба AssessorManagement вернула список оценщиков.
  • Войдите (step into) в Java-фрагмент. Откроется закладка Implementation (Реализация) Java-фрагмента.
  • Пройдите (step over) все инструкции.
  • На выходе из фрагмента проверьте, чтобы в переменной AggregateRequestAvailability все части были установлены правильно, в особенности список оценщиков.
  • Перешагните (step over) трансформирующую службу ToRequestAvailability. Отладка такой формы реализации, как список стилей, невозможна.
  • Теперь проверьте переменную RequestAvailabilityInputCriteriaVariable – задан ли список оценщиков?
  • Возможно, в данном случае список оценщиков не установлен и причина ошибки в proxyAssessorSystem :ESB.

    10.9 Размещение процесса на сервере

    Бизнес-процессы, которые разработаны в WebSphere Studio Application Development Integration Edition, размещаются в WebSphere Business Integration Server Foundation в формате EAR-файла и выполняются в контейнере бизнес-процесса, который предоставляет WebSphere Business Integration Server Foundation.

    WebSphere Business Integration Server Foundation предлагает систему работы с процессом, основанную на Java 2 Enterprise Edition, которая поддерживает следующие возможности:

  • Поддержка процессов разного стиля.

    Поддерживаются непрерываемые (однотранзакционные) и прерываемые (многотранзакционные) процессы.

  • Поддержка компенсации.

    Компоненты времени выполнения, которые поддерживают компенсацию (откат выполненной работы) для процессов.

  • Поддержка вмешательства человека.

    Компоненты времени выполнения, которые позволяют человеку взаимодействовать с процессами, например при помощи интерфейса на основе Web-браузера, для предоставления элементов работы и процессов.

  • В системе работы с процессами, входящей в WebSphere Business Integration Server Foundation, есть несколько компонентов.

  • Навигация по процессам – управление экземплярами процесса и их состоянием.
  • Вызов Web-служб и запрос на выполнение процессов осуществляется как через внешний, так и через внутренний интерфейс.
  • Операции, выполняемые персоналом, управляются компонентом, отвечающим за взаимодействие с человеком.
  • Все компоненты системы работы с бизнес-процессом выполняются на WebSphere Application Server и используют базу данных и службы, связанные с очередями сообщений.
  • (рис 10.63) Компоненты WebSphere Business Integration Server Foundation

    10.9.1 Инсталляция приложения бизнес-процесса

  • Запустите браузер с административной консолью (http://SAH414B:9080/Admin), перейдите к разделу Applications (Приложения) $$\to$$ Enterprise Applications (Корпоративные приложения) и нажмите Install (Установить).
  • Перейдите к файлу ITSOLGIEAR.ear, нажмите Next (Далее), затем снова Next (Далее).
  • В Шаге 1 мастера Install New Application (Инсталляция нового приложения) укажите короткое имя директории в корне выбранного диска (в нашем случае – D) для инсталляции приложения (создайте директорию, прежде чем продолжить). Установите флажок Deploy EJBs (Размещать EJB).
  • Перейдите к шагу 11 и установите флажок Enable (Включить) около Create tables (Создавать таблицы). Если на сервере есть несколько баз данных, вам будет предложено выбрать одну, иначе, как в нашем случае, мастер сам выберет установленную базу и продолжит.
  • Закончите конфигурирование, подтвердите, что приложение было установлено успешно, и сохраните его в базе данных главной конфигурации.
  • Перейдите к панели Enterprise Applications (Корпоративные приложения) и запустите приложение. Теперь оно готово к работе.
  • 10.9.2 Проверка приложения

  • Запустите Web-клиент контейнера бизнес-процесса, указав в браузере URL http://sah414b:9080/bpe/webclient.
  • Измените конфигурацию брокера для вызова принимающих операций на рабо- чем сервере, расположенном на машине SAH414B. Делается это без изменения потока сообщений, из административной перспективы инструментария брокера. Например, на рис 10.64 показан поток Output6a.(рис 10.64) Изменение имени хоста на SAH414B для потока Output6a
  • Запустите проверочный тест. Если вы хотите протестировать операцию, выполняемую персоналом, измените ответ в подтверждении оценщика на NO.
  • 10.10 Заключение

    В этой лекции описано, как ИТ-специалист по процессам изменяет бизнес-процесс, предоставленный бизнес-аналитиком, с целью реализации интерфейсов, предложенных ИТ-архитектором, а затем тестирует и размещает процесс в WebSphere Business Integration Server Foundation.

    Последний этап в нашем решении – это интеграция рабочего потока обработки претензий, работающего на сервере WebSphere MQ Workflow с бизнес-процессом с применением интеграционного вспомогательного пакета (supportpac) WA0D.

    Страницы:

    В этой лекции мы опишем разработку и размещение бизнес-процесса, который можно экспортировать из WebSphere Business Integration Modeler в формате Business Process Execution Language for Web service (BPEL4WS). Мы создадим наш бизнес-процесс, используя выходные данные WebSphere Business Integration Modeler, которые мы можем получить от бизнес-аналитика. Поскольку в бизнес-процессе, экспортируемом из Modeler, по-прежнему отсутствуют готовые к реализации службы и настройки, необходимые для работы с бизнес-процессом в реальной системе, мы должны модифицировать код BPEL, чтобы система работы с бизнес-процессами могла исполнять этот бизнес-процесс.

    Эта лекция включает в себя следующие разделы:

  • 10.1, "Общий обзор";
  • 10.2, "Импортирование WSDL и BPEL в IDE";
  • 10.3, "Интеграция процесса и его служб";
  • 10.4, "Интеграция процесса и его служб"Название раздела дается согласно оригиналу. – Примеч. ред . ;
  • 10.5, "Контроль пути через процесс";
  • 10.6, "Реализация операции для специалиста по обработке претензий";
  • 10.7, "Компоновка";
  • 10.8, "Тестирование и отладка процесса";
  • 10.9, "Размещение процесса на сервере".
  • 10.1 Общий обзор

    ИТ-специалист по процессам с помощью WebSphere Studio Application Developer Integration Edition V5.1.1 размещает бизнес-процесс, созданный бизнес-аналитиком в WebSphere Business Integration Modeler, на платформе WebSphere Business Integration Server Foundation V5.1. На рис 10.1 показана центральная роль ИТ-специалиста по процессу в реализации решения.

    (рис 10.1) Создание потока для бизнес-процесса

    Код BPEL экспортируется из WebSphere Business Integration Modeler ИТ-специалистом по процессу, а не бизнес-аналитиком. Перед экспортом необходимо исправить технические ошибки в коде BPEL, а ИТ-специалист имеет необходимые навыки исправления ошибок. Также ИТ-специалист может получить общий вид процесса в Modeler. Экспортирование кода BPEL описано в разделе 4.5.3, "Экспорт процесса RequestExternalReports в виде процесса BPEL4WS".

    В BPEL-процессе для взаимодействия с большинством внешних служб используются ссылки на партнеров. Все ссылки на партнеров, необходимые ИТ-специалисту по процессу, находятся в WSDL-файлах. Они были определены архитектором решения с помощью Rational Software Architect. Эти файлы были упакованы в один zip-файл для простоты управления. Этот zip-файл нужно импортировать в пакет Web-Sphere Studio Application Development Integration Edition.

    Все необходимые дополнительные WSDL-интерфейсы можно определить в WebSphere Studio Application Development Integration Edition или в вашем любимом WSDL-редакторе.

    Существует три вида служб, интеграцией которых занимается ИТ-специалист по процессу:

  • Существуют простые Web-службы, вызываемые бизнес-процессом. Они все обыч- но реализуются в виде EJB и располагаются на отдельном сервере WebSphere Application Server.

    Такие службы описаны в лекции 8, "Тестирование и размещение компонентов приложений".

  • Существуют службы, подключенные к ESB и реализованные WebSphere Business Integration Message Broker. Запросы и ответы реализуются как отдельные службы, а Process Choreographer играет роль службы, получающей ответы от ESB. Эти службы описаны в лекции 9, "Создание корпоративной сервисной шины".
  • Еще один вид связи, который нужно установить, – это связь между WebSphere MQ Workflow и WebSphere Business Integration Server Foundation. Система Wokflow имеет специальный механизм интеграции, использующий прокси-EJB, функционирующий на той же системе работы с процессами, что и бизнес-процесс. Таким образом, вызов процесса RequestExternalReports – это простая ссылка на партнера, в которой наш процесс вызывается данным EJB от имени процесса Workflow. Установка такого соединения относится к области ответственности ИТ-специалиста по Workflow.
  • Об этом мы поговорим в лекции 11, "Изменение процесса изучения претензий".

    Когда ИТ-специалист по процессу закончит формирование BPEL-процесса, процесс можно протестировать либо путем импорта компонентов приложения в тестовую среду WebSphere Studio Application Development Integration Edition, либо путем связывания тестовых версий служб, работающих на своих исходных платформах. После отладки и тестирования процесса он размещается в WebSphere Business Integration Server Foundation.

    10.2 Импортирование WSDL и BPEL в IDE

    WSDL-код, используемый в решении для работы с внешними оценщиками, был создан архитектором решения и является частью PSM (модели, специфичной для продуктов) – контракта между архитектором решения и ИТ-специалистами. Код BPEL был сформирован бизнес-аналитиком и является частью CIM (модели, независимой от вычислений) – контракта между бизнес-аналитиком и ИТ-специалистами. В данном разделе описывается, как ИТ-специалист переносит файлы WSDL и BPEL в WebSphere Studio Application Development Integration Edition.

    10.2.1 Импортирование WSDL из Rational Software Architect

    WSDL-определения будут применяться для создания ссылок на партнеров, операций и переменных в BPEL-модели. Архитектор решения экспортировал готовые WSDL-определения в zip-файл (см. раздел 6.4, "Обеспечение доступа к материалам"). Теперь мы импортируем этот zip-файл в WebSphere Studio Application Development Integration Edition и создадим необходимые нам ссылки на партнеров.

  • Запустите WebSphere Studio Application Development Integration Edition и откройте перспективу Business Integration (Бизнес-интеграция). Выберите пункт меню File (Файл) $$\to$$ New (Новый) $$\to$$ Service Project (Проект службы). Откроется мастер New Project (Новый проект) (рис 10.2).(рис 10.2) Создание нового проекта службы
  • Введите уникальное имя для нового проекта (ITSOLGI) и нажмите Finish (Готово). Новый проект службы будет создан в папке Service Projects (Проекты служб) представления Services (Службы).
  • Перед копированием WSDL-файла в проект службы, включающий наш новый BPEL-процесс, создайте новый Java-пакет для организации импортированных WSDL-файлов.

    Щелкните правой кнопкой мыши по проекту службы ITSOLGI и выберите пункт меню New (Новый) $$\to$$ Package (Пакет). Введите в поле имени пакета services и нажмите OK.

    Совет. Если вы решили загружать WSDL-код из другого проекта (или ссылаться на него), то вам нужно изменить свойства проекта службы ITSOLGI, чтобы он ссылался на другой проект. (рис 10.3) Создание нового Java-пакета
  • Импортирование необходимых WSDL-файлов.

    В проводнике по пакетам ( Package explorer ) щелкните правой кнопкой мыши по элементу Import (Импорт) > выберите zip-файл > найдите WSDL-файлы, упакованные архитектором решения (или используйте .\SG24-6636\RSA\ClaimsInvestigation WSDL files.wsdl), и выберите WSDL-код, применяемый службой Assessor Automation (см. табл. 10.1). Нажмите Finish (Готово).

  • Важный совет. WSDL-файлы должны импортироваться прямо в папку пакета, а не в подпапку. По умолчанию дерево папок копируется из Rational Software Architect и WSDL-файлы находятся в поддиректории. Это не создает никаких проблем при формировании BPEL-процесса, если имена папок представляют собой допустимые имена пакетов. Однако при размещении процесса WSDL-файлы не копируются из поддиректории в размещаемый EAR-файл. Хорошей практикой является перенос WSDL-файлов прямо в папку пакета с самого начала. Если же ваши WSDL-файлы оказались в неверной директории, как их переместить?
  • Если вы обнаружили ошибку до того, как начали разрабатывать и компоновать процесс, просто перенесите WSDL-файлы, используя навигатор.
  • Если вы начали разрабатывать и компоновать процесс или даже перешли к размещению прежде чем проблема обнаружилась, то при переносе WSDL многие ссылки будут переработаны, но все же не на 100 %. После переработки, используя кнопку поиска, найдите все пути к предыдущему местоположению WSDL и исправьте ссылки. Проще всего открыть затронутые этой ошибкой файлы в простом текстовом редакторе. Один из файлов, который перерабатываться не будет, – это файл <имя_процесса>.bpelex. В этом файле нужно будет изменить по одной ссылке на каждую связь с партнером. При вводе нового пути к WSDL-файлам убедитесь, что путь начинается с прямого слеша (/). Отсутствие слеша приведет к ошибке компоновки процесса.
  • 10.2.2 Импортирование BPEL из WebSphere Business Integration Modeler

    Прежде чем описывать методику импортирования BPEL из WebSphere Business Integration Modeler в WebSphere Studio Application Development Integration Edition, мы должны сказать, что первый вопрос, который должен решить ИТ-специалист, будет следующий:

  • нужно ли продолжить уточнение BPEL-процесса CIM в Modeler, а затем переносить его в WebSphere Studio Application Development Integration Edition
  • или нужно взять модель, полученную от аналитика, как есть, когда она будет готова для экспорта?
  • ИТ-специалист может редактировать бизнес-процесс Request External Reports, используя любой инструмент.

    Когда нужно импортировать BPEL в IDE

    В Modeler бизнес-процесс отображается с использованием Business Process Modeling Notation (BPMN)См. работу Stephen White, "Introduction to BPMN", по адресу http://www.bpmn.org/Documents/Introduction%20to%20BPMN.pdf .

    В WebSphere Studio Application Development Integration Edition существует три альтернативных способа редактирования бизнес-процесса, соответствующих разным стилям моделирования бизнес-процессов. Стиль Modeler выбирается как наиболее подходящий для бизнес-аналитика и единый для разных инструментов моделирования. Поскольку этот стиль не привязан к какой-то конкретной технологии работы с процессами, так проще сравнивать бизнес-процессы, смоделированные с использованием разных инструментов. Кроме того, проще понять логику всего потока. В случае сложных потоков, возможно, стоит продолжить уточнение логики потока в Modeler, прежде чем переносить ее в WebSphere Studio Application Development Integration Edition.

    Стили редактирования WebSphere Studio Application Development Integration Edition разрабатывались для того, чтобы максимально упростить связывание потока с необходимой технологией. В частности, два из этих стилей, BPEL-процесс на основе потоков и BPEL-процесс на основе последовательностей, оптимизированы для редактирования BPEL-процессов. Выбор зависит от вашего личного вкуса. В какой то момент будет необходимо отредактировать BPEL-поток с использованием WebSphere Studio Application Development Integration Edition, чтобы выполнить тонкую настройку выполнения потока.

    Существуют следующие вопросы:

  • В какой момент ИТ-специалист должен перейти от применения Modeler к использованию WebSphere Studio Application Development Integration Edition?
  • Когда следует, принимая во внимания возможности инструментов, экспортировать BPEL из Modeler?
  • Насколько детальным должно быть редактирование BPEL в Modeler?
  • В сценарии с работой с внешними оценщиками сделать выбор достаточно просто. Выбор основывается на нашем решении о том, что за моделирование интерфейсов и данных отвечает архитектор решения. Бизнес-аналитик определяет только модель функционирования бизнес-процесса, но не интерфейсы. Архитектор решения использует для моделирования интерфейсов Rational Software Architect. Архитектор решил выбрать Rational Software Architect, а не WebSphere Business Integration Modeler, поскольку существует требование включать интерфейсы прямо в UML-модель архитектуры. Специалист по процессам с самого начала должен работать в WebSphere Studio Application Development Integration Edition, поскольку ему нужно объединить BPEL-процесс с WSDL-интерфейсами. В Modeler нет возможности импортировать WSDL-определения интерфейсов.

    В других проектах разработки, управляемой моделями, выбор может быть другим. Моделирование данных может осуществляться в WebSphere Business Integration Modeler или в каком-нибудь специальном средстве моделирования данных. Как уже обсуждалось в разделе 3.2.8, "Цепочки инструментов", прежде чем серьезно приступать к работе над проектом, важно определить, что за какие задачи отвечает, какие инструменты используются и как интегрируются артефакты, полученные в разных инструментах.

    В нашем случае выбор ограничен, поскольку WebSphere Business Integration Modeler 5.1.1 не поддерживает импортирование WSDL. Однако в проекте, в котором WSDL-определения создаются в Modeler вместе с BPEL, у ИТ-специалиста есть гораздо больший простор для осуществления технической детализации модели процесса в WebSphere Business Integration Modeler до ее экспортирования в WebSphere Studio Application Development Integration Edition.

    В нашем сценарии лучшим вариантом было экспортировать простое определение BPEL-процесса из WebSphere Business Integration Modeler и дать задание ИТ-специалистам использовать WSDL-определения из Rational Software Architect для завершения определения процесса и его реализации, как это описывается в оставшейся части данной главы.

    Экспортирование BPEL из Modeler

    Модель бизнес-процесса, созданную бизнес-аналитиком, нужно сохранить в CIM-контракте между ролями проекта, относящимися к бизнесу и к ИТ.

    Затем ИТ-специалист берет на себя ответственность за дальнейшую детализацию модели.

    Проверка правильности BPEL в WBI Modeler

    Если переключить WebSphere Business Integration Modeler в режим BPEL, будут отображаться все ошибки и предупреждения, связанные с BPEL. Все эти ошибки необходимо исправить, прежде чем BPEL можно будет экспортировать. Предупреждения проблемой не являются. В подразделе "Проверка модели процесса" раздела 4.5.3 объясняется, как следует исправлять ошибки BPEL в процессе RequestExternalReport.

    Когда ошибок в модели процесса не останется, ее можно экспортировать, а ее определения импортировать в WebSphere Studio Application Development Integration Edition. Существует несколько вариантов каталога для импорта:

  • каталог данных;
  • каталог процесса;
  • каталог ресурсов;
  • каталог организации или его содержимое;
  • какой-то один процесс, бизнес-элемент, ресурс или подразделение организации.
  • Если экспортируется весь процесс, то вместе с ним будут экспортированы все бизнес-элементы, используемые процессом и его подпроцессами, а также все индивидуальные ресурсы и организационные подразделения, отвечающие за выполнение процесса. Бизнес-элементы, определения ресурсов, определения организации и местоположения экспортируются в формат файлов XML-схемы (XSD).

    В разделе "Экспортирование процесса", описывается экспорт процесса RequestClaimsAssessor из WebSphere Business Integration Modeler и все опции, которые нужно при этом включать.

    Импортирование BPEL в IDE

    Чтобы импортировать BPEL в IDE, выполните следующие шаги:

  • Щелкните правой кнопкой мыши по проекту службы ITSOLGI, выберите пункт меню Import (Импорт). Откроется мастер импорта. Выберите пункт File system (Файловая система), нажмите Next (Далее).
  • Укажите папку-источник, куда вы экспортировали BPEL из Modeler. При работе с материалами, поставляемыми с этим курсом, импортируйте файлы из директо- рии .\SG24-6636\Modeler, как показано на рис 10.4. Убедитесь, что в поле Into folder (В папку) указан проект служб, созданный в разделе 10.2.1, "Импортирова- ние WSDL из Rational Software Architect". Бизнес-процесс и бизнес-элементы будут импортированы в рабочее пространство. Убедитесь, что для импорта был выбран корень информационной модели, а также файлы BPEL и WSDL (рис 10.4).
  • (рис 10.4) Импортированные файлы процесса

    10.3 Интеграция процесса и его служб

    Откройте редактор бизнес-процессов, сделав двойной щелчок по файлу Service Projects (Проекты служб) $$\to$$ (ITSOLGI) $$\to$$ Claim.TOBE.RequestExternalReports $$\to$$ RequestExternalReports.bpel в представлении Services (Службы).

    Возможно появление ошибок. Пока не обращайте на них внимания. Мы исправим эти ошибки позже.

    В центре окна редактора можно видеть бизнес-процесс. Этот процесс унаследовал определение процесса из Modeler. Процесс в Modeler ориентирован в направлении справа налево, но в WebSphere Studio Application Development Integration Edition он ориентирован сверху вниз. В правой части редактора процесса (рис 10.5) можно видеть ссылки на партнеров, которые являются интерфейсами Web-служб, вызываемых операциями процесса. Эти службы в данный момент являются абстрактными. Modeler генерирует WSDL-файлы, но эти определения служб не имеют реализации. В нашем случае мы собираемся полностью заменить определения, поскольку они были созданы архитектором решения в Rational Software Architect.

    (рис 10.5) Редактор BPEL

    В левой части окна редактора находится палитра для редактирования процесса. Добавляйте новые операции в процесс, выбирая значок в палитре и перетаскивая его в редактор. Информация о каждом элементе процесса отображается в разделе Detail (Подробно) в нижней части окна редактора. Содержимое этой области меняется в зависимости от того, какой элемент процесса был выбран.

    На рис. 10.6 показаны рядом друг с другом редактор процесса из Modeler (слева) и редактор процесса из WebSphere Studio Application Development Integration Edition (справа).

    (рис 10.6) Импортированный процесс

    Элементы Modeler и определения WSDL и BPEL соответствуют друг другу следующим образом:

  • Локальные задачи (Local tasks) Modeler становятся вызывающими операциями (Invoke activities).
  • Если локальной задаче назначен кадровый ресурс, то в WebSphere Studio Application Development Integration Edition эта задача превращается в операцию персонала (Staff activity). Выполняемая вручную задача ManualChooseAssesor превращается в операцию персонала.
  • Разделения (Forks) и слияния (Merges) превращаются в операции назначения (Assign activity) и операции очистки (Empty activity).
  • Операции назначения вставляются между всеми операциями. Операции назначения связывают выходную структуру данных предыдущей операции с входными данными следующей операции.
  • 10.4 Интеграция процесса и его служб

    В этом разделе мы возьмем поток BPEL, импортированный из WebSphere Business Integration Modeler, и преобразуем его в исполняемый поток BPEL. Нужно написать несколько фрагментов Java-кода, но в основном процедура будет связана с использованием мастеров конфигурирования или графического редактора процессов. Преобразование BPEL-процесса в исполняемую форму включает в себя девять этапов:

  • В разделе 10.4.1, "Исправление списка ссылок на партнеров в модели", мы заменим абстрактные ссылки на партнеров в модели бизнес-процесса, созданной бизнес-аналитиком, ссылками на партнеров, которые вызывают реальные службы, указанные архитектором решения.
  • В разделе 10.4.2, "Интеграция ссылок на партнеров с процессом", новые ссылки на партнеров связываются с соответствующими операциями потока и в поток добавляются дополнительные операции, расширяющие BPEL-модель для приведения ее в соответствие с архитектурой решения.
  • В разделе 10.4.3, "Конфигурирование ссылок на партнеров", мы проверяем, чтобы каждая ссылка была должным образом сконфигурирована в соответствии со своей ролью в операции (вызываемой или вызывающей) и чтобы в ссылке был правильно указан тип порта (или интерфейс).
  • В разделе 10.4.4, "Конфигурирование операций", мы проверяем, чтобы каждой операции были присвоены глобальные входные и выходные переменные и чтобы действия, необходимые для каждой операции, были выбраны правильно.
  • В разделе 10.4.5, "Конфигурирование типов входных и выходных переменных", мы проверяем, чтобы каждая входная и выходная переменная имела верный тип, указанный в соответствующем входном или выходном сообщении для данной операции.
  • В разделе 10.4.6, "Связывание данных между входными и выходными переменными", мы связываем входящие и исходящие данные для каждой ссылки на партнера, внося необходимые корректировки, чтобы данные соответствовали требованиям, которые предъявляют службы, связанные со ссылками.
  • В разделе 10.4.7, "Конфигурирование потока для ожидания ответа от оценщиков", мы добавляем в поток корреляционный набор, позволяющий ему ожидать получения асинхронных сообщений от оценщиков, и конфигурируем три операции, которые должны ожидать ответа оценщика, чтобы они использовали данный корреляционный набор.
  • В разделе 10.5.1, "Проверка результатов, полученных от RequestAvailability", мы проверяем результаты запроса готовности оценщиков, используя Java-фрагмент, а также конфигурируем две дополнительные ссылки для вызова ручной или автоматической операции выбора оценщика, которому будет предложено выполнить оценку.
  • В разделе 10.5.2, "Создание операции While для проверки согласования оценки", добавляется операция while, которая проверяет, согласен ли выбранный оценщик произвести оценку.
  • 10.4.1 Исправление списка ссылок на партнеров в модели

    Если вы посчитаете в правой части окна редактора ссылки на партнеров, которые были сгенерированы по модели RequestExternalReports, импортированной из WebSphere Business Integration Modeler, и сравните полученный результат с количеством WSDL-интерфейсов, необходимых для кооперации RequestExternalReports и импортированных из Rational Software Architect, вы увидите несовпадение. Это несовпадение обусловлено тем, что в модели бизнес-процесса не детализованы дополнительные взаимодействия, которые необходимы для реализации асинхронных потоков.

    В табл. 10.1 приводятся WSDL-файлы для интерфейсов, в которых процесс RequestExternalReports играет роль либо клиента, либо сервера, и соответствующие ссылки на партнеров. Элементы, выделенные синим цветом, присутствуют в BPEL-модели, импортированной из WebSphere Business Integration Modeler, а элементы, выделенные красным цветом, – это отсутствующие элементы, которые нужно добавить наряду со способами маршрутизации запросов от ссылок на партнеров обратно – в поток процесса. Черные строки – это взаимодействия, не использующие компонент Automated Assessor.

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

  • Удалите ссылки на партнеров, импортированные с BPEL-процессом из модели Automated Assessors: откройте файл requestExternalReports.bpel в окне редактора, перейдите в представление Outline (Общий обзор), выделите все ссылки на партнеров и удалите их (рис 10.7).(рис 10.7) Удаление сразу всех ссылок на партнеров
  • Создайте новые ссылки на партнеров по WSDL-файлам, предоставленным архитектором: выбирайте по очереди все WSDL-файлы и перетаскивайте на канву редактора с открытым файлом RequestExternalReports.bpel. WebSphere Studio Application Development Integration Edition предложит вам подтвердить выбранные порты служб и типы портов (рис 10.8).(рис 10.8) Подтверждение выбора порта и типа порта
  • Добавляйте ссылки на партнеров в том порядке, в котором они находятся в потоке, и канва редактора будет выглядеть так, как показано на рис 10.9.

    (рис 10.9) Ссылки на партнеров, основанные на интерфейсах из Rational Software Architect

    10.4.2 Интеграция ссылок на партнеров с процессом

    Итак, мы импортировали процесс RequestExternalReports из WebSphere Business Integration Modeler в виде BPEL-процесса и определения интерфейсов из Rational Software Architect в виде ссылок на партнеров. Следующая задача – связать ссылки на партнеров с процессом, добавив в поток новые операции, соответствующие добавленным ссылкам.

    Связывание операций в потоке со ссылками на партнеров

  • Первая задача – связать каждую ссылку с соответствующей операцией.

    Выберите операцию в потоке и выберите действие со ссылкой из палитры, появляющейся около указателя мыши, как показано на рис 10.10. В качестве альтернативы щелкните правой кнопкой мыши по операции и выберите пункт меню Set Partner Link (Задать ссылку на партнера).

    (рис 10.10) Создание соединения между операцией и ссылкой на партнера

    Протяните линию к соответствующей ссылке на партнера. Используйте табл. 10.1, в которой указаны соответствия для установления этих связей.

    Альтернативным способом создания соединения является выделить операцию, а затем открыть закладку Implementation (Реализация) в редакторе свойств, расположенном под канвой графического редактора. Далее выберите нужную ссылку на партнера, как показано на рис 10.11. Этот метод можно использовать, если значки ссылки на партнера и операции находятся слишком далеко друг от друга и их нельзя соединить в одном окне.

    (рис 10.11) Указание типа ссылки на партнера в редакторе свойств
  • Переименуйте ссылки на партнеров в соответствии с записями в табл. 10.1 (это нужно только для ясности, на функционирование процесса это не влияет). После этого останется две ссылки, не связанные ни с одной операцией (AssessorAvailabilityLstPartner и AllocateAssessorResponsePartner). Третья новая ссылка, AssessorReportPartner, связана с операцией AssessorSendReport, имеющейся в потоке, но это не тот тип операции. Мы исправим эти проблемы далее.
  • Ссылки на партнеров и роли в процессе Assessor Automation
    Поток Компонент (владелец интерфейса) Assessor Automation: операция и роль Имя ссылки на партнера Имя WSDL-файла
    1 Assessor Automation RequestExternalReports Receive Server RequestExternalReportsProcess ExternalClaimsAssessorInterface.wsdl
    2 Assessor Management IdentifyAssessorsClient AssessorManagement AssessorManagement(2).wsdl
    2a Business Rules Engine ResponseTimeBasedOnPolicy Client RequestResponseTimePT RequestResponseTimePT(2a) wsdl
    3 Proxy Assessor System RequestAvailability Client AssessorAvailability AssessorAvailability(3).wsdl
    4 Assessor Proxy Нет Нет Availability(4).wsdl
    4a Assessor System Нет Нет AssessorAvailabilityPT(4a).wsdl
    3aСтроки, выделенные курсивом, должны быть добавлены в процесс Assessor Automation. Assessor Automation AssessorAvailability Receive Server AssessorAvailability List AssessorAvailablityList(3a).wsdl
    5 Business Rules Engine SelectAssessor Client SelectAssessors PreferredAssessor(5).wsdl
    6 Proxy Assessor System RequestAssessment Client AllocateAssessmentRequest AllocateAssessmentReport(6).wsdl
    7 Assessor Нет Нет DeliverAssessment(7).wsdl
    7a Proxy Assessor System Нет Нет DeliverAssessmentResponse(7a).wsdl
    6a Assessor Automation AllocateAssessorResponse Server AllocateAssessorResponse AllocateAssessorReponse(6a). wsdl
    8 Proxy Assessor System Нет Нет AssessorReport(8).wsdl
    9 Assessor Automation AssessorSend-Report Server AssessorReport AssesorReport(9)
    10 Claim System StoreReport Client StoreReportPartner StoreAssessmentReport(10).wsdl

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

    Сначала внесите исправления в операцию AssessorSendReport. Сейчас это вызывающая операция (invoke activity). Мы хотим сделать ее принимающей операцией (receive activity), чтобы она получала отчет об оценке претензии.

  • Щелкните правой кнопкой мыши по операции AssessorSendReport, выберите пункт меню Change Type (Изменить тип) $$\to$$ Receive (Прием).

    Далее добавьте две новые принимающие операции, названные так, как показано красным цветом в графе "Assessor Automation: операция и роль" табл. 10.1 - AssessorAvailabilityReceive и AllocateAssessorResponse.

  • Выберите принимающую операцию из палитры (рис 10.12) и перетащите ее в процесс. Введите в поле имени AssessorAvailabilityReceive.(рис 10.12) Выбор принимающей операции в палитре
  • Выделите коннектор, находящийся между вызывающей операцией RequestAvailability и операцией очистки Any assessor?, и удалите его (рис 10.13).(рис 10.13) Выделение коннектора
  • Соедините операции RequestAvailability и AssessorAvailabilityReceive: щелкните правой кнопкой мыши по RequestAvailability и выберите пункт меню Set Link between Flow activities (Задать связь между операциями потока).
  • Соедините операции AvailabilityReceive и Any assessor?. Чтобы настроить расположение содержимого потока, щелкните правой кнопкой мыши по области потока и выберите пункт меню Align Flow Contents Automatically (Выровнять содержимое потока автоматически).
  • Соедините операцию со ссылкой на партнера . Обратите внимание, что стрелка между ссылкой на партнера и операцией теперь имеет черный цвет и указывает на операцию, что обозначает направление сообщения.(рис 10.14) Вставка новой операции AssessorAvailabilityReceive в поток
  • Повторите эти действия для вставки в поток операции AllocateAssessorReponse и соединения ее со ссылкой. Результат показан на рис 10.15.(рис 10.15) Вставка новой операции AllocateAssessorReponse в поток
  • На этом этапе стоит сохранить рабочее пространство в zip-файле. Выберите проект службы ITSOLGI в навигаторе служб, щелкните по нему правой кнопкой мыши, выберите пункт меню Export (Экспорт) $$\to$$ Project Interchange $$\to$$ выберите ITSOLGI и введите имя файла, в который будет производиться экспорт. Нажмите Finish (Готово).
  • 10.4.3 Конфигурирование ссылок на партнеров

    Следующая задача – правильно назначить процессу и партнерам роли, относящиеся к ссылке на партнера, обеспечить правильный выбор типов портов и действий и выделение входных и выходных переменных для передачи входящих и исходящих сообщений для службы. На рис 10.16 показаны взаимосвязи между BPEL-процессом, интерфейсом Web-службы и EJB-реализацией.

    (рис 10.16) WSDL описывает интерфейс EJB-компонента, вызываемого из BPEL-процесса

    Роли

    При назначении процессу нужного количества ролей и ссылок на партнеров представляйте себе взаимосвязь между процессом и партнером как сеанс связи. Если в таком сеансе есть только один участник, то нужно выделять одну роль. Это относится и к взаимосвязи запрос/ответ, которая соответствует SOAP-сообщению типа запрос/ответ. С другой стороны, если существуют два участника сеанса связи, подобно обмену вопросами и ответами по голосовой почте, то используются два односторонних SOAP-сообщения, обмен которыми происходит асинхронно. Также возможна односторонняя связь, которая похожа на ситуацию, когда на голосовой почте оставляется сообщение, а ответ не ожидается.

    В нашем решении для работы с внешними оценщиками есть несколько связей типа запрос/ответ и несколько односторонних связей. У нас нет сеансов связи, в которых участвуют две роли. Это может показаться удивительным, поскольку у нас есть три асинхронных сообщения, но в каждом случае новый сеанс начинается с предыдущего запроса/ответа. Продолжая аналогию с телефоном, это похоже на запрос информации, которую кто-то собирает, а потом, позже, оставляет для вас сообщение.

    Когда мы решили, что для каждого типа ссылки на партнера выделяется одна роль, следующий вопрос, будет ли роль принадлежать процессу или партнеру. Определить принадлежность данной роли можно простым вопросом: кто (что) осуществляет обслуживание? Если обслуживание осуществляет процесс, то роль относится к процессу. Если обслуживание выполняет партнер, то роль принадлежит партнеру.

    Конфигурирование ссылок

    Легче всего сделать это при помощи представления Outline (Общий обзор). Нажимайте по очереди на ссылки на партнеров в верхней части представления.

  • Для каждой ссылки, соответствующей ситуации, когда процесс играет роль сервера, убедитесь, что в поле Partners Role Name (Имя роли партнера) указано -- None -- (Нет) на закладке Implementation (Реализация) редактора свойств (рис 10.17). Существует четыре ссылки, которым нужно назначить имя роли процесса (Process Role Name).(рис 10.17) Конфигурирование процесса RequestExternalReports
  • Проверьте тип ссылки, имя роли и тип порта для других ссылок, выделяя их в представлении Outline.
  • 10.4.4 Конфигурирование операций

    Раскройте категорию Flow (Поток) в представлении Outline (Общий обзор) и выделяйте по очереди каждую операцию.

    Для каждой операции на закладке Implementation (Реализация) проверьте правильность типа порта, операции, выбранные входные и выходные переменные и создайте все пропущенные переменные.

  • Для принимающей операции RequestExternalReports должен быть установлен флажок Create a new Process instance if one does not already exist (Создавать новый экземпляр процесса, если он еще не существует). Это первая операция процесса, и она создает новый экземпляр процесса каждый раз, когда обрабаты- вается новая претензия.
  • В только что созданной нами принимающей операции AllocateAssessorResponse нам нужно создать новую переменную-запрос с именем AssessorConfirmationResponse. В данном случае флажок Create a new Process (Создавать новый экземпляр) остается неустановленным, поскольку процесс Automated Assessor был блокирован в ожидании ответа. Он продолжает работу при получении ответа (рис 10.18).
  • (рис 10.18) Создание переменной Request в операции AllocateAssessorResponse

    Повторите эти шаги для операции AssessorAvailabilityReceive.

    Добавьте выходную переменную OutputCriteraVariable в операцию RequestExternalReports Reply.

    Конфигурация операций должна соответствовать той, которая приведена в табл. 10.2. Есть несколько пропущенных переменных, поэтому изучите таблицу внимательно.

    Настройка ссылок на партнеров, типов портов, операций и имен переменных
    Flow Имя операции в Assessor Automation Название типа порта Переменная запроса
    Имя ссылки на партнера Имена действий Переменные ответа
    1a RequestExternalReportsReceive RequestExternalReportProcess InputCriteriaVariable
    RequestExternalReportsProcess RequestExternalReport OutputCriteriaVariable
    2 IdentifyAssessors AssessorManagement IdentifyAssessorsInputCriteria Variable
    AssessorManagement requestListAssessors IdentifyAssessorsOutputCriteriaVariable
    2Данная ссылка на партнера делится на отдельные операции отправки и получения, расположенные в начале и в конце потока. ResponseTimePolicy RequestResponseTime PT ResponseTimeBasedOnPolicy InputCriterionVariable
    RequestResponseTime PT requestResponseTime ResponseTimeBasedOnPolicy OutputCriterionVariable
    3 RequestAvailability AssessorAvailability RequestAvailabilityInputCriteriaVariable
    AssessorAvailablity requestAssessor Availability RequestAvailabilityOutputCriteriaVariable
    3Данная ссылка на партнера делится на отдельные операции отправки и получения, расположенные в начале и в конце потока. AssessorAvailabilityReceive AssessorAvailabilityList
    AssessorAvailabilityLis availableAssessorsList
    5 SelectAssessors PreferredAssessor SelectAssessorInputCriteria Variable
    PreferredAssessor selectAssessor SelectAssessorOutputCriteria Variable
    6 RequestAssessment AllocateAssessmentRequest RequestAssessmentInputCriteriaVariable
    AllocateAssessment Request actionAssessor RequestAssessmentOutputCriteriaVariable
    6a AllocateAssessorResponse AllocateAssessorResponse AssessorConfirmationResponse
    AllocateAssessorResponse assessorConfirmationRequest
    9 AssessorSendReport AssessorReport AssessorSendReportOutput CriteriaVariable
    AssessorReport receiveAssessorReportRequest
    10 StoreReport StoreAssessorReport StoreReportInputCriteriaVariable
    StoreAssessorReport storeAssessorReportURL StoreReportOutputCriteriaVariable

    10.4.5 Конфигурирование типов входных и выходных переменных

    Следующий этап – это связывание определений сообщений с переменными запроса и ответа, относящимися к операциям. В табл. 10.3 перечислены сообщения, которые нужно связать с переменными. Чтобы связать сообщения с переменными, выделяйте переменные в представлении Outline (Общий обзор) и переходите на закладку Message (Сообщение) редактора свойств. Находите нужный WSDL-файл и выбирайте нужное сообщение, как показано на рис 10.19.

    (рис 10.19) Связывание сообщений с переменными
    Переменные и связанные с ними сообщения
    Поток WSDL-файл Переменные запроса и ответа Сообщение
    1 ExternalClaimAsse ssors.wsdl InputCriteriaVariable RequestExternalReportsRequest
    OutputCriteriaVariable requestAssessorResponseMessage
    2 AssessorManagement(2).wsdl IdentifyAssessorsInputCriteriaVariable requestListAssessorsRequest
    IdentifyAssessorsOutputCriteriaVariable requestListAssessorsResponse
    2a RequestResponseTimePT(2a).wsdl ResponseTimeBasedOnPolicy InputCriterionVariable requestResponseTimeRequest
    ResponseTimeBasedOnPolicy OutputCriterionVariable requestResponseTimeResponse
    3 AssessorAvailabilit y(3).wsdl RequestAvailabilityInputCriteriaVariable requestAssessorAvailabilityRequest
    RequestAvailabilityOutput CriteriaVariable requestAssessorAvailabilityResponse
    3a AssessorAvailablityList(3a).wsdl ListOfAvailableAssessors AvailableAssessorsList
    5 PreferredAssessor (5).wsdl SelectAssessorInputCriteriaVariable selectAssessorRequest
    SelectAssessorOutputCriteriaVariable selectAssessorResponse
    6 AllocateAssessmentReport(6).wsdl RequestAssessmentInputCriteriaVariable actionAssessorRequest
    RequestAssessmentOutputCriteriaVariable actionAssessorResponse
    6a AllocateAssessorReponse(6a).wsdl AssessorConfirmationResponse AssessorConfirmationRequest
    9 AssesorReport(9) AssessorSendReportOutputCriteriaVariable receiveAssessorReportRequest
    10 StoreAssessmentReport(10).wsdl StoreReportInputCriteriaVariable storeAssessorReportURLRequest
    StoreReportOutputCriteriaVariable storeAssessorReportURLResponse

    10.4.6 Связывание данных между входными и выходными переменными

    Все входные и выходные переменные теперь имеют типы, соответствующие данным во входящих и исходящих сообщениях. Следующий этап – это связать данные в переменных, полученных в одной операции, с входными переменными, необходимыми для связанной с операцией ссылки на партнера, а затем связать выходные результаты ссылки на партнера со входной переменной следующей операции. Это демонстрируется на рис 10.20, где показан управляющий поток и поток данных, а также метаданные, используемые для связывания полей в одном сообщении с полями в следующем сообщении.

    (рис 10.20) Связывание данных между сообщениями с помощью связующей операции

    Связующей операцией может быть:

  • фрагмент Java;
  • операция трансформации;
  • операция назначения (Assign activity).
  • Каждый вариант имеет свои преимущества и свои недостатки. Операция назначения – это самый простой способ установления прямых связей между полями одного сообщения и аналогичными полями в другой структуре. Трансформируются только пути к полям. Операция трансформации не требует написания кода и может осуществлять более сложные преобразования. Такая операция включает в себя обрабатывающие строки, которые могут оказаться сложнее, чем код. Фрагмент Java может представлять собой простой кусок кода, делающий не больше, чем операция назначения, или же выполняющий сложные преобразования.

    Для потока BPEL, экспортированного из Modeler, были сгенерированны несколько базовых операций назначения. Мы собираемся заменить эти операции и добавить несколько других связей, чтобы закончить ту часть потока, которая связана с трансформацией данных. Мы в определенной степени ограничены в использовании операций назначения, поскольку в ряде сообщений WSDL-определения требуют более сложной обработки, и нам нужно применять либо Java-фрагменты, либо операции трансформации. Операция назначения в Process Choreographer версии 6 стала гораздо более гибкой, и ее, по причине ее простоты и высокой производительности, можно использовать во многих связях, которые в версии 5 осуществлялись с применением трансформаций.

    У нас используется несколько видов связей, и мы рассмотрим разнообразные методы их установления в следующих разделах:

  • "Связывание операций Mapping IdentifyAssessors и ResponseTime". Используются две отдельных операции трансформации.
  • "Связывание операции RequestAvailability". Показано, как выполнять агрегацию при помощи операции трансформации.
  • "Связывание операции SelectAssessors". Используется еще одна простая операция трансформации.
  • "Связывание операции RequestAvailability". Предлагаются фрагменты Java, а также используется операция трансформации для агрегирования данных, получаемых с трех входов.
  • "Связывание операции StoreReport". Еще одна простая операция трансформации.
  • "RequestExternalReport Reply". Еще одна простая операция трансформации.
  • Связывание операций Mapping IdentifyAssessors и ResponseTime

    Первые две необходимые нам трансформации находятся в месте перехода от сообщения requestAssessorMessage к сообщению RequestListAssessorsMessag и к сообщению requestResponseTimeRequest. Мы используем две операции трансформации.

  • Удалите операцию Fork и две операции назначения, находящиеся между операцией RequestExternalReports Receive и операциями IdentifyAssessors и ResponseTimeBasedOnPolicy.
  • Создайте новую трансформирующую службу. Нажмите на соответствующий значок на панели действий или выберите пункт меню ).(рис 10.21) Создание трансформирующей службы
  • Нажмите Next (Далее), введите имя IdentifyAssessorsTransformer, нажмите Next (Далее), введите в поле Operation Name (Имя действия) toIdentifyAssessors, нажмите Add (Добавить) $$\to$$ Browse (Обзор), найдите файл ExternalClaimsAssessor.wsd, а в нем – входящее сообщение RequestExternalReports_RequestAssessorsMessage, нажмите Browse (Обзор), найдите исходящее сообщение RequestListAssessorsRequest:requestListAssessors.
  • Раскройте сообщения в редакторе трансформации и перетащите три поля входящего сообщения в соответствующие три поля исходящего сообщения. Результат показан на рис 10.22.(рис 10.22) Связывание полей во входящем сообщении операции IdentifyAssessors
  • Повторите эти шаги для операции ResponseTimeBasedOnPolicy. Назовите службу ResponseTimeBasedOnPolicyTransformer.
  • Перетащите два WSDL-файла трансформирующих служб в процесс RequestExternalReports.bpel и переименуйте операции трансформации в ToIdentifyAssessors and ToResponseTimeBasedOnPolicy (в соответствии с названиями действий – просто для простоты документирования). Теперь BPEL-процесс будет выглядеть следующим образом (рис 10.23).(рис 10.23) Вставка трансформирующих служб в поток RequestExternalReports
  • Вы можете просматривать эти новые ссылки на партнеров точно так же, как любые другие. Откройте закладку Implementation (Реализация) операции ToIdentifyAssessors и нажмите кнопку Edit (Редактировать) для просмотра и изменения связи полей. Вы также можете выбирать новые действия и новые трансформирующие службы для данной операции. В проводнике служб (Service Explorer) найдите файл Identify AssessorsTransformer.wsdl и откройте его с помощью стандартного WSDL-редактора.

    Связывание операции RequestAvailability

    Эта связь обеспечивает агрегацию результатов, полученных от операций IdentifyAssessors и ResponseTimeBasedOnPolicy и некоторых исходных данных из сообщения RequestExternalReports в новое сообщение. Новое сообщение посылается на партнерскую ссылку RequestAvailability с маршрутизацией через корпоративную сервисную шину внешним оценщикам, которые, возможно, займутся обработкой претензии.

    Очевидным способом решения данной задачи является использование еще одной операции трансформации, которая выполняет агрегацию. Можно повторить процедуру из предыдущего раздела для создания новой трансформирующей службы Transf ormerRequestAvailability. На этот раз к службе добавляются три входящих сообщения, как показано на рис 10.26.

    Ограничение. Однако если начать с запуска мастера трансформаций, а затем использовать ту же процедуру, что и для простых трансформаций, вы успеха не добьетесь. Решением является генерация трансформаций с помощью несколько иной процедуры, которая требует больше ручного ввода, и, следовательно, с ней нужно быть особенно осторожными. Если эту процедуру применять правильно, она вполне надежна. Именно эту процедуру мы описываем далее, и ее вам следует использовать, если трансформация задействует несколько входящих сообщений.
  • Убедитесь, что операции IdentifyAssessors, ResponseTimePolicy и RequestAvailability полностью соединены, как показано на рис 10.24.(рис 10.24) Добавление операции трансформации ToRequestAvailability
  • Перетащите в поток новую операцию трансформации, присвоив ей имя ToRequestAvailability и подключив ее непосредственно перед операцией RequestAvailability, как показано в правой части рис 10.24.
  • Откройте операцию ToRequestAvailability и задайте для ее переменной Response значение (рис 10.25) Переменные, заданные в операции трансформации ToRequestAvailability
  • Нажмите кнопку Aggregate (Агрегация) и выберите входные переменные, которые должны быть агрегированы:
  • InputCriteriaVariable,
  • IdentifyAssessorsOutputCriteriaVariable,
  • ResponseTimePolicyOutputCriterionVariable.
  • На следующей панели введите имя файла AggregateRequestAvailability.
  • Приведите в порядок содержимое потока, и вы увидите, что был вставлен фрагмент Java (Java Snippet). Переименуйте фрагмент в AggregateRequestAvailability.
  • Вернувшись к новой операции трансформации, нажмите кнопку New... (Новый), чтобы создать новый файл трансформации. В диалоговом окне Create a new transform (Создание новой трансформации) переименуйте следующие элементы:
  • имя партнерской ссылки и файла в TransformRequestAvailability;
  • целевое пространство имен в http://Claim.TOBE.RequestExternalReports (тот же пакет, к которому относится процесс);
  • тип порта в TransformRequestAvailabilityPT;
  • имя действия (Operation name) в ToTransformRequestAvailability.
  • Нажмите OK.
  • Теперь соедините трансформацию так, как показано на рис 10.26.(рис 10.26) Агрегация данных для вызова операции RequestAvailabilityСовет. Имена очень важны! Если вы переформатируете поток, гораздо проще будет восстановить операцию, утратившую свою позицию в потоке, при использовании хорошо продуманной системы имен.

    Мы решили назвать WSDL-файлы трансформирующих и агрегирующих служб так, чтобы они при сортировке в Service Navigator расположились по категориям "трансформация" и "агрегация". Альтернативным подходом является сохранение всех WSDL-файлов в пакете служб, присвоив им суффиксы Transformer или Aggregation, чтобы они сортировались в порядке сходства с исходной службой. Важно с самого начала продумать схему имен, а затем правильно применять ее. Единство схемы имен уменьшает вероятность трудноустранимых ошибок, вызванных путаницей в именах.

  • Связующая операция должна ждать до тех пор, пока все входящие данные не станут доступны. На закладке Join Behavior (Функционирование объединения) редактора свойств только что созданной операции ToRequestAvailability укажите в поле ).
  • (рис 10.27) Объединение результатов операций IdentifyAssessors и ResponseTimePolicy

    Связывание операции SelectAssessors

    Мы используем для этой связи еще одну трансформирующую службу. Назовем ее SelectAssessorTransformer. В качестве имени действия (Operation Name) укажите toSelectAssessor. В диалоговом окне создания связей трансформирующей службы укажите входное сообщение – listAvailableAssessors и выходное сообщение – selectAssessorRequest. Получившиеся связи показаны на рис 10.28.

    (рис 10.28) Связывание запроса операции SelectAssessor

    Перетащите службу в редактор процесса RequestExternalAssessors, назовите ее ToSelectAssessor и подключите ее между операциями Any Assessors? и SelectAssessors.

    Связывание операции RequestAvailability

    Трансформирующая служба для данной связи называется RequestAvailabilityTransformer.

  • Присвойте действию имя toRequestAvailability. Необходимо агрегировать два входящих сообщения: выходное сообщение операции SelectAssessors и исходное входное сообщение процесса, RequestExternalReports_RequestAssessors (см. рис 10.7). Выходное сообщение называется actionAssessorRequest.

    В этот момент мы сталкиваемся с проблемой. Для сообщения actionAssessor требуется два поля, которых нет во входящих сообщениях:

  • carDetails.registration.
  • assessor.assessorURL.
  • Информация о регистрации машины была случайно пропущена во входном кон- тейнере, переданном процессу RequestExternalReports рабочим потоком ClaimInvestigation_TOBE. Это можно исправить позже, а пока мы скопируем ин- формацию о марке машины в поле registration.
  • Отсутствие URL оценщика (AssessorURL) – более серьезная проблема. Интерфейс системы бизнес-правил (Business Rules Engine) возвращает только ID выбранного оценщика, а также ID претензии (claimID). Нам нужно заново установить связь между идентификатором оценщика (assessorID) и URL оценщика (assessorURL), чтобы шина ESB могла направлять запрос об оценке нужному оценщику.
  • Где следует осуществлять корреляцию данных?

    В этом курсе мы не акцентировали внимания на шаблонах проектирования, относящихся к моделированию данных, которые помогают решить, как следует передавать данные по процессу и связанным с ним службам. Есть пара архитектурных вопросов, на которые следует дать ответ, прежде чем обсуждать детали связи идентификатора оценщика и его URL:

  • Кому принадлежат данные, направляемые оценщикам?

    Ответ на этот вопрос простой: эти данные принадлежат системе управления оценщиками (AssessorManagement).

  • Кто отвечает за сбор информации, необходимой шине ESB для взаимодействия с оценщиками?
  • Второй ответ не столь очевиден. За связь между assessorID и assessorURL отвечает либо система работы с процессом, либо ESB. Оба подхода имеют преимущества и недостатки.

    Один шаблон потока данных должен обеспечивать как можно более слабую связь между данными в компонентах, и он требует, чтобы каждый компонент запрашивал необходимые данные у других служб по мере необходимости. Так что этот подход за то, чтобы передавать шине ESB только assessorID, claimID и информацию о функции, выполнения которой система работы с процессом ждет от ESB. Затем ESB находит в системе управления оценщиками assessorURL для выполнения маршрутизации, собирает необходимую информацию о претензии из системы работы с претензиями и направляет запрос RequestAssessment выбранному оценщику.

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

    Корреляция AssessorID и AssessorURL в системе работы c процессом

    Мы используем стандартный шаблон данных для интеграции процессов, поэтому нам нужно восстановить связь с assessorURL выбранного оценщика, применяя значение assessorID, которое возвращает система бизнес-правил. Выполните следующие действия:

  • Добавьте Java-фрагмент, называющийся AssessorURL.
  • Вставьте фрагмент AssessorURL в поток RequestExternalReports, как показано на рис 10.29.(рис 10.29) Вставка Java-фрагмента AssessorURL в поток
  • Создайте глобальную переменную с именем SelectedAssessor.
  • Создайте WSDL-сообщение SelectedAssessor, состоящее из двух частей:
  • AssessorID,
  • AssessorURL.

    Выполните приведенные ниже инструкции, чтобы добавить AssessorID и AssessorURL в файл RequestExternalReportsInterface.wsdl (можно также создать новый WSDL-файл).

  • Откройте файл RequestExternalReportsInterface.wsdl в графическом WSDL-редакторе.
  • В области Messages (Сообщения) щелкните правой кнопкой мыши и выберите пункт меню Add Child (Добавить потомок) $$\to$$ Message (Сообщение). Введите имя SelectedAssessor.
  • Щелкните правой кнопкой мыши по SelectedAssessor и выберите пункт меню Add Child (Добавить потомок) $$\to$$ Part (Часть). Укажите имя AssessorID и введите xsd:int.
  • Аналогичным образом добавьте часть AssessorURL с содержимым xsd:String.
  • Импортирование сообщения SelectedAssessor в службу TransformerRequestAssessment и установление связи от SelectedAssessor.assessorURL к actionAssessmentRequest. assessor.assessorURL.
  • Написание кода Java-фрагмента AssessorURL.
  • (Задачи пп. 5, 6 описываются в последующих разделах более подробно.)

    Добавление сообщения SelectedAssessor в службу TransformerRequestAssessment

    Теперь, когда у нас есть assessorURL для выбранного оценщика, нам нужно связать его с полем assessorURL в сообщении-запросе, посылаемом в операцию RequestAssessment. Нам нужно создать трансформирующую агрегирующую службу, подобную ToRequestAvailability.

  • Назовите службу ToRequestAssessment.
  • В переменной Response укажите RequestAssessmentInputCriterionVariable.
  • В поле имени файла введите AggregateRequestAssessment.
  • Агрегируемые входные переменные следующие:
  • InputCriterionVariable,
  • SelectAssessorOutputCriterionVariable,
  • SelectedAssessor.

    Вам нужно создать эти входные переменные и указать тип, соответствующий сообщению SelectedAssessor, созданному на предыдущем шаге.

  • В качестве имени файла трансформирующей службы укажите TransformRequestAssessment. Выполните описанные ранее шаги по заданию имени для партнерской ссылки, действия и т. п.
  • Приведите в порядок схему потока, когда закончите выполнения указанных шагов, чтобы она выглядела так, как показано на рис 10.30.
  • (рис 10.30) Часть схемы потока, связанная с выбором оценщиков и запросом на оценку

    На этом создание связей должно быть завершено. Теперь вам нужно задать значение AssessorURL в Java-фрагменте.

    Создание Java-фрагмента AssessorURL

    В этом фрагменте Java нам нужно получить список подходящих оценщиков, проверенных системой бизнес-правил, и идентифицировать оценщика, которого выбрала система правил. В этом списке оценщики представлены структурой данных, в которую входит assessorURL. Обнаружив выбранного оценщика, мы создаем глобальную переменную SelectAssessor для передачи assessorURL этого оценщика в трансформирующую службу ToRequestAssessor, которая вводит assessorURL в сообщение actionAssessment Request. Готовый фрагмент Java показан в примере 10.4. Мы рассмотрим этапы создания этого фрагмента с помощью функции автозаполнения в WebSphere Studio Application Development Integration Edition.

  • Выберите только что созданный фрагмент Java (Java Snippet) с именем AssessorURL и откройте закладку Implementation (Реализация) редактора свойств.
  • Вставьте инструкцию, которая объявляет, что мы будем обновлять ту часть глобальной переменной SelectedAssessor, которая относится к assessorURL.

    Щелкните правой кнопкой мыши и выберите пункт меню Update Variable (Обновить переменную) $$\to$$ Part (Часть) и выберите assessorURL в сообщении SelectedAssessor (пример 10.1).

    SelectedAssessorMessage SelectedAssessor = getSelectedAssessor(true);
    java.lang.String assessorURL = SelectedAssessor.getAssessorURL();
    <focus>
    SelectedAssessor.setAssessorURL(assessorURL);
  • В области focus объявите локальную переменную Assessor assessorList [], в которой будет храниться список оценщиков из сообщения - ответа операции IdentifyAssessors.

    Заполните объявление, получив список потенциальных оценщиков из переменной IdentifyAssessorsOutputCriteriaVariable:

  • щелкните правой кнопкой мыши и выберите пункт меню Get variable (Получить переменную) $$\to$$ Part... (Часть) и выберите IdentifyAssessorsOutputCriteriaVariable ;
  • используйте автозаполнение строки, нажав CTRL_Пробел $$\to$$ getParameters и т. д.
  • Готовая строка кода показана в примере 10.2.
    Assessor assessorList [] =
    getIdentifyAssessorsOutputCriteriaVariable().getParameters().
    getRequestListAssessorsReturn().getAssessors();
    Совет. Если вы начнете вводить Assess… и используете автозаполнение для ввода класса Assessor, будет ли это работать? Если нет, значит, в файле исходного кода Java, содержащем данный фрагмент, отсутствует инструкция импорта itso.lgi.assessormgmt. Itso.lgi.assessormgmt представляет собой целевое пространство имен для WSDL-сообщений AssessorManagement. WebSphere Studio Application Development Integration Edition создает Java- пакет с именем, совпадающим с названием этого пространства имен, в который помещаются все Java-классы, реализующие функции get и set для частей сообщения. Поищите в Service Navigator этот пакет и входящие в него классы. Если вы найдете их и они будут находиться в проекте ITSOLGI, то вам нужно заставить WebSphere Studio Application Development Integration Edition включить в код инструкцию импорта для этого пакета. Если первый метод не работает, попробуйте такие варианты:
  • Щелкните правой кнопкой мыши и выберите пункт меню Source (Исходный код) $$\to$$ Add Import (Добавить импорт) и выберите itso.lgi.assessormgmt.
  • Введите объявление старым способом, нажмите Save (Сохранить), щелкните правой кнопкой мыши, выберите пункт меню Source (Исходный код) > Organize Imports (Организовать инструкции импорта) > Save (Сохранить). (Этот вариант применяется, если не сработает первый вариант).
  • Должна быть создана инструкция import, которая заставит заработать автозаполнение и устранит все ошибки в только что написанном коде.
  • Добавьте строку кода, которая получит идентификатор выбранного оценщика из выходной переменной системы бизнес-правил – selectedAssessorOutputCriteriaVariable. Для хранения этого значения нам потребуется создать новую локальную переменную:
    Integer selectedAssessorID
    а затем нужно инициализировать ее, используя автозаполнение:
    = getSelectAssessorOutputCriteriaVariable().getParameters()
    .getSelectAssessorReturn().getAssessorID();
  • Создайте цикл для поиска выбранного оценщика и сохранения assessorURL в глобальной переменной. Мы использовали для создания этого цикла мастер шаблонов кода:
  • Введите for и нажмите CTRL_Пробел без пробела.
  • Выберите пункт for – iterate over an array with temporary variable (перебор значений массива с использованием временной переменной). Будет сгенерирован код, показанный в примере 10.3.
    for (int i = 0; i < assessorList.length; i++) {
               Assessor assessor = assessorList[i];
    <focus>
    }
  • В области focus мы вставляем инструкцию if для проверки совпадения assessorID:
  • Введите if и используйте автозаполнение для создания простого шаблона инструкции if:
    if (условие) { }
  • С помощью автозаполнения замените условие следующим выражением:
    assessor.getAssessorID() == selectedAssessorID
  • В инструкции if остановите сохранение assessorURL в глобальной переменной:
  • с помощью автозаполнения создайте локальное выражение присваивания:
    assessorURL = assessor.getAssessorURL();
  • щелкните правой кнопкой мыши, выберите пункт меню Set Variable (Задать переменную) $$\to$$ Part (Часть), выберите AssessorURL из сообщения SelectedAssessor, чтобы сгенерировать такой код:
    getSelectedAssessor(true).setAssessorURL(<focus>);
  • замените focus на локальную переменную assessorURL.
  • Готовый фрагмент Java должен сохраниться без ошибок. Полный исходный код показан в примере 10.4.

    // мы будем обновлять глобальную переменную SelectedAssessor assessorURL
    SelectedAssessorMessage SelectedAssessor = getSelectedAssessor(true);
    java.lang.String assessorURL = SelectedAssessor.getAssessorURL();
    // Получить список оценщиков, согласившихся на выполнение оценки
    Assessor assessorList[] =
         getIdentifyAssessorsOutputCriteriaVariable()
              .getParameters()
              .getRequestListAssessorsReturn()
              .getAssessors();
    // Получить assessorID выбранного оценщика
    Integer selectedAssessorID =
         getSelectAssessorOutputCriteriaVariable()
              .getParameters()
              .getSelectAssessorReturn()
              .getAssessorID();
    // Перебор списка согласившихся оценщиков, чтобы найти выбранного
    for (int i = 0; i < assessorList.length; i++) {
    SelectedAssessor.setAssessorURL(assessorList[i].getAssessorURL());
    SelectedAssessor.setAssessorID((assessorList[i].getAssessorID()).intValue());
         if (assessorList[i].getAssessorID() == selectedAssessorID) {
            break; // выйти из цикла на нужном оценщике или на последнем в
    списке
    }/
    / Обновить сообщение SelectedAssessor в глобальном контейнере
    setSelectedAssessor(SelectedAssessor);

    Добавление SelectedAssessor в RequestAssessmentTransformer

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

  • Откройте файл RequestAssessmentTransformer.wsdl в редакторе трансформаций. Это можно сделать несколькими способами. Вот один из них:
  • в Services Explorer щелкните правой кнопкой мыши по проекту ITSOLGI и выберите пункт меню Claim.TOBE.RequestExternalReports $$\to$$ RequestAvailabilityTransformer.wsdl ;
  • Open With (Открыть с помощью) $$\to$$ Transformer Editor (Редактор трансформаций).
  • Добавьте новое сообщение SelectAssessors в число входящих сообщений:
  • при открытом в редакторе трансформаций файле RequestAssessmentTransformer.wsdl, выберите пункт Transformer Editor (Редактор трансформаций) в главном меню, выберите пункт Add Input Message (Добавить входящее сообщение), укажите файл ProcessMessages.wsdl в директории ITSOLGI\Services\ITSOLGI Architecture;
  • укажите сообщение Selected Assessor.
  • Свяжите часть Selected Assessor сообщения SelectedAssessor с полем assessorURL сообщения actionAssessorRequest.
  • Чтобы пока завершить создание связей, свяжите поле makeOfCar с полями makeOfCar и registration, чтобы все поля были с чем-то связаны.

    Связывание операции StoreReport

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

  • Добавьте новую трансформирующую службу с именем StoreReportTransform:
  • укажите в поле Operation Name (Имя действия) значение toStoreReport;
  • в поле входного сообщения укажите сообщение receiveAssessorReportRequest из файла AssessorReport(9).wsdl;
  • в поле выходного сообщения укажите сообщение StoreAssessorReportURLRequest из файла StoreAssessorReport(10).wsdl;
  • свяжите поля и сохраните службу StoreReportTransform.
  • Перетащите службу .
  • (рис 10.31) Соединение операции трансформации ToStoreReport

    RequestExternalReport Reply

    Выполните следующие шаги:

  • Мы используем еще одну трансформирующую службу для выполнения агрегации полей из следующих сообщений-ответов:
  • PolicyID из RequestExternalReportsRequest;
  • assCompDate из StoreAssessorReportURLRequest;
  • claimID и reportLocation из StoreAssessorReportURL Response.
  • Выходное сообщение – requestAssessorResponseMessage.
  • Назовите новую агрегацию AggregateRequestExternalReportsReply, трансформирующую службу – TransformRequestExternalReportsReply, действие – ToRequestExternalReportReply.
  • Создайте агрегирующую трансформирующую службу, как описывалось выше (рис. 10.32).
  • (рис 10.32) Соединение операции трансформации ToRequestExternalReports Reply

    Заключение

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

    10.4.7 Конфигурирование потока для ожидания ответа от оценщиков

    Существует три задачи, которые ожидают ответа от оценщиков. Нам нужно настроить процесс на ожидание этих сообщенийВ общем дизайне взаимодействий предусмотрены множество последовательно запускаемых процессов, которые, как мы предполагаем, ведут взаимодействие способом, определенным бизнес-аналитиком. Это допущение является критическим для работоспособности нашей системы. Если сообщения для экземпляра процесса могли бы приходить в ином порядке, нам пришлось бы иметь дело с непоследовательными сообщениями. При такой реализации, вероятно, более подходящей была бы BPEL-операция Pick, а не Receive., и обеспечить прием сообщений, посылаемых в Automated Assessor, нужным экземпляром процесса.

    В Business Process Choreographer есть механизм сохранения идентификационной информации в так называемом корреляционном наборе (correlation set). В корреляционных наборах хранятся псевдонимы, необходимые для связывания полей из разных сообщений с переменными, используемыми для корреляции. Этот механизм более гибок, чем тот, который требует, чтобы все сообщения имели одинаковое поле ключа. Последний вариант непрактичен, если представить, что формат сообщений может определять бизнес-партнер в другой организации или что есть сообщения, форматы которых определяются множеством различных стандартов.

    Если работа длительно функционирующего экземпляра процесса приостанавливается, то Process Choreographer сохраняет данные о состоянии этого экземпляра в долговременном хранилище. Когда от WebSphere BI Message Broker приходит сообщение-ответ, Process Choreographer проверяет корреляционные наборы и снова запускает нужный экземпляр процесса.

    Для добавления корреляционных наборов выполните следующие шаги:

  • Нажмите на значок + на панели Correlation Sets (Корреляционные наборы) (рис 10.33), чтобы добавить новый корреляционный набор. Назовите новый корреляционный набор Claims.(рис 10.33) Добавление нового корреляционного набора
  • Выделите набор Claims и перейдите на закладку Properties (Свойства) окна Detail (Подробно). Нажмите кнопку New (Новое). Откроется окно Create message property (Создание свойства сообщения).
  • Введите в поле имени свойства значение claimID, а в раскрывающемся списке выберите тип xsd:int.
  • Нажмите кнопку New (Новый) в верхней части списка псевдонимов. Нажмите кнопку Browse (Обзор) в окне Create property alias (Создание псевдонима свойства) и выберите элемент ITSOLGI $$\to$$ services (службы) $$\to$$ ITSOLGI Architecture $$\to$$ WSDL $$\to$$ Proxy(1).wsdl. Выберите сообщение RequestExternalReports_requestAssessorMessage, нажмите OK. Раскройте элемент Part: Container: $$\to$$ MessageContainer: requestAssessor $$\to$$ claimID : Int $$\to$$ OK.
  • Повторяйте шаг 4, чтобы добавить псевдонимы, приведенные в табл. 10.4.
    Псевдонимы для корреляционного набора
    Имя операции Имя WSDL-файла Сообщение Часть
    RequestExternal Reports Receive Proxy(1) RequestExternal Reports_request AssessorMessage MessageContainer: requestAssessor: claimID
    Assessor Availability Receive Assessor AvailabilityLis(3a)t.wsdl listAvailable Assessors parameters -> claimID:int
    AllocateAssessor Repsonse AllocateAssessor Response(6a).wsdl Assessor Confirmation Request claimID:int
    AssessorSend Report AssessorReport(9).wsdl receiveAssessor ReportRequest claimID:int
    Далее мы свяжем корреляционный набор с каждой из принимающих операций.
  • Щелкните по операции RequestExternalReports Receive в редакторе BPEL и перейдите на закладку Correlation (корреляция) в окне Detail (Подробно).
  • Нажмите кнопку ).
  • (рис 10.34) Присвоение корреляционного набора принимающей операции

    Повторите шаги с 1 по 7, чтобы присвоить корреляционные наборы принимающим операциям, указанным в табл. 10.5.

    Свойства корреляционного набора
    Операция Направление Инициация Корреляционный набор
    RequestExternalReports Receive Receive Yes Claims
    AssessorAvailabilityReceive Receive No Claims
    AllocateAssessorRepsonse Receive No Claims
    AssessorSendReport Receive No Claims

    10.5 Контроль пути через процесс

    Следующие этапы конфигурирования посвящены логике контроля пути через процесс. Эта задача делится на две части:

  • В разделе 10.5.1, "Проверка результатов, полученных от RequestAvailability", если система управления оценщиками не находит оценщиков для выполнения оценки, управление для выбора оценщика передается специалисту по обработке претензий, а не системе бизнес-правил.
  • В разделе 10.5.2, "Создание операции While для проверки согласования оценки", мы имеем дело с ситуацией, когда выбранный оценщик в конце концов решил не выполнять оценку.
  • 10.5.1 Проверка результатов, полученных от RequestAvailability

    Партнерская ссылка RequestAvailability отвечает синхронным ответом, проходящим через корпоративную сервисную шину. Этот ответ представляет собой простое подтверждение того, что запрос о готовности, направляемый оценщикам, был получен шиной. Поскольку этот ответ не является частью бизнес-логики, мы игнорируем ответ в этом потоке. Он выходит за рамки нашего сценария. (Вспомните раздел 1.1.2, "Область сценария".)

    Мониторинг сценария сам по себе представляет собой большую тему, выходящую за рамки курса. Необходимо определить и проанализировать цели мониторинга (соглашения об уровне обслуживания) и создать бизнес-показатели, а также связать эти показатели с событиями, которые регистрируются в бизнес-процессе и ИТ-платформе. Эти события и показатели должны представляться в форме, подходящей для различных ролей, отвечающих за мониторинг и обслуживание процесса, от высших управляющих до эксперта по требованиям и операторов.

    Тем не менее нас интересует получение от оценщиков предложений по проведению оценки. Первый этап – это анализ ответов и проверка, все ли ответы получены. ESB ожидает ответов оценщиков в течение согласованного периода времени, а затем собирает предложения в единый список. ESB отправляет ответ обратно, используя автоматизированный процесс для работы с оценщиками. Автоматизированный процесс работы с оценщиками ждет, пока операция AssessorAvailability Receive передаст список системе бизнес-правил для автоматического выбора оценщика.

    Мы должны проверить, были ли вообще получены предложения. Если предложения отсутствуют, мы передаем проблему специалисту по обработке претензий, чтобы он решил ее вручную. Если предложения были получены, то управление передается в автоматизированную операцию SelectAssessor, которая вызывает службу Business Rules для выбора наилучшего оценщика из списка.

    Как можно сказать, были ли получены предложения? Единственный способ – это проверить, есть ли элементы в массиве assessorEstimationArray (рис 10.35).

    (рис 10.35) Массив assessorEstimationArray

    Результаты этой проверки используются для того, чтобы задать значение для ссылок А и В на рис. 10.38. Для каждой ссылки мы можем открыть закладку свойств и задать условие, которое должно быть выполнено для перехода по ссылке. Для определения данного условия мы планируем использовать либо простой редактор выражений, либо визуальный редактор выражений. Однако казалось, что ни тот, ни другой редактор выражений не может обрабатывать выражения достаточно сложные, чтобы можно было проверить существование массива AssessorEstimationArray. Вместо использования редакторов мы напишем немного Java-кода для установки глобальной переменной. Затем каждая ссылка в простом выражении сможет проверять эту переменную, чтобы можно было установить для ссылки условие истинности.

    Общий план реализации следующий:

  • Создать глобальную переменную для хранения длины массива AssessorAutomationArray.
  • Создать Java-фрагмент, устанавливающий значение глобальной переменной.
  • Создание визуального выражения для ссылок А и В с целью тестирования значения глобальной переменной и определения условия истинности для каждой из ссылок.
  • Создание глобальной переменной EstimationArrayLength

    Чтобы создать глобальную переменную EstimationArrayLength, выполните следующие шаги:

  • В редакторе процесса RequestExternalReports нажмите кнопку Variable +, чтобы создать новую глобальную переменную с именем EstimationArrayLength.
  • Этой переменной нужно присвоить тип xsd:int, чтобы она могла хранить значение длины. Для этого мы должны определить WSDL-сообщение, которое мы назовем EstimationArrayLength, в котором содержится часть xsd:int с именем lengthValue. Это сообщение будет храниться в том же WSDL-файле, что и переменные AssessorID и URL:
  • Создайте сообщение EstimationArrayLength и его часть lengthValue:
  • Откройте файл RequestExternalReportsInterface.wsdl в графическом редакторе WSDL.
  • Нажмите Messages (Сообщение) $$\to$$ Add Child (Добавить потомок) $$\to$$ EstimationArrayLength $$\to$$ Add Child (Добавить потомок). Назовите часть lengthValue. В поле ).
  • (рис 10.36) Создание сообщения EstimationArrayLength
  • Создание сообщения EstimationArrayLength
  • Выберите глобальную переменную EstimationArrayLength в процессе RequestExternalReport и откройте закладку Message (Сообщение) в редакторе свойств.
  • С помощью кнопки Browse (Обзор) выберите файл RequestExternalReports Interface.wsdl и укажите сообщение EstimationArrayLength в раскрывающемся окне Message (Сообщение) (рис 10.37).
  • (рис 10.37) Тип переменной EstimationArrayLength

    Создание Java-фрагмента "Any Assessors?" для установки значения lengthValue

    Чтобы создать Java-фрагмент "Any Assessors?", выполните следующие действия:

  • Измените пустую операцию "Any Assessors?" на Java-фрагмент, как показано на рис 10.38. В этом Java-фрагменте мы установим значение lengthValue в глобальной переменной EstimationArrayLength, чтобы его можно было проверять с помощью простых выражений, связанных со ссылками А и В.(рис 10.38) Проверка результатов в RequestAvailability
  • В Java-фрагменте мы должны установить доступ для обновления к глобальной переменной Estimation-ArrayLength:
  • Выделите Java-фрагмент Any Assessors? и откройте закладку Implementation (Реализация) в редакторе свойств.
  • Щелкните ). При этом будут созданы три инструкции.(рис 10.39) Результаты работы мастера обновления переменной
  • Первая инструкция создает в JVM $$\text{\texttrademark}$$ новый экземпляр EstimationArrayLengthMessage (поскольку параметр getEstimationArrayLength установлен в true). Это показывает, что Java-фрагменту требуется доступ по обновлению к глобальной переменной EstimationArrayLength.

    Вторая инструкция создает новый экземпляр целочисленного значения lengthValue. (Также этот экземпляр инициализируется значением, которое берется из глобальной переменной, но нас здесь это не интересует.)

    Третья инструкция использует новое целочисленное значение lengthValue для установки нового значения глобальной переменной. Это также дает побочный эффект – разблокирование переменной, поскольку для обновления она больше не нужна.

    Мастер обновления оставляет редактор готовым к заданию значения новой целочисленной переменной lengthValue. (рис 10.40).

    (рис 10.40) Выбор части переменной для обновления в Java-фрагменте

    Получите длину массива, хранящего ответы оценщиков. На этот раз мы используем встроенное автозаполнение, чтобы получить значение переменной AssessorEstimationArray. К сожалению, с помощью меню мы не можем добраться до нужной нам части сообщения. Используя Ctrl+Пробел для автозаполнения каждого элемента, мы в итоге получим следующую инструкциюВ нашем коде есть опечатка. Проверьте, чтобы в вашем коде ее не было!:

    lengthValue = getListOfAvailableAssessrs()1.getParameters().
    getResultAssessorCollection().getAssessorEstimations().length;

    Полный код Java-фрагмента приведен в примере 10.5.

    EstimationArrayLengthMessage EstimationArrayLength =
       getEstimationArrayLength(true);
    int lengthValue =
       getListOfAvailableAssessors()
         .getParameters()
         .getResultAssessorCollection()
         .getAssessorEstimations()
         .length;
    EstimationArrayLength.setLengthValue(lengthValue);

    Проверка значения lengthValue в ссылках А и В

    Последний этап процесса – это добавление визуальных выражений к двум ссылкам, идущим от Java-фрагмента "AddAssessors?", чтобы вызывалась операция ManualSelectAssessor или автоматическая операция SelectAssessor, но не обе сразу.

  • Щелкните по ссылке, ведущей к операции ManualSelectAssessor, и откройте закладку Condition (Условие) в редакторе свойств. Выберите визуальный редактор выражений для создания следующей инструкции:
    EstimationArrayLength.lengthValue == 0
  • с помощью меню в правой части редактора выберите из списка глобальных переменных переменную EstimationArrayLength.lengthValue;
  • нажмите на оператор равенства (==);
  • нажмите на функцию Number (Число) и введите 0.
  • Щелкните по ссылке, едущей к операции SelectAssessor, и повторите процедуру, чтобы создать следующую инструкцию:
    EstimationArrayLength.lengthValue ¬= 0
  • 10.5.2 Создание операции While для проверки согласования оценки

    Служба RequestAssessment посылает запрос выбранному оценщику на выполнение оценки претензии для LGI. В конечном счете запрос приводит к возврату трех потоков сообщений обратно в процесс RequestExternalReports:

  • Синхронный ответ от ESB, подтверждающий, что сообщение обрабатывается.
  • Асинхронное подтверждение от оценщика, что он будет (или не будет) выполнять оценку.
  • Асинхронный ответ, содержащий отчет об оценке.
  • Как и в случае запроса готовности оценщиков, мы игнорируем ответ от ESB. Он нужен только для мониторинга и не выходит за рамки данного сценария. Окончательный ответ, содержащий отчет, обрабатывается операцией AssessorSendReport. В этом разделе мы изучим обработку подтверждения, получаемого от оценщика, которое принимается операцией AllocateAssessorResponse.

    Выбор дизайна

    Если оценщик отклоняет запрос, такой вариант является необычным и вместо автоматического выбора второго по рейтингу оценщика система передает задание по поиску другого оценщика специалисту по обработке претензий.

    С точки зрения бизнеса важно, чтобы в случае возникновения в процессе необычной ситуации ответственность за принятие решения передавалась специалисту по обработке претензий. Хотя существуют технические возможности использования средств автоматизации для помощи специалисту по обработке претензий в выборе оценщика и в нетипичной ситуации, бизнес-спецификация, как она зафиксирована в BPEL-модели, созданной в WebSphere Business Integration Modeler, указывает на то, чтобы контроль над выбором осуществлял специалист. Эту спецификацию следует учитывать в исполняемом BPEL-коде, который генерирует ИТ-специалист. Однако достижение этой бизнес-цели возможно несколькими путями. Должна ли в процессе использоваться одна или несколько выполняемых вручную операций? Как следует формировать запросы ко второму, а возможно, и к последующим оценщикам? Эти вопросы не учитываются в бизнес-спецификации, и решение по ним должен принимать ИТ-специалист.

    Использование существующей ручной операции или добавление новой ручной операции?

    В потоке уже есть один пункт, где в выполнение ручной операции вовлекается специалист по обработке претензий, если для оценки претензии не оказывается подходящих оценщиков. Один из подходов к проектированию состоит в использовании этой операции для двух ситуаций:

  • отсутствуют подходящие оценщики;
  • выбранный оценщик отказывается выполнить оценку.
  • Альтернативным способом проектирования процесса является добавление новой ручной операции, связанной с обработкой отрицательного ответа оценщика. Результаты этой новой операции должны поступать в операцию RequestAssessment для дальнейшей работы процесса.

    Если мы изучим спецификацию пользовательского интерфейса процесса Claims, то вопрос о применении одной или двух операций почти наверняка отпадет сам собой – использовать следует две операции, поскольку специалисту в каждом из этих случаев необходима разная информация. Однако для данного сценария мы остановимся на одной операции, в которой специалисту будет предложено указать новый идентификатор оценщика, независимо от того, будет это первая попытка назначить оценщика или не первая.

    Проектирование управляющего цикла в BPEL

    Нам нужно создать в BPEL-процессе управляющий цикл для передачи управления в ручную операцию, если оценщик отказывается создавать отчет об оценке. Простой возврат управления в предыдущую точку потока путем соединения потока с циклом в BPEL недопустим. Можно использовать две альтернативы:

  • компенсацию;
  • операцию While.
  • Компенсация (Compensation) – это способ возврата при ошибке в операции. В своей простейшей форме каждая операция содержит такие две службы, как:

  • Прямая (forward) служба – та, которая выполняется при удачном стечении обстоятельств
  • Компенсационная служба – альтернативная служба, которая выполняется, если что-то пошло не так, с целью отмены всех изменений, выполненных прямой службой.
  • За дополнительной информацией о компенсационных службах обращайтесь к следующим источникам:

  • к статье Susan Hermann в developerWorks, "Modeling compensation in WebSphere Business Integration Server Foundation Process Choreographer", – хорошее описание использования компенсационных служб в in WebSphere Studio Application Development Integration Edition": http://www-128.ibm.com/developerworks/websphere/techjournal/0412_herrmann/0412_herrmann.html
  • к руководству по использованию компенсации в сценарии с обработкой страховых претензий, реализованном с применением более ранней версии WebSphere Studio Application Development Integration Edition: Larry Yusuf, "Create Compensation in a Business Process": https://www6.software.ibm.com/developerworks/education/i-merge7/index.html
  • В нашем случае компенсацию можно использовать для вызова операции Manual SelectAssessor вместо автоматической SelectAssessor (как компенсацию ошибки, связанной с отказом выбранного оценщика перейти к выполнению оценки). Однако более подробное исследование должно убедить нас, что наши намерения не вполне соответствуют модели компенсации:

  • Нам не нужно выполнять откат каких-то изменений в ресурсах: ничего не изменилось в результате отказа оценщика от выполнения оценки.
  • Компенсация работает на уровне всего процесса, а мы лишь хотим подкорректировать результаты нескольких операций. Нам пришлось бы выделять компенсируемые операции в отдельный процесс.
  • Выполнение ручной операции Manual SelectAssessor не является компенсационной службой для Automatic SelectAssessor. Мы собираемся выполнить ту же операцию, но несколько иначе.
  • Операция While предоставляет необходимые нам возможности. На рис 10.41 показано, какие операции были перенесены в операцию While и в каком месте всего процесса данная операция располагается.

  • Условие для while – это отсутствие положительного ответа от операции AllocateAssessment Response.
  • Операция Automatic SelectAssessors находится внутри цикла, хотя она всегда выполняется только при первой итерации. Это объясняется тем, что при первой итерации может не оказаться выбранных оценщиков и мы будем использовать ручную операцию ManualSelectAssessors уже в первом проходе, если автоматическая операция не нашла оценщика.
  • Мы не уделяем внимания входящим и выходящим данным для ManualSelectAssessor, поэтому ручную часть цикла может понадобиться дополнительно детализовать.
  • В начале операции While была добавлена пустая операция, просто для удобства графического отображения (рис 10.41).
  • (рис 10.41) Операция While для неподтвержденной оценки

    Создание операции While

    Внимание! Для работы с данным разделом обязательно выполните следующие инструкции:
  • Лучше всего начать создание операции While с добавления в поток ручной или автоматической пустой операции (Noop). Вам будет проще выбрать нужные операции и ссылки и сохранить написанные условия.
  • Перед редактированием абсолютно необходимо выполнить экспортирование в файл Project Interchange. В девяти случаях из десяти первая попытка такого редактирования заканчивается неудачно, а отмену выполнить нельзя.
  • Обязательно отключите для редактирования автоматическое размещение (auto arrange). Иначе выполнение вашей задачи станет практически невозможным.
  • Подключение операции While:
  • Перетащите операцию While из палитры в процесс и назовите ее while no committed assessment.
  • Выделите все операции между Any Assessor? и AssessorSendReport и перетащите их в операцию While.
  • Перетащите, назовите и подсоедините операцию Noop (используйте имя Manual or Automatic?). Обязательно сохраните те же ссылки (А и В) на операции ToSelectAssessors и ManualSelectAssessor с записанными для них условиями.
  • Вы получите множество сообщений об ошибках (пример 10.6).
    Error BPED0211E: Link 'Linknn' does not link immediate children of flow
    'RequestExternalReport' of process model 'RequestExternalReports'.
    RequestExternalReports.bpelITSOWorkshop/Claim/TOBE/RequestExternalReports
  • Чтобы исправить ошибки, выполните следующие шаги:
  • щелкните правой кнопкой мыши по потоку RequestExternalReports.bpel и выберите пункт меню Open with (Открыть с помощью) ... Text editor (Текстовый редактор);
  • вырежьте все неработоспособные определения ссылок из раздела <link> ...</link> главного потока и вставьте их в блокнот;
  • создайте новый раздел <link> ... <.link> в потоке while и вставьте в него все ссылки, как показано в примере 10.7.
  • <while condition="DefinedByJavaCode" name="Whilenocommittedassessment"
    wpc:displayName="While no committed assessment" wpc:id="37">
                  <wpc:condition>
    <wpc:javaCode><![CDATA[//@generated
    //
    //AssessorAcknowledgement.Ack.equals("YES")
    return getAssessorAcknowledgement().getAck().equals
    "YES";]]></wpc:javaCode>
                  </wpc:condition>
                  <target linkName="Link27"/>
                  <source linkName="Link5"/>
                  <flow name="Flow" wpc:displayName="Flow" wpc:id="38">
             <links>
    <link name="Link14"/>
                  <link name="Link15"/>
                  <link name="Link4"/>
                  <link name="Link16"/>
                  <link
    name="ManualSelectAssessorOutput_to_RequestAssessmentInput2"/>
                  <link name="Link19"/>
                  <link name="Link18"/>
                  <link name="Link17"/>
                  <link name="Link3"/>
                  <link name="Link25"/>
             </links>
  • Создайте переменную для хранения условия While:
  • добавьте сообщение AssessorAcknowledgement в файл ProcessMessages.wsdl для соединения с другими внутренними сообщениями, которые были определены доля процесса. создайте часть (Part) с именем Ack и типом xsd:string;
  • добавьте в процесс переменную с именем AssessorAcknowledgement;
  • укажите тип переменной AssessorAcknowledgement с помощью только что созданного сообщения.
  • Задайте и протестируйте условие для While:
  • добавьте операцию назначения ( Assign activity ) перед циклом While для инициализации переменной AssessorAcknowledgement.Ack значением No Assessors selected yet;
  • откройте закладку Condition (Условие) операции While в редакторе свойств и выберите редактор Visual Expression (Визуальный редактор выражений);
  • введите в качестве условия следующее выражение:
    AssessorAcknowledgement.Ack.equals("YES")!=true
  • Java имеет свои хитрости. Вы должны проверить, чтобы значение объекта не представляло собой тот же самый объект.

    10.6 Реализация операции для специалиста по обработке претензий

    Последний этап разработки – это реализация операции, выполняемой персоналом (staff activity).

    Операция персонала используется для представления той точки процесса, где требуется участие специалиста по обработке претензий (Claim handler). Такая операция рассматривается как специальный тип вызывающей операции, однако в ее сигнатуре не используется ссылка на партнера. Операция персонала определяется как действие, имеющее входящее и исходящее сообщения. Это действие и сообщения определяются в WSDL-файле, как правило в интерфейсах процесса. Затем в процессе определяются две переменные с типами сообщений, соответствующими входу и выходу действия, относящегося к операции персонала.

    Изучение свойств операции ManualSelectAssessor

    Мы изменим операцию персонала, созданную Modeler. Пока мы просто изучим некоторые специальные характеристики данной операции.

    Реализация

    Выделите операцию ManualSelectAssessor и откройте закладку Implementation (Реализация) редактора свойств. Можно видеть, что с операцией связан тип порта ManualSelectAssessorPT, который определяется в файле RequestExternalReportsInterfac e.wsdl, сгенерированном Modeler. Мы будем изменять действия и сообщения, используемые операцией персонала ManualSelectAssessor и показанные на рис 10.42.

    (рис 10.42) Типы портов и сообщения для ManualSelectAssessor, сгенерированные Modeler

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

    Web-клиенты

    Когда специалист по обработке претензий хочет выполнить какую-то часть работы, то переменная-запрос и ее содержимое передаются специалисту с помощью Web-клиента или клиента портала. Специалист принимает решение о том, какому оценщику следует направить запрос об оценке претензии, и Web-клиент возвращает ID оценщика в переменной-ответе.

    Наиболее вероятный метод взаимодействия между специалистом по обработке претензии и его фрагментами работы – это Process Web Client. Предлагаемое приложение позволяет прошедшему авторизацию специалисту войти в систему и осуществлять взаимодействие с процессами RequestExternalReports. При этом данный экземпляр процесса становится недоступным для других специалистов по обработке претензий. Специалист отвечает за выполнение операции путем передачи экземпляру процесса значения assessorID, что позволяет экземпляру процесса продолжить работу.

    Существует несколько вариантов Web-клиентов, которые можно написать или сконфигурировать в соответствии с нуждами бизнеса. Более полное объяснение приводится в разделе 9.2 книги серии Redbook "WebSphere Business Integration Server Foundation 5.1 Handbook", SG24-6318.

    Откройте закладку Client (Клиент) окна свойств операции ManualSelectAssessor (рис 10.43). Данные определения для заданных по умолчанию Web-клиентов и клиентов портала извлекаются из файла ClientSet.xml, который находится в директории ...\install_root\IBM\WebSphere Studio\Application Developer IE\v5.1.1\runtimes\ee_v51\ ProcessChoreographer\client.

    Мы можем изменять файл ClientSet.xml, задавая другой интерфейс клиента, или же можем изменять значения для JSP, предлагая другую реализацию заданных по умолчанию интерфейсов. Подробно об этом рассказывается в упомянутой выше книге серии Redbook. Мы будем использовать заданный по умолчанию Web-клиент и измененные входное и выходное сообщения.

    (рис 10.43) Закладка с определениями Web-клиента

    Роли персонала

    В ходе разработки сотрудники, которые могут выполнять операции персонала, абстрактно определяются как имеющие роли. На этом этапе, хотя разработчик указывает, сотрудник какого типа может выполнять операцию, он ничего не знает о технологии, которая будет применяться для идентификации человека, выполняющего роль, или для выполнения аутентификации.

    Откройте закладку Staff (Персонал) операции ManualSelectAssessor, и вы увидите, что специалист по обработке претензий (Claim Handler) уже определен в BPEL-модели, импортированной из Modeler (рис 10.44).

    (рис 10.44) Роли персонала, назначенные в операцию ManualSelectAssessor

    Чтобы не иметь дело с конфигурацией системы безопасности в ходе тестирования, измените слово Staff на Everybody.

    В период выполнения, когда процесс доходит до операции персонала, система WebSphere Process Choreographer создает элемент работы, который может быть обработан любым специалистом по обработке претензий. Контейнер WebSphere Process Choreographer связывает роль Claim Handler с реальным запросом к реализации менеджера сущностей, например пользовательскому реестру Windows или службе LDAP-директории. Этот механизм позволяет рабочей системе определить потенциального владельца, а затем обеспечить выполнение политики аутентификации.

    Поскольку связывание роли Claim Handler происходит в период выполнения, определение связи можно поместить в описании размещения процесса на WebSphere Business Integration Server Foundation.

    Истечение срока действия

    Операция персонала во многом напоминает вызывающую операцию (invoke activity), и в ней есть параметр истечения срока (expiration), если специалист по обработке претензии не отвечает. Существуют разные способы указания этого срока. По достижении этого времени операция персонала переходит в состояние STATE_EXPIRED. Это значение можно проверять в управляющих ссылках (Control Links) выходного терминала операции персонала. В одной управляющей ссылке вы можете проверить состояние (возвращается значение true, если состояние операции STATE_EXPIRED). Это приведет к тому, что выполнение продолжится по данной управляющей ссылке.

    Обычно действия на случай в модели, созданной бизнес-аналитиком, четко не прописываются, если специалист по обработке претензий становится владельцем претензии, но не выполняет операцию. ИТ-специалист должен проконсультироваться с бизнес-аналитиком и ИТ-архитектором, а не принимать решения по ситуации.

    На практике если считается, что данный вопрос не создаст проблем для бизнеса, то приемлемым решением будет выбрать подходящий срок, например один день, а затем выполнить итерацию цикла while. Мы не будем в данном сценарии писать код для истечения срока действия.

    Конфигурирование операции ManualSelectAssessor

    Для конфигурирования операции ManualSelectAssessor от нас потребуется:

  • Изменить тип порта, сгенерированный Modeler, с настройкой входящего и исходящего сообщений для ManualSelectAssessor.
  • Изменить конфигурацию операции ManualSelectAssessor, чтобы она использовала новый тип порта.
  • Изменить логику соединений операции while no committed assessment.
  • Изменения типа порта и действий для операции ManualSelectAssessor

    Мы будем использовать следующий интерфейс операции ManualSelectAssessor:

  • Вход: условие для операции While.

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

  • Выход: идентификатор оценщика, выбранного специалистом по обработке пре- тензий для выполнения оценки.

    Для этого понадобится новое сообщение – xsd:int. Web-клиент по умолчанию сконструирует форму из фрагментов выходного сообщения и выполнит конверсию типов, описанную в спецификации JAX-RPC.

  • Откройте файл RequestExternalReportsInterface.wsdl, как показано на рис 10.42. (рис 10.45).
  • Удалите два существующих действия в ManualSelectAssessorPT.
  • Нажмите Add Child (Добавить потомок) $$\to$$ Operation (Действие), введите requestAssessorID в поле имени, нажмите Add Child (Добавить потомок) $$\to$$ Input (Вход) $$\to$$ Add Child (Добавить потомок) $$\to$$ Output (Выход).
  • Выберите элемент Input (Вход), нажмите Create a new message (Создать новое сообщение). Назовите сообщение ManuallyChosenAssessorInput.
  • Выберите элемент Output (Выход), нажмите Create a new message (Создать новое сообщение). Назовите сообщение ManuallyChosenAssessorOutput.
  • Выберите новое сообщение ManuallyChosenAssessorInput, нажмите Add Child (Добавить потомок) $$\to$$ Part (Часть), назовите новую часть AssessorSelectionState. Оставьте заданный по умолчанию тип xsd:string.
  • Снова выберите сообщение ManuallyChosenAssessorInput, нажмите Add Child (Добавить потомок) $$\to$$ Part (Часть), назовите новую часть claimID. Укажите тип xsd:int.
  • Выберите новое сообщение ManuallyChosenAssessorOutput, нажмите Add Child (Добавить потомка) $$\to$$ Part (Часть), назовите новую часть AssessorID. Укажите тип xsd:int.
  • (рис 10.45) Входное и выходное сообщение для операции ManualSelectAssessorДля изменения конфигурации операции ManualSelectAssessor выполните следующие действия:
  • На закладке Implementation (Реализация) окна свойств операции Manual- SelectAssessor убедитесь, что в качестве переменных Request (Запрос) и Response (Ответ) установлены переменные ManualInputCriteriaVariable и ManualOutp utCriteriaVariable, которые уже должны существовать. Если они не существуют, создайте их.
  • Установите тип сообщения-запроса и сообщения-ответа, выделив переменные и открыв закладку Message (Сообщение) редактора свойств:
  • Для переменной ManualInputCriteriaVariable прокрутите список Message (Сообщение) до ManuallyChosenAssessorInput. Вам может понадобиться нажать кнопку Browse (Обзор) и найти файл RequestExternalReportsInput.wsdl, если сообщение не появляется. WSDL-файл кешируется.
  • Для переменной ManualOutputCriteriaVariable прокрутите список Message (Сообщение) до ManuallyChosenAssessorOutput.
  • Вернитесь в окно свойств операции ManualSelectAssessor, выберите только что созданное действие requestAssessorID в свойстве Operation (Действие) на закладке Implementation (Реализация).
  • Трансформации при переходе к ручной операции и от нее

    Следующие этапы посвящены управлению данными, входящими в операцию ManualSelectAssessor и покидающими ее. Поток в конце концов будет выглядеть так, как показано на рис 10.46.

    (рис 10.46) ManualSelectAssessorFlow

    Создание агрегации и трансформации на входе в ManualSelectAssessor

    Выполните следующие действия:

  • Создайте новую операцию трансформации и назовите ее ToManualSelectAssessor.
  • В качестве переменной-ответа (Response) укажите ManualInputCriteriaVariable.
  • Создайте агрегацию с именем AggregateManualSelectAssessor, которая будет объединять переменные InputCriterionVariable и AssessorAcknowledgement.
  • Создайте трансформирующую службу с именем TransformerManualSelect|Assessor:
  • добавьте сообщение AssessorAcknowledgement из файла RequestExternalReportsInterface.wsdl и сообщение RequestExternalReportsRequest из файла ExternalClaimsAssessorsInterface.wsdl в качестве входных сообщений трансформирующей службы;
  • выберите сообщение ManuallyChosenAssessorInput из файла RequestExternalReportsInterface. wsdl в качестве выходного сообщения;
  • соедините части claimID и Ack, как показано на рис 10.47.
  • (рис 10.47) Трансформация входа для ManuallyChosenAssessorInput

    Создание агрегации и трансформации на выходе из ManualSelectAssessor

    Создайте еще одну агрегирующую трансформацию, создав сначала новую операцию трансформации с именем ToAssessorURL, агрегацию с именем Aggregate-AssessorURl и трансформирующую службу TransformerAssessorURL:

  • Объедините AssessorID из сообщения ManuallyChosenAssessorOutput в файле RequestExternalReportsInterface.wsdl с ClaimID из сообщения RequestExternalReportsRequest в файле ExternalClaimsAssessorsInterface.wsdl (входящих сообщений). (рис 10.48).
  • Выберите сообщение SelectAssessorResponse из файла PreferredAssessor(5).wsdl в качестве исходящего сообщения.
  • (рис 10.48) Выходные трансформации для ManuallyChosenAsssessorOutput

    Изменение соединений операции While

    Перетащите две трансформирующие службы в операцию While и измените соединения, как показано на рис 10.46.

    Важно! Будьте осторожны и сохраните ссылку, ведущую к операции ManualSelectAssessor, с настройками фильтра условия.

    10.7 Компоновка

    На этом этапе после сохранения процесса у нас должно остаться только одно предупреждение – The deployment code for this process needs to be generated (нужно сгенерировать код размещения для данного процесса).

    Чтобы BPEL-процесс мог выполняться на сервере, нужен код размещения. Мы можем сгенерировать код для размещения процесса в WebSphere Studio Application Developer Integration Edition после того, как исправлены все ошибки. Система WebSphere Studio Application Developer Integration Edition генерирует EAR-модуль, который включает в себя EJB-модуль, созданный по определениям бизнес-процесса. Мы можем выполнять бизнес-процесс, разместив этот EAR-модуль на сервере.

    Чтобы подготовить процесс, прошедший тестирование на тестовом сервере, к размещению и использованию базы DB/2 в рабочей системе, нужно выполнить еще один дополнительный компоновочный этап (см. раздел "Компоновка для рабочего сервера"). Мы используем для хранения объектов на тестовом сервере базу Cloudscape $$\text{\texttrademark}$$, а в рабочей системе мы используем DB/2.

    10.7.1 Компоновка бизнес-процесса

    Чтобы осуществить компоновку бизнес-процесса, выполните следующие шаги:

  • Убедитесь, что в бизнес-процессе отсутствуют ошибки, сохранив все рабочее пространство.
  • Мы не хотим, чтобы экземпляр процесса автоматически удалялся по завершении работы, потому что мы хотим просмотреть результаты. По умолчанию экземпляр процесса по завершении работы удаляется. Чтобы изменить данное поведение, перейдите к всплывающему меню операции RequestExternalReports в верхней части потока и измените свойства сервера, как показано на рис 10.49.(рис 10.49) Сохранение экземпляра процесса после завершения
  • Чтобы сгенерировать код размещения, щелкните правой кнопкой мыши по процессу RequestExternalReport s, выберите пункт меню Enterprise Services (Корпоративные службы) $$\to$$ Generate Deploy Code (Сгенерировать код размещения). Откроется окно параметров генерации кода (рис 10.50).(рис 10.50) Генерация кода размещения BPEL
  • Выберите транспортные привязки процесса и его партнеров, где процесс будет выполнять роль сервера:
  • Оставьте JMS в качестве протокола вызова процесса.
  • Для трех других интерфейсов укажите привязки SOAP/http с использованием IBM Web service, как показано на рис 10.50.
  • Для каждого из трех интерфейсов определите стиль SOAP, как показано на рис 10.51. Файлы WSDL создавались совместимыми с WS-I и использующими интерфейс Document Literal (Документ литерал). За дополнительной информацией о совместимости SOAP и WS-I обращайтесь к книге серии Redbooks "WebSphere and .Net interoperability using Web services", SG24-6395.
  • (рис 10.51) Стиль привязок SOAP
  • Проверьте партнеров, на которые процесс ссылается. Менять, скорее всего, ничего не нужно. Нажмите OK, чтобы начать генерацию. Это займет несколько минут. После завершения генерации вы увидите 15 сообщений, относящихся к компенсационным объектам, которые устранить нельзя, но можно игнорировать.
  • Найдите EAR-модуль с именем ITSOLGIEAR (имя проекта + EAR) в представлении J2EE Hierarchy (Иерархия J2EE). Этот EAR-модуль включает в себя Web-модуль (ITSOLGIWeb) и EJB-модуль (ITSOLGIEJB).
  • Совет. При сохранении файла Project Interchange не сохраняйте размещаемые службы, а генерируйте их заново после восстановления проекта.

    10.7.2 Компоновка для рабочего сервера

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

  • Перейдите в представление J2EE Hierarchy и удалите карту и схему из ресурса Cloudscape. (рис 10.52).(рис 10.52) Удаление связей с Cloudscape
  • Экспортируйте файл ITSOLGI.ear.
  • 10.8 Тестирование и отладка процесса

    В WebSphere Studio Application Development Integration Edition предлагается тестовая серверная среда, которая содержит тот же серверный компонент, что и WebSphere Business Integration Server Foundation. Это означает, что вы можете тестировать бизнес-процессы без инсталляции и конфигурирования тестового сервера за пределами среды разработки. Также предлагаются функции для отладки, например для установки точек останова, пошагового выполнения бизнес-процессов и мониторинга данных в ходе выполнения.

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

    10.8.1 Подготовка к тестированию

    Для подготовки к тестированию выполните следующие шаги:

  • Создайте новый тестовый сервер. Откройте представление Server Configuration (Конфигурация сервера). Его можно найти в нижней части перспективы Services (Службы) или с помощью главного меню: пункт Window (Окно) $$\to$$ Show view (Показать представление) $$\to$$ Server Configuration (Конфигурация сервера). Щелкните правой кнопкой мыши и выберите пункт меню New (Новый) $$\to$$ Server and Server Configuration (Сервер и конфигурация сервера) (рис 10.53).(рис 10.53) Создание сервера и конфигурации сервера
  • Введите TestServer в качестве имени нового сервера и убедитесь, чтобы в поле Server Type (Тип сервера) был указан вариант Integration Test Environment (Среда для тестирования интеграции). Нажмите OK, чтобы создать новый сервер.
  • Новый сервер, TestServer, будет добавлен в папку servers в представлении Server Configuration (Конфигурация сервера). Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Add and remove projects (Добавление и удаление проектов).
  • Нажмите кнопку ), чтобы добавить созданный нами модуль ITSOLGIEAR EAR. Нажмите (рис 10.54) Добавление модуля ITSOLGIEAR на сервер TestServer
  • Снова щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Create tables and data sources (Создать таблицы и источники данных). Для выполнения процесса RequestExternalReports нам понадобится база данных, поскольку это длительно выполняемый процесс и необходимо сохранять в базе данных сведения об экземплярах процесса.
  • (рис 10.55) Окно подтверждения создания таблицы базы данных

    Проверьте сообщения, появляющиеся в окне подтверждения, и убедитесь в том, что таблица базы данных и источник данных были успешно созданы.

    10.8.2 Публикация бизнес-процесса на тестовом сервере

    Чтобы опубликовать тестовый сервер, выполните следующие действия. Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Publish (Публикация).

    Весьма возможно, что публикация службы будет неудачной и будут выведено одно из следующих сообщений об ошибке (примеры 10.8 и 10.9).

    Project ITSOLGIEJB deployment failed.
         BPEA0010E: Unexpected exception during execution.
    java.lang.reflect.InvocationTargetException:
    com.ibm.bpe.api.UnexpectedFailureException: BPEA0010E: Unexpected exception
    during execution.
    com.ibm.bpe.util.ProcessAssertionError: Assertion violation !(param-
    Value !=
    null  paramValue.length() != 0) in method >>at
    com.ibm.bpe.staff.StaffPluginUtil.deployStaffVerb(StaffP

    Данная ошибка вызвана отсутствием реализации роли Claim Handler. В данном сценарии можно обойти эту ошибку, указав в поле staff операции ManualSelectAssessor вариант Everybody.

    Project ITSOWorkshopEJB deployment failed.
    BPED0203I: Validated process model 'RequestExternalReports' with
    findings ( 0 information, 0 warnings, 1 errors ):
    BPED0267E: Syntactical error found in BPEL file
    'Claim/TOBE/RequestExternalReports/RequestExternalReports.bpel' (row: 223,
    column: 73). Detail message: cvc-complex-type.2.4.b: The content of
    element
    'wpc:webClientSettings' is not complete. One of
    '("http://www.ibm.com/xmlns/prod/websphere/business-process/v5.1/":customSe
    tting,
    "http://www.ibm.com/xmlns/prod/websphere/business-process/v5.1/":jsp)' is
    expected.
    java.lang.reflect.InvocationTargetException:
    com.ibm.bpe.plugins.DeploymentBPELProcessValidationException: BPED0203I:
    Validated process model 'RequestExternalReports' with findings ( 0
    information, 0 warnings, 1 errors ):
    BPED0267E: Syntactical error found in BPEL file
    'Claim/TOBE/RequestExternalReports/RequestExternalReports.bpel' (row:
    223,
    column: 73). Detail message: cvc-complex-type.2.4.b: The content of
    element
    'wpc:webClientSettings' is not complete. One of

    Если вы встретитесь со второй ошибкой, удалите строку <wpc:webClientSettings clientType="Web Client"/> из файла RequestExternalReports.bpel.

    10.8.3 Создание среды для тестирования

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

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

  • первый вариант работает на сервере WebSphere Application Server;
  • второй вариант работает в брокере.
  • Выбор зависит от того, какая версия системы управления оценщиками инсталлирована в WebSphere Application Server. Таблица оценщиков и их URL жестко прописаны в системе управления оценщиками. Одна версия указывает на WebSphere Application Server, а другая – на WebSphere Business Integration Message Broker.

    Выбор системы оценщика

    Чтобы выбрать систему, выполните следующие шаги:

  • Проверьте, какая система установлена в данный момент:
  • Откройте браузер и откройте административную консоль WebSphere Application Server на машине SAH414A, введя адрес http://sah414a:9090/admin/.
  • Откройте раздел установленных приложений, поставьте галочку напротив ).(рис 10.56) Административная консоль WebSphere Application Server
  • Скачайте файл AssessorManagementService.ear.
  • Вы можете просматривать EAR-файл, используя утилиту распаковки, например WinZip, или же можете импортировать этот файл в WebSphere Studio Application Development Integration Edition в виде нового EAR-проекта, как мы описываем здесь.
  • Выберите пункт меню File (Файл) $$\to$$ Import (Импорт) $$\to$$ EAR file (EAR-файл) $$\to$$ Next (Далее). Найдите файл AssessorManagementService.ear, нажмите Finish (Готово).
  • Откройте перспективу J2EE и представление J2EE Hierarchy (Иерархия J2EE), выберите элемент EJB Modules (EJB-модули) $$\to$$ AssessorManagementServiceEJB $$\to$$ Session Beans (Сеансовые компоненты) $$\to$$ AssessorManagement. Двойным щелчком откройте компонент AssessorManagementBean, откройте представление Outline (Общий обзор) в окне ниже, сделайте двойной щелчок мышью по удаленному интерфейсу requestListAssessors и изучите код, приведенный в примере 10.10.
  • //Создание жестко прописанного массива оценщиков и нового списка
    АssessorList
    Assessor stubAssessor = new Assessor();
    stubAssessor.setAssessorID( new Integer(9999));
    stubAssessor.setAssessorURL( "http://SAH414A:7080/Availability");
    Assessor anotherStubAssessor = new Assessor();
    // оценщик только один, просто две записи с одним пунктом назначения
    anotherStubAssessor.setAssessorID(new Integer(5555));
    anotherStubAssessor.setAssessorURL("http://SAH414A:7080/Availability");
    Assessor [] assArray = new Assessor[2];
    assArray[0] = stubAssessor;
    assArray[1] = anotherStubAssessor;
    AssessorList stubAssList = new AssessorList();
    stubAssList.setAssessors( assArray);
    stubAssList.setClaimId( claimID);

    Можно видеть, что размещаемый EAR-файл использует оценщика, реализованного в брокере.

    Чтобы использовать альтернативного оценщика ( примерПросим прощения за опечатку в URL – эта опечатка "верная". 10.11), найдите директорию .\SG24-6636\WAS\Flow2 и разместите файл Flow2_AssessorManagementService_SOURCE.ear в WebSphere Application Server. Версия для брокера находится в поддиректории Broker Assessor.

    stubAssessor.setAssessorURL(
    "http://SAH414A:9080/AssessorAvailaibilityApplicationsEJBRouter/services/
    Availa
    bility");
    Assessor anotherStubAssessor = new Assessor();
    // оценщик только один, просто две записи с одним пунктом назначения
    anotherStubAssessor.setAssessorID(new Integer(5555));
    anotherStubAssessor.setAssessorURL("http://SAH414A:9080/AssessorAvailaibilityAp
    plicationsEJBRouter/services/Availability");
    Ограничение. В настоящий момент для оценщика, работающего с WebSphere Application Server, не реализованы асинхронные ответы. Подтверждение и отчет следует отправлять вручную. По этой причине мы предпочитаем использовать реализацию с брокером. WebSphere MQ применяется для связывания этапов в ответе оценщика. Отсрочку для подтверждений и отчетов можно задавать путем включения и отключения очередей в потоках Flow7A и FLOW8, как описано в разделе 9.9.2, "Каркас системы оценщика и системы для работы с претензиями".

    Вызов служб оркестровки

    Как вы помните, система proxyAssessorSystem вызывает три односторонние SOAP-службы, принадлежащие к потоку RequestExternalReports. Как нам узнать, какой URL нужно записать в узлы HTTPRequest системы proxyAssessorSystem в брокере для этих служб?

    На этапе генерации кода размещения в разделе "Компоновка бизнес-процесса" вы указали адрес маршрутизации для каждой из трех служб - "http://localhost:9080/". Можно ли записать этот путь в ESB для узлов Http Request, которые отвечают Process Choreographer? Оказывается, нельзя.

    URL Web-службы, который вы должны указывать в брокере для вызова сервера за- просов о готовности в Choreographer, должен быть таким:

    http://SAH414:9080/ITSOLGIWeb/services/RequestExternalReportsAssessor
    AvailabilityListHTTPServicePort

    Откуда берется такой путь?

  • В WebSphere Studio Application Development Integration Edition откройте проект ITSOLGIWeb в папке Deployable services (Размещаемые службы).
  • Найдите файл web.xml (дескриптор размещения в Web) и откройте его.
  • Вы можете видеть, что в проекте определены три сервлета и JSP. Именно эти службы вызывает брокер.(рис 10.57) Web-службы, размещаемые в RequestExternalReports.bpelНажмите кнопку Details (Подробно) и изучите связи URL. Путь для службы AssessorAvailabilitylist будет выглядеть так:
    services/RequestExternalReportsAssessorAvailabilityListHTTPServicePort
    Добавьте этот путь к адресу маршрутизатора в URL, и вы получите полный путь к Web-службе, и его эквивалент для двух других служб:
    ITSOLGIWeb/services/RequestExternalReportsAssessorAvailabilityListHTTP
    ServicePort
  • Нам нужно изменить URL-адреса в брокере, поскольку они не совпадают с адресами Web-служб в новом процессе, который был нами создан. Сделать это можно без прямого редактирования потока в брокере сообщений. Это одноразовая модификация. После повторного размещения значение этого параметра в потоке снова будет восстановлено. Поэтому лучше будет изменить параметр в потоке:
  • Откройте в брокере административную перспективу, найдите папку Deployables (Размещаемые компоненты) в директории Broker Archives и откройте элемент LGIAvailability.
  • Выберите узел HTTP Request в потоке Output3a и замените URL Web-службы на URL RequestExternalReportsAssessorAvailabilityListHTTPService из модуля ITSOWorkshopWeb.
    http://SAH414:9080/services/RequestExternalReportsAssessorAvailability
    ListHTTPServicePort
  • Повторите процедуру для двух других Web-служб.
  • Снова разместите модули LGIReport и LGIAvailability.
  • Включите нормальную трассировку для обеих групп выполнения.
  • 10.8.4 Тестирование и отладка бизнес-процесса

    Прежде чем начинать тестирование Process Choreographer, убедитесь, что все необходимые службы, функционирующие в WebSphere Application Server и WebSphere Business Integration Message Broker, работоспособны. Используйте для этого инструмент Web Services Explorer из WebSphere Studio Application Development Integration Edition.

    10.8.5 Тестирование и отладка бизнес-процесса

    Чтобы протестировать бизнес-процесс, выполните следующие шаги:

  • Щелкните правой кнопкой мыши по серверу TestServer и выберите пункт меню Start (Запуск). Сервер будет запущен. Убедитесь, что на консоли появилось сооб- щение message server1 is opened for e-business. Вот несколько типичных проблем, возникающих на этой стадии, и пути их разрешения:
  • Наиболее распространенной причиной ошибок при запуске сервера являются пути, превышающие по длине максимально разрешенные в Windows. Быстрое решение – преобразование директории, содержащей рабочее пространство, с помощью Windows-команды SUBST.
  • Еще одной распространенной причиной проблем, например сообщений о синтаксических ошибках в файле Application.xml, является неверное применение службы.
  • Убедитесь, что вы скомпоновали, разместили, опубликовали, запустили и просматриваете simpleProcess, описанный в центре информации.
  • Откройте представление Servers (Серверы) и выберите пункт меню Launch Business Process Web client (Запустить Web-клиент бизнес-процесса). Откроется окно браузера.
  • Выберите в меню в левой части окна элемент my template (Мой шаблон). Вы увидите, что процесс RequestExternalReports готов (рис 10.58).(рис 10.58) Запущенный клиент Process Choreographer с выбранным элементом My Templates
  • Щелкните по полю RequestExternalReports $$\to$$ Start instance (Запустить экземпляр). Появится панель, отображающая входное сообщение (рис 10.59).(рис 10.59) Входное сообщение процесса
  • Введите данные. Единственное требование, чтобы данные соответствовали типам. В поле даты вводите дату в формате мм-дд-гггг.
  • Нажмите кнопку Start instance (Запустить экземпляр), чтобы запустить процесс.
  • На панели Created by Me (Создано мной) выберите только что запущенный процесс и выберите Monitor (Мониторинг).
  • Если все в порядке, процесс отобразит список выполненных задач и будет ожидать ввода. На рис 10.60 показан пример, в котором процесс ждет ответа от выбранного оценщика.(рис 10.60) Ожидание ответа от proxyAssessorSystem
  • Поскольку для имитации оценщиков мы используем брокер, в WebSphere MQ Explorer в очередях FLOW7A и FLOW8 будут содержаться по одному сообщению, а очереди будут приостановлены для имитации задержки. Освобождение сообщений в нужном порядке приведет к продолжению выполнения.
  • Отладка процесса

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

  • пошагово проверить выполнение экземпляра процесса;
  • добавить точки останова;
  • изучить данные на каждом из шагов.
  • Чтобы протестировать процесс в режиме отладки, выполните следующие действия:

  • Добавьте точку останова для проверки этапов выполнения. Щелкните правой кнопкой мыши по операции в BPEL-редакторе и выберите пункт меню Add Entry/Exit break point (Добавить элемент/точка останова для выхода).
  • Запустите сервер TestServer в режиме отладки. Щелкните правой кнопкой мыши по ) и выберите пункт Debug (Отладка). Откроется перспектива Debug (Отладка).(рис 10.61) Перспектива Debug (Отладка)
  • Выполняйте процесс пошагово, нажимая кнопки step over (Пропуск блока) или step in (Вход в блок) в представлении Debug (Отладка). В представлении Variables (Переменные) в правой части перспективы отображаются значения переменных.

    В качестве примера на рис 10.62 показан процесс, приостановленный на входе во Java-фрагмент, агрегирующий результаты запроса о том, какие оценщики являются потенциальными кандидатами для проведения оценки и каково значение ResponseTimePolicy для данного клиента.

    (рис 10.62) Процесс, приостановленный на входе во Java-фрагмент

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

    Убедитесь, что представление Debug (Отладка) отображается в верхнем левом окне и выбран текущий экземпляр процесса. В верхнем правой окне отобразится список переменных.

  • Откройте переменную IdentifyAssessorsOutputCriteriaVariable и убедитесь, что служба AssessorManagement вернула список оценщиков.
  • Войдите (step into) в Java-фрагмент. Откроется закладка Implementation (Реализация) Java-фрагмента.
  • Пройдите (step over) все инструкции.
  • На выходе из фрагмента проверьте, чтобы в переменной AggregateRequestAvailability все части были установлены правильно, в особенности список оценщиков.
  • Перешагните (step over) трансформирующую службу ToRequestAvailability. Отладка такой формы реализации, как список стилей, невозможна.
  • Теперь проверьте переменную RequestAvailabilityInputCriteriaVariable – задан ли список оценщиков?
  • Возможно, в данном случае список оценщиков не установлен и причина ошибки в proxyAssessorSystem :ESB.

    10.9 Размещение процесса на сервере

    Бизнес-процессы, которые разработаны в WebSphere Studio Application Development Integration Edition, размещаются в WebSphere Business Integration Server Foundation в формате EAR-файла и выполняются в контейнере бизнес-процесса, который предоставляет WebSphere Business Integration Server Foundation.

    WebSphere Business Integration Server Foundation предлагает систему работы с процессом, основанную на Java 2 Enterprise Edition, которая поддерживает следующие возможности:

  • Поддержка процессов разного стиля.

    Поддерживаются непрерываемые (однотранзакционные) и прерываемые (многотранзакционные) процессы.

  • Поддержка компенсации.

    Компоненты времени выполнения, которые поддерживают компенсацию (откат выполненной работы) для процессов.

  • Поддержка вмешательства человека.

    Компоненты времени выполнения, которые позволяют человеку взаимодействовать с процессами, например при помощи интерфейса на основе Web-браузера, для предоставления элементов работы и процессов.

  • В системе работы с процессами, входящей в WebSphere Business Integration Server Foundation, есть несколько компонентов.

  • Навигация по процессам – управление экземплярами процесса и их состоянием.
  • Вызов Web-служб и запрос на выполнение процессов осуществляется как через внешний, так и через внутренний интерфейс.
  • Операции, выполняемые персоналом, управляются компонентом, отвечающим за взаимодействие с человеком.
  • Все компоненты системы работы с бизнес-процессом выполняются на WebSphere Application Server и используют базу данных и службы, связанные с очередями сообщений.
  • (рис 10.63) Компоненты WebSphere Business Integration Server Foundation

    10.9.1 Инсталляция приложения бизнес-процесса

  • Запустите браузер с административной консолью (http://SAH414B:9080/Admin), перейдите к разделу Applications (Приложения) $$\to$$ Enterprise Applications (Корпоративные приложения) и нажмите Install (Установить).
  • Перейдите к файлу ITSOLGIEAR.ear, нажмите Next (Далее), затем снова Next (Далее).
  • В Шаге 1 мастера Install New Application (Инсталляция нового приложения) укажите короткое имя директории в корне выбранного диска (в нашем случае – D) для инсталляции приложения (создайте директорию, прежде чем продолжить). Установите флажок Deploy EJBs (Размещать EJB).
  • Перейдите к шагу 11 и установите флажок Enable (Включить) около Create tables (Создавать таблицы). Если на сервере есть несколько баз данных, вам будет предложено выбрать одну, иначе, как в нашем случае, мастер сам выберет установленную базу и продолжит.
  • Закончите конфигурирование, подтвердите, что приложение было установлено успешно, и сохраните его в базе данных главной конфигурации.
  • Перейдите к панели Enterprise Applications (Корпоративные приложения) и запустите приложение. Теперь оно готово к работе.
  • 10.9.2 Проверка приложения

  • Запустите Web-клиент контейнера бизнес-процесса, указав в браузере URL http://sah414b:9080/bpe/webclient.
  • Измените конфигурацию брокера для вызова принимающих операций на рабо- чем сервере, расположенном на машине SAH414B. Делается это без изменения потока сообщений, из административной перспективы инструментария брокера. Например, на рис 10.64 показан поток Output6a.(рис 10.64) Изменение имени хоста на SAH414B для потока Output6a
  • Запустите проверочный тест. Если вы хотите протестировать операцию, выполняемую персоналом, измените ответ в подтверждении оценщика на NO.
  • 10.10 Заключение

    В этой лекции описано, как ИТ-специалист по процессам изменяет бизнес-процесс, предоставленный бизнес-аналитиком, с целью реализации интерфейсов, предложенных ИТ-архитектором, а затем тестирует и размещает процесс в WebSphere Business Integration Server Foundation.

    Последний этап в нашем решении – это интеграция рабочего потока обработки претензий, работающего на сервере WebSphere MQ Workflow с бизнес-процессом с применением интеграционного вспомогательного пакета (supportpac) WA0D.

    Вернуться к учебному плану