Интеграция приложений с помощью WS-BPEL.
description
Transcript of Интеграция приложений с помощью WS-BPEL.
Интеграция приложений с Интеграция приложений с помощью помощью WS-BPEL.WS-BPEL.
Відповідальний виконавецьКерівник
П.І. Перконос С.В. Суботін
Выполнение
5
Застосування Застосування
Застосування замовника
SAP
Пакети застосувань
Компоненти
Сервіси (атомарні,
композитні)
Потоки бізнес-
процесів
Користувачі сервісів
В2ВПортали .NET
Платформи
UnixOS/390
Сполучне ПО
MQ DB2
1
2
3
4
Операційні системи
Жизненный цикл WORKFLOW c использованием WS-BPEL в WEB
Реинжениринг бизнеспроцессов
проектирование
разработка
Бизнес аналитик
Системный аналитик
Программист
Пользователь
SOAP
Реинжениринг бизнеспроцесса
Постановка задачи
aX + bX +c = 02
МетодикаX1 = -b/2a+ (b*b-4ac)/4a*a
Технологический цикл
<<обращает>>
<<перемножает>>
<<извлекает корни>>
<<суммирует>>
<<получает>>
<<получает>>
<<запускает>>
[>=0]
[<0]
<<receive>>
получение коєффициенто
в
<<if>>
?>0
scientistsummator
multyplicator
invertor
extractor
<<sequence>>
расчет дискриминанта
<<sequence>>
расчет корней<<reply>>
решение
<<replyFault>>
нет корней
Бизнес аналитикX2 = -b/2a- (b*b-4ac)/4a*a
Проектирование
Декомпозиция процесса Проекти
рован
ие н
ед
оста
ющ
их
<<обращает>>
<<перемножает>>
<<извлекает корни>>
<<суммирует>>
<<получает>>
<<получает>>
<<запускает>>
[>=0]
[<0]
<<receive>>
получение коєффициенто
в
<<if>>
?>0
scientistsummator
multyplicator
invertor
extractor
<<sequence>>
расчет дискриминанта
<<sequence>>
расчет корней<<reply>>
решение
<<replyFault>>
нет корней
Бизнес аналитик
Системный аналитик
[<0]
[>=0]
<<invoke>>SQRT(D)
<<invoke>>D
<<if>>
D?
<<throw>>d<0!!
<<assign>>assign_8
<<flow>>Слагаемые
summator
extractor<<paralel>>
Decision_2
<<assign>>assign_9
<<invoke>>b*b
<<assign>>assign_10
<<invoke>>4*a*c
multyplicator
<<paralel>>
Decision_2
<<assign>>assign_12
<<invoke>>-b+D
<<assign>>assign_13
<<invoke>>-b-D
summator
<<paralel>>
Decision_2
<<assign>>assign_14
<<invoke>>X1
<<assign>>assign_15
<<invoke>>X2
multyplicator
<<invoke>>1/2a
<<assign>>assign_11
invertor
<<flow>>-b+-D
<<flow>>X1,2
UDDIРеестр
Поиск
гото
вых
ком
понент
UML диаграмм
ы
Структура WS-BPEL документа
<wsdl:definitions …..>Типы и структура сообщений , порты сервисов, типы связей между партнерами
</wsdl:definitions >
<process …xlmns = пространства имен>
</process >
<scope>
</scope>
<variables> …… </variables><partnerLinks> …… </ partnerLinks >
<<обращает>>
<<перемножает>>
<<извлекает корни>>
<<суммирует>>
<<получает>>
<<получает>>
<<запускает>>
[>=0]
[<0]
<<receive>>
получение коєффициенто
в
<<if>>
?>0
scientistsummator
multyplicator
invertor
extractor
<<sequence>>
расчет дискриминанта
<<sequence>>
расчет корней<<reply>>
решение
<<replyFault>>
нет корней
<recieve> принять коэффициенты уравнения
</recieve >
<reply> вернуть решение </ reply >
<FaultHandlers> нет корней!! </ FaultHandlers >
<sequense расчет дискриминанта> <flow> расчет слагаемых </flow>…
<if> fault | извлечение корня </if>…</sequence>
<sequense расчет корней> ….. расчет знаменателя <flow> расчет слагаемых </flow>…
<flow> расчет корней </flow></sequence>
[<0]
[>=0]
<<invoke>>SQRT(D)
<<invoke>>D
<<if>>
D?
<<throw>>d<0!!
<<assign>>assign_8
<<flow>>Слагаемые
summator
extractor
<<invoke>>1/2a
<<assign>>assign_11
invertor
<<flow>>-b+-D
<<flow>>X1,2
<<paralel>>
Decision_2
<<assign>>assign_9
<<invoke>>b*b
<<assign>>assign_10
<<invoke>>4*a*c
multyplicator
<<paralel>>
Decision_2
<<assign>>assign_12
<<invoke>>-b+D
<<assign>>assign_13
<<invoke>>-b-D
summator
<<paralel>>
Decision_2
<<assign>>assign_14
<<invoke>>X1
<<assign>>assign_15
<<invoke>>X2
multyplicator
<wsdl:definitions xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/” xmlns:s="http://www.w3.org/2001/XMLSchema"
…….. >
</wsdl:definitions >
WSDL определение сервисов
<wsdl:types> …… </ wsdl:types >
<wsdl:message> …… </ wsdl:message>
<wsdl:portType> …… <wsdl:operation> </ wsdl:operation> <wsdl:operation> </ wsdl:operation> ……</ wsdl:portType>
<wsdl:service> …… <wsdl:port> </ wsdl:port> <wsdl:port> </ wsdl:port> ……</ wsdl:service>
WSDL определение типов даных
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:ms ="http://isofts.kiev.ua/ws/summator" >
</wsdl:definitions >
…..
…..
<wsdl:types> <s:schema elementFormDefault="qualified“ targetNamespace"http://isofts.kiev.ua/ws/summator"">
</wsdl:types>>
<s:element name="Add"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="message" type="tns:AddMessage" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="AddMessage"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="a" type="s:float" /> <s:element minOccurs="1" maxOccurs="1" name="b" type="s:float" /> </s:sequence></s:complexType><s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:float" /> </s:sequence> </s:complexType> </s:element>>
<wsdl:definitions xmlns:wsdl="http://isofts.kiev.ua/ws/summator>
</wsdl:definitions >
<wsdl:types> <s:element name="Add"> … s:element name="AddResponse” …</wsdl:types>>
<wsdl:message name=AddIn> <wsdl:part name=“operands” element=“tns: Add” /> </wsdl:message>>
<wsdl:message name=AddOut> <wsdl:part name=“result” element=“tns: AddResponce”/> </wsdl:message>>
Определение структуры сообщений
Определение типов портов
<wsdl:portType name=“Arihmetika”> <wsdl:operation name=“ADD” > <wsdl:input message= “tns:AddIn” /> <wsdl:output message=“tns:AddOut”/> </wsdl: operation>
<wsdl:operation name=“MULT” > <wsdl:input message= “tns:AddIn” /> <wsdl:output message=“tns:AddOut”/> </wsdl: operation> </wsdl: portType>> Определение сервиса
<wsdl:binding name=“ArihmetikaSoap” type= “tns:Aritmetika”> <soap:binding transport=“http://schemas.xmlsoap.org/soap/http” /> <wsdl:operation name=Add><soap:operation SoapAction=“http://isofts.kiev.ua/WS/Add” style=“document”/ > <wsdl:input ><soap:body use literal/> </wsdl:input> <wsdl:output> <soap:body use literal/> </wsdl:output> </wsdl: operation>
<wsdl:operation name=“MULT” > ……. </wsdl: operation> </wsdl: binding>> <wsdl:service name=“Arihmetika”> <wsdl:port name =“Arihmetika” binding= “tns:ArihmetikaSoap”> <soap:location= =“http://isofts.kiev.ua/WS/Aritm.asmx” />
</wsdl:port> </wsdl: service>
Прием входящего сообщения.
<wsdl:definitions >
</wsdl:definitions >
<plnk:PartnerLinkType name =“solveReqw”> <plnk:role name=“executor” porttype=“solve”/> <plnk:PartnerLinkType>
<scope>
</scope>
<receive name=“Start" partnerLink=“scientist” operation="Solve“ variable=“koef“ createInstance="yes" />
<partnerLink name=“scientist”> partnerLinkType=“solveReqw” myRole=“executor” </partnerLink> <variables > <variable> name=“koef” messageType =“List” </variable > </variables >
<wsdl:portType name=“solve”><wsdl:operation name=“solve”> <wsdl:input message= “List” /> <wsdl:output message=“List”/></wsdl: operation> </wsdl: portType>>
<wsdl:types> <s:schema elementFormDefault="qualified“ targetNamespace"http://isofts.kiev.ua/ws/summator"">
</wsdl:types>>
<s:element name="Array1D"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name=“K" type="tns:FlArray" /> </s:sequence> </s:complexType> </s:element>
<s:complexType name=“FlArray"> <s:sequence> <s:element minOccurs=“0" maxOccurs=“unbound" name=“k" type="s:float" /> </s:sequence> </s:complexType>
<wsdl:message name=“List”> <wsdl:part name=“items” element=“tns: Array1D” /> </wsdl:message>>
<<обращает>>
<<перемножает>>
<<извлекает корни>>
<<суммирует>>
<<получает>>
<<получает>>
<<запускает>>
[>=0]
[<0]
<<receive>>
получение коєффициенто
в
<<if>>
?>0
scientistsummator
multyplicator
invertor
extractor
<<sequence>>
расчет дискриминанта
<<sequence>>
расчет корней<<reply>>
решение
<<replyFault>>
нет корней
<scope>
</scope>
Расчет слагаемых дискриминанта
<wsdl:definitions >
</wsdl:definitions >
<flow>
</flow>
<plnk:PartnerLinkType name =“directAr”><plnk:role name=“executor” porttype=“Arihmetika”/> <plnk:PartnerLinkType>
<scope>
</scope>
<assign> <copy> <from> $koef.items.k[2] </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“b*b" partnerLink=“M1" operation=“Mult“ inputVariable="o1" outputVariable=“p1"/>
<variables><variable> name=“o1” messageType =“AddIn”</variable ></variables ><assign> <copy> <from> $koef.items.k[2] </from> <to> $o1.operands.Add.a</to> </copy> </assign>
<scope>
</scope>
<assign> <copy> <from> $koef.items.k[3] </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“4*a*c" partnerLink=“M1" operation=“Mult“ inputVariable="o1"
outputVariable=“p2"/>
<variables><variable> name=“o1” messageType =“AddIn”</variable ></variables ><assign> <copy> <from> $koef.items.k[1]*4 </from> <to> $o1.operands.Add.a</to> </copy> </assign>
<<paralel>>
Decision_2
<<assign>>assign_9
<<invoke>>b*b
<<assign>>assign_10
<<invoke>>4*a*c
multyplicator
<import namespace>=“http://isofts.kiev.ua/WS/Arihmetikadef” location= “http://isofts.kiev.ua/WS/Arihmetika.wsdl” importType="http://schemas.xmlsoap.org/wsdl/wsdl.xsd” />
<variables> <variable>name=“p1” messageType =“AddOut”</variable> <variable>name=“p2” messageType” =“AddOut </variable> </variables >
<partnerLink name=“M1” partnerLinkType=“directAr” PartnerRole=“executor” > <EndPointReference> <address>=“http://isofts.kiev.ua/WS/Aritm.asmx”</address><ServiceName>Arihmetika</SeviceName></EndP..> </partnerLink>
<scope>
</scope>
Расчет дискриминанта
<wsdl:definitions >
</wsdl:definitions >
<sequense >
</sequence>
<plnk:PartnerLinkType name =“inversAr”><plnk:role name=“executor” porttype=“invers”/> <plnk:PartnerLinkType>
<partnerLink name=“M2” partnerLinkType=“inversAr” PartnerRole=“executor” >.. </partnerLink>
<if name=“Dless0”> <condition> $p1.addresponce.addResult < 0 </condition>
<trow> faultname=“D_is_negative” </throw>
<else><sequence>
<invoke name=“sqrtD" partnerLink=“M2" operation=“Sqrt“ inputVariable=“p1" outputVariable=“p2"/>
</sequence> </else></if>
<variables> <variable>name=“p1” messageType =“AddOut”</variable> <variable>name=“p2” messageType =“AddOut”</variable> </variables >
<import namespace>=“http://itf.kiev.ua/WS/InversArihm.def” location= “http://itf.kiev.ua/WS/inversArihm.wsdl” importType="http://schemas.xmlsoap.org/wsdl/wsdl.xsd” />
<scope>
</scope>
<invoke name=“D" partnerLink=“M1" operation=“Add“ inputVariable="o1" outputVariable=“p1"/>
<variables><variable> name=“o1” messageType =“AddIn”</variable ></variables >
<assign> <copy> <from> $p1.addresponce.AddResult</from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from>- $p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign>
<scope>
</scope>
Расчет корней
<sequense >
</sequence>
<variables><variable>name=“p1” ..”AddOut”</variable> .. “p2” .. “p3” “AddOut”…</variables ><partnerLink name=“M1” partnerLinkType=“directAr” PartnerRole=“executor” </partnerLink><partnerLink name=“M2” partnerLinkType=“inversAr” PartnerRole=“executor” >.. </partnerLink><assign> <copy> <from> $koef.items.k[1]*2 </from> <to> $p1.addresponce.addResult </to> </copy>
</assign> <invoke name=“1/2а" partnerLink=“M2" operation=“Invrs“ inputVariable=“p1" outputVariable=“p1"/> <flow>
</flow>
<scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> -$koef.items.k[2] </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x1p" partnerLink=“M1" operation=“Add“ inputVariable="o1" outputVariable=“p3"/> </scope>
<scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> -$koef.items.k[2] </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> -$p2.addresponce.AddResult</from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x2p" partnerLink=“M1" operation=“Add“ inputVariable="o1" outputVariable=“p2"/> </scope> <flow>
</flow>
<scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p1.addresponce.AddResult </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x1p" partnerLink=“M1" operation=“Add“ inputVariable="o1" outputVariable=“p2"/> </scope>
<scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p1.addresponce.AddResult </from> <to> $o1.operands.Add.a</to> </copy> </assign> <assign> <copy> <from> $p3.addresponce.AddResult] </from> <to> $o1.operands.Add.b</to> </copy> </assign> <invoke name=“x2p" partnerLink=“M1" operation=“Add“ inputVariable="o1" outputVariable=“p3"/> </scope>
Отправка исходящего сообщения.
<wsdl:definitions >
</wsdl:definitions >
<plnk:PartnerLinkType name =“solveReqw”> <plnk:role name=“executor” porttype=“solve”/><plnk:PartnerLinkType>
<scope>
</scope>
<reply name=“Finish" partnerLink=“scientist” operation="Solve“ variable=“koef”/>
<partnerLink name=“scientist”> partnerLinkType=“solveReqw” myRole=“executor” </partnerLink> <variables > <variable> name=“koef” messageType =“List” </variable > </variables >
<wsdl:portType name=“solve”><wsdl:operation name=“solve”> <wsdl:input message= “List” /> <wsdl:output message=“List”/> </wsdl: operation> </wsdl: portType>>
<wsdl:types>
</wsdl:types>>
<wsdl:message name=“List”> <wsdl:part name=“items” element=“tns: Array1D” /> </wsdl:message>>
<scope> <variables><variable> name=“o1” messageType =“AddIn”</variable ></variables > <assign> <copy> <from> $p3.addresponce.AddResult </from> <to>$koef.items.k[1] </to> </copy> </assign> <assign> <copy> <from> $p2.addresponce.AddResult </from> <to> >$koef.items.k[2] </to> </copy> </assign>
<Faulthandlers> <Catch faultname=“D_is_negative”>
<Reply name=“Finish" partnerLink=“scientist” operation="Solve“ variable=“koef” faultName=" D_is_negative " />
</Catch>
<CatchAll> <rethrow> </rethrow> </CatchAll></Faulthandlers>
Подходы к построению распределѐнных корпоративных информационных систем.
Enterprise
Service Bus
Подсистема
Подсистема
Подсистема
Взаимодействие всех приложений через единую точку, которая, при необходимости, обеспечивает транзакции, преобразование данных, сохранность обращений. Обеспечивается большая гибкость, простоа масштабирования. При замене одного приложения подключенного к
шине нет необходимости перенастраивать остальные.
BizTalkNetWeaver
XI/PI WebSphere JBoss
Пример интеграции разнотипных приложений.
СФЕРА
SAP
IT предприят
ие
ФАРМАК
BizTalk
Решения BIZTALK.
Message broker. EAI B2B BPM.
Publish / subscribe
Architecture
Адаптеры для основных протоколов: FILE, HTTP, SOAP, FTP,
POP3, SMTP, SQL…
SOA WSBPEL
Оркестровка и хореография.
Орекестровка предполагает наличие центрального процессора,
который вызывает веб-сервисы. Веб-сервисы в этом случае "не
знают", что они участвуют в более глобальном бизнес-процессе.Языками моделирования для
описания оркестровки являются WS BPEL XPDL и др.
При хореографии бизнес-процессов не требуется
центральный координатор, поскольку каждый веб-сервис "знает", когда выполнять свои
операции и с каким другим веб-сервисом он взаимодействует.Языками моделирования для
описания хореографии выступают WS-CDL (от W3C) и ebXML (от
OASIS).... м