Als je een Stored Procedure of Function in Oracle wilt gebruiken, dan zou je daar heel goed de WSO2 Data Services Server (DSS) voor kunnen benutten. De reden daarvoor is dat de DSS de mogelijkheid biedt om opgeslagen procedures aan te roepen.
We kunnen zelfs Functions en Stored Procedures gebruiken door middel van WSO2 DSS. In deze blog bekijken we hoe we de setup kunnen regelen voor een Stored Procedure met Oracle en WSO2 DSS.
De Oracle database
Om dit te kunnen testen, zullen we eerst een Oracle omgeving op moeten zetten. Omdat Oracle kwalificeert als een ‘enterprise grade database’ systeem, kost het installeren tijd en inspanning en wordt daarom vaak door specialisten gedaan. Een volledige set-up van Oracle op Linux of Windows, inclusief het instellen van de databases en tabellen, zou een blog op zich zijn, dus dat slaan we hier over. Naast de Oracle database is ook MySQL onderdeel van Oracle en dat is veel gemakkelijker te installeren. Onderschat MySQL echter niet, want voor veel grote ondernemingen is het zeer geschikt.
Hoe dan ook, we gaan ervan uit dat Oracle 11g2 geïnstalleerd is en klaar is voor gebruik. Daarnaast hebben we een Oracle instance op AWS en we gebruiken SQL Developer als een grafisch front-end voor de database.
Stored Procedure
In deze blog gebruiken we een Stored Procedure die we in Oracle creëren. We voeren een eenvoudige injectie van een record uit in een tabel van de database van de Stored Procedure.
Dit is natuurlijk een vereenvoudigd voorbeeld, maar het laat goed zien hoe het werkt.
Creëer een tabel
Ik heb een tabel aangemaakt die goed te gebruiken is voor deze uitleg. Het is een simpele tabel die rang, voor- en achternaam en de tijd voor een wedstrijd bevat. Normaliter zou de tijd natuurlijk in een ander datatype uitgedrukt worden, maar voor het gemak gebruiken we varchar. We slaan een string op die uu:mm:ss bevat.
Nr | Field | Type | Length |
1 | RANK | Numeric | |
2 | FIRSTNAME | Varchar | 20 |
3 | LASTNAME | Varchar | 50 |
4 | FINISHTIME | Varchar | 20 |
Laten we eerst een Stored Procedure creëren:
create or replace PROCEDURE INSERTFINISHER ( FINISHEDAS IN NUMBER , FINISHERFIRSTNAME IN VARCHAR2 , FINISHERLASTNAME IN VARCHAR2 , FINISHEDTIME IN VARCHAR2 ) AS BEGIN INSERT INTO YENLO_TABLE (RANK, FIRSTNAME, LASTNAME, FINISHTIME) VALUES (FINISHEDAS, FINISHERFIRSTNAME, FINISHERLASTNAME, FINISHEDTIME); END INSERTFINISHER;
Zoals we zien staat Bob Beamon nu in de database. De procedure werkt!
WSO2 DSS
Om de Procedure en Function die we zojuist gemaakt hebben aan te roepen, zullen we de WSO2 Data Services Server moeten gebruiken. Dit product geeft de mogelijkheid om een Stored Procedure of Function op een simpele manier aan te roepen.
Download de WSO2 DSS (3.5.0) vanaf de productpagina en installeer het op je apparaat. Als je daar hulp bij nodig hebt, kun je deze blogpost over het installeren van WSO2 Producten erop naslaan.
Vergeet niet de JDBC-driver van Oracle te downloaden en deze vervolgens in de [DSS=HOME]/repository/components/lib map te installeren.
Start de DSS server door gebruik te maken van de [DSS-HOME]/bin/wso2server.sh of .bat bestand. Ga dan naar de carbon console waarvan de URL op de terminal getoond wordt: Mgt Console URL : https://192.168.56.1:9443/carbon/
Inloggen gaat met admin / admin als gebruikersnaam / wachtwoord en kies daarna voor ‘Create’.
In een aantal stappen zullen we nu een Data Service aanmaken die verbinding zal leggen met de Oracle-omgeving en die twee queries en twee operations bevat: één voor de Procedure en één voor de Function.
Stap 1: Data Service aanmaken
Vul gegevens in bij ‘name’ en ‘namespace’ en klik onderaan op ‘next >’.
Nu zullen we een datasource met alle verbindingsgegevens toe moeten voegen aan de Oracle-omgeving.
We vullen de benodigde informatie in. Houd in het achterhoofd dat de bovenstaande informatie verzonnen gegevens zijn, want er bestaat geen Oracle-database op het bovenstaande adres met gebruikersnaam en wachtwoord zoals in de screenshot. U kunt de verbinding testen om te zien of de verbindingsgegevens correct zijn ingevoerd. Gebruikersnaam en wachtwoord staan zowel in de URL en als in de velden die daarvoor bestemd zijn. Oracle heeft een typisch trekje om dit zo te doen.
Een nieuwe query toevoegen
Vervolgens gaan we de nieuwe Procedure query toevoegen.
We gebruiken een simpel CALL statement met de vier parameters (CALL INSERTFINISHER (?,?,?,?) waarbij deze in de input parameters gedefinieerd worden. Ieder van deze parameters is een ‘IN’-type parameter.
De rang (RANK) is bijvoorbeeld als volgt gedefinieerd:
In sommige online blogs zie je gekrulde haken { } om de cel staan, maar deze zijn niet per se nodig.
Operations toevoegen
Nu zullen we Operations toe moeten voegen om de queries die we zojuist gecreëerd hebben op te kunnen roepen.
We klikken eerst op ‘finish’ om op te slaan wat we zojuist ingesteld hebben.
Onder ‘Deployed services’ kunnen we daadwerkelijk de YENLOTEST data service die we zojuist aangemaakt hebben terugzien.
Uitproberen
Nu zullen we het moeten uitproberen om te ontdekken of alles ook echt werkt. We verzenden een SOAP-bericht naar de Procedure. Omdat we geen reactie gedefinieerd hebben, zullen we handmatig moeten controleren of de database nu twee records heeft.
Eerst doen we de visuele check: Zoals je ziet kwam Mickey Mouse als tweede binnen.
Dat was het dan: het aanroepen van een Stored Procedure die een record invoegt in een database. Nu je weet hoe je het kunt doen is het aan jou om te experimenteren met andere types Stored Procedures.
Functions
We gebruiken hetzelfde concept ook voor het aanroepen van een Function in WSO2 DSS. Er is alleen een klein verschil tussen de twee, naast het feit dat een Function een waarde teruggeeft.
Ik heb de volgende functie in Oracle aangemaakt. Het geeft het aantal records in de YENLO_TABLE terug.
Nu hebben we een query nodig in onze Data Service. We openen de versie die we gemaakt hebben voor de uitleg van de procedure en voegen daar een query en Operation toen.
De query maken we met {CALL ?:=HOWMANY()}
.
De output-variabele wordt gedefinieerd in de input mapping.
In de output mapping definiëren we het veld, zodat het de gewenste waarde teruggeeft.
Ook nu zullen we een Operation toe moeten voegen.
We slaan de Data Service op en gaan kijken of het Functioneert. Hiervoor gebruiken we de FuncOps Operation om de informatie op te halen uit de database.
Door de functie die we zojuist hebben aangemaakt kunnen we zien dat we twee records in de database hebben staan.
Oracle instellen als WSO2 database
Als extraatje kun je overwegen om H2 te migreren naar Oracle, als jouw bedrijf voor Oracle als database heeft gekozen. Omdat we nu weten hoe we de verbinding met de Oracle-omgeving kunnen maken, is dit piece of cake. Voor meer informatie kun je ook een kijkje nemen in deze blog voor een algemene uitleg, maar vergeet niet de specifieke instellingen voor Oracle te gebruiken.
Oracle wordt net als andere databases ondersteund door WSO2. Even ter herinnering: WSO2 gebruikt standaard de geïntegreerde H2 database voor de opslag van bijvoorbeeld gebruikers- en registergegevens. De enige uitzondering daarop is de WSO2 Identity Server die een embedded LDAP gebruikt voor de opslag van gebruikersgegevens.
De overgang van H2 naar Oracle in de WSO2 DSS is eigenlijk vrij eenvoudig en gaat in vier stappen:
Download de JDBC-driver;
- Creëer een database (bijv. een dssdatabase);
- Run het sql script in [DSS-HOME]/dbscripts;
- Wijzig de master-datasources.xml in [DSS-HOME]/repository/conf/datasources;
- Start de DSS
Als je vragen hebt over deze blogpost, neem dan contact met ons op via het commentaar hieronder. Bekijk ook onze WSO2 Tutorials, webinars of white papers voor meer technische informatie. Ondersteuning nodig? We bieden ook WSO2 Productondersteuning en ondersteuning voor bij WSO2 Development, WSO2 Operational en WSO2 Trainingsprogramma’s.