FIIFO 5 / Spcialisation NAL

Transcription

FIIFO 5 / Spcialisation NAL
IFIPS 5 / Nouvelles Architectures Logicielles
Projet : Bus de web services avec « moteur » BPEL
Un bus de services
Un bus de services (ESB) permet d’assembler des web services existants, le résultat de cet
assemblage étant également un web service, positionné à un niveau plus élevé car
représentant un processus métier.
WS-BPEL
Web-Service Business Process Execution Language est un langage basé sur XML qui permet
de formaliser la logique d’exécution d’un web service résultant du processus d’intégration
décrit ci-dessus.
Cahier des charges
Architecture et caractéristiques générales
Vous devez concevoir et réaliser un bus de services dont l’architecture et les caractéristiques
principales sont les suivantes :
cmp Component View
Client
XMLDocument
*
*
«flow»
SOAP
Bus ESB
«webservice»
Bus ESB::Router
+
+
+
«webservice»
Bus ESB::Admin
getResultFor(int) : XMLDocument
invoke(BusinessProcess, XMLDocument, XMLDocument) : void
invokeOneWay(BusinessProcess, XMLDocument) : int
+
+
add(BusinessProcess) : void
remove(BusinessProcess) : void
*
*
Bus ESB::
WSProxy
Bus ESB::
BusinessProcess
Instructions BPEL
1..*
«webservice»
WebServ ice
1
Les différents composants présentés sur ce diagramme le sont à titre indicatif. Vous avez toute
latitude pour interpréter cette présentation afin de fournir les fonctionnalités demandées.
Exécution de processus métier
Router comporte les points d’accès au bus, accessibles via SOAP :
• invoke (BusinessProcess, input : XMLDocument, output : XMLDocument) permet
d’invoquer un processus métier
o Input = document XML envoyé par le client et transmis au processus métier
o Output = document XML résultat de l’exécution du processus métier
• invokeOneWay (BusinessProcess, input : XMLDocument) permet d’invoquer un
processus métier de façon asynchrone
o Input = document XML envoyé par le client et transmis au processus métier
o Retour = identifiant permettant de venir chercher le résultat plus tard par appel
à getResultFor()
• XMLDocument getResultFor (int) permet de venir chercher le résultat d’une
invocation effectuée par appel à invokeOneWay. L’entier passé en paramètre est celui
retourné par invokeOneWay().
BusinessProcess est un processus métier exprimé en WS-BPEL.
WSProxy est un proxy d’invocation d’un web service externe.
XMLDocument représente un document XML au sens SOAP. Son type réel n’est pas imposé.
Web Service représente un web service externe.
Administration
Admin est un web service accessible via SOAP et permettant d’ajouter ou de retirer des
processus métier au Bus. Il offre au minimum les services suivants :
• add (BusinessProcess)
• remove (BusinessProcess)
Types de Web Services externes supportés
Le Bus devra pouvoir invoquer les web services externes, par appels synchrones.
Instructions BPEL supportées
Schéma WS-BPEL : http://schemas.xmlsoap.org/ws/2003/03/business-process/
Les instructions BPEL supportées seront au minimum les suivantes :
• <process> : définition d’un processus métier
• <import> : permet d’importer des schémas XML (xsd) et des descriptions WSDL
• <variables> et <variable> : pour définir des variables typées
• <sequences> et <sequence> : pour contenir un ensemble d’instructions
• <assign> et <copy> : affectation de variables
• <switch> : tests
• <invoke> : invocation de web services
2
Exemple <process>
<process xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:engine="http://www.eclipse.org/stp/b2j/2006/02"
xmlns:print="http://www.eclipse.org/stp/b2j/2006/02/Print"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:temperature="http://www.xmethods.net/sd/TemperatureService.wsdl"
xmlns:hello="http://com.lepago.hellolang"
xmlns:fortune="http://fortune.WebServices"
xmlns:urlfetcher="http://www.atomic-x.com/atomicxmlservices/screenscraper.asmx">
<!-- toutes les autres balises -->
</process>
Exemples <import>, <variables>, <variable>, <assign>
<variables>
<variable name="truevar" type="xsd:boolean" />
<variable name="falsevar" type="xsd:boolean" />
</variables>
Types parmi
les types
simples
XMLSchema
<assign>
<copy>
<from><literal>true</literal></from>
<to variable="truevar" />
</copy>
<copy>
<from><literal>false</literal></from>
<to variable="falsevar" />
</copy>
</assign>
<import importType= "http://schemas.xmlsoap.org/wsdl/"
location="../service_public_libraries/xmethods_FortuneService.wsdl"
namespace="http://fortune.WebServices" />
<variables>
<variable name="getFortuneRequest"
messageType="fortune:getFortuneRequest" />
</variables>
<assign>
<copy>
<from><literal>wisdom</literal></from>
<to variable="getFortuneRequest" part="topics" />
Type
correspondant
à un Message
défini en
WSDL.
<copy> pour
les affectations
3
<from><literal>0</literal></from>
<to variable="getFortuneRequest" part="minLength" />
<from><literal>10000</literal></from>
<to variable="getFortuneRequest" part="maxLength" />
</copy>
</assign>
<assign>
<copy>
<from variable="crOutput" part="parameters" query="//result"/>
<to variable="input" part="parameters"
query="/initiateLoanFlow/xmlLoanApp/CreditRating"/>
</copy>
</assign>
part= existe
quand la
variable est de
type Message
query=
accepte une
expression
XPath
<import importType="http://schemas.xmlsoap.org/wsdl/"
location="http://www.eclipse.org/.../EngineHostsPort.wsdl"
namespace="http://www.eclipse.org/ /EngineHosts" />
Import WSDL
<import importType="http://www.w3.org/2001/XMLSchema"
location="./test_BindingWsifJava.xsd"
namespace="http://www.eclipse.org/stp/b2j/2006/02" />
Import XSD
Exemples <invoke>
<invoke name="invokeCR"
partnerLink="creditRatingService"
portType="crs:CreditRatingService"
operation="process"
inputVariable="crInput"
outputVariable="crOutput"/>
Seules les invocations synchrones seront
supportées
Exemples <switch>
<switch>
<!-- If loanOffer1 is greater (worse) than loanOffer2 -->
<case condition="getVariableData('loanOffer1','parameters','result/APR') >
getVariableData('loanOffer2','parameters','result/APR') ">
<!-- Then take loanOffer2 -->
<assign>
<copy>
<from variable="loanOffer2" part="parameters" query="result"/>
4
<to variable="selectedLoanOffer" part="parameters"
query="/onLoanFlowResult/result"/>
</copy>
</assign>
</case>
<!-- Otherwise take loanOffer1 -->
<otherwise>
<assign>
<copy>
<from variable="loanOffer1" part="parameters" query="result"/>
<to variable="selectedLoanOffer" part="parameters"
query="/onLoanFlowResult/result"/>
</copy>
</assign>
</otherwise>
</switch>
Travail demandé
Vous devez concevoir et réaliser un Bus proposant le sous-ensemble de fonctionnalités
suivant :
- implémentation de l’opération invoke() de la classe Router
Implémentation
Votre implémentation sera basée sur Java/J2EE et devra être compatible avec n’importe quel
conteneur WEB J2EE.
Vous devrez restituer :
• Une application basée sur Axis et capable de fonctionner dans Tomcat 5.
• L’ensemble du code source, des descripteurs de déploiements et des scripts de
fabrication (le cas échéant).
5

Documents pareils