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

developerWorks Россия  >  Rational | SOA и Web-сервисы  >

Переход к SOA: Часть 2. Создание собственных расширений для инструментария трансформации бизнес-процессов в IBM Rational Software Architect

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

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

Обсудить


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

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


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

Наталья Балаба-Лясковски, инженер-программист, IBM

20.05.2009

Типичный цикл разработки включает создание модели бизнес-анализа для выделения и понимания бизнес-целей с дальнейшим преобразованием её в модель архитектуры системы. Инструментарий трансформации бизнес-процессов в модель сервисов из состава IBM® Rational® Software Architect поможет Вам в создании этой модели. Эта статья (Часть 2, ссылка на Часть 1 приведена в разделе Ресурсы) описывает пошаговый сценарий создания собственной декомпозиции процесса для трансформации ваших бизнес-процессов в модели сервисов. Статья ориентирована на читателей, знакомых с разработкой расширений для трансформаций.

Обзор инструментария трансформации бизнес-процессов в модели сервисов

Механизм трансформации бизнес-процессов в модель сервисов из состава IBM Rational Software Architect состоит из первичной трансформации (main transform) и трех стандартных расширений.

Первичная трансформация создает UML-компонент (Unified Modeling Language), описывающий провайдера сервиса. Также она добавляет к данному компоненту UML-порты, представляющие интерфейсы, которые предоставляет сервис или которых он требует. Наконец, создается элемент CollaborationUse для связывания этого компонентного представления сервиса в архитектурной модели с элементом сотрудничества (Collaboration) модели бизнес-анализа. Каждый порт компонента ассоциируется с подходящей ролью. Элемент CollaborationUse, порты и ролевые ассоциации вместе представляют собой связку, используемую при проверке контракта, установленного соглашением о взаимодействии. Проверка контракта позволяет легко обратиться к исходной модели бизнес-анализа, чтобы убедиться, что компонент реализует процесс так, как описано в модели бизнес-анализа.


Рисунок 1. Основной результат работы инструмента трансформации: порты, связка проверки контракта, элемент CollaborationUse и ролевые ассоциации
Рисунок 1. Основной результат работы инструмента трансформации: порты, связка проверки контракта, элемент CollaborationUse и ролевые ассоциации

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

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

Сценарий использования собственного расширения

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


Рисунок 2. Модель бизнес-анализа с бизнес-процессами рынка медицинских услуг
Рисунок 2. Модель бизнес-анализа с бизнес-процессами рынка медицинских услуг

Сосредоточимся на сервисе получения оплаты (Payment Collector service), который отвечает за проведение денежных сумм и получение оплаты после предоставления медицинских услуг. Ему необходим механизм учета записей о проведенных операциях. Для этого он использует сервис журналирования (Logger service). Эти сервисы ориентированы на использование существующего Java-кода.

Допустим, что существуют унаследованные сервисы биллинга и журналирования (Billing and Logging), реализованные как Java-библиотеки. Сервис биллинга предоставляет Java-интерфейс Billing. Его конкретная реализация представлена классом com.acme.billing.MedicalBilling использует сервис журналирования, определенный в другой унаследованной библиотеке, com.acme.logging (см. рисунок 3).


Рисунок 3. Унаследованные Java-библиотеки, содержащие реализации сервисов биллинга и журналирования
Рисунок 3. Унаследованные Java-библиотеки, содержащие реализации сервисов биллинга и журналирования

Законченное SOA-решение будет развернуто на языке Services Component Definition Language (SCDL). Задачей разрабатываемого собственного расширения будет являться генерация SCDL-модуля, который будет связываться с унаследованной Java-библиотекой.

Основные необходимые шаги для расширения бизнес-процесса до модели сервисов

  1. Создайте проект плагина Eclipse (Eclipse plug-in).
  2. Создайте класс трансформации (см. пример в листинге 1).

Листинг 1. Код для создания класса трансформации
                
package com.ibm.xtools.transform.cfm.example.transform;

import com.ibm.xtools.transform.cfm.example.rules.MyPopulateComponentRule;
import com.ibm.xtools.transform.core.Transform;

public class MyTransform
    extends Transform {

   //id of the transformation 
 public static final String TRANSFORM_ID = 
"com.ibm.xtools.transform.cfm.example.transform.MyTransformId"; 

    public MyTransform() {
        super(TRANSFORM_ID); // instantiate transformation using id
        add(new MyPopulateComponentRule());//program transformation with this rule
   
    }
}
      


Замечание:
При создании идентификатора расширения (extension ID) постарайтесь сделать его уникальным. Это важно, поскольку когда конфигурация трансформации показывает, что процесс необходимо преобразовать, и указывает для этого конкретный идентификатор расширения, расширение именно с этим идентификатором будет выбрано и использовано для трансформации процесса.

  1. Встройте функциональность в класс MyPopulateComponentRule. Код, представленный в листинге 2, описывает ключевую функциональность этого правила.

Листинг 2. Код MyPopulateComponentRule
                
public class MyPopulateComponentRule extends ModelRule {

/*
* canAccept method asserts wither  or not the extension is applicable
*/
public boolean canAccept(ITransformContext context) {

// the rule will be invoked if the current node on the source side is 
// an instance of UML Collaboration and the node on the target side 
// is instance of UML Component
return context.getSource() instanceof Collaboration
				&& context.getTarget() instanceof Component;
}

/*
* createTarget method will perform additional (to main)  transformation of the 
Collaboration(service) in the source
*  model to the elements in the target model
*/
protected Object createTarget(ITransformContext context) throws Exception {

Component collaborationComponent = (Component) context.getTarget();
Component java_adapter = createJavaConverter(collaborationComponent);

assert (java_adapter != null);

Property attribute = collaborationComponent.createOwnedAttribute(
				"java_adapter", java_adapter);

for (Iterator e = collaborationComponent.getOwnedPorts().iterator(); e.hasNext();) {
  Port port = (Port) e.next();

  // there will only one port that provides interface to the outside.
  if (!port.getProvideds().isEmpty()) {
Port in_port = java_adapter.createOwnedPort("in_" + port.getName(), null);

Interface anInterface = (Interface) port.getProvideds().get(0);
addProvidedInterface(anInterface, in_port);

createConnector(collaborationComponent, port, in_port, null, attribute, 
ConnectorKind.DELEGATION_LITERAL);
} else if (!port.getRequireds().isEmpty()) {

Interface anInterface = (Interface) port.getRequireds().get(0);

Type type = createUsage(java_adapter, anInterface);
Port out_port = java_adapter.createOwnedPort("out_" + port.getName(), type);
createConnector(collaborationComponent, out_port, port, attribute, null, 
ConnectorKind.DELEGATION_LITERAL);
	}
}

return collaborationComponent;
}

/*
* auxiliary method – creates java adapter component for the role, 
which represents Collaboration (service) itself
*/
private Component createJavaAdapter(Component collaborationComponent) {

for (Iterator e = collaborationComponent.getOwnedPorts().iterator(); ehasNext();) {
Port port = (Port) e.next();

if (!port.getProvideds().isEmpty()) {
return (Component) collaborationComponent..createPackagedElement(port.getName() + 
"Adapter",UMLPackage.Literals.COMPONENT);

		}
	}

return null;
}
…

}

Create the extension condition class:
 
/**
 * com.ibm.xtools.transform.cfm.example.condition.MyExtensionCondition
 */

public class MyExtensionCondition
    extends TransformCondition {

    public MyExtensionCondition() {
        super();
    }

    protected boolean isContextSatisfied(ITransformContext context) {

        return (context.getSource() instanceof Collaboration)
            && CommonConfigUtil.getExtensionIdFor(
                (Collaboration) context.getSource(), context).equals(
                MyTransform.TRANSFORM_ID);
    }

}




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

  1. Зарегистрируйте Ваше расширение в XML-файле плагина. В листинге 3 приведен пример декларации собственного расширения.

Листинг 3. Пример кода XML-файла плагина, описывающего собственное расширение
                
<?xml version="1.0" encoding="UTF-8"?>
  <?eclipse version="3.2"?>
  <plugin>
  <extension
  point="com.ibm.xtools.transform.core.transformationExtensions">
  
  <TransformationExtension
  author="you"
  description="my custom extension"
  document="optional"
  enabled="true"
  id="com.ibm.xtools.transform.cfm.example.transform.MyTransformId"
  name="My custom extension"
  targetTransformation="com.ibm.xtools.transform.cfm.wbm.transforms.MainTransform"
  version="1.0.0">
  
  <TransformDefinition
  acceptCondition="com.ibm.xtools.transform.cfm.example.condition.MyExtensionCondition"
  class="com.ibm.xtools.transform.cfm.example.transform.MyTransform"
  id="com.ibm.xtools.transform.cfm.example.transform.MyTransformId"/>
  
  <ExtendTransform
  targetTransform="com.ibm.xtools.transform.cfm.wbm.transforms.OwnedBehaviorTransform"> 
  
  <AddTransform id="com.ibm.xtools.transform.cfm.example.transform.MyTransformId"/>
  </ExtendTransform>
  </TransformationExtension>
  </extension>
  </plugin>


Целевой трансформацией этого примера собственного расширения является базовая трансформация бизнес-процессов в модели сервисов:
com.ibm.xtools.transform.cfm.wbm.transforms.MainTransform

Также это собственное расширение указывает, какое условие расширяемости должно использоваться для определения применимости расширения:
com.ibm.xtools.transform.cfm.example.condition.MyExtensionCondition

И, наконец, это собственное расширение указывает расширяемое направление преобразования:
com.ibm.xtools.transform.cfm.wbm.transforms.OwnedBehaviorTransform

Развертывание собственного расширения

  1. Сконфигурируйте трансформацию.
  2. После завершения предыдущих этапов экспортируйте ваш плагин в папку плагинов и перезапустите Rational Software Architect.

Ваше собственное расширение будет доступно для использования из интерфейса конфигурации, как показано на рисунке 4.


Рисунок 4. Настройка трансформации для использования собственного расширения
Рисунок 4. Настройка трансформации для использования собственного расширения

  1. Настройте один из процессов на использование собственного расширения.
  2. Сохраните конфигурацию и запустите трансформацию.
  3. Работая с результатом трансформации, продолжайте развивать модель, используя делегирование унаследованному коду (см. рисунок 5).

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

Созданная декомпозиция проиллюстрирована на рисунке 5. Теперь все готово для следующего шага.

Делегирование вызовов Java-библиотеке

Роль Java-адаптера заключается в делегировании вызовов сервиса Java-библиотеке. Для его моделирования:

  1. Создайте второе свойство (часть) сервиса получения оплаты, введя BillingComponent, и добавьте два порта:
    • Добавьте первый в myRoleAdapter, установив требуемый интерфейс как
      com.acme.billing.Billing
    • Добавьте второй в Billing component, установив тип как
      com.acme.billing.MedicalBilling (см. рисунок 6).

Рисунок 6. Сопряжение расширения с унаследованным кодом
Рисунок 6. Сопряжение расширения с унаследованным кодом

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

Теперь эту модель можно использовать в SOA-трансформации для создания артефактов, пригодных для развертывания. SOA-трансформация преобразует сервис получения оплаты в проект модуля бизнес-интеграции в IBM®WebSphere® Integration Developer (IBM®WebSphere® Integration Developer business integration module project). Составляющие Java-адаптера и MedicalBilling преобразуются в компоненты Service Component Architecture (SCA) этого модуля. В SCA-компоненте, созданном на базе MedicalBilling, появятся ссылки на реализацию в унаследованных Java-библиотеках.

Заключение и содержание Части 3

Как показано в этой статье, инструментарий трансформации бизнес-процессов в модели сервисов обеспечивает взаимосвязь между бизнес-моделированием в WebSphere Business Modeler и проектированием модели на UML. Компании со специфическими средами развертывания и требованиями к реализации могут адаптировать трансформацию с учетом их потребностей. Созданные трансформацией артефакты могут использоваться для дальнейшего моделирования в Rational Software Architect. Также они могут быть преобразованы в проект WebSphere Integration Developer с использованием инструмента SOA-трансформации из состава Rational Software Architect.

Дальнейшая информация о SOA-трансформации будет представлена в следующей статье этой серии - "Переход к SOA: Часть 3. Преобразование UML в SOA." Эта статья в деталях описывает переход от UML-модели программного сервиса к предметной SOA-реализации с использованием инструмента трансформации UML в SOA из состава Rational Architect версии 7.0.0.2 и выше. Этот инструмент служит объединяющей конструкцией для различных расширений трансформации для конкретных программных реализаций и сред исполнения.



Ресурсы

Научиться
  • Оригинал статьи: "Transformation to SOA: Part 2. Creating a custom extension for the Business Process-to-Service Model transformation feature in IBM Rational Software Architect" (EN)

  • Прочтите первую часть этой серии статей: "Переход к SOA: Часть 1. От бизнес-процессов к архитектуре на базе моделей сервисов с использованием IBM WebSphere Business Modeler и IBM Rational Software Architect".

  • В качестве дополнительной полезной информации прочитайте серию из пяти статей Джима Амсдена (Jim Amsden) о разработке ПО на базе сервис-ориентированной архитектуры:

    • Статья Modeling SOA: Part 1. Service identification (EN) расскажет вам, как использовать UML-модели, расширенные с помощью UML-профиля IBM Software Service Profile, для проектирования SOA-решений, привязанных к бизнес-требованиям, но независимых от реализации решения. Автор описывает цели и задачи бизнеса и реализованные для их решения бизнес-процессы; далее он описывает, как использовать эти процессы для определения подходящих для бизнеса сервисов, необходимых для удовлетворения требований, которые они представляют.
    • Статья Modeling SOA: Part 2. Service specification (EN). Автор продолжает повествование о SOA-решении, подробно моделируя спецификацию каждого сервиса. Эти спецификации определяют соглашения между потребителями и поставщиками сервисов. Соглашения включают предоставляемые и требуемые интерфейсы, роли, которые эти интерфейсы играют в спецификации сервиса, и правила или протокол взаимодействия этих ролей.
    • Статья Modeling SOA: Part 3. Service realization (EN). В третьей статье объясняется, как реализуются Web-сервисы на базе SOA. Реализация сервиса начинается с решения о том, какой компонент будет предоставлять этот сервис. Это решение тесно связано с такими аспектами, как доступность сервиса, распределение, безопасность, объем транзакций и степень связанности. После того, как эти решения приняты, вы можете смоделировать, как каждая функциональная возможность сервиса будет реализована и как требуемые сервисы будут использоваться. Далее вы можете с помощью инструментария трансформации из UML в SOA из состава IBM Rational Software Architect создать реализации Web-сервисов, которые уже могут использоваться в IBM WebSphere Integration Developer для реализации, тестирования и развертывания законченного решения.
    • Статья Modeling SOA: Part 4. Service composition (EN). Эта четвертая статья описывает, как собирать и связывать сервисных провайдеров, смоделированных в статье «Part 3. Service realization»? и определять их взаимодействие, формируя законченное решение, удовлетворяющее бизнес-требованиям. Получившийся компонент станет участником сервисных взаимодействий; при этом он сам будет охватывать сервисы, предоставленные существующими компонентами Invoicer, Productions и Shipper, в итоге предоставляя возможность обработки заказов. Также будет показано, как этот компонент будет удовлетворять входным бизнес-требованиям.
    • Статья Modeling SOA: Part 5. Service implementation (EN). В этой заключительной статье серии автор описывает, как разрабатывать конкретную реализацию, удовлетворяющую архитектурным и проектировочным решениям, основанным на модели сервисов. Мы сгенерируем решение под конкретную платформу, применив для создания Web-сервиса из SOA-модели подход разработки на базе моделей (model-driven development) и инструментарий трансформации UML в SOA из состава IBM Rational Software Architect.

  • В разделе о SOA и Web-сервисах на developerWorks имеются все ресурсы, необходимые для овладения сервис-ориентированной архитектурой.

  • Посетите раздел SOA-решений (EN) раздел SOA-решений.

  • В разделе ПО Rational на developerWorks приведена техническая информация и оптимальные методики использования продуктов Rational Software Delivery Platform.

  • Подпишитесь на рассылку раздела ПО Rational на developerWorks, чтобы своевременно получать всю информацию в этой области (EN). Раз в две недели вы будете получать свежие новости о технических ресурсах и оптимальных методиках для платформы Rational Software Delivery Platform.

  • Подпишитесь на бюллетень Rational Edge (EN), в котором публикуются статьи по вопросам эффективной разработки ПО.

  • В магазине технической литературы (EN) имеются книги по этой и другим техническим темам.


Получить продукты и технологии

Обсудить


Об авторе

Наталья Балаба-Лясковски (Natalia Balaba-Liaskovski) – инженер-программист, занимается поддержкой инструментария IBM Rational.




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


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



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


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