Follow Us on Twitter

Oracle Service Bus 12c

Februari 2015 - Met de komst van Fusion Middleware 12c heeft Oracle weer een grote stap gezet in het integreren van haar grotendeels door acquisitie verkregen middleware portfolio. Een van de grootste veranderingen op dit vlak heeft plaatsgevonden in de Oracle Service Bus. Zo vindt vanaf versie 12c de bouw van OSB projecten niet langer plaats in Eclipse maar in JDeveloper. Voor de Fusion Middleware consultant is dit een goede ontwikkeling. Deze heeft voortaan nog maar één IDE nodig. OSB en BPM/BPEL delen daardoor nu ook een groot aantal componenten i.p.v. dat ze elk hun eigen integratie oplossing aanbieden. Denk bv. aan transformatie componenten of aan JCA adapters die nu zonder omweg opgenomen kunnen worden in een OSB service. Dit maakt de leercurve voor een ontwikkelaar om beide toolsets te beheersen een stuk minder steil en het leidt tot meer eenduidige en beter beheersbare oplossingen.

Op beheervlak heeft Oracle daarnaast ook niet stil gezeten. In 12c is de Oracle Service Bus monitoring netjes geïntegreerd in de Enterprise Manager, waardoor hier nu de complete service flow bekeken kan worden, dus inclusief OSB aanroepen.

Naast nieuwe mogelijkheden als gevolg van de integratie in JDeveloper zijn er ook een aantal nieuwe features aan de OSB toegevoegd. Dit Whitebook geeft een overzicht.

Oracle Service Bus project

De leidraad van dit Whitebook is een OSB service waarin een groot aantal nieuwe 12c features zijn verwerkt. Het project is te downloaden vanuit GitHub.

OSB 12c project

De achterkant van de service is de publiekelijk te benaderen Global Weather service ontsloten als business service GlobalWeatherBS (1). Deze service lepelt aan de hand van een land de steden in dat land op, waar zich een weerstation bevindt. De Weerstation pipeline (2) verzorgt de transformatie van de verzoek- en antwoordberichten en wordt hergebruikt door zowel de WeerstationService (5) als de WeerstationCollectieService (7) proxies.

De WeerstationCollectieService ondersteunt het bevragen van meerdere landen. De split-join WeerstationCollectieService component (3) breekt hiervoor het verzoekbericht voor meerdere landen op en stuurt in parallel voor elk land een bericht naar de WeerstationService pipeline. De berichten die terugkomen worden geaggregeerd tot 1 antwoordbericht dat teruggestuurd wordt naar de WeerstationCollectieService proxy.

Zowel de WeerstationService als de WeerstationCollectieService hebben een validatie component welke gebaseerd is op een pipeline template (4). Naast validatie vindt hierin ook logging van de berichten plaats.

Tot slot is de WeerstationService ook ontsloten als een REST service (6).

Nieuwe features

Pipelines

In OSB 12c is de pipeline van de proxy service gescheiden en zijn pipelines losse componenten geworden. Pipelines hebben in 12c een eigen contract en kunnen hergebruikt worden. Een pipeline kan aangesloten worden op een of meerdere proxy services, pipelines of split-joins. Samen met OSB templates zorgen pipelines ervoor dat OSB services in 12c veel meer modulair en DRY (Don’t Repeat Yourself) zijn dan in 11g.

OSB 12c Pipelines

In de WeerstationService pipeline vindt de transformatie plaats van het verzoek- en antwoordbericht. De pipeline conformeert aan het contract van de WeerstationService proxy. De transformaties worden uitgevoerd middels een xquery component. Dit had echter even goed een xslt stylesheet kunnen zijn, waarbij inmiddels ook xslt versie 2.0 wordt ondersteund.

DVM

In het verzoekbericht van de proxy dient het opgegeven land in het Nederlands te worden doorgegeven. De business service verwacht het land echter in het Engels. Ideaal om hier een dvm voor te gebruiken. In 11g werd dit niet out-of-the-box ondersteund, in 12c kan dit nu wel en dus ook in xquery transformaties:

dvmtr:lookup('WeerstationService/transformaties/Landen-naar-Countries', 'land', $weerstationverzoek/com:Land/com:Naam, 'country', '')

Bovenstaande code transformeert het land in het verzoekbericht van de proxy in een country in het verzoekbericht voor de business service door gebruik te maken van de dvm Landen-naar-Countries.dvm die is opgenomen in de service. Let er op dat het volledige pad naar de dvm dient te worden opgegeven, zonder extensie.

Split-joins

De split-join component is ook nieuw in OSB 12c. De component is overgenomen uit bpel (onder water is dit ook duidelijk zichtbaar, o.a. in het gebruik van de bpel namespace). De split-join component kan gebruikt worden om berichten op te knippen in meerdere berichten (split) en deze uit te sturen naar een of meerdere services. De resultaten worden hierna geaggregeerd (join) waarna weer één enkel bericht ontstaat. De service-aanroepen kunnen hierbij in parallel plaatsvinden. Dit kan bij veel of dure service calls tot de nodige performance winst leiden.

OSB 12c split-join

De WeerstationCollectieService split-join bepaalt eerst hoeveel landen er in het verzoekbericht staan. Per land wordt een verzoekbericht (conform WeerstationService contract) samengesteld en in parallel aangeboden aan de WeerstationService pipeline (Invoke Service).

De antwoordberichten worden geaggregeerd (via de Insert Action) in een variabele welke tenslotte naar het antwoordbericht wordt ge-assigned.

Pipeline Templates

De OSB pipeline template is ook nieuw in 12c. In bestaande OSB landschappen zijn services veelal volgens een vast patroon opgebouwd, vaak is dit het VETRO (Validate, Enrich, Transform, Route, Operate) patroon. In de praktijk leidt dit ertoe dat een nieuwe service vaak wordt gebouwd door een bestaande of referentie service te kopiëren en de afwijkingen aan te passen. Een groot nadeel hiervan is dat het foutgevoelig is en dat aanpassingen in de referentie service handmatig moeten worden doorgevoerd in alle bestaande services.

De pipeline template biedt hiervoor een oplossing. Het is in essentie een blauwdruk voor een specifieke pipeline in een service waarbij alle vaste instellingen al gezet zijn. Een groot voordeel van een pipeline template is dat wijzigingen in de template meteen worden doorgevoerd in alle service pipelines die erop gebaseerd zijn.

OSB 12c pipeline templates

De ValidationTemplate in de WeerStationService wordt door beide pipelines achter de twee proxies geïmplementeerd. Binnen de template vindt logging plaats van het verzoek- en antwoordbericht. Daarnaast wordt het verzoekbericht gevalideerd tegen een voor de template onbekend schema. Hierna wordt het bericht via een RouteNode met Routing component doorgestuurd naar de volgende component.

Bij implementatie van de ValidationTemplate als pipeline dient enkel nog het schema van de validatie component ingevuld te worden en de component waarnaar het verzoekbericht gerouteerd moet worden.

Als bijvoorbeeld na implementatie van de template wordt besloten dat het loglevel van de logging stappen omhoog moet, hoeft dit enkel in het template aangepast te worden en pakken beide concrete pipelines in de service de nieuwe instelling meteen op.

REST

Voor mobiele applicaties is REST-JSON de service standaard en niet SOAP-XML. De belangrijkste reden hiervoor is dat JSON minder bandbreedte vergt en voor de frontend eenvoudiger te interpreteren is dan XML. In OSB12c is de ondersteuning voor REST danig uitgebreid.

Het is nu heel eenvoudig om een pipeline, split-join of business service te ontsluiten als REST service. Een simpele rechter muisklik > Expose As REST leidt je naar een configuratiescherm. Na het doorlopen hiervan wordt de REST proxy WeerstationRestService toegevoegd aan de OSB service. Ook wordt er een bijbehorende WADL (WeerstationRestService.wadl) aan het project toegevoegd. Deze WADL is op runtime te benaderen middels de volgende URL: http://<host>:<port>/sbresource?PROXY/WeerstationService/WeerstationRest....

Via de REST configuratieschermen kunnen resource paths gekoppeld worden aan SOAP operaties. Voor de WeerStationRestService is de haalOpSteden SOAP operatie ontsloten als een /weerstations/{land} GET operatie. De {land} parameter is een zgn. template parameter die gekoppeld kan worden aan element in het verzoekbericht richting de Weerstation pipeline.

REST

Zoals te zien in onderstaand configuratiescherm is de land template parameter gekoppeld aan het Land/Naam element in het XML verzoekbericht.

REST configuratie

In het Response tabblad kan gekozen worden of er XML of JSON teruggestuurd moet worden. Intern blijft de OSB service gewoon met XML werken. Pas bij het terugsturen wordt de XML omgezet in JSON.

Indien gekozen wordt voor JSON als repsonse levert aan de hand van bovenstaande configuratie een http://<server>:<poort>/Weerstation/weerstations/Duitsland verzoek de weerstation plaatsnamen in Duitsland in JSON formaat op (het /Weerstation deel van de URI is de Endpoint URI van de WeerstationRestService proxy).

Overig

Een aantal belangrijke nieuwe componenten zijn inmiddels al de revue gepasseerd. Naast nieuwe mogelijkheden voor het bouwen van services is er ook een hoop veranderd op andere vlakken.

Maven

Net als bij SOA composites wordt bij OSB services Maven out-of-the-box ondersteund. OSB services zijn nu standaard via Maven te compilen, testen, packagen, etc. Je hoeft nu dus niet meer een eigen ANT of Maven oplossing te ontwikkelen. Continuous integration is in 12c hiermee een stuk eenvoudiger geworden. Ook versionering van services is hierdoor eenduidiger geworden omdat Maven hiervoor een standaard biedt.

De Oracle Maven artefacten (libraries) moesten voorheen nog via een synchronisatie plugin geïnstalleerd worden in een lokale repository, maar sinds kort heeft Oracle een eigen Maven repository online beschikbaar gesteld en kun je die stap dus overslaan.

MDS

Er is een heel klein begin gemaakt met mds ondersteuning binnen de OSB in 12c. In JDeveloper kunnen nu artefacten uit mds worden geselecteerd, bv. een wsdl als basis voor een business of proxy service. Er wordt hierbij echter geen directe koppeling met mds gelegd. De wsdls worden na selectie geïmporteerd in het OSB project en de referentie is dan naar die lokale wsdl en niet naar de wsdl in mds. Dus net als in 11g is er in 12c zowel op designtime als op runtime geen directe koppeling met MDS mogelijk. Hopelijk past Oracle dit aan in een toekomstige versie.

Lokale OSB server

De lokale server die je vanuit JDeveloper kunt opstarten is tevens geschikt voor het testen van OSB en SOA services. Dit scheelt weer een losse installatie. Tevens biedt deze server de mogelijkheid om je OSB service te debuggen. Voor ontwikkelaars is het hiermee weer een beetje makkelijker geworden om een service te testen tijdens de bouw.

Enterprise manager

In 12c is de monitoring van de service bus geïntegreerd in de enterprise manager. In een service flow zijn nu ook de OSB service aanroepen te traceren.

Enterprise Manager

De service bus console pagina is er ook nog steeds. Hiermee kan als vanouds een service getest of aangepast worden.

Conclusie

In dit Whitebook zijn een groot aantal van de nieuwe mogelijkheden in de 12c versie van de Oracle Service Bus uitgelicht. Een van de grootste veranderingen is dat lokale Service Bus ontwikkeling niet meer plaatsvindt in Eclipse maar in JDeveloper, Oracle’s standaard IDE voor Middleware ontwikkeling. Gelukkig heeft Oracle het hier niet bij gelaten en zijn er een aantal vrij natuurlijke ontwikkelingen doorgevoerd binnen het product, zoals REST en Maven support en integratie van OSB in de Enterprise Manager. Pipelines en templates zijn de killer features in OSB 12c. Hiermee wordt hergebruik gestimuleerd en code duplicatie significant verminderd.

Zoals verwacht bij een nieuwe versie zitten er hier en daar nog een aantal bugs in die het werken in JDeveloper enigszins frustreren. Zo was ik regelmatig de beschikking kwijt over de toolbar van waaruit je OSB componenten in je project kunt slepen. Ook lukt het soms niet meer om het property scherm van een component te benaderen. Dit zijn vervelende bugs waar echter wel omheen is te werken. De verwachting is dat Oracle deze snel zal verhelpen.

Voor ontwikkelaars is het in ieder geval erg prettig dat je nu nog maar 1 tool nodig hebt, waarin je out of the box de beschikking hebt over een lokale server met uitgebreide debug mogelijkheden. Er blijven nog steeds wel wat wensen over, zoals meer diepgaande MDS ondersteuning, maar al met al heeft Oracle prima werk afgeleverd en heeft het een aantal goede stappen gezet in de integratie van de Service Bus in het Fusion Middleware landschap.

Referenties

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.