New TOEPASSEN VAN INTEGRATIEPATRONEN MET OPENTUNNEL 1 · 2013. 6. 20. · [email protected]...
Transcript of New TOEPASSEN VAN INTEGRATIEPATRONEN MET OPENTUNNEL 1 · 2013. 6. 20. · [email protected]...
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
TOEPASSEN VAN INTEGRATIEPATRONEN
MET OPENTUNNEL 1.6
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
INHOUDSOPGAVE
INHOUDSOPGAVE ............................................................................................................................................................. 2 INLEIDING ............................................................................................................................................................................ 3 OPENTUNNEL ..................................................................................................................................................................... 3 BREEDTE KOPPELVLAK .................................................................................................................................................. 4 BERICHTTRANSFORMATIE OP BASIS VAN XSLT 1.0 ............................................................................................. 5 UNIVERSELE STUF INTERFACE ..................................................................................................................................... 9 GATEWAY VOOR SERVICES VOOR ZAAKSYTEMEN EN DMS 1.0 (VOORHEEN StUF ZAKEN DMS) ........ 10 BERICHTVOLGORDELIJKHEID ................................................................................................................................... 12 VERTRAAGDE (DOOR) LEVERING ............................................................................................................................. 12 SPlITSEN VAN DE INPUT .............................................................................................................................................. 14 CONDITIONEEL ZETTEN VAN EEN DIGITALE HANDTEKENING ...................................................................... 15 CONDITIONEEL AANPASSEN VAN EEN BERICHT ................................................................................................. 16 CONTENT BASED ROUTING ........................................................................................................................................ 16 ASYNCHRONE CONTINUERING .................................................................................................................................. 16 CONDITIONEEL VERZENDEN BERICHT ................................................................................................................... 17 ARCHIVERING T.B.V. ONWEERLEGBAARHEID ..................................................................................................... 17 OPZETTEN VAN EEN ROLGEBASEERDE XML FILTER SERVICE ........................................................................ 18 UITGAANDE ROUTERING VAN BERICHTEN VIA GATEWAY / LOADBALANCER ......................................... 18
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
INLEIDING
OpenTunnel van JNet BV is een integratiemakelaar en enterprise servicebus oplossing met faciliteiten specifiek voor de
Nederlandse overheid. In dit document worden veel voorkomende integratievraagstukken aangestipt en de oplossingen die
OpenTunnel in dit kader biedt. Er zullen regelmatig aanvullingen op dit document komen.
OPENTUNNEL
OpenTunnel is een platform die berichten die binnenkomen (via alle door OpenTunnel ondersteunde protocollen)
transformeert en (meervoudig aflevert). Dit kan zowel synchroon (bericht wordt meteen doorgezet, denk aan vraag/antwoord)
of asynchroon (denk aan notificaties en kennisgevingen). Bij asynchrone communicatie wordt getracht het bericht direct door
te zetten naar een afnemend systeem maar deze behoeft niet online te zijn. OpenTunnel zal trachten het bericht alsnog af te
leveren.
Het begrip bericht dient ruim opgevat te worden. OpenTunnel kan zelfs met HTTP Get requests overweg en kan deze ook
gebruiken bij een transformatie naar een bepaald doelbericht. OpenTunnel heeft ook faciliteiten voor ondersteuning van
berichtvolgorde en bij de aflevering van berichten kan een bepaald interval in acht worden genomen. Dit voorkomt dat een
doelsysteem wordt overspoeld door berichten. OpenTunnel synchroniseert en accommodeert systemen met totaal andere
service karakteristieken.
Wat er met een bericht dient te gebeuren na ontvangst wordt gespecificeerd in een tunnel. Met name het MIME type van het
inkomend bericht is belangrijk. Is deze bijvoorbeeld gedefinieerd als ‘application/ebms’ dan wordt het ebMS protocol
geactiveerd en zal OpenTunnel het bericht valideren op basis van dit protocol en een ontvangstbevestiging gaan sturen.
OpenTunnel kent ook functionele bevestigingsberichten die geconfigureerd kunnen worden. Denk hierbij bijvoorbeeld aan
StUF Bv berichten als antwoord op een asynchrone kennisgeving.
Een tunnel bepaalt hoe het bericht wordt ontvangen (protocol van entrypoint en mimetype), welke controles er dienen te
worden uitgevoerd (authenticatie, autorisatie, controle digitale handtekening, xsd validaties, business rules), hoe het bericht
moet worden omgezet (meervoudig) en waar het moet worden afgeleverd (meervoudig). Verder kunnen er allerlei extra service
karakteristieken worden toegevoegd (bewaartermijn, aantal afleverpogingen, notificaties, definitie mappingtabellen t.b.v.
transformatie). Vanuit een tunnel kan ook een aanroep worden gedaan naar een ander systeem om waarden op te halen die
gebruikt worden bij de transformatie van het bronbericht in doelbericht(en). In OpenTunnel heet dit een tunnelfunctie.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Vereenvoudige weergave van een tunnel configuratie
BREEDTE KOPPELVLAK
Een entrypoint kan door de bepaling van het adres (via een url contextpad) en een set validaties heel specifiek worden
ingericht voor ontvangst van bepaalde berichttypen. Een entrypoint kan ook worden ingericht voor de ontvangst van allerlei
niet of nauwelijks bij elkaar behorende berichten. Indien de gewenste berichttransformaties of afleverpunten anders zijn, dan
zijn in dat geval ook de tunneldefinities anders. Deze bepalen immers de controles, transformaties en afleverwijzen van het
inkomende bericht. Bij een generiek entrypoint moet dus bij een tunnel worden opgegeven hoe een specifiek bericht moet
worden herkend. Dit gebeurt door bij de tunnelidentificatie een aanwijzing op te nemen. Een WS-Addressing of ebMS action
kan worden gebruikt. Een andere mogelijkheid is een XPath expressie op te geven met een waarde waaraan een element moet
voldoen of d.m.v. transport parameters zoals HTTP headers of JMS properties. Op deze wijze is het mogelijk om voor de
buitenwereld een breed afleverpunt te bieden (voor OpenTunnel betekent dit een entrypoint) waarbij toch de juiste
handelingen op het inkomende bericht worden gepleegd.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
BERICHTTRANSFORMATIE OP BASIS VAN XSLT 1.0
Een belangrijke functie van OpenTunnel is het transformeren van een bericht. In deze paragraaf wordt uit de doeken gedaan
hoe dit kan met behulp van XSLT. OpenTunnel ondersteunt in de huidige versie nog geen visuele mapping op basis waarvan
een XSLT wordt aangemaakt. JNet gebruikt hiervoor meestal Altova Mapforce die wij eventueel meeleveren met OpenTunnel.
In Altova Mapforce kan een input bestand (XML of XSD) en outputbestand (XML of XSD) worden geïmporteerd. Visueel kunnen
de element transformaties worden getekend. De definieerde transformaties kunnen worden vastgelegd in een XSLT 1.0
bestand. Deze XSLT kan in OpenTunnel worden geïmporteerd en worden gekoppeld aan een transformatie in een tunnel.
Het proces begint bij de creatie van een nieuwe mapping (het hoeft geen volledig project te zijn):
Vervolgens worden bron- en doel bericht (of de xsd definities) geïmporteerd. In dit geval is het ShortPO.xml/xsd en
ExtendedPO.xml/xsd.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Beide bestanden worden op het mapping pallet getoond:
Hierna kunnen de mappings worden aangebracht. Een van de mappings bevat een functie.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Vervolgens wordt met de functie File->GenerateCodeIn -> XSLT 1.0 de mapping geëxporteerd naar een XSLT bestand. In dit
geval wordt deze genaamd MappingMapToExtendedPO.xslt. Deze XML transformatie wordt als volgt in OpenTunnel
geïmporteerd:
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Deze transformatie kan vervolgens in tunnels worden gebruikt. Inputberichten met dezelfde structuur als ShortPO.xml kunnen
op vele manieren aan OpenTunnel worden aangeboden. Het resultaat van de transformatie kan op vele wijzen worden
aangeboden aan andere systemen.
UNIVERSELE STUF INTERFACE
Een OpenTunnel entrypoint kan over meerdere protocollen een universele XML of JSON interface aanbieden. Indien geen extra
maatregelen zijn getroffen zoals controles of het instellen van beveiligingsopties kan alles aan één entrypoint worden
aangeboden. Validatie tegen een XML Schema maakt het entrypoint robuuster. In OpenTunnel kan al het StUF verkeer indien
gewenst naar één punt worden geleid. Indien XML schema validatie wordt aangezet kunnen er geen StUF berichten
binnenkomen die niet aan de XSDs voldoen.
Afhankelijk van de inhoud en type van een StUF bericht worden de berichten gerouteerd naar het juiste systeem.
Zaakberichten naar een zaaksysteem, BG berichten naar een gegevensmagazijn etc. De routering (en eventuele transformaties)
werken op basis van expressies (XPath, waarden van tunnelvariabelen, uitkomst van een tunnelfunctie)
Indien de entrypoints specifieker worden ingericht hoeft OpenTunnel in mindere mate in de berichten te kijken. Dit heeft een
positieve invloed op de performance.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
StUF afnemerindicaties kunnen op generieke wijze worden geadministreerd in een op abonnementen gebaseerd
datadistributiesysteem. Dit betekent twee dingen: Het zetten van afnemerindicaties moet worden gefaciliteerd en mutaties in
een gegevensmagazijn, zakenmagazijn of dms moeten worden doorgegeven aan het datadistributiesysteem zodat deze kan
bepalen of er geïnteresseerde afnemers zijn van deze gewijzigde gegevens. Het datadistributiesysteem geeft deze mutaties
door (eventueel weer gebruik makend van OpenTunnel). Een universele StUF interface kan de intentie tot zetten van een
afnemerindicatie ontdekken. Er zijn hiervoor twee mechanismen: via een toevoeging kennisgeving of het stellen van een vraag
met afnemerindicatie = true. Als een van deze constructies voorkomen in een vraag dan kan dit bericht ‘verdubbeld’ worden
door OpenTunnel via een extra exitpoint.
Bij het retourneren van een antwoord kan OpenTunnel via een stylesheet de waarde afnemerindicatie op true zetten indien
het zetten van een afnemerindicatie via een vraag ging en de afnemerindicatie door het datadistributiesysteem succesvol
gezet is. Het achterliggende systeem hoeft alleen de vraag te beantwoorden en hoeft geen zorg te dragen voor de
administratie.
GATEWAY VOOR SERVICES VOOR ZAAKSYTEMEN EN DMS 1.0 (VOORHEEN STUF ZAKEN DMS)
StUF Services voor Zaaksystemen en DMS 1.0 is een nieuwe standaard. OpenTunnel ondersteunt deze standaard door een
specifieke inrichting van OpenTunnel (entrypoints, sjablonen, meerdere tunnels, CMIS exitpoints en CMIS changelog listener).
Het gedrag is dan ook aanpasbaar.
Voor de verwerking van inkomende StUF berichten worden twee entrypoints gedefinieerd. Een voor synchrone en een voor
asynchrone communicatie. Bij asynchrone communicatie worden de berichten en documenten in de OpenTunnel runtime
database geplaatst voor gegarandeerde aflevering.
De tunnels die ingericht worden voor het ondersteunen van de standaard kunnen de StUF berichten doorzetten naar het
zaaksysteem. Indien het zaaksysteem geen StUF ondersteunt kan OpenTunnel het StUF koppelvlak bieden en dit in de tunnels
die de standaard implementeert een transformatie uitvoeren naar de API van het zaaksysteem.
Op basis van de inhoud van het aangeboden bericht bepaalt OpenTunnel welke tunnelconfiguratie van toepassing is en of het
bericht via CMIS moet worden doorgegeven aan het DMS of naar het zaaksysteem (of beide).
Mutaties die plaatsvinden in het DMS worden via de CMIS changelog listener (OpenTunnel entrypoint) doorgegeven aan het
zaaksysteem.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Asynchroon verkeer in het kader van standaard services voor zaaksysteem en DMS
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Synchroon verkeer in het kader van standaard services voor zaaksysteem en DMS
BERICHTVOLGORDELIJKHEID
Het is wenselijk dat berichten in volgorde worden verwerkt. Een bericht is vaak een weerslag van een gebeurtenis in de
werkelijkheid en heeft meestal een element die het tijdstip van de gebeurtenis representeert, bijvoorbeeld het StUF element
tijdstipRegistratie. Indien berichten in een keten worden doorgegeven kan op ieder knoopunt om technische redenen deze
volgordelijkheid worden doorbroken. Met name het parallel verwerken van gegevens in een cluster kan tot gevolg hebben dat
een later aangeboden bericht eerder verwerkt wordt dan. Ook vele messaging implementaties bieden geen ondersteuning
voor volgordelijk verwerken. In OpenTunnel kan een business timestamp worden gedefinieerd die er voor zorgt dat de
verwerking in volgorde van deze business timestamp. In aanvulling hierop kan er een wachttijd worden ingebouwd in een
tunnel alvorens het bericht wordt opgepakt ter verwerking en doorlevering. De combinatie van deze twee strategieën verhoogt
de kans aanzienlijk dat berichten in volgorde worden verwerkt. De kans is echter geen volle 100% omdat niet gegarandeerd
kan worden dat berichten die (heel veel) later binnenkomen dan de wachttijd niet voorkomen.
VERTRAAGDE (DOOR) LEVERING
Probleem:
Het systeem waar gegevens door OpenTunnel moet worden afgeleverd heeft een matige performance of accepteert slechts een
aantal berichten per tijdseenheid.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Oplossing:
Het definiëren van een interval tussen de aflevering van berichten in een tunnel. OpenTunnel accommodeert op deze wijze
systemen met totaal verschillende service karakteristieken. OpenTunnel treedt op als ‘man-in-the-middle’. Het buffert de
berichten en levert in een rustig tempo door. Deze functionaliteit werkt ook in onze high availability versie. Des gewenst kan
deze functionaliteit worden gecombineerd met een wachttijd in de verwerking en het definiëren van een business timestamp
zoals besproken in de vorige paragraaf.
In onderstaande twee schermafdrukken is sprake van een wachttijd tot verwerking van 20 seconden en een interval van 5
seconden tussen doorleveringen. Daarnaast een business timestamp expressie op element ts_expr waarbij de berichten in
volgorde van business timestamp worden doorgeleverd.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
SPLITSEN VAN DE INPUT
Input kan leiden tot een veelvoud aan outputberichten. Denk aan csv bestanden of StUF samengestelde kennisgevingen
(Lk03). OpenTunnel kan deze samengestelde berichten splitsen in kleinere eenheden. Deze kleinere eenheden worden
vervolgens verder verwerkt (getransformeerd en afgeleverd). Het splitsen gebeurt in de tunnel. Een EntryPoint (bijvoorbeeld
een FileEntryPoint) leest een groot bestand. Bij een tunnel kan worden opgegeven hoe de input moet worden gesplitst. De
gesplitste output wordt in nieuwe tunnelinstanties geplaatst met een referentie naar het oorspronkelijke bericht. Dit is
inzichtelijk in de OpenTunnel beheer module. De gesplitste berichten worden na transformatie doorgezet aan een andere
systeem. Via deze functionaliteit hebben wij bijvoorbeeld een CSV import bestand omgezet naar zaak creatie berichten.
OpenTunnel ondersteunt de volgende splitters:
• nl.jnc.gateway.message.ctrl.splitter.NewLineSplitter. Splitst de input op basis van ‘new line’ karakters.
• nl.jnc.gateway.message.ctrl.splitter.CSVSplitter. CSV splitter waarbij iedere lijn een nieuw bericht wordt.
• nl.jnc.gateway.message.ctrl.splitter.XPathSplitter. Het bericht wordt behandeld als DOM document. Deze wordt geconfigureerd met een XPath expressie die een lijst van DOM nodes produceert. Elke DOM node wordt een nieuw bericht.
De splitter wordt geconfigureerd via runtime variabelen in de beheer console.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
CONDITIONEEL ZETTEN VAN EEN DIGITALE HANDTEKENING
Probleem:
Vanuit een OpenTunnel server moet namens meerdere partijen een digitale handtekening gezet worden. Denk aan het
volgende scenario:
Een applicatie beheert gegevens volgens een multi-tenant model. Deze applicatie wil berichten uitsturen die voorzien dienen
te worden van een digitale handtekening. De applicatie wil de berichten slechts op één punt afleveren geen rekening houdend
met de ‘eigenaar’ van het uit te sturen bericht.
Oplossing:
In OpenTunnel dient dan per tunnel per tenant een eigen verzoekprofiel te worden samengesteld waarbij voor iedere tenant
een eigen private key aan het profiel wordt gekoppeld t.b.v. het plaatsen van de digitale handtekening. Vervolgens moet er
nog iets in bericht of protocol gevonden worden op basis waarvan een expressie gedefinieerd kan worden die de selectie van
het gewenste requestprofiel stuurt. De StUF standaard bijv. definieert in de StUF header een element <organisatie> die
hiervoor gebruikt kan worden.
In onderstaand voorbeeld wordt een ander element gebruikt, namelijk een gemeentecode. Hieronder als voorbeeld een
schermafdruk waarbij de gemeentecode in het StUF-WOZ bericht de selector is die voorschrijft welk verzoekprofiel met
gekoppeld certificaat en transformer moet worden geselecteerd. Zoals u kunt zien is het exitpoint gelijk. Op deze wijze hoeft
een bestaande applicatie niet te worden aangepast. In onderstaande schermafdruk is de selectie van een verzoekprofiel (met
alle benodigde berichtoperaties) afhankelijk gemaakt van de waarde van het XML element gemeenteCode.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
CONDITIONEEL AANPASSEN VAN EEN BERICHT
In OpenTunnel zijn er drie manieren om de output van een berichttransformatie dynamisch te maken:
• Het gebruik maken van een mapping tabel tussen inputelementen en de gewenste output elementen
• Het gebruik van meerdere berichtsjablonen op basis van een expressie uitgevoerd op de input (bericht of protocol)
• Een combinatie van beiden
CONTENT BASED ROUTING
Via expressies bij de definitie van een afleveradres kan een expressie worden opgegeven onder welke voorwaarden dit
afleverpad moet worden gevolgd. Dit werkt op basis van expressies.
ASYNCHRONE CONTINUERING
OpenTunnel kan berichten direct bij de ontvanger afleveren. Indien een ontvangend systeem traag is of vaak niet beschikbaar
kan de berichtverwerkingstransactie verkort worden door gebruik te maken van asynchrone continuering gebruik maken van
een message queue.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Voorbeeld: in de Landelijke voorziening WOZ is bepaald dat de beschikbaarheid en performance van berichtenarchief geen
invloed mag hebben op het hoofdverwerkingspad, n.l. het verwerken van het bericht in de database en het aanmaken van
orders voor SAP. Een inkomend bericht zou normaliter dus afgeleverd worden op drie exitpoints (archief, SAP en WOZ
database logica). Maar in plaats van het direct sturen van het bericht naar het archief wordt het in een JMS message queue
geplaatst. De transactie is dan korter. Er is in OpenTunnel een extra tunnel gedefinieerd die via een JMS entrypoint de queue
weer leest en het bericht alsnog via WebDAV protocol (exitpoint!) in het archief plaatst. De verdere verwerking gebeurt zo dus
op de achtergrond.
CONDITIONEEL VERZENDEN BERICHT
Niet altijd behoeven berichten die aan OpenTunnel aangeboden worden automatisch te worden doorgeleverd. Dit kan ook
onder condities gebeuren. Een voorbeeld is het sturen van een bericht aan de BerichtenBox van MijnOverheid. Het heeft geen
zin berichten te versturen indien de burger geen berichtenbox heeft.
OpenTunnel kan een WebService Call uitvoeren via een OpenTunnel functie. Het resultaat van een aanroep kan worden
opgeslagen in een of meerdere zelf te creëren runtime variabelen. Deze worden geëvalueerd in een conditioneel exitpoint.
Indien de conditie waar is wordt het bericht afgeleverd (eindstatus = DELIVERED) of niet (eindstatus = PROCESSED). In de
tunnel wordt dus eerst de webservice aangeroepen die bekijkt of de BSN in het bericht een MijnOverheid account heeft.
Afhankelijk van het resultaat wordt het bericht doorgezonden.
ARCHIVERING T.B.V. ONWEERLEGBAARHEID
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen
Bovengenoemde parameters worden verstuurd als metadata naar de MongoDB archivering server(s). De parameters kunnen
gebaseerd zijn op Xpath statements uit het ingestuurde bericht, resultaten van een tunnelfunctie of een reeds gevulde tunnel
runtime variabele. Daarnaast wordt natuurlijk het bericht zelf naar de archivering server(s) gestuurd ter opslag.
OPZETTEN VAN EEN ROLGEBASEERDE XML FILTER SERVICE
Deze beschrijving wordt binnenkort toegevoegd.
UITGAANDE ROUTERING VAN BERICHTEN VIA GATEWAY / LOADBALANCER
Indien OpenTunnel zich bevindt achter een TLS offloader (Gateway, Proxy, LoadBalancer) kan het bij uitgaand verkeer voor de
gateway onduidelijk zijn naar welke partij de (TLS) verbinding moet worden opgezet. Dit kan worden ondervangen door
vanuit OpenTunnel met een HTTP header de loadbalancer te instrueren. Het uitgaande bericht kan dan worden doorgeleverd
door de Gateway. De URL wordt in onderstaand voorbeeld bepaald door een tunnelfunctie die in het CPA contract kijkt wat het
uiteindelijke afleveradres is. Deze wordt geplaatst in het de HTTP header ‘outboundUrl’. Het exitpoint van de OpenTunnel
tunnel is in dit geval dus de Gateway zelf!
OpenTunnel kan dus zelf TLS endpoint zijn maar kan ook samenwerken met een TLS Offloader.
WWW.OPENTUNNEL.NL� [email protected] �[email protected] VERSIE 2013.2
Integratiepatronen