Опубликован: 14.08.2008 | Уровень: специалист | Доступ: платный
Лекция 10:

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

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

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

  1. Добавьте Java-фрагмент, называющийся AssessorURL.
  2. Вставьте фрагмент AssessorURL в поток RequestExternalReports, как показано на рис. 10.29.
    Вставка Java-фрагмента AssessorURL в поток

    Рис. 10.29. Вставка Java-фрагмента AssessorURL в поток
  3. Создайте глобальную переменную с именем SelectedAssessor.
  4. Создайте 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.
  5. Импортирование сообщения SelectedAssessor в службу TransformerRequestAssessment и установление связи от SelectedAssessor.assessorURL к actionAssessmentRequest. assessor.assessorURL.
  6. Написание кода Java-фрагмента AssessorURL.

(Задачи пп. 5, 6 описываются в последующих разделах более подробно.)

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

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

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

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

  5. В качестве имени файла трансформирующей службы укажите TransformRequestAssessment. Выполните описанные ранее шаги по заданию имени для партнерской ссылки, действия и т. п.
  6. Приведите в порядок схему потока, когда закончите выполнения указанных шагов, чтобы она выглядела так, как показано на рис. 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.

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

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

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

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

    • щелкните правой кнопкой мыши и выберите пункт меню Get variable (Получить переменную) \to Part... (Часть) и выберите IdentifyAssessorsOutputCriteriaVariable ;
    • используйте автозаполнение строки, нажав CTRL_Пробел \to getParameters и т. д.
    Готовая строка кода показана в примере 10.2.
    Assessor assessorList [] =
    getIdentifyAssessorsOutputCriteriaVariable().getParameters().
    getRequestListAssessorsReturn().getAssessors();
    Пример 10.2. Java-фрагмент AssessorURL, строки из мастера Get Variable (Получение переменной)
    Совет. Если вы начнете вводить 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, которая заставит заработать автозаполнение и устранит все ошибки в только что написанном коде.
  4. Добавьте строку кода, которая получит идентификатор выбранного оценщика из выходной переменной системы бизнес-правил – selectedAssessorOutputCriteriaVariable. Для хранения этого значения нам потребуется создать новую локальную переменную:
    Integer selectedAssessorID
    а затем нужно инициализировать ее, используя автозаполнение:
    = getSelectAssessorOutputCriteriaVariable().getParameters()
    .getSelectAssessorReturn().getAssessorID();
  5. Создайте цикл для поиска выбранного оценщика и сохранения 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>
      }
      Пример 10.3. Генерация цикла for с временной переменной
  6. В области focus мы вставляем инструкцию if для проверки совпадения assessorID:
    • Введите if и используйте автозаполнение для создания простого шаблона инструкции if:
      if (условие) { }
    • С помощью автозаполнения замените условие следующим выражением:
      assessor.getAssessorID() == selectedAssessorID
  7. В инструкции 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);
Пример 10.4. Полный фрагмент Java AssessorURL
Добавление SelectedAssessor в RequestAssessmentTransformer

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

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

Чтобы пока завершить создание связей, свяжите поле makeOfCar с полями makeOfCar и registration, чтобы все поля были с чем-то связаны.

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

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

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

Рис. 10.31. Соединение операции трансформации ToStoreReport
RequestExternalReport Reply

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

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

Рис. 10.32. Соединение операции трансформации ToRequestExternalReports Reply
Заключение

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

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

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

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

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

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

  1. Нажмите на значок + на панели Correlation Sets (Корреляционные наборы) ( рис. 10.33), чтобы добавить новый корреляционный набор. Назовите новый корреляционный набор Claims.
    Добавление нового корреляционного набора

    Рис. 10.33. Добавление нового корреляционного набора
  2. Выделите набор Claims и перейдите на закладку Properties (Свойства) окна Detail (Подробно). Нажмите кнопку New (Новое). Откроется окно Create message property (Создание свойства сообщения).
  3. Введите в поле имени свойства значение claimID, а в раскрывающемся списке выберите тип xsd:int.
  4. Нажмите кнопку 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.
  5. Повторяйте шаг 4, чтобы добавить псевдонимы, приведенные в табл. 10.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
    Далее мы свяжем корреляционный набор с каждой из принимающих операций.
  6. Щелкните по операции RequestExternalReports Receive в редакторе BPEL и перейдите на закладку Correlation (корреляция) в окне Detail (Подробно).
  7. Нажмите кнопку Add (Добавить) и измените значение в поле Initiation (Инициация) на Yes ( рис. 10.34).
Присвоение корреляционного набора принимающей операции

Рис. 10.34. Присвоение корреляционного набора принимающей операции

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

Таблица 10.5. Свойства корреляционного набора
Операция Направление Инициация Корреляционный набор
RequestExternalReports Receive Receive Yes Claims
AssessorAvailabilityReceive Receive No Claims
AllocateAssessorRepsonse Receive No Claims
AssessorSendReport Receive No Claims
Илья Макаренко
Илья Макаренко
О начале обучения
Александр Медов
Александр Медов
Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?
Надежда Белякова
Надежда Белякова
Россия
Pavel Pelevin
Pavel Pelevin
Украина, Одесса