Интеграция приложений с помощью ws-bpel

Post on 17-Jan-2016

73 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Интеграция приложений с помощью WS-BPEL. Керівник. Відповідальний виконавець. П.І. Перконос. С.В. Суботін. Жизненный цикл WORKFLOW c использованием WS-BPEL в WEB. 5. Портали. В2В. .NET. Користувачі сервісів. 4. Потоки бізнес-процесів. 3. Сервіси ( атомарні, композитні ). - PowerPoint PPT Presentation

TRANSCRIPT

Интеграция приложений с Интеграция приложений с помощью помощью 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

Оркестровка и хореография.

Орекестровка предполагает наличие центрального процессора,

который вызывает веб-сервисы. Веб-сервисы в этом случае "не

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

описания оркестровки являются WS BPEL XPDL и др.

При хореографии бизнес-процессов не требуется

центральный координатор, поскольку каждый веб-сервис "знает", когда выполнять свои

операции и с каким другим веб-сервисом он взаимодействует.Языками моделирования для

описания хореографии выступают WS-CDL (от W3C) и ebXML (от

OASIS).... м

top related