PM3: protokolli tunneldamine

Mustri tüüp: primitiiv

Peamine kasusaaja: inimene, automatiseeritud süsteem
Eesmärk
: andmete pärimine, andmete saatmine
Allikas
: teadaolev praktika
Teenuste arv
: 1

Abstract

PM3: Protocol tunnelling is used when it is not desired to define the input and/or output of a service fully in WSDL. There are multiple approaches. For example a special element of type "xtee:xml" can be used.

It is more difficult to define the service consumer and the service producer in the context of this pattern because message structures are not visible from the standpoint of X-Road. In the context of this pattern:

  • The service producer is the information system that responds to the requests made by the service consumer;
  • The service consumer is the information system that initiates data exchange by making a request to the service producer.

Sissejuhatus

Muster kirjeldab andmete üle X-tee vahetamist olukorras, kus X-tee teenuse sisendit ja väljundit ei saa teenuse WSDLis täielikult määrata. Tegemist on üldise mustriga, mis sobib paljude erinevate kasutusjuhtude jaoks ja on kombineeritav enamuse käesolevas mustrikataloogis toodud mustritega.

Muster sisaldab ühte teenust, mille korral:

  • teenuse osutaja on infosüsteem, mis vastab teenuse tarbija poolt saadetud päringutele;
  • teenuse tarbija on infosüsteem, mis algatab andmevahetuse saates teenuse osutajale vastava päringu.

Loodava teenuse sisendi ja väljundi selle osa kohta, mis ei ole teenuse WSDLis kirjeldatud, kasutame terminit tunneldatud.

Probleem

Muster sobib kasutamiseks mitme erineva probleemi korral. Toome nendest kolm mõnevõrra üksteisega kattuvat probleemi:

  • andmeid soovitakse vahetada formaadis, mille WSDL-keeles kirjeldamine on keeruline (näiteks HL7);
  • andmevahetuses kasutatakse protokolli, mille sisu ei soovita X-teel kirjeldada või soovitatakse säilitada protokolli sõltumatus X-teest (näiteks Estfeed);
  • andmevahetusega on seotud piisavalt palju erinevaid äriprotsesse, et iga protsessi jaoks eraldi teenuse loomine ja nende teenuste hilisem haldamine ei ole majanduslikult mõistlik.

Lahendus

Teenuse osutaja infosüsteemis:

  • luuakse X-tee teenus, mille sisend ja/või väljund on tunneldatud (ehk teenuse WSDLis määramata);
  • arendatakse teenuse sisendis sisalduva tunneldatud andmestiku lugemine;
  • arendatakse teenuse väljundi koostamine ja väljundis sisalduva andmestiku tunneldamine;
  • määratakse infosüsteemid, mis võivad teenust kasutada.

Teenuse tarbija infosüsteemis:

  • arendatakse teenuse sisendi koostamine (sh sisendis sisalduvate andmete tunneldamine);
  • arendatakse teenuse osutaja poolt osutatava teenuse tarbimine;
  • arendatakse teenuse väljundis sisalduva tunneldatud andmestiku lugemine.

Teenuste kirjeldus

Tunneldatud andmestiku jaoks määratakse WSDLis spetsiaalne element. Selle elemendi andmetüübiks defineeritakse "anyType", "xtee:xml" (vt http://www.riik.ee/schemas/xtee/) või selle elemendi sees kasutatakse "CDATA" plokki.

<wsdl:definitions xmlns:xtee="http://x-tee.riik.ee/xsd/xtee.xsd".... >
<wsdl:types>
<schema ....>
<complexType name="RequestType">
<!-- Request structure consists of just one xml document -->
<sequence>
<element name=”inputDocument” type=”xtee:xml”/>
</sequence>
</complexType>

<complexType name="ResponseType">
<!-- Response also consists of one xml document -->
<sequence>
<element name=”outputDocument” type=”xtee:xml”/>
</sequence>
</complexType>
....
</schema>
</wsdl:types>

<wsdl:message name="RequestMessage">
<wsdl:part name="keha" type="RequestType"/>
</wsdl:message>

<wsdl:message name="ResponseMessage">
<wsdl:part name="keha" type="ResponseType"/>
</wsdl:message>
....

<wsdl:portType .... >
<wsdl:operation name="Black-box service">
<wsdl:input message="RequestMessage"/>
<wsdl:output message="ResponseMessage"/>
</wsdl:operation>
....
</wsdl:portType >
</wsdl:definitions>

Mustri käitumine

Järgneval joonisel esitatakse teenuse tarbija ja teenuse osutaja vaheline suhtlus.


Joonis 3.3 Mustri PM3 järgnevusdiagramm.

Infosüsteemi spetsiifilise äriloogika esitamiseks on viidatud järgnevusdiagrammile "Infosüsteemi äriprotsess", mille sisu ei ole toodud kuna see sõltub konkreetse infosüsteemi äriprotsessist.

Teenust osutava infosüsteemi pool toimuva teenusetöötluse esitamiseks on viidatud järgnevusdiagrammile "Infosüsteemi teenusetöötlus", mille sisu ei ole toodud kuna see konkreetsest tunneldamise juhust ja vajadustest.

Teenust tarbiva infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • täidab infosüsteemi spetsiifilist äriprotsessi;
  • Teenusloogika kiht:
    • tunneldab teenuse sisendiks olevad andmed;
    • tarbib teenust osutava infosüsteemi teenust;
    • võtab vastu tarbitud teenuse väljundi;
    • loeb teenuse väljundis sisalduvad tunneldatud andmed;
    • teavitab äriloogika kihti teenuse kasutuse tulemustest.

Teenust osutava infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • kasutatakse juhul, kui teenuse vastuse koostamiseks on vaja sooritada mingi äriprotsess.
  • Teenusloogika kiht:
    • võtab vastu teenuse sisendi;
    • loeb teenuse sisendis sisalduvad tunneldatud andmed;
    • võib teavitada andmeid vajava infosüsteemi äriloogika kihti ja oodata äriloogikakihilt vastust;
    • tunneldab teenuse väljundina saadetavad andmed;
    • edastab teenuse vastuse teenuse tarbijale.

Lisakaalutlused

Käesoleva mustri korral on oluline silmas pidada järgnevat:

  • WSDLil põhinev valideerimine on võimalik ainult WSDLis kirjeldatud osal;
  • teenust tarbiva infosüsteemi arendamisel ei piisa X-tee turvaserveri või RIHA kaudu saadavast teenuse kirjeldusest;
  • korduvkasutatavate komponentide (näiteks J-Road) kasutamine on raskendatud;
  • teenuse testimine on raskendatud;
  • kui teenuse tunneldatud osas on mitmeid erinevaid "teenuseid", siis võib vajalikuks osutuda täiendava pääsuõiguste kihi loomine teenuse osutaja poolel.

Näide

Näitena on toodud teenus "digilugu.hl7". Antud teenust kasutatakse üle 240 erinevat tüüpi HL7 dokumendi edastamiseks. Teenuse sisendi ja väljundina on defineeritud üks element, mis vastab HL7 vormingus dokumendile. Elemendi tüübiks on defineeritud "xtee:xml".

Teenuse sisend:

hl7Request
|-> keha (type: hl7Paring)
|->hl7InputMessage (type: xml, description: “HL7 paringustring”)

Teenuse väljund:

hl7Response
|-> keha (type: hl7Vastus)
|->hl7OutputMessage (type: xml, description: “HL7 vastusstring”)



Last modified: Monday, 24 October 2016, 1:23 PM