IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  WebSphere  >

Подключение при помощи адаптеров WebSphere Integration Developer : Часть 2, WebSphere Adapter для однородных файлов

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Мэнди Хабински, тестировщик программного обеспечения, IBM
Таня Руппел, руководитель группы, IBM
Артур Ружински, разработчик программного обеспечения, IBM
Ричард Грегори, штатный разработчик ПО, IBM
Грег Адамс, инженер, IBM

27.03.2008

Journal icon Это вторая статья из серии статей, исследующих использование адаптеров ресурсов с IBM® WebSphere® Integration Developer. В первой статье были рассмотрены адаптеры ресурсов и их место в сервис-ориентированной разработке. В данной статье мы расскажем, как можно прочитать данные из однородного файла (flat file), использовать эти данные в приложении WebSphere Integration Developer и передать их обратно в файловую систему.

От IBM WebSphere Developer Technical Journal.

Введение

В первой статье данной серии "Подключение при помощи адаптеров: Введение" вы познакомились с основами использования каждого типа адаптера ресурсов с WebSphere Integration Developer, а также с различиями между входящей и исходящей обработкой и с тем, как адаптеры ресурсов вписываются в ваше приложение WebSphere Integration Developer. В данной статье мы расскажем, как приложение может прочитать данные из (входящая обработка) и записать их в (исходящая обработка) файловую систему, используя IBM WebSphere Adapter for Flat Files. Мы также покажем, как создать модуль при помощи WebSphere Integration Developer, который использует WebSphere Adapter for Flat Files для чтения и записи файлов данных.

Что такое однородный файл

Термин "однородный файл" (flatfile) относится к любому файлу в файловой системе, в отличие от более сложного набора файлов, например, в структурированной базе данных. Данные в однородном файле обычно записываются последовательно и без каких-либо метаданных (таких как индексы, ключи и отношения), которые можно найти в базе данных. Адаптер для однородных файлов можно использовать для чтения и записи любого типа файлов. Однако обычно этот адаптер используется для чтения и записи текстовых файлов, которые сохраняют записи в формате однородных файлов, например, XML или Comma-Separated Values (CSV). На рисунке 1 показан пример записей в каждом формате.


Рисунок 1. Два однородных файла: XML (слева) и CSV (справа)
Рисунок 1. Два однородных файла: XML (слева) и CSV (справа)

Что такое WebSphere Adapter for Flat Files

Мастер Enterprise Service Discovery: Инструментальная программа, используемая с целью генерирования бизнес-объектов, интерфейсов и компонентов WebSphere Integration Developer для доступа к внешней системе из приложения WebSphere.
Как указывалось в первой части данной серии статей, для подключения приложения к корпоративной информационной системе (enterprise information system - EIS) стандартным способом используется адаптер ресурсов. Мастер Enterprise Service Discovery в WebSphere Integration Developer использует адаптер ресурсов для обнаружения сервисов и бизнес-объектов в EIS, а затем создает компонент export для входящих (inbound) сервисов и компонент import для исходящих (outbound) сервисов. Все, что вам нужно - адаптер ресурсов для конкретной EIS.

Существуют такие EIS, которые выводят данные в набор файлов в каталоге. Например, система обработки заказов, формирующая файлы, содержащие информацию о заказах, которые могут обрабатываться пакетным способом во время наименьшей нагрузки. Эти файлы могут хранить бизнес-информацию последовательно, а не структурировано, как это было бы в реляционной базе данных. Эта же или другая информационная система может использовать набор файлов в каталоге как входные данные для программ. Для интеграции этого типа EIS в приложение следует использовать WebSphere Adapter for Flat Files Version 6.0.2, потому что этот адаптер соединяет файловые системы и приложения, выполняющиеся на сервере приложений, например, на WebSphere Process Server или WebSphere Enterprise Service Bus.

Любое приложение WebSphere может использовать этот адаптер для создания и управления однородными файлами или для управления каталогами, а также для чтения файлов из этого каталога. При помощи мастера Enterprise Service Discovery указываются каталоги, которые использует WebSphere Adapter for Flat Files для чтения или записи, а также формат данных в этих каталогах. Мастер Enterprise Service Discovery создает также все необходимые дополнительные артефакты, такие как компоненты import, export и соответствующие интерфейсы и бизнес-объекты.

Что такое входящая и исходящая обработка

Endpoint (оконечная точка): Компонент, взаимодействующий с адаптером через артефакт export. Endpoint получает события из хранилища событий в форме бизнес-графа.

Входящая обработка - это такой режим работы, при котором WebSphere Adapter for Flat Files следит за файловой системой, читает новые файлы и передает данные в компонент endpoint.

Исходящая обработка - это такой режим работы, при котором WebSphere Adapter for Flat Files принимает запросы (из компонента WebSphere-приложения) для выполнения операций в информационной системе и, когда нужно, возвращает результаты вызвавшей стороне.



В начало


Входящая обработка

Во время входящей обработки адаптер для однородных файлов прослушивает события, генерируемые внешней EIS. Событие представляет собой запись изменений, произошедших в каталоге событий (event directory). Каталогом событий называется каталог, за которым следит адаптер для однородных файлов с целью обнаружения новых файлов (в этот каталог записывает свои файлы EIS).

На рисунке 2 показаны четыре этапа входящей обработки:

  1. EIS записывает свои файлы в каталог событий.

  2. Адаптер для однородных файлов просматривает файлы в каталоге событий и преобразовывает данные из этих файлов в события. Адаптер может быть настроен на просмотр файлов только определенного типа либо файлов, созданных за определенный период времени.

  3. События временно помещаются в базу данных событий (event store database). Эта база данных обеспечивает персистенцию данных, для того чтобы данные события не были утеряны до того, как ваше приложение сможет их обработать, например, в случае остановки сервера после создания события. После записи в базу данных всех событий оригинальный файл удаляется из каталога событий.

Event store (хранилище событий): Таблица, создаваемая адаптером в базе данных, в которую записываются входящие события в целях защиты или восстановления.
  1. Адаптер для однородных файлов извлекает события из хранилища событий и передает каждое событие в форме бизнес-объекта через экспортированный входящий интерфейс, созданный мастером Enterprise Service Discovery.

Рисунок 2. Адаптер входящего ресурса для однородных файлов
Рисунок 2. Адаптер входящего ресурса для однородных файлов

Data Transformation Framework (DTF): Интегрированная среда, позволяющая адаптеру для однородных файлов преобразовывать данные во время исходящей обработки из бизнес-объектов в сериализированные форматы данных (например, XML и CSV), и из этих форматов обратно в бизнес-объекты во время входящей обработки.

Pass-through: Режим работы, при котором данные не преобразовываются в определенные пользователем бизнес-объекты, а передаются через приложение как неструктурированная информация.

Non-pass-through: Режим работы с использованием Data Transformation Framework.
Этот метод извлечения данных, то есть, передачи данных в формате бизнес-объекта, называется non-pass-through или Data Transformation Framework (DTF); он работает со структурированными данными.

Если приложение не знает формат файлов данных, можно настроить адаптер для однородных файлов на работу в режиме pass-through с неструктурированными данными. В этом случае адаптер не будет преобразовывать событие в бизнес-объект.

Разделение файлов

Если имеется одна запись на файл, разделение файлов (file splitting) не требуется. Оно применяется в тех случаях, когда файлы, которые нужно извлечь, велики по размеру или когда каждый из них содержит более одной записи. Разделить файлы на более мелкие части можно на основе символов-разделителей или значения фиксированного размера, что позволяет обрабатывать части файла одновременно. Каждая часть считается отдельным событием и индивидуально передается в компонент endpoint через экспортированный входящий интерфейс.

Символы-разделители записей

Символ-разделитель (delimiter): Один или несколько символов, обозначающих конец записи в файле.

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

В нашем примере XML-файла из рисунка 1 в качестве символов-разделителей используется строка ####, завершенная символом перехода на новую строку (см. рисунок 3), а в CSV-файле в качестве символов-разделителей используется только символ перехода на новую строку.

В данном случае адаптер разделяет входной файл на две части, соответствующие двум записям. Он передает записи в хранилище событий по одной друг за другом, а затем в компонент endpoint как отдельные бизнес-объекты.


Рисунок 3. Различные типы символов-разделителей
Рисунок 3. Различные типы символов-разделителей

Разделение по размеру

Функциональность split-by-size (разделение по размеру) аналогична разделению по символам-разделителям, поскольку она используется для разделения файла на более маленькие части и передачи их в компонент endpoint друг за другом. Однако эта функциональность используется с неструктурированными данными в сценариях pass-though, поскольку они не предназначаются для помещения в бизнес-объекты. Критерий разделения указывается в адаптере как количество байт. Адаптер читает файл по частям (событиям) этого размера. Каждая часть будет иметь размер, определенный критерием разделения, за исключением последней, которая может быть меньшей.

Специальное связывание данных

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

Используя связывание данных (data binding) по умолчанию адаптера для однородных файлов, можно преобразовать файлы в/из XML-формат. Для других форматов нужно использовать специальное связывание данных, определяющее правила отображения между форматом файла и бизнес-объектом. Для реализации специального связывания создайте Java-класс, который преобразовывает данные специфического формата и введите этот класс в мастере Enterprise Service Discovery при настройке адаптера.

Дополнительная информация по созданию специального связывания данных приведена в разделе "Создание специального связывания данных" в документации WebSphere Adapters.



В начало


Исходящая обработка

Для записи или изменения файлов приложение использует операции, определенные в исходящем интерфейсе, который создается при помощи мастера Enterprise Service Discovery. В следующем списке приведены создаваемые им операции для работы с неструктурированными данными (в режиме pass-through):

  • createFlatFile – сохраняет данные в новом файле или создает пустой файл
  • appendFlatFile – добавляет данные к существующему файлу
  • overwriteFlatFile – перезаписывает существующий файл новыми данными
  • deleteFlatFile – удаляет существующий файл
  • retrieveFlatFile – читает содержимое из файла (только в двоичном формате)
  • listFlatFile – составляет список файлов в каталоге
  • existsFlatFile – проверяет существование конкретного файла

Однако если настроить адаптер на работу со структурированными данными (в режиме non-pass-through или DTF), мастер Enterprise Service Discovery создает все операции и дополнительный набор из семи операций исходящего интерфейса, которые поддерживают ваши специализированные бизнес-объекты.



В начало


Использование адаптера для однородных файлов в приложении

Предположим, что вы хотите создать приложение, которое следит за определенным каталогом файловой системы, для того чтобы можно было собрать информацию о клиенте. При создании файла адаптер вызывает компонент export с данными, сохраняемыми в бизнес-объекте. Компонент export соединен с компонентом business process, который разделяет данные из файла на отдельные записи, каждая из которых помещается в свой собственный файл в каталоге output. Этот сценарий изображен на рисунке 4.


Рисунок 4. Модуль однородного файла
Рисунок 4. Модуль однородного файла

Когда файлы, содержащие записи о клиентах, находятся в каталоге входящих событий, адаптер ресурсов извлекает их, создает бизнес-объект customer и вызывает компонент export в модуле, который инициирует бизнес-процесс. Этот процесс генерирует имя нового файла на основе количества существующих файлов и указывает каталог для вывода (output). Затем бизнес-процесс записывает данные бизнес-объекта customer в отдельный XML-файл в каталог output файловой системы.



В начало


Компоновка приложения

Linux-пользователи: Приводимые здесь инструкции предполагают, что у вас выполняется WebSphere Integration Developer в операционной системе Windows. Если вы работаете с WebSphere Integration Developer в системе Linux, необходимо заменить приведенные пути к файлам на пути, соответствующие вашей операционной системе.

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

  1. Настройте базу данных для хранения событий.
  2. Выполните импорт адаптера ресурсов.
  3. Используйте мастер Enterprise Service Discovery для создания входящего сервиса однородных файлов.
  4. Используйте мастер Enterprise Service Discovery для создания исходящего сервиса однородных файлов.
  5. Реализуйте бизнес-логику.


В начало


Создание хранилища событий

Для использования входящего адаптера, прежде всего, надо настроить хранилище событий, в котором будут временно сохраняться входящие данные. В качестве хранилища событий можно использовать любой тип базы данных, но в данном примере мы будем работать с базой данных Cloudscape, поставляемой с WebSphere Integration Developer. Когда компонент, например, адаптер ресурсов в WebSphere Process Server нуждается в доступе к базе данных, он использует источник данных сервера (server data source).

Для настройки хранилища событий:

  1. Создайте базу данных.
  2. Создайте источник данных на сервере, который использует эту базу данных.

Для использования входящего адаптера необходимо создать базу данных Cloudscape при помощи приложения Cview:

  1. Выполните следующую команду: <WIDInstalldir>\runtimes\bi_v6\cloudscape\bin\embedded\cview.bat .
  2. После открытия окна Cview выберите File - New - Database, а затем введите FlatFilesDB в поле Name.
  3. Нажмите кнопку OK и закройте приложение Cview.

Теперь в WebSphere Process Server необходимо создать ссылку на новую базу данных:

  1. Если у вас еще не запущен WebSphere Integration Developer, сделайте это сейчас и перейдите в перспективу Business Integration.
  2. Для запуска сервера перейдите в вид (view) Servers, щелкните правой кнопкой мыши на WebSphere Process Server v6.0 и выберите Start.
  3. После запуска сервера опять щелкните правой кнопкой мыши на сервере и выберите пункт Run administrative console.
  4. Зарегистрируйтесь в консоли администратора, используя любое имя пользователя.
  5. В консоли администратора разверните Resources в левой панели и нажмите ссылку JDBC Providers.
  6. Нажмите ссылку Cloudscape JDBC Provider(XA), а затем на следующей странице нажмите ссылку Data sources.
  7. Нажмите кнопку New для создания нового источника данных.

Для связывания источника данных сервера с базой данных, созданной в первой части данного раздела:

  1. На следующей странице (показанной на рисунке 5) введите jdbc/FlatFilesDB в поле JNDI name, а затем внизу страницы введите FlatFilesDB в поле Database name.



    Рисунок 5. Источник данных Cloudscape
    Рисунок 5. Источник данных Cloudscape

  2. Нажмите кнопку OK, ссылку save и кнопку Save.
  3. Проверьте новый источник данных (JNDI-имя jdbc/FlatFilesDB) и нажмите кнопку Test Connection. Вы должны увидеть сообщение "Test connection successful" (Тест соединения выполнен успешно).
  4. Выйдите и закройте консоль администратора.


В начало


Создание входящего сервиса

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

  1. Импортируйте адаптер ресурсов и создайте проект адаптера ресурсов.
  2. Создайте модуль, который будет содержать, как минимум, компонент export и компонент, с которым он будет связан.
  3. Используйте мастер для обнаружения сервисов и создания компонента export.

В качестве более краткого способа вы могли бы использовать мастер Enterprise Service Discovery, поскольку он позволяет создать проект адаптера ресурсов и модуль, но для ясности изложения мы покажем эти три шага по отдельности.

Импортирование адаптера ресурсов

Для импорта адаптера ресурсов в проекте:

  1. В виде Business Integration щелкните правой кнопкой мыши и выберите Import.
  2. В открывшемся диалоговом окне Import выберите RAR file и нажмите кнопку Next.
  3. Рядом с полем Connector file нажмите кнопку Browse и найдите <WIDInstallDIR>/Resource Adapters/FlatFile/deploy.
  4. Выберите файл CWYFF_FlatFile.rar, нажмите кнопку Open, а затем кнопку Finish. Если откроется диалоговое окно с запросом о том, хотите ли вы переключиться в перспективу J2EE, нажмите кнопку No, поскольку мы будем продолжать работать в виде Business Integration.

Теперь в вашей рабочей области (workspace) имеется проект адаптера ресурсов. Отметим, что его нет в виде Business Integration, поэтому не беспокойтесь, если не сможете его найти. Он появится в мастере Enterprise Service Discovery на следующих шагах.

Обнаружение сервиса однородных файлов

Далее вы создадите новый модуль и примените мастер Enterprise Service Discovery для создания компонента export для однородных файлов в модуле.

  1. В виде Business Integration щелкните правой кнопкой мыши, выберите New - Module для создания модуля и назовите его SeparateCustomersModule.
  2. Для открытия мастера Enterprise Service Discovery выберите File - New - Enterprise Service Discovery.
  3. Убедитесь в том, что выбран вариант IBM WebSphere Adapter for Flat files (version 6.0.2) from the CWYFF_FlatFile Connector Project (это проект, созданный на предыдущем шаге), и нажмите кнопку Next. Обратите внимание на кнопку Import Resource Adapter. Если вы нажмете ее, откроется диалоговое окно Import, которое вы видели на предыдущих шагах.

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

Поскольку однородные файлы не содержат метаданных, описывающих структуру бизнес-данных (в отличие от других EIS, например, планирование ресурсов предприятия или системы обработки транзакций, которые часто содержат метаданные, описывающие их бизнес-данные), мастер Enterprise Service Discovery нуждается в подсказке для распознавания структуры данных в файлах. Следовательно, бизнес-объекты должны существовать до начала работы мастера. В данном случае мы используем бизнес-объект customer, поставляемый с WebSphere Integration Developer как пример.

Совет: Существует множество вариантов выбора таблиц кодировки символов. Для быстрого выбора UTF-8 из списка нажмите U восемь раз.
  1. Рядом с Folder Name нажмите Browse и найдите <WIDInstallDIR>\Resource Adapters\FlatFile\samples.
  2. В списке Character Set выберите UTF-8, а в списке Content Type выберите text/xml. Мастер должен выглядеть примерно так, как показано на рисунке 6.



    Рисунок 6. Конфигурация соединения
    Рисунок 6. Конфигурация соединения

    В следующей таблице объясняется, что вы только что настроили на шаге 2:



    СвойствоОписание

    Folder name (название папки)

    Название папки указывает, где расположены бизнес-объекты, импортируемые мастером.

    Content type (тип содержимого)

    При выборе text/xml указывается, какой формат данных ожидает адаптер при выполнении операций чтения или записи, и связанный тип DataBinding, XMLBOSerializerDataBinding, заполняет поле DataBinding type.



  3. Нажмите кнопку Next.
  4. На странице Find and Discover Enterprise Services нажмите кнопку Execute Query. Вы должны увидеть бизнес-объект Customer ниже поля Objects discovered by query.
  5. Выберите Customer, а затем нажмите кнопку Add to import list.

На рисунке 7 показан бизнес-объект Customer. Для некоторых EIS адаптер ресурсов запрашивает метаданные в информационной системе для обнаружения бизнес-объектов. В данном случае метаданные предоставлены в форме файла определения XML-схемы, описывающего данные в однородных файлах.


Рисунок 7. Обнаруженный бизнес-объект
Рисунок 7. Обнаруженный бизнес-объект

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

  1. Нажмите кнопку Next.
  2. На странице Configure Objects выберите Inbound в качестве типа сервиса. На рисунке 8 показана установка типа inbound сервиса. Операции для сервиса затемнены, потому что они не применимы как входящие операции. Нажмите кнопку Next.



    Рисунок 8. Страница Configure Objects
    Рисунок 8. Страница Configure Objects

  3. На странице Generate Artifacts убедитесь в том, что в качестве модуля выбран SeparateCustomersModule, и установите значения, приведенные в следующей таблице (все остальные поля можно оставить установленными по умолчанию):



    ПолеЗначение

    Event Directory (каталог событий)

    c:\flatfiles\inboundevents

    Archive Directory (каталог архивов)

    c:\flatfiles\inboundarchive

    DataSource JNDI Name (JNDI-имя источника данных)

    jdbc/FlatFilesDB

    Event Table Name (название таблицы событий)

    FlatFilesDB

    Split Criteria (критерий разделения)

    ####;\n

    Splitting Function Class Name (имя класса функции разделения)

    com.ibm.j2ca.utils.filesplit.SplitByDelimiter

    Event Content Type (тип содержимого события)

    text/xml



  4. Нажмите кнопку Finish.

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


Рисунок 9. Страница Generate Artifacts
Рисунок 9. Страница Generate Artifacts

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

Poll period (период опроса) Указывает частоту проверки адаптером для однородных файлов каталога входящих событий. В данном примере используется значение по умолчанию - 2000 миллисекунд.

Poll qualify (значение опроса)

Указывает количество событий (файлов для операций non-pass-through или бизнес-объектов для операций pass-through), которые может прочитать адаптер для однородных файлов из каталога входящих событий в течение одного периода опроса. В данном примере используется значение по умолчанию 10.

Event Directory (каталог событий)

Указывает путь и имя каталога, в котором адаптер для однородных файлов ищет входные файлы.

Archive Directory (каталог архивов)

Путь и имя каталога, в котором архивируются обработанные файлы. Файлы не архивируются по умолчанию; то есть, если это поле оставить пустым, входящие файлы после обработки удаляются.

DataSource JNDI Name (JNDI-имя источника данных)

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

Event Table Name (имя таблицы событий)

Имя таблицы, которое адаптер для однородных файлов использует для персистенции событий. Имя таблицы не фиксировано; вы можете указывать здесь любую строку. Если вы отметите флажок Create Table, таблица событий автоматически создастся в базе данных.

Split Criteria (критерий разделения)

Критерий разделения, который используется адаптером для однородных файлов при определении места разделения файла. Если используется одна запись на файл, поле Split Criteria оставляется пустым.

Давайте немного подробнее рассмотрим критерий разделения. Выбирая в качестве критерия разделения ####;\n (точка с запятой необходима для отделения между собой нескольких символов-разделителей), мы предполагаем, что записи в нашем входном XML-файле разделены символами #### и символом перехода на новую строку, как в следующем примере:

    … 
    <State>ON</State> 
</Customer>
#### 
<?xml version="1.0" encoding="UTF-8"?>
<Customer>
    <customerName>Matt</customerName>
    …

При вводе символов-разделителей для критерия разделения необходимо также вводить значение в поле Splitting Function Class Name, для того чтобы критерий разделения указывал на следующий предопределенный класс (для символов-разделителей): com.ibm.j2ca.utils.filesplit.SplitByDelimiter.

Указывая символ-разделитель (или другую функцию разделения файлов, например, chunk-size - размер части), вы меняете значение свойства poll quantity с максимального количества файлов, опрашиваемых каждый раз в каталоге событий, на максимальное количество бизнес-объектов, извлекаемых во время каждого опроса. Например, допустим, вы установили poll quantity в значение 10, и в каталоге событий находятся два файла. Первый файл содержит девять записей, а второй файл - только две записи. После начала цикла опроса все девять бизнес-объектов извлекаются из первого файла, и только первый бизнес-объект извлекается из второго файла. Оставшийся объект из второго файла извлекается на следующем цикле опроса.

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


Рисунок 10. SeparateCustomersModule после завершения мастера Enterprise Service Discovery
Рисунок 10. SeparateCustomersModule после завершения мастера Enterprise Service Discovery

Business graph (бизнес-граф): Оболочка над бизнес-объектом или иерархией бизнес-объектов для предоставления дополнительных данных корпоративной информационной системе.

Мы завершили создание входящего сервиса, использующего WebSphere Adapter for Flat Files. Давайте взглянем на артефакты, имеющиеся теперь в нашей рабочей области.

ТипИмяОписание

Export

FlatFileInboundInterface

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

Interface

FlatFileInboundInterface

Этот интерфейс содержит операции, созданные мастером Enterprise Service Discovery.

Operation

emitFlatFile

Эта операция вызывается после опроса адаптером для однородных файлов каталога событий в режиме pass-through с неструктурированными данными. Она не используется в данном примере.

Operation

emitCustomerWrapper

Эта операция вызывается после опроса адаптером для однородных файлов каталога события в режиме non-pass-through и обрабатывает данные как бизнес-объект Customer.

Data Types

FlatFile

FlatFileBG

FileContent

UnstructuredContent

Эти бизнес-объекты и бизнес-графы создаются мастером Enterprise Service Discovery для содержания входящих неструктурированных данных. Но в данном примере они не используются.

Data Types

Customer

CustomerWrapper

CustomerWrapperBG

Бизнес-объект Customer импортируется из каталога примеров. CustomerWrapper создается мастером Enterprise Service Discovery для содержания бизнес-объекта Customer вместе со специфической для адаптера информацией. Эти типы данных создаются только тогда, когда вы предоставляете бизнес-объект.

Созданные бизнес-объекты

WebSphere Adapter for Flat Files определяет и генерирует бизнес-объекты на основе данных, собранных при помощи мастера Enterprise Service Discovery. Для обеих обработок (входящей и исходящей) он генерирует следующие артефакты:

  • FlatFile
  • FlatFileBG
  • UnstructuredContent

FlatFile - это оболочка, содержащая бизнес-объект UnstructuredContent и специфичные для файла данные. FlatFileBG - это бизнес-граф, который содержит в себе бизнес-объект FlatFile, как показано на рисунке 11. Как мы уже обсуждали в первой части данной серии статей, бизнес-граф представляет собой контейнер для бизнес-объекта, имеющий команду (verb) или инструкции о том, что делать с данными. Однако адаптер для однородных файлов не использует поле verb бизнес-графа. Мастер Enterprise Service Discovery всегда создает бизнес-графы, которые иногда используются как параметры операции для интерфейсов import и export.


Рисунок 11. Бизнес-граф FlatFileBG
Рисунок 11. Бизнес-граф FlatFileBG

На предыдущих шагах вы настроили адаптер на использование структурированных данных (DTF). Поэтому мастер Enterprise Sservice Discovery генерирует два дополнительных бизнес-объекта, как показано на рисунке 12. Поскольку имя папки в конфигурации соединения содержало бизнес-объект Customer (см. рисунок 7), бизнес-объект был импортирован в модуль, и мастер создал CustomerWrapper и CustomerWrapperBG, как показано на рисунке 12.

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


Рисунок 12. Бизнес-граф The CustomerWrapperBG
Рисунок 12. Бизнес-граф The CustomerWrapperBG


В начало


Создание исходящего сервиса

А теперь давайте создадим исходящий сервис:

  1. Выберите File - New - Enterprise Service Discovery.
  2. Убедитесь в том, что выбран IBM WebSphere Adapter for Flat files (version 6.0.2) from the CWYFF_FlatFile Connector Project (это проект, который вы создали до создания входящего сервиса), и нажмите кнопку Next.
  3. Рядом с полем Folder Name нажмите кнопку Browse и найдите <WIDInstallDIR>\Resource Adapters\FlatFile\samples.
  4. В списке Character Set выберите UTF-8, а в списке Content Type выберите text/xml. Затем нажмите кнопку Next.
  5. На странице Find and Discover Enterprise Services нажмите кнопку Execute Query, выберите Customer в списке, нажмите кнопку Add для импорта списка, а затем нажмите кнопку Next.
  6. На странице Configure Objects выберите Outbound в Service Type, а затем нажмите кнопку Next.
  7. На странице Generate Artifacts убедитесь в том, что выбранным модулем является SeparateCustomersModule, а затем для Output Directory введите c:\flatfiles\outputdir, а для Staging Directory ведите c:\flatfiles\stagingdir.
  8. Нажмите кнопку Finish.

Мы завершили процесс создания исходящего сервиса, использующего WebSphere Adapter for Flat Files. На рисунке 13 показаны настройки исходящего сервиса.


Рисунок 13. Страница Generate Artifacts для исходящего сервиса
Рисунок 13. Страница Generate Artifacts для исходящего сервиса

В следующей таблице объясняются значения, которые вы установили для свойств исходящего соединения.

СвойствоЗначение

Output Directory

Это значение указывает папку, в которую будут записываться выходные файлы.

Staging Directory

Это значение указывает временный каталог, в котором выходные файлы хранятся перед копированием их в каталог output.

Давайте рассмотрим новые артефакты, имеющиеся в вашей рабочей области:

ТипИмяОписание

Import

FlatFileOutboundInterface

Этот компонент import позволяет использовать EIS с однородными файлами в виде сервиса. Он добавлен в общую схему.

Interface

FlatFileOutboundInterface

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

Operation

createFlatFile

appendFlatFile

overwriteFlatFile

deleteFlatFile

existsFlatFile

listFlatFile

retrieveFlatFile

Эти операции создают файлы и управляют ими в каталоге output при работе в режиме pass-through с неструктурированными данными. Эти операции создаются всегда, но они не используются в данном примере.

Operation

createCustomer

appendCustomer

overwriteCustomer

deleteCustomer

existsCustomer

listCustomer

retrieveCustomer

Эти операции создают и управляют файлами в каталоге output при работе в режиме non-pass-through и обработки данных, сохраненных в бизнес-объекте Customer. Эти операции создаются только в том случае, если вы предоставляете бизнес-объект.

Data Types

ExistsResponse

ExistsResponseBG

ListResponse

ListResponseBG

RetrieveResponseWrapper

RetrieveResponseWrapperBG

Эти бизнес-объекты и бизнес-графы содержат ответные данные исходящих операций. Если бизнес-объекты Customer и FlatFile не создаются так, как описано в предыдущем разделе, мастер Enterprise Service Discovery создает их во время создания исходящего сервиса.

Созданные бизнес-объекты

Интерфейсные операции, которые генерирует мастер Enterprise Service Discovery для исходящего адаптера, требуют генерирования также следующих пар бизнес-объекта и бизнес-графа:

  • ExistsResponse/ExistsResponseBG хранит результат операции existsFlatFile. Если в данном каталоге существует специальный файл, existsFlatFile возвращает значение true.
  • ListResponse/ListResponseBG хранит результат операции listFlatFile. Результаты сохраняются в массив строк. Каждая строка представляет собой имя файла в каталоге.
  • RetrieveResponseWrapper/RetrieveResponseWrapperBG хранит результат операции retrieveFlatFile. RetrieveResponseWrapper может содержать массив бизнес-объектов FileContent. Обычно операция retrieveFlatFile возвращает содержимое данного файла, записанное как массив байтов в бизнес-объекте FileContent.

Дополнительная информация о бизнес-объектах и бизнес-графах приведена в разделе "Созданные бизнес-объекты" для входящего сервиса.



В начало


Реализация бизнес-логики

Если вы откроете общую схему, то увидите оба компонента - export (называемый FlatFileInboundInterface) и import (называемый FlatFileOutboundInterface). Теперь вам нужно реализовать компонент для обработки данных, которые были получены из export и переданы в import. В данном разделе мы рассмотрим, как работать с данными, полученными из компонента flat-file export, и как работать с данными в однородных файлах, используя flat-file import.

Основные действия по добавлению бизнес-логики, использующейся для обоих адаптеров (входящего и исходящего) однородных файлов:

  1. Создать компонент бизнес-процесса, который подключается между компонентами export и import.
  2. Реализовать логику в бизнес-процессе.
  3. Развернуть и запустить приложение.

Создание компонента бизнес-процесса

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

  1. Под SeparateCustomersModule выполните двойной щелчок кнопкой мыши на AssemblyDiagram, чтобы открыть редактор схем.
  2. Щелкните правой кнопкой мыши где-нибудь на общей схеме, выберите Add - Process и переименуйте новый компонент на SeparateCustomers.
  3. Поместите курсор мыши над краем компонент FlatFileInboundInterface и перетяните маркер в компонент SeparateCustomers. При этом добавляется связь от компонента export к компоненту бизнес-процесса.
  4. При запросе на добавление интерфейса export к компоненту процесса нажмите кнопку OK. FlatFileInboundInterface добавляется в компонент SeparateCustomers.
  5. Аналогичным образом добавьте связь от компонента SeparateCustomers к компоненту FlatFileOutboundInterface import и нажмите кнопку OK, чтобы добавить соответствующую ссылку. Ссылка на FlatFileOutboundInterface добавляется в компонент SeparateCustomers.
  6. Сохраните редактор схем.

Общая схема на вашем экране должны теперь выглядеть примерно так, как на рисунке 14. Если вы хотите узнать больше о создании бизнес-процессов, прочтите статью "Бизнес-процессы в сервис-ориентированном мире". Обратите внимание на пиктограмму с восклицательным знаком на компоненте SeparateCustomers. Она указывает на то, что компонент не реализован. В следующем разделе мы исправим эту ситуацию.


Рисунок 14. Реализация SeparateCustomersModule
Рисунок 14. Реализация SeparateCustomersModule

Реализация бизнес-процесса

Теперь необходимо создать реализацию бизнес-процесса:

  1. Выполните двойной щелчок кнопкой мыши на компоненте SeparateCustomers и при запросе на создание реализации нажмите кнопку Yes.
  2. После открытия диалогового окна Generate Implementation нажмите кнопку OK, для того чтобы модуль SeparateCustomersModule содержал реализацию процесса.
  3. После открытия диалогового окна Process Operation убедитесь в том, что выбрана операция emitCustomerWrapper, и нажмите кнопку OK.

После открытия редактора бизнес-процессов вы увидите в правом верхнем углу переменную emitCustomerWrapperInput с типом данных CustomerWrapperBG. Переменная emitCustomerWrapperInput содержит данные от событий для однородных файлов. Вы должны добавить еще две переменные, которые будут использоваться в процессе:

  1. Щелкните правой кнопкой мыши на Variables и выберите Add Variable.
  2. После выбора новой переменной откройте закладку Description в виде Properties и переименуйте переменную на EmitFlatFileInput.
  3. В закладке Details выберите Data Type, нажмите кнопку Browse, а затем выберите FlatFileBG для типа переменной.
  4. Аналогичным образом создайте переменную ListResponseBG с типом ListResponseBG.

В FlatFileInboundInterface имеется две операции, поэтому процесс должен содержать два соответствующих действия (activity) по приему. Вы, возможно, заметили ошибку, указывающую на то, что процесс не реализует операцию emitFlatFile. На следующих шагах вы исправите это:

  1. Удалите действие Receive и добавьте вместо него действие ReceiveChoice, щелкнув правой кнопкой мыши на канве и выбрав Add - ReceiveChoice.
  2. Для того чтобы избежать проблемы корреляции, возникающей из-за наличия нескольких операций, определенных в интерфейсе, в закладке Details свойств для этого действия ReceiveChoice выберите Create a new Process instance if one does not already exist.
  3. Нажмите на элемент Receive действия ReceiveChoice.
  4. В виде Properties в закладке Details, нажмите кнопку Browse, выберите FlatFileInboundInterface из списка, выберите emitCustomerWrapper в качестве Operation, нажмите кнопку Input type selection button Input type selection button и выберите EmitCustomerWrapperInput. Свойства для действия приема emitCustomerWrapper должны быть установлены теперь так, как показано на рисунке 15.



    Рисунок 15. Свойства действия приема emitCustomerWrapper
    Рисунок 15. Свойства действия приема emitCustomerWrapper

  5. Щелкните правой кнопкой мыши на действии ReceiveChoice и выберите Add Receive для добавления еще одного элемента приема.
  6. В виде Properties переименуйте новый элемент приема на emitFlatFile, установите partner в FlatFileInboundInterface, операцию в emitFlatFile, а тип входной переменной в EmitFlatFileInput. Свойства для действия приема emitFlatFile должны быть установлены так, как показано на рисунке 16.



    Рисунок 16. Свойства действия приема emitFlatFile
    Рисунок 16. Свойства действия приема emitFlatFile

  7. В этом примере мы не используем операцию emitFlatFile (для неструктурированных данных); поэтому добавьте Empty Action для действия приема emitFlatFile.

Переменная EmitCustomerWrapperInput содержит данные, принимаемые из операции emitCustomerWrapper. Поскольку мы будем записывать содержимое переменной EmitCustomerWrapperInput в выходной файл, нам понадобится сниппет, чтобы сбросить путь к каталогу (установленный в качестве каталога входящих событий для входящей обработки) в каталог output. Если путь к каталогу является пустой строкой, исходящий адаптер для однородных файлов использует каталог output по умолчанию, настроенный мастером Enterprise Service Discovery, который вы установили в c:\flatfiles\outputdir при создании исходящего сервиса.

На следующих шагах мы добавим сниппет (см. рисунок 17), который устанавливает поле directoryPath переменной EmitCustomerWrapperInput в пустую строку.

  1. Ниже emitCustomerWrapper добавьте действие сниппета и переименуйте его в ResetDirectoryPath.
  2. В виде Properties в закладке Details добавьте пустую строку в переменную EmitCustomerWrapperInput.CustomerWrapper.directoryPath, выбрав Add - Expression, и введите две двойные кавычки в выражение. В качестве альтернативного метода вы можете переместить EmitCustomerWrapperInput на канву и использовать меню для выбора вложенных бизнес-объектов и атрибутов.

Рисунок 17. Визуальный сниппет ResetDirectoryPath
Рисунок 17. Визуальный сниппет ResetDirectoryPath

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

  1. Под сниппетом ResetDirectoryPath добавьте действие Invoke и переименуйте его в InvokeListResponse.
  2. Установите параметры так, как показано на рисунке 18.



    Рисунок 18. Свойства действия извлечения InvokeListResponse
    Рисунок 18. Свойства действия извлечения InvokeListResponse

Содержимое бизнес-графа ListResponseBG в свойствах InvokeListResponse представляет собой список файлов в каталоге c:\flatfiles\outputdir. Мы будем использовать этот каталог, поскольку поле directoryPath переменной EmitCustomerWrapperInput не заполнено.

На следующих шагах мы создадим еще одно действие сниппета для создания имени выходного файла. Имя файла будет иметь формат <customerName><Sequence>.xml (если вы знакомы с процедурой создания сниппетов, то легко сделаете это, используя информацию, представленную на рисунке 19).

  1. Под InvokeListResponse добавьте действие сниппета и переименуйте его в ResetFileName.
  2. Добавьте узел для переменной ListResponseBG.ListResponse.listOfFileNames.
  3. Добавьте узел list size, выбрав Add - Standard - list size. Узел list size указывает количество имен файлов, хранящихся в ListResponseBG.ListResponse.listOfFileNames.
  4. Соедините узел переменной ListResponseBG.ListResponse.listOfFileNames с узлом list size.
  5. Добавьте узел to text, выбрав Add - Standard - Utility - to text. Узел to text создает строку из целого значения size, которая будет номером последовательности в имени файла.
  6. Соедините узел list size с узлом to text.
  7. Добавьте узел для переменной EmitCustomerWrapperInput.CustomerWrapper.content.customerName.
  8. Добавьте узел append text, выбрав Add - Standard - Text - append text, соедините узел переменной EmitCustomerWrapperInput.CustomerWrapper.content.customerName с верхним входом узла append text, а затем соедините узел to text с нижним входом узла append text.
  9. Создайте второй узел append text для добавления строки .xml к выходу первого узла append text и назначьте выход второго узла append text, являющегося строкой полного имени файла, переменной EmitCustomerWrapperInput.CustomerWrapper.fileName.

Получившийся сниппет должен выглядеть примерно так, как показано на рисунке 19.


Рисунок 19. Визуальный сниппет ResetFileName
Рисунок 19. Визуальный сниппет ResetFileName

Исходящая операция createCustomer создает новый файл с именем, который вы установили в поле thefileName переменной EmitCustomerWrapperInput, и записывает файл в каталог output, который вы установили ранее в пустую строку. Исходящая операция создается в каталоге output, установленном в пустую строку, и записывает содержимое бизнес-объекта Customer в файл, используя адаптер для однородных файлов. На оставшихся шагах мы создадим действие для вызова этой операции:

  1. В редакторе процессов добавьте действие Invoke под ResetFileName и переименуйте его в InvokeCreateCustomer.
  2. Установите параметры так, как показано на рисунке 20.



    Рисунок 20. Действие активизации InvokeCreateCustomer
    Рисунок 20. Действие активизации InvokeCreateCustomer

  3. Сохраните редактор бизнес-процессов.

Окончательная реализация компонента SeparateCustomers на вашем экране должна выглядеть так, как показано на рисунке 21.


Рисунок 21. Бизнес-процесс SeparateCustomers
Рисунок 21. Бизнес-процесс SeparateCustomers

Вы завершили реализацию приложения. Перед его развертыванием на сервере и тестированием осталось только создать каталоги, указанные в мастере Enterprise Service Discovery:

  1. Создайте каталог c:\flatfiles и четыре подкаталога:
    1. c:\flatfiles\inboundevents
    2. c:\flatfiles\inboundarchive
    3. c:\flatfiles\outputdir
    4. c:\flatfiles\stagingdir
  2. Скопируйте входные файлы из файла input.zip, ссылка на который приведена в разделе "Загрузка", в каталог c:\flatfiles\inboundevents.


В начало


Тестирование приложения

Теперь все готово для ра