Oracle ASMGebruikersclub onder de loep Holland Linux platform voor Oracle database verder verstevigd
Voorjaar 2005 • Jaargang 10 • Nummer 1 • € 7,50
Voorjaarscongres en Algemene ledenvergadering
Tom Kyte Seminar
Open Source een alternatief voor Oracle Spatial?
ITUDE Groep
ITUDE Technology
Itude is een succesvolle dienstverlener die het inzetten van informatietechnologie ziet als een vak. Onze connaisseurs onderscheiden zich door hun vakmanschap.
Itude Technology is gespecialiseerd in Oracle technologie. Zowel op inhuur- als projectbasis doen onze specialisten aansprekende projecten m.b.v. de nieuwste technologie.
Onze klanten zijn toonaangevende organisaties in zowel de profit als non-profit sector die de mogelijkheden van de ICT-middelen die hen ten dienste staan optimaal willen inzetten om hun organisatiedoelen na te streven. Zij vinden in Itude een solide partner die zich committeert aan deze uitdaging.
Enkele voorbeelden hiervan zijn: • Integratie van data en applicaties: Integratie van (standaard) applicaties m.b.v. Oracle Workflow en Oracle InterConnect. • Mobiele applicaties: Ontwikkeling van applicaties op tablets en pda’s m.b.v. Oracle Mobile Server, Oracle Lite en JDeveloper. • Intra- extranet applicaties: Realisatie van intra- extranet applicatie m.b.v. Oracle Portal en JDeveloper.
Wij concentreren ons op ons vak en daarom kennen wij bij Itude weinig hiërarchie. Onze focus is het verkrijgen, delen, bewaken en toepassen van kennis en ervaring om invulling te kunnen blijven geven aan ons vakmanschap. Bovendien halen wij er plezier en voldoening uit. Wij doen dat vanuit drie niche werkmaatschappijen: Itude IT Management, Itude Technology en Genimen. Maar als vragen daar aanleiding toe geven, organiseren wij ons dwars door deze structuur heen.
www.itude
.com
Itude ICT Connaisseurs Postbus 968 3700 AZ Zeist Tel. 030 - 699 70 20
VISIE
Door John Stewart
Voorwoord
Colofon
Geachte lezer,
Redactie: H. Gerritse (hoofdredacteur) R. Buitenhuis L. Jellema M. Uitentuis
Ik wens u veel leesplezier in dit voorjaarsnummer van inmiddels de 10e jaargang van OGh Visie. Een bijzonder verheugende mijlpaal. Vooral op verzoek van lezers en adverteerders is tevens besloten dat we, vanaf 2005, vier keer per jaar zullen verschijnen. De attentiewaarde zal op deze manier sterk verbeteren.
Redactie-adres: Oracle Gebruikersclub Holland Utrechtseweg 48c, 3704 HE Zeist Postbus 701, 3700 AS Zeist E-mail:
[email protected] Realisatie: Robert Ellents Drukkerij Donath B.V. Tel.: 030 - 69 22 887 Fax: 030 - 69 181 34 E-mail:
[email protected] Organisatie: A.J. van der Weijden BMO bv E-mail:
[email protected] OGh-secretariaat/ advertentie-exploitatie: Utrechtseweg 48c, 3704 HE Zeist A.J. van der Weijden Tel.: 030 - 699 70 65 Fax: 030 - 696 23 78 E-mail:
[email protected] Website: www.ogh.nl
Het jaarcongres in het voorjaar zullen we houden en wel op 20 mei a.s., in de plezierige locatie van FIGI in Zeist. Verder in dit blad vindt u meer informatie hierover. Het belooft een interessante en dynamische dag te worden. Een nieuwtje is dat dit jaar, tijdens dit congres, de jaarlijkse Algemene Ledenvergadering gehouden zal worden, een statutair verplicht nummer. Echter we hopen het extra aantrekkelijk te maken door een deel hiervan ruimte te geven aan support issues, een onderwerp dat voor vele gebruikers zeer actueel is. Uw opmerkingen over dit punt kunt u tevoren per e-mail aanleveren. Hoe en wanneer leest u in de informatie over het congres. Nogmaals veel leesplezier en hopelijk tot 20 mei in FIGI. Meldt u vast aan: www.ogh.nl John Stewart Voorzitter Oracle Gebruikersclub Holland
Gebruikersbijeenkomsten/congres Werving sprekers/onderwerpen Th. Koster Conclusion Communication E-mail:
[email protected] Bestuur OGh Voorzitter J. Stewart Itude ICT Connaisseurs BV Tel.: 030 - 699 70 20 E-mail:
[email protected] Secretaris C. van Stralen Oracle Nederland BV Tel.: 030 - 699 98 13 E-mail:
[email protected] Penningmeester G.G. Timmerman Amis Services bv Tel.: 030 - 601 60 00 E-mail:
[email protected] Overige Bestuursleden R. Buitenhuis Ciber Oracle Solutions BV Tel.: 040 - 2329090 E.mail:
[email protected] D.J. Dral Min. v. Landbouw, Natuurbeheer en Visserij Tel.: 0317 - 476 723 E-mail:
[email protected]
OGh Visie is een uitgave van Oracle Gebruikersclub Holland en wordt verzonden aan al haar leden. U kunt zich aanmelden via de website www.oracle-usergroup.nl of d.m.v. het inschrijfformulier achterin OGh Visie en u ontvangt dan automatisch OGh Visie. Ook voor losse (gratis) abonnementen kunt u zich aanmelden via de website. Copyright 2005 OGh
3
Drie dagen AskTom Live in Utrecht - met Tom Kyte
4
Column: De ESB van Oracle
9
Linux platform voor Oracle database verder verstevigd
10
Open source software in a nutshell
12
Open source een alternatief voor Oracle Spatial?
15
Oracle ADF en JHeadstart
22
Van een grafische naar een objectgerichte oriëntatie
30
Meer Special Interest Groups binnen de Oracle Gebruikersclub Holland
31
VISIE
Oplage: 8000
Voorwoord
OG
SIM vertegenwoordiger M. Uitentuis Atlis Informatiesystemen b.v. Tel.: 030 - 6020070 E.mail
[email protected]
Inhoud
3
Het grote nadeel van veel Oracle ervaring
Door Lucas Jellema
Drie dagen AskTom Live in Utrecht met Tom Kyte Zet 65 zeer ervaren Oracle professionals in een zaal - zowel DBA’s, architecten als ontwikkelaars afkomstig uit Nederland, Groot-Brittannië, Duitsland en België - en zet er een fenomeen voor dat drie dagen lang kriskras de Oracle database doorkruist, dan heb je het AskTom-live seminar van 8, 9 en 10 februari jl.
•
Lex de Haan (NaturalJoin, OakTable Network en Oracle veteraan) had een prachtig evenement samengesteld door Tom Kyte (van AskTom in Oracle Magazine en vooral van de asktom.oracle.com website) over te halen drie dagen lang te presenteren en vooral demonstreren. Onderwerpen als Bind-parameters, Testen en Tunen, Read- en Write-consistency, Materialized Views, Flashback, PL/SQL, Analytische Functies en 10g lekkernijen passeerden in hoog tempo de revue.
•
In dit artikel probeer ik enkele van de meest opvallende onderwerpen kort toe te lichten. Voor meer diepgravende achtergronden kan je terecht in het uitstekende boek van Kyte: Effective Oracle by Design (Oracle Press, 2003).
•
Question Authority – vooral die van jezelf !
•
•
•
Veel van de voorbeelden in het seminar ontleende Tom Kyte aan zijn eigen website. Daar krijgt hij wekelijks tientallen vragen over de Oracle database. Niet zelden zijn deze vragen gebaseerd op achterhaalde feiten over de database, mythen die blijven rondgaan maar feitelijk nooit correct zijn geweest en uitspraken van ‘goeroes’ die in een specifieke context misschien wel juist zijn maar niet veralgemeniseerd kunnen worden. Kyte pleitte ervoor altijd door te vragen en bovendien iedere veronderstelling te testen. Is het wel waar wat ‘men’ altijd zegt? Heeft die autoriteit die dat boek geschreven heeft alles wel goed begrepen? En is zijn uitspraak wel van toepassing op jouw specifieke situatie? Niet in de laatste plaats riep Kyte de aanwezigen op hun eigen kennis en ervaring kritisch te blijven toetsen: wat je ooit geleerd hebt kan destijds, voor Oracle 6 of 8 wel buitengewoon correct zijn geweest, maar is mogelijk met release 9i of 10g wel vreselijk achterhaald!
•
OG
VISIE
•
4
Voorbeelden van dit soort alom geaccepteerde waarheden, waar menigeen in de zaal wat nerveus van ging slikken, waren ondermeer: • Meer CPUs moet de performance van een systeem wel verbeteren. In het ergste geval helpt het nauwelijks, maar slechter kan het er nooit van worden – zelfs dit blijkt niet altijd waar; in een omgeving waar I/O de bottleneck vormt kan het volgende gebeuren: Applicatie 1 is traag, vanwege de I/O operaties. Parallel aan Applicatie 1 draait Applicatie 2, een OLAP applicatie met zware queries die veel CPU tijd vragen. Als er meer CPU wordt bijgeplaatst kunnen deze queries sneller door de CPU worden verwerkt. Als gevolg daarvan zal ook
Applicatie 2 meer behoefte krijgen aan I/O, met als gevolg dat Applicatie 1 nog trager wordt vanwege de concurrentie ten aanzien van I/O met Applicatie 2. SELECT INTO moet je nooit gebruiken in PL/SQL. In plaats daarvan moet je een cursor definiëren, openen, fetchen en weer sluiten. Volgens Kyte heeft dit nooit gegolden voor Stored PL/SQL maar uitsluitend voor client side PL/SQL in Forms 2.3 en 3.0. (NOT) IN mag nooit en moet vervangen worden door een constructie met (NOT) EXISTS. Ooit was dit waar – tegenwoordig doet de Optimizer dat zelf en komt in beide gevallen met een anti-join stap in het execution plan. De buffer cache hit-ratio moet groter zijn dan 99% - net zoiets als zeggen dat als je auto niet op 99% van het maximale vermogen rijdt hij terugmoet naar de garage. Ratio’s zijn sowieso alleen indicatoren, nooit doelen op zich. Van de ratio’s is Kyte eigenlijk alleen echt geïnteresseerd in de parse ratio’s. Select count(1) is sneller dan select count(*) – is niet waar en is ook nooit waar geweest. In 8i werd select count(1) zelfs geoptimaliseerd tot select count(*)! Full table scans zijn slecht en het gebruik van indexen is altijd goed – te onzinnig voor woorden. Je moet vaak committen en je transacties niet te groot maken – zeer beperkt houdbaar: een commit betekent een redo log synch – de transactiegegevens moeten door de redo-log file geschreven worden en dat kost tijd; vaak committen gaat vrijwel zeker ten koste van de performance. Bovendien wordt er meer redo en undo log geschreven. Belangrijker misschien nog: de logische samenhang van de transactie wordt misschien doorbroken. Transaction level integrity kan niet langer geïmplementeerd worden als de logische transactie met meerdere commits wordt opgesplitst. Je moet aparte tablespaces hebben voor tabellen en indexen – complete flauwekul, behalve misschien in het geval van Transportable Tablespaces waar je alleen de data wilt transporteren en de indexen beter opnieuw kan opbouwen. Het heeft wel zin, met name met het oog op nieuwe read-ahead schijflees technieken, om onderscheid te maken tussen tablespaces waaruit vooral multiblock read - full table scans- plaatsvinden en tablespaces waaruit vooral single block reads worden gedaan – tabellen die voor via indexen worden benaderd. Als je in PL/SQL meerdere rijen uit een cursor-resultaatset wilt gaan verwerken moet je “FETCH cursor BULK COLLECT INTO collection” gebruiken in plaats van een gewone for-loop. In 8i en 9i is dat helemaal waar, maar in 10g wordt – achter de schermen - automatisch een bulk collect uitgevoerd voor iedere for cursor loop – en deze is zelfs iets efficiënter dan een bulk-collect die je zelf expliciet programmeert
Ontwerp voor performance, schaalbaarheid en security Het stokpaard: Bind Variabelen Het bekendste stokpaardje van Tom Kyte is denk ik wel zijn voortdurend pleidooi voor het gebruik van bind-variabelen. Heel kort gezegd komt het er op neer dat je in de query’s duidelijk aangeeft
Drie dagen AskTom Live in Utrecht - met Tom Kyte wat de statische componenten zijn van de query en wat de dynamische. De query select * from emp where empno = 1000 bevat voor de Query Parser alleen statische elementen. Daarmee is deze query een compleet andere dan select * from emp where empno = 1001; deze moet dus ook volledig opnieuw geparsed worden. Zouden deze queries zijn aangeboden als select * from emp where empno = :1 met 1000 en 1001 als waarden voor :1, dan zouden de queries equivalent zijn en volgens hetzelfde execution plan kunnen worden uitgevoerd. Het uitvoeren van een query verloopt in een aantal stappen. Hiervan zijn de soft parse en hard parse voor deze discussie de belangrijkste. De soft parse is de stap waarin Oracle bepaalt of de de query die wordt aangeboden wellicht al bekend is; hiertoe moet de syntax worden gecontroleerd, moeten de object-referenties naar de tabellen, views en eventueel PL/SQL objecten worden geverifieerd en moet het resultaat worden vergeleken met de queries in de shared pool. Als de query nog niet bekend is, moet de hard parse worden uitgevoerd. In deze stap wordt het execution plan voor de query worden opgesteld. Dit is een dure operatie die nogal CPU-intensief is. Als deze stap kan worden vermeden kan de query sneller worden uitgevoerd. Voor korte, frequente queries – OLTP-achtig - kan het verschil in de tientallen procenten lopen. Bij systemen met weinig en langdurende queries – zoals OLAP omgevingen - is de hard-parse stap vaak verwaarloosbaar en is het gebruik van bind-variabelen vaak zelfs ongunstig: je kunt dan beter voor iedere query een maatwerk-Execution Plan laten opstellen! Voor organisaties die door het performance argument voor gebruik van bind-variabelen niet overtuigd zijn kwam Kyte met een tweede reden: SQL Injection. Bij gebruik van Dynamisch SQL of PL/SQL waarbij de waarden van zoekcriteria zoals ingevoerd door de gebruiker in bijvoorbeeld de webapplicatie worden vastgeplakt aan een string, kunnen er rare dingen gebeuren. Bijvoorbeeld: ‘select * from geheime_gegevens where user_id = ‘’‘||l_current_user_id||’’’ and kolom =’||l_zoekwaarde Dit ziet er betrekkelijk onschuldig uit. De waarde van l_current_user_id wordt door de applicatie zelf ingevuld op basis van de login van de gebruiker. Dit zorgt ervoor dat de query alleen maar de geheime gegevens oplevert die gekoppeld zijn aan de huidige gebruiker. De waarde van l_zoekwaarde wordt door de gebruiker ingevoerd, en kan het zoekresultaat verder beperken.
‘select * from geheime_gegevens where user_id = :1 and kolom =:2’ using l_current_user_id, l_zoekwaarde Door gebruik van bind-variabelen wordt hier de mogelijkheid van SQLInjection uitgesloten. Dat dit geen academische discussie is, bewijzen de meer dan 650.000 hits die Google geeft voor “SQL injection”. Overigens geldt het probleem van dynamisch SQL niet alleen in PL/SQL met NDS of dbms_sql maar misschien nog wel sterker in Java en VB applicaties die SQL statements heel vaak als strings dynamisch opbouwen. Een derde argument zou zijn dat bij gebruik van Dynamisch (PL/)SQL de quootjes je oren uitkomen als je geen bind-variabelen gebruikt. Vergelijk de volgende twee statements: ‘select ename from emp where ename = ‘’’||replace( inputstring,’’’’,’’’’’’)||’’’’’ en ‘select ename from emp where ename = :1’ using inputstring Wat moet je doen om zeker te zijn dat je bind-variabelen gebruikt? Het simpelste antwoord is: PL/SQL gebruiken als SQL Client. Statisch SQL uitgevoerd vanuit PL/SQL gebruikt bind-variabelen. Dynamic SQL en PL/SQL doet dat niet altijd. Je kunt dynamisch SQL statements maken – en dat heb ik tot mijn grote schande veel gedaan – door domweg strings te concatteneren, bijvoorbeeld: EXECUTE IMMEDIATE ‘select ename from emp where empno=’||p_empno into l_name . In dat geval gebruik je geen bind variabelen. Correct zou zijn: EXECUTE IMMEDIATE ‘select ename from emp where empno= :1’ into l_name using p_empno. Als je SQL benadert vanuit Client applicaties in VB of Java is het erg verleidelijk om te programmeren zonder bind-variabelen en iedere query gewoon als geconcatteneerde string aan te bieden. Java biedt overigens uitstekende mogelijkheden om een PreparedStatement te creëren met daarin een of meerdere in- en out-parameters en vervolgens bij iedere uitvoering van het statement de actuele waarden van de parameters te zetten. Het is alleen meer codeer-werk… Kyte had overigens een buitengewoon lage pet op van de manier waarop Java- en VB-programmeurs van de database gebruik maken.
Database Onafhankelijkheid
OG
Deze query geeft alle rijen terug in de tabel geheime_gegevens! De correcte oplossing zou zijn in dit geval:
Als het van belang is om de applicatie tegen verschillende databases te gebruiken, zoals misschien geldt voor systemen als
5
VISIE
‘select * from geheime_gegevens where user_id = ‘USER_X’ and kolom =’x’ or 1=1
Die lage pet van hiervoor brengt ons op een ander stokpaardje van Kyte: gebruik de database voor wat hij goed kan. Dat betekent ondermeer: probeer niet geforceerd database-onafhankelijk te blijven door alleen maar features te gebruiken die in alle databases – SQL Server, Oracle, DB2, MySQL – beschikbaar zijn. Het levert je een applicatie op die het in iedere database matig tot slecht doet. En je betaalt voor heel veel waardevolle functionaliteit die je ongebruikt laat.
Stel echter dat de gebruiker als waarde voor l_zoekwaarde intypt: ‘’’x’’ or 1=1’’. De totale query wordt dan:
Drie dagen AskTom Live in Utrecht - met Tom Kyte SAP, Siebel en (tot voor kort???) PeopleSoft, laat de applicatie dan communiceren met een API op basis van Stored Procedures in plaats van rechtstreeks SQL af te vuren. De API ziet er naar de applicatie toe in elke database hetzelfde uit. Zo zal de API data retourneren via Ref-Cursoren die bijvoorbeeld in Java als ResultSets verwerkt kunnen worden. Echter, de API kan aan de binnenkant van de specifieke features van iedere database profiteren om zo efficiënt mogelijk data op te halen dan wel te verwerken. Bijkomend voordeel: de applicatieontwikkelaar wordt afgeschermd van de database, het datamodel en SQL. Het gebruik van bind-variabelen is verzekerd! Een ander aspect van dit stokpaardje is: probeer niet slimmer te zijn dan de database. Gebruik geen hints om tegen de Cost Based Optimizer te zeggen hoe hij een query moet uitvoeren – als je het beter weet dan de CBO ben je wel een heel slimme jongen! Gebruik hints alleen om de CBO tips te geven: bijvoorbeeld FIRST_ROWS(n) (vooral bij OLTP) en ALL_ROWS (met name voor batches), CHOOSE, (NO)REWRITE, DRIVING_SITE (voor gedistribueerde queries over database links), (NO)PARALLEL, (NO)APPEND en CARDINALITY. Deze laatste is niet gedocumenteerd en kan worden gebruikt om voor WITH clauses, Temporary Tables of Table Functions een indicatie aan de CBO te geven hoeveel rijen ongeveer te verwachten zijn; dit kan grote invloed hebben op het Execution Plan. Bijvoorbeeld: WITH good_customers as ( select c.* from many_many_many_customers c, debts d where c.id = d.ctr_id and d.amount < 5000) select /*+ CARDINALITY(100) */… from t1, t2, t3, good_customers
Business Rules en Data Integriteit: CDM RuleFrame onderuit gehaald
OG
VISIE
Het behoeft geen verdere toelichting dat Tom Kyte de implementatie van Business Rules en het afdwingen van Data Integriteit volledig binnen de database wil laten doen. Implementatie in bijvoorbeeld de Application Server of de Client Applicatie is een recept voor aantasting van de data integriteit – niet een kwestie van of maar alleen van wanneer. Daarnaast is de performance en schaalbaarheid en zelfs de ontwikkelproductiviteit van implementaties buiten de databases aanzienlijk slechter dan de declaratieve integriteit.
6
Kyte demonstreerde aan de hand van een uitgebreide toelichting op het ‘read consistency; mechanisme van de Oracle database dat business rules geïmplementeerd op basis van triggers en PL/SQL packages over het algemeen geen waterdichte garantie bieden op afdwingen van de integriteit. In feite haalde hij een deel van de huidige implementatie van CDM RuleFrame hiermee onderuit. Overigens kan CDM RuleFrame eenvoudig aangepast worden om de integriteit weer wel te garanderen. Tom Kyte besprak twee interessante manieren om declaratieve entity en inter-entity business rules te implementeren. Dit zijn
business rules die niet met Check Constraints of Foreign Keys kunnen worden beschreven. Voorbeelden zijn ondermeer – in termen van EMP en DEPT: een Department mag hooguit één CLERK hebben en de totale salarissom in een JOB mag niet hoger zijn dan 15000. Twee constructies die Kyte daarvoor suggereerde waren Function Based Indexes en Materialized Views, zie kader.
Read Consistency Read-consistency was het belangrijkste onderwerp van de tweede dag van het Tom Kyte seminar. Dit is een fundamenteel element in de architectuur van de Oracle database, al sinds release 4 en een van de wezenlijke verschillen tussen Oracle en concurrenten als DB2 en SQL Server. Read consistency zorgt ervoor dat de resultaatset van een query consistent is. Ofwel: alle rijen in de resultaatset zie je zoals ze bestonden op het moment dat de query werd gestart. Als de query een uur loopt en in dat uur worden er vele wijzigingen in de data aangebracht, dan nog zie je in het query-resultaat een consistente set zoals die bestond bij het begin van de query. Deze faciliteit vereist uiteraard dat meerdere versies van gewijzigde rijen moeten worden bewaard door de database – de UNDO informatie. Op basis van ditzelfde mechanisme heeft Oracle in de 9i en 10g releases het concept van Flashback Queries geïntroduceerd, een mechanisme om in het verleden te kijken. De Flashback Query heeft een heel eenvoudige syntax in 9iR2 en 10g. Bijvoorbeeld om de data in een tabel te zien zoals die er gisteren uitzag (vergeet even alle DML operaties op die tabel die sindsdien hebben plaatsgevonden). Select * from Table as of Timestamp sysdate -1 Mensen die met bezwaren komen tegen de Flashback Queries – heel vaak DBA’s die veronderstellen dat het wel heel veel overhead zal opleveren of resources zal kosten om de voor flashback noodzakelijke informatie bij te houden – zien een nogal belangrijk punt over het hoofd: Iedere query die je sinds Oracle 4 in de database hebt uitgevoerd, is een flashback query geweest. Select * from emp wordt door de database uitgevoerd als select * from emp as of <SCN op het moment van de start van deze query>. Dat is zo ongeveer de definitie van read-consistency!
Code Instrumentatie Tom Kyte brak een lans voor het instrumenteren van code. Hij definieerde dit als de mogelijkheid om op ieder moment een schakelaar om te zetten om de applicatie-informatie te laten loggen over de uitvoering van de programmacode, het gebruik van resources, eventuele excepties etc. Hij gebruikte naast zijn eigen site ook de Oracle Database als voorbeeld de waarde van instrumentatie. Je kunt voor de database trace-informatie laten genereren, op diverse niveaus. Met behulp van de trace-data kunnen performance bottlenecks en bugs in de code geanalyseerd worden. Kyte noemde twee voorbeelden van instrumentatie in PL/SQL code: • Log4PL/SQL, een open source framework voor het inbouwen van configureerbare logging in PL/SQL applicaties, gebaseerd op het Apache Log4J project dat alom wordt gebruikt in Java projecten.
Drie dagen AskTom Live in Utrecht - met Tom Kyte • Het package dbms_application_info, een supplied package in de database dat je kunt gebruiken om de voortgang van je PL/SQL proces te publiceren via de v$ view
Quick Wins om de performance te verbeteren
Aan diverse stokpaardjes van Kyte ben ik in mijn verslag nog niet eens toegekomen: • Tools voor performance onderzoek: statspack, tkprof, explain plan en dbms_xplan. • Whoops-management – Flashback Query (9i) en Flashback Table, Flashback Table to Before Drop en Flashback Database (10g); • Probeer niet slimmer te zijn dan de database – zeg wat je wilt, maar niet hoe de CBO het moet doen • Tune niet je statements, maar tune je algoritmes. Als je een statement perfect hebt getuned maar door een ineffectief algoritme wordt het statement veel te vaak uitgevoerd, heb je de plank volledig misgeslagen! Bovendien kan de database je statements wel tunen, maar nooit je algoritmes. • Ontwerp voor performance – probeer niet als de applicatie al klaar is nog eens aan de performance te gaan werken. Performance – en schaalbaarheid - moet een ontwerpdoel zijn, vanaf het prille begin van het ontwerp. Je kunt niet substantieel performance verbeteren als de applicatiearchitectuur niet is afgestemd op de eisen voor wat betreft responstijd, batch-window en schaalbaarheid.
Conclusie Zo denk je dat je een heleboel van Oracle weet, en zo weet je dat er een heleboel is dat je eigenlijk nog helemaal niet zo goed wist. Ik kan niet spreken voor de andere 64 deelnemers aan dit seminar, maar ik weet wel dat dit ongeveer mijn gevoel was toen ik na drie dagen stevig gemangeld te zijn weer buiten stond. De meerwaarde van dit seminar zat hem overigens ook niet alleen in de spreker, maar ook in de contacten met ‘soortgenoten’ gedurende de pauzes. Dit soort seminars is een verademing voor de gevorderde Oracle professional, vanwege de kennis en ervaring van de spreker, gevoegd bij een zeer gemotiveerd publiek in combinatie met uitstekende faciliteiten – zoals voor iedere deelnemer het boek Effective Oracle by Design en een memory stick met alle scripts van alle demo’s. Ik kijk uit naar de volgende Oak Table seminars, waarvan het eerstvolgende zal plaatsvinden op 18, 19 en 20 oktober, met Steve Adams – Oakie en top-DBA uit Australië.
OG
Lucas Jellema is Technical Consultant bij AMIS Services en redactielid van OGh Visie
VISIE
Uit het verhaal van Kyte is een aantal eenvoudige stappen te destilleren die stuk voor stuk de performance van applicaties kunnen verbeteren. Kort samengevat: • Cache een groot aantal waarden in Sequences – de default cache grootte van 20 leidt in geval van frequente inserts tot veel extra interne locks en een potentieel schaalbaarheidsprobleem. Waarden cachen kost alleen een klein beetje geheugen. • Gebruik niet een tabel in plaats van een sequence als nummergenerator. Een grotere schaalbaarheids-bottleneck valt bijna niet te bedenken! Als meerdere transacties tegelijk een nieuwe nummer opvragen uit deze tabel zullen deze elkaar met locks verschrikkelijk gaan blokkeren. • Doe niet meer beroep op DUAL dan strikt noodzakelijk. Gebruik kan USER en SYSDATE – uitgevoerd als een select user from dual - in SQL of PL/SQL code betekent iedere keer opnieuw het benaderen van een echte tabel. Veel beter is het om eenmaal per sessie de waarde van USER op te vragen en deze in een package variabele te cachen. In 10g zal de database dit gebruik van DUAL oplossen door FAST DUAL. Dit laatste is niet een echte tabel maar een object in geheugen. • Beperk het aantal commits; een commit leidt tot een redo-log synch; dit kost tijd en schaalt niet goed. • Als een operatie, zoals het sturen van een email of het aanroepen van een Web Service, enige tijd kost en de gebruiker zit op feedback te wachten, overweeg dan de operatie als Job te schedulen met dbms_job of (vanaf 10g) dbms_scheduler. De actie wordt dan op de achtergrond uitgevoerd, terwijl de gebruiker direct feedback krijgt. De applicatie lijkt zo veel sneller voor de gebruiker. • Zorg dat de database altijd over goede statistics beschikt. De CBO is erg goed – mits hij van juiste gegevens uitgaat! • Zorg dat de database zoveel mogelijk meta-data beschikbaar heeft over de tabellen en de data. Hieronder vallen bijvoorbeeld informatieve hints, Primary, Unique en Foreign Key Constraints en Dimension Hierarchieën. Deze meta-data wordt door CBO gebruikt om betere execution plans op te stellen en is ook de motor onder Query Rewrite met behulp van Materialized Views. • Doe zoveel mogelijk met SQL-gebaseerde set-operaties en grijp niet te snel naar procedurele oplossingen. Er kan veel meer in SQL dan veel ontwikkelaars zich realiseren. Als SQL dan toch niet toereikend is, overweeg de inzet van pipelined – en eventueel zelfs parallelle – table-functions voor de procedurele verwerking geïntegreerd in de SQL statements. • Gebruik de 10g SQL Advisor om suggesties te krijgen van de database voor dure SQL statements die wellicht te verbeteren zijn • Gebruik zoveel mogelijk declaratieve mechanismen in de database voor het implementeren van business rules, Niet alleen komt dit de integriteit van de data ten goede, ook bieden deze veruit de snelste uitvoering van de logica. Hieronder vallen ook de Function Based Indexen en Materialized Views zoals hiervoor beschreven. • Gebruik BULK FETCH operaties in PL/SQL in plaats van row-by-row processing – door Kyte aangeduid met ’slow-by-
slow’. Vanaf 10g wordt dit automatisch gedaan door de PL/SQL Compiler. • Beperk het gebruik van Dynamisch SQL; zeker voor 10g leidt Dynamisch SQL tot veelvuldig Hard Parsen van statements. • Gebruik dbms_profiler om PL/SQL code door te lichten en de hotspots te lokaliseren. • Gebruik Bind Parameters.
7
Drie dagen AskTom Live in Utrecht - met Tom Kyte Declaratieve implementatie van business rules met behulp van Function Based Indexes en Materialized Views
Function Based Index - Niet meer dan één Clerk in een Department Function Based Indexes (FBIs) zijn in Oracle versie 8i Enterprise Edition geïntroduceerd en maken sinds Oracle 9iR2 deel uit van de Standard Edition. Met een FBI wordt een index gebouwd op de uitkomst van een functie. Deze wordt in de index gekoppeld aan een rowid. Hiermee kunnen ondermeer snel records worden gevonden die voor de betreffende functie een bepaald resultaat opleveren. FBIs kunnen als UNIQUE worden gedefinieerd. Dat wil zeggen dat ieder functie-resultaat maar een keer mag voorkomen. Die wetenschap, gekoppeld aan het gegeven dat NULL resultaten niet in de index worden opgenomen, biedt de mogelijkheid om de volgende business rule te implementeren: ieder department mag hooguit één CLERK hebben. Door de volgende Function Based Index te definiëren: create UNIQUE index niet_meer_dan_1_clerk_per_dept on emp (case job when ‘CLERK’ then deptno end, case job when ‘CLERK’ then 1 end) / wordt nu afgedwongen dat de combinatie van (DEPTNO, JOB) uniek is als de waarde van Job gelijk is aan CLERK. Voor alle andere waarden van JOB levert de functie NULL als resultaat op, en die wordt niet in de index opgenomen. Een poging om een tweede CLERK aan een DEPTNO te koppelen levert nu de volgende foutmelding op: ORA-00001: unique constraint (SCOTT.NIET_MEER_DAN_1_CLERK_PER_DEPT) violated
Materialized View – de totale salarissom in een JOB mag niet hoger zijn dan 15000 Materialized Views zijn in 8i de opvolger van Snapshots uit Oracle7. Materialized Views worden vooral gebruikt als mechanisme onder Advanced Replication en om pre-aggregatie in Data Warehouses te realiseren om daarmee OLAP queries te versnellen. Materialized Views kunnen ook worden gebruikt om multi-record Business Rules af te dwingen. Dat wordt gedaan door de Materialized View te baseren op een aggregaat en vervolgens een Check Constraint te specificeren op de Materialized View. create materialized view emp_jobsalsum_mv refresh fast on commit as select job, sum(sal) sumsal from emp group by job;
OG
VISIE
De Materialized View bevat een rij per JOB waarde met in die rij ook de salarissom van alle medewerkers in die JOB. Op deze Materialized View kunnen we vervolgens het volgende check constraint definiëren: alter table emp_jobsalsum_mv add constraint check_job_salsum check ( sumsal < 25000) deferrable;
8
Als we nu proberen de business rule te overtreden: insert into emp ( empno, ename, job, sal) values ( 1234, ‘LUCAS’,’CLERK’, 15000 ) / krijgen we bij commit de volgende error: ORA-12008: error in materialized view refresh path ORA-02290: check constraint (TEMP.CHECK_JOB_SALSUM) violated We kunnen dus geen insert-operatie uitvoeren die de totale salarissom boven de 15000 uittilt!
Voor deze taak bestaan al jaren producten. De eerste generatie integratieproducten noemden we EAI-tools (Enterprise Application Integration) of integratiebrokers. Karakteristiek voor deze producten was dat alle specificaties in proprietary talen uitgevoerd werden. De ESB’s vormen de nieuwe generatie integratieproducten. Ze zijn gebaseerd op standaarden, zoals XML, SOAP, WSDL en BPEL, zijn zwaar gedistribueerd en blijken in aanschaf en gebruik goedkoper te zijn. Zoals zo vaak gebeurt als een nieuwe categorie producten op de markt verschijnt, zijn het eerst kleine leveranciers die in deze markt stappen. Bedrijven als CapeClear, Fiorano en Sonic (dochter van Progress) waren er al vroeg bij. Nu de markt hier positief op reageert, haasten de grote leveranciers zich om ook met een oplossing te komen. Bea Systems zal in de eerste helft van 2005 Quicksilver uitbrengen, IBM zal aan de WebSphere familie een ESB toevoegen en Microsoft is nog niet klaar, maar heeft al enkele componenten beschikbaar, waaronder BizTalk. Oracle zal waarschijnlijk de laatste twee voor zijn. Oracle zal functionaliteit uit InterConnect bundelen met de overgenomen Collaxa BPELengine, met functionaliteit uit hun Workflow pakket en daar nog eens nieuwe software aan toevoegen. Dit geheel zal Oracle op de markt brengen als haar ESB product. Uiteraard is nog moeilijk aan te geven hoe dit product zich verhoudt ten opzichte van de concurrentie. Daarvoor moeten we nog even wachten. Maar demo’s die vandaag al wel gegeven worden, laten zien dat Oracle minimaal op de goede weg zit en, vergeleken met de concurrentie, een compleet product zal uitbrengen.
Hopelijk gaat Oracle inzien dat veel van de bestaande gebruikers oudere Forms-applicaties hebben die nog steeds operationeel zijn, maar waarbij niet zo netjes PL/SQL is toegepast. Het lijkt mij de verantwoordelijkheid van Oracle om hun eigen klanten niet in de kou te laten staan, en met een of andere ingenieuze oplossing komen. Laten we zien wat Oracle uit de hoed kan toveren. Een modern product om te integreren is prima, maar dan moet het wel aan de bestaande applicaties gekoppeld kunnen worden.
Rick F. van der Lans is onafhankelijk adviseur, auteur en docent gespecialiseerd in databasetechnologie en softwareontwikkeling
OG VISIE
Veel Oracle klanten, zeker in Nederland, hebben tientallen en soms wel honderden applicaties ontwikkeld in Oracle Designer en Oracle Forms. Sterker nog, nog steeds worden er nieuwe applicaties met deze tools ontwikkeld. En terecht. Tijdens de RAD Race, georganiseerd door Array Publications afgelopen januari, bleek ook weer
eens hoe krachtig die twee tools eigenlijk zijn. De mate waarin Oracle ESB commercieel succesvol zal zijn, zal deels afhankelijk zijn van hoe eenvoudig bestaande Forms applicaties met Oracle ESB tot één SOA te integreren zijn. Deze vraag legde ik voor aan Edwin Khodabakchian (oorspronkelijk de oprichter van Collaxa en nu werkzaam bij Oracle als VP Product Development). Zijn antwoord was voorspelbaar. “Als de ontwikkelaars al hun applicatielogica netjes met PL/SQL in de vorm van stored procedures hebben gebouwd, dan zal integratie eenvoudig zijn.” Mijn vraag was daarna uiteraard: En als dat niet het geval is? Toen keek hij heel somber en zei dat het dan wel wat moeilijker zou zijn. En hier ligt inderdaad een uitdaging voor de Oracle klanten.
Column
We hoeven er niet meer zo lang op te wachten, de Enterprise Service Bus van Oracle komt er aan. Een ESB is een product waarmee applicaties geïntegreerd kunnen worden. Het fundament wordt meestal door messaging software gevormd en vervolgens aangevuld met transformatieservices, content based routing mogelijkheden, orchestration engines en BAM (Business Activity Monitoring) mogelijkheden.
De ESB van Oracle
Column
Door Rick van der Lans
9
Linux platform voor Oracle database verder verstevigd Red Hat brengt Enterprise Linux 4 uit Red Hat heeft medio februari Enterprise Linux 4 uitgebracht. De nieuwe versie van het Linux platform, geoptimaliseerd voor de Oracle omgeving, biedt een aantal uitbreidingen en nieuwe functionaliteiten, zoals betere ondersteuning voor zware servers en een groter aantal CPU’s. Tegelijkertijd met de introductie zijn ook de banden tussen Oracle en Red Hat verder aangehaald. Klanten kunnen voortaan terecht bij Oracle als enkel aanspreekpunt voor technische support voor zowel Oracle als Red Hat Enterprise Linux 4. Sinds de introductie van de eerste database die op Linux draaide in 1998, heeft Oracle zich gecommitteerd aan Linux als enterprise besturingssysteem. Sinds juni 2002 is support een belangrijk kenmerk van de Oracle-Linux samenwerking, toen Oracle begon met ondersteuning op codeniveau voor het gehele software platform en het operating system. Op dit moment doen klanten overal ter wereld 24/7 een beroep op het 6.000 medewerkers tellende Linux supportteam van Oracle voor technische ondersteuning. Daarnaast beschikt Oracle over de grootste Linux ontwikkelorganisatie ter wereld, met meer dan 9.000 ontwikkelaars die werken aan Oracle producten op basis van het Linux besturingssysteem. Oracle heeft ook een Linux Kernel Group die samenwerkt met Linux leveranciers om fixes te leveren en nieuwe functionaliteiten te ontwikkelen ten behoeve van de Linux-gemeenschap.
OG
VISIE
Einde van gesloten platform
10
Enterprise Linux 4 biedt volgens Red Hat de betrouwbaarheid, performance en security die ‘het einde van het gesloten, bedrijfsgebonden platform in de onderneming’ inluidt. Versie 4 biedt een stabiele en volgroeide infrastructuur gebaseerd op de Linux 2.6 kernel, met een technologie die beantwoordt aan de hedendaagse standaards op het gebied van security en compliance. Verdere eigenschappen zijn volgens Red Hat verbeterde productiviteit – van desktop tot de kern van het datacenter – en uitzonderlijke performance en schaalbaarheid voor zowel 32- als 64-bits workloads. Recente onderzoeken van marktresearch- en analysebureau IDC laten een reductie van 50% van de totale kosten zien bij een migratie van Unix naar Linux. Red Hat richt zich met haar nieuwe versie met name op gebruikers van Solaris systemen, die het wil overhalen te migreren naar het Linux platform. Red Hat hanteert daarbij het argument dat “Enterprise Linux 4 bewijst dat Linux oplossingen effectief de behoefte aan Solaris (lees: Unix) in een enterprise omgeving wegnemen.
Hoeksteen Volgens Paul Cormier, Executive Vice President Engineering bij Red Hat, wordt het commitment van Oracle en Red Hat duidelijk aangetoond door de inspanningen die door beide partijen zijn gedaan om Oracle producten getest, geoptimaliseerd en gecertifi-
ceerd te krijgen voor Red Hat Linux 4 en direct na de annoncering beschikbaar te maken voor klanten. Met duizenden klanten wereldwijd heeft Oracle aanzienlijk geïnvesteerd in het pre-testen en certificeren van het platform voor zware bedrijfsapplicaties en grid computing. Oracle’s infrastructuur- en bedrijfsapplicatie-producten, zoals de Oracle Database, Application Server, Collaboration Suite en EBusiness Suite zijn inmiddels gecertificeerd om op Enterprise Linux 4 te draaien. “Onze klanten zullen aanzienlijk profiteren van de combinatie van krachtige Oracle producten en de geavanceerde functionaliteit die beschikbaar is in deze nieuwste Red Hat release”, stelde Wim Coekaerts, Director Linux Engineering van Oracle Corp bij de introductie. “Linux is en blijft een hoeksteen in de visie van Oracle op grid computing. De verbeteringen in de Linux 2.6 kernel die beschikbaar komen via Red Hat Enterprise Linux 4 helpen klanten te overtuigen dat ze Linux kunnen inzetten in de meest zware en intensieve computeromgevingen.”
Verbetering performance In de nieuwe Enterprise Linux 4 versie heeft Red Hat een aantal performanceverbeteringen weten te realiseren. Zo biedt de 'Read Copy Update' functionaliteit aanzienlijke snelheidsverbeteringen voor kernelfuncties - die meestal structuren lezen en minder vaak schrijven - doordat beide acties tegelijkertijd plaats kunnen vinden zonder dat de leesactie moet wachten op de schrijfactie. Verder zijn er verschillende performanceverhogende verbeteringen geïntroduceerd, waaronder 'Object Based Reverse Map VM'. Ook dit geeft forse performancewinsten, vooral in machines met beperkte (RAM) geheugencapaciteit. Via een command line optie kan gekozen worden tussen een aantal verschillende I/O schedulers: CFQ, Deadline, Noop en AS.
Completely Fair Queuing (CFQ) Completely Fair Queuing (CFQ) is de standaard Linux Enterprise 4 I/O scheduler. Deze biedt één I/O queue per proces en geeft elke queue evenveel tijd om zijn I/O actie te verzorgen. Op procesniveau is dit dus de meest eerlijke verdeling, maar dit is bij databaseapplicaties vaak ongewenst omdat deze vaak voorrang (moeten) krijgen. De Deadline scheduler is dan ook beter geschikt: deze elimineert hoge I/O latency door per I/O request een deadline te specificeren, zodat er niet oneindig gewacht gaat worden op I/O. De Noop scheduler wordt voornamelijk gebruikt in virtual systems (bijvoorbeeld VMware), omdat deze natuurlijk afhankelijk zijn van de onderliggende scheduler (van het host operating system). Als laatste biedt Versie 4 de Anticipatory scheduler (AS), die door middel van het introduceren van kleine vertragingen (circa 1 ms) bij het queuen van schrijfacties bekijkt of er nog een leesactie komt (dit omdat leesacties vaak synchroon plaatsvinden en schrijfacties asynchroon). Op deze wijze wordt het heen-en-weer gaan van een harddisk kop vermeden, wat normaal circa 10-16 ms
Linux platform voor Oracle database verder verstevigd kost. Door het vertragen van een schrijfactie met 1 ms kan dus 10-16 ms gewonnen worden bij een leesactie. Deze scheduler wordt vooral in interactieve omgevingen toegepast.
commerciële veilige operating systems zoals Trusted Solaris en Trusted Irix. Omdat het onderdeel is van de standaard Red Hat Enterprise Linux distributie zal deze functionaliteit door alle ISV’s (Independent Software Vendors) ondersteund worden.
Veiligheid Met het populairder worden van het Linux operating system wordt ook de veiligheid van een Linux systeem steeds belangrijker. Red Hat heeft hiertoe een aantal verbeteringen aangebracht die niet standaard tot de Linux kernel behoren. Door middel van 'Exec Shield', beschikbaar vanaf versie 3 update 3, wordt ervoor gezorgd dat de bekende 'buffer overflows' geen kans hebben op het Enterprise Linux systeem. Van alle Linux security problemen die tussen november 2003 en Augustus 2004 bekend werden en waarvoor een exploit beschikbaar was, werd 75% al door Exec Shield 'onbruikbaar' gemaakt. Verder zorgt 'Position Independent Executables' (PIE) ervoor dat applicaties elke keer in een ander stuk geheugen worden geladen, zodat een potentiële hacker niet door middel van een brute-force attack kan slagen. Een van de meest opvallende veiligheidskenmerken van Red Hat Enterprise Linux 4 is Security Enhanced Linux (SE Linux). Deze uitbereiding - ontwikkeld door de Amerikaanse National Security Agency - introduceert een Flexible Mandatory Access Control system in Linux, te vergelijken met
lub Gebruikeersloc ep OraAcle SM onder d Holland e database rm voor Oracl Linux platfo vigd verder verste
• € 7,50 • Nummer 1 • Jaargang 10 Voorjaar 2005
Multiprocessor support en storage Red Hat Enterprise Linux 4 wordt ondersteund op grotere SMP systemen dan de voorgaande versie 3. Op x86 worden nu maximaal 32 CPU’s (was 8) ondersteund, op Itanium 2 maximaal 64 CPU’s in plaats van 8 in de voorgaande versie. Behalve vele verbeteringen aan het standaard EXT3 filesystem wordt ook (software based) iSCSI in Enterprise Linux 4 ondersteund. Momenteel wordt gebruik gemaakt van een open source Cisco implementatie van de initiator, in een latere update zal deze vervangen worden door de standaard 2.6 driver en dan zal ook bootsupport beschikbaar komen. Uiteraard worden de hardware iSCSI adapters van Adaptec en QLogic volledig ondersteund. Met de (performance)verbeteringen en uitbreidingen in de nieuwe versie van Red Hat Enterprise Linux is het Linux platform voor Oracle systemen verder verstevigd. De ondersteuning van de nieuwste technologieën onderschrijft het commitment van Oracle aan Linux als besturingssysteem en de keuze voor Red Hat Linux als basis voor haar softwareontwikkeling. Met versie 4 van Enterprise Linux heeft Red Hat het voor bedrijven eenvoudiger gemaakt Linux te accepteren in hun organisatie.
Ook u kunt lid worden van de OGh en ontvangt automatisch OGh Visie d.m.v. onderstaand aanmeldingsformulier. Niet leden kunnen zich gratis abonneren via de website www.ogh.nl
gadering ene ledenver gres en Algem Voorjaarscon
Kopieer, vul in en fax naar OGh secretariaat 030 - 696 23 78 of meld je aan via www.ogh.nl Naam organisatie ....................................................................................................................................................... Postadres ........................................................................................................................................................................... Postcode/plaats ............................................................................................................................................................. minar Tom Kyte Se
atial? or Oracle Sp alternatief vo
...........................................................................................................................................................
Telefoonnummer ......................................................................................................................................................... Datum
......................................................................................................
OG OG
e een Open Sourc
Contactpersoon
Interesse lidmaatschap? ja/nee
❑ B 3 verzendadressen/3 personen toegang/contributie h 340,❑ C 6 verzendadressen/6 personen toegang/contributie h 450,Geen interesse lidmaatschap, wel interesse (gratis) OGh Visie ja/nee
VISIE VISIE
❑ A 1 verzendadres/3 personen toegang/contributie h 200,-
11 11
Nog steeds veel misverstanden en indianenverhalen
Open source software in a nutshell Het besturingssysteem Linux, de webserver Apache en het kantoorpakket OpenOffice zijn bekende voorbeelden van computerprogramma´s die op basis van bijzondere licenties beschikbaar worden gesteld. De gebruiker mag deze open source software kosteloos draaien en tevens kopiëren, wijzigen en verder verspreiden. Daar staat tegenover dat open source-licenties doorgaans geen waarborgen en zekerheden bieden. Vrijwaring en garanties zullen dus anders geregeld moeten worden. Wie goed naar open source software kijkt, ziet dat het om juridische constructies gaat die bedacht zijn door Amerikaanse programmeurs die van mening zijn dat computerprogramma´s, inclusief de achterliggende technologie in de vorm van de broncode, vrij beschikbaar zouden moeten zijn. Nu is dat bij standaardpakketten doorgaans niet het geval. Zoals bekend verwerft de gebruiker alleen een gebruiksrecht (een licentie) op de runcode van de programmatuur; sources worden niet meegeleverd. Toch kan dat nuttig zijn, bijvoorbeeld om de software zelf te onderhouden of dat door een andere softwaredienstverlener te laten doen. De beschikbaarheid van de broncode biedt de gebruiker uiteindelijk zekerheid in het perspectief van continuïteit van zijn automatiseringsproject. Ook gebruikers van Oracle software hebben of krijgen te maken met het fenomeen open source software. Natuurlijk draait de database van Oracle op het Linux-besturingssysteem. Daarnaast stelt Oracle tegenwoordig de broncode van allerlei ontwikkeltools op grond van open source-licenties ter beschikking. Opvallend - en dat weet waarschijnlijk niet iedereen neemt Oracle deel in het Japanse bedrijf Miracle Linux Corporation, dat een eigen Linux-distributie heeft en bovendien in groter Aziatisch verband samenwerkt om een gemeenschappelijk besturingssysteem voor China, Japan en Zuid-Korea – Asianux - te ontwikkelen. De commitment van Oracle ten opzichte van Linux staat vast.
OG
VISIE
Oorsprong
12
De concepten van free en open source software stammen uit de VS. Open source software is volgens Amerikanen alleen open source wanneer de licentieovereenkomst voor het bewuste computerprogramma voldoet aan de tien criteria van de Open Source Definition, opgesteld door de Open Source Initiative (www.opensource.org). Zo moet de overeenkomst onder meer de levering of beschikbaarstelling van de broncode insluiten en technologieonafhankelijk zijn, terwijl de voorwaarden niet mogen discrimineren. De OSI kan deze contracten certificeren, zoals dat onder meer met de GNU General Public License, ´s werelds meest gebruikte open source-licentie waaronder onder meer Linux wordt aangeboden, is gebeurd.
Door Victor de Pous
Open source software is een onderwerp dat volop in de aandacht staat. Ook in de Oracle omgeving is open source software een factor van betekenis geworden. Oracle zelf ondersteunt het Linux platform en maakt gebruik van open source componenten in JDeveloper, terwijl er tal van open source producten op de markt beschikbaar zijn die rechtstreeks concurreren met Oracle producten. Ondanks het feit dat open source dus zo langzamerhand gemeengoed is geworden, bestaan er nog steeds veel – hardnekkige – misverstanden en doe er veel indianenverhalen de ronde over open broncode-software. Dit artikel ruimt die misverstanden uit de weg en plaatst open source in het juiste perspectief.
Op dit moment dragen ongeveer 70 licenties het certificaat ´goedgekeurd door OSI´, maar het is belangrijk dat gebruikers zich realiseren dat deze certificering niets zegt over de juridisch-inhoudelijke kwaliteit van de voorwaarden, de geldigheid ten aanzien van de totstandkoming van de overeenkomst en bovenal niets over de - kwaliteit en functionaliteit van - de softwarecode zelf.
Overeenkomst Nog iets anders. Het juridische verschil in de benadering van free en open source software tussen de VS en Europa en mogelijk ook de rest van de wereld ligt in de perceptie dat een ´license´ volgens Amerikaanse open source-aanhangers geen contract is, maar slechts een licentie, een toestemming op iets te doen wat anders niet zou mogen, zoals het gebruiken van een computerprogramma waar intellectuele eigendomsrechten op rusten. Die opvatting is van groot belang, omdat het gevolgen heeft ten aanzien van aansprakelijkheidskwesties. Zien we een open source-licentie alleen als een licentie dan worden de aansprakelijkheidsrisico´s in beginsel beperkt tot - het schenden van - intellectuele eigendomsrechten, zoals auteursrechten en octrooien op computerprogramma's. In Europa en zeker in Nederland is een open source-licentie zoals de GNU Public License (GPL) voor Linux echter wel een contract, dat wil zeggen een vorderingsrecht ontstaan uit overeenkomst. En dus kan er sprake zijn van wanprestatie en aansprakelijkheid voor fouten in de software. Bovendien kan op grond van het Nederlandse contractenrecht aansprakelijkheid voor grove schuld en opzet niet worden uitgesloten, en dat geldt ook voor de wettelijke aansprakelijkheid voor gebrekkige producten (productenaansprakeljkheidsrecht). Toch goed om te weten.
Vele rechthebbenden Terug naar de intellectuele eigendom. Omdat het bij open source software er om draait dat iedereen mag mee spelen, zoals Linux-
Open source software in a nutshell auteur Linus Torvalds in zijn boek Just for the fun kernachtig stelt, kent een open source-computerprogramma vele rechthebbenden. Iedere programmeur behoudt zelf de eigendomsrechten op het stukje code dat hij bijdraagt. Normaal gesproken verklaart een softwareleverancier dat hij auteursrechthebbende op het computerprogramma is en bevoegd is tot het in licentie geven van de software. Ook Oracle doet dat. Vervolgens vrijwaart de leverancier de gebruiker/licentienemer tegen iedere actie die gegrond is op de bewering dat de in licentie gegeven software inbreuk maakt op een in Nederland geldend auteursrecht of ander intellectueel eigendomsrecht, en zal de daaruit voortvloeiende kosten en toegekende schadevergoeding betalen. Open source-leveranciers vrijwaren in de regel niet, maar de trend luidt dat tegen betaling gebruikers steeds meer waarborgen en zekerheden kunnen krijgen.
Wat is open source? Wie een licentie voor open source software kernachtig samenvat, komt uit op de volgende karakteristieken. • Open source software is een verzameling van allerlei licenties voor computerprogramma´s die met de broncode geleverd moeten worden. • Er gelden strikte contractuele voorschriften voor de broncode van de software, in het bijzonder met betrekking tot het kopiëren, bewerken en distribueren van zowel de originele als gewijzigde software wanneer de gebruiker de software alleen draait. • Open source-programmeurs bieden geen vrijwaring, geen garantie en sluiten hun aansprakelijkheid doorgaans volledig uit. • Er mag geen licentievergoeding voor open source software worden gevraagd, wel kosten voor distributie en desgewenst voor vrijwaring en garantie; • Onderhoud en verdere ontwikkeling wordt gratis geboden door een open source-gemeenschap, maar kan ook worden uitgevoerd door eigen programmeurs of tegen betaling door een externe, third-party dienstverlener.
Misverstanden en indianenverhalen Nog steeds doen over open source misverstanden en indianenverhalen de ronde.
Op open source rust geen auteursrecht • De gedachte dat open source software ´rechtenvrij´ is dan wel in het publieke domein valt, is onjuist. Door middel van een auteursrechtelijke licentie stuurt de leverancier gebruikers. Daarnaast kan de programmatuur tevens octrooien bevatten en merkenrechtelijk beschermd zijn. Open source wordt zonder contract geleverd • De notie dat open source software zonder contract wordt geleverd is eveneens onjuist. Alle open source-computerprogramma´s gaan vergezeld van juridische voorwaarden, die overigens in Nederland als algemene voorwaarden worden beschouwd omdat de overeenkomst niet door partijen wordt ondertekend. Open source kan niet worden vercommercialiseerd • Dit is opnieuw onjuist. Niet alleen hebben bedrijven als Red Hat en MicraleLinux een economisch model op basis van de distributie van het door derden geschreven Linux ontwikkeld, anderen nemen open source-code op in hun producten en verkopen dat. Of dit is toegestaan hangt van de licentie af. Bovendien kan in beginsel iedereen tegen betaling thirdparty diensten gaan aanbieden (onderhoud, integratie, verdere ontwikkeling) op basis van programmatuur van een derde. Een open source-licentie is geen contract • Vooral Amerikanen zien een licentie voor open source software niet als overeenkomst. De opvatting is belangrijk voor de toepassing van de regels van het contractenrecht op de verhouding tussen leverancier/licentiegever en gebruiker/ licentienemer. Denk aan de vraag of het volledig uitsluiten van aansprakelijkheid toelaatbaar is (antwoord naar Nederlands recht: nee). Bij ons is een licentie een overeenkomst waarop het overeenkomstenrecht van toepassing is. Mr. V.A. de Pous is bedrijfsjurist en industrie-analist. Hij heeft uitvoerig gerapporteerd over open source software. Het rapport ´Recht op open source software´ en de White Paper ´Open source software en politiek´ zijn kosteloos via de website van de OGh [www.ogh.nl ”publicaties”] te downloaden. De Pous is tevens programmadirecteur van de Open Technology Convention die op 19 april 2005 in Amsterdam RAI plaatsvindt (www.tine.nl).
OGh Jaarcongres 2005 OG VISIE
Voor info zie insert, kijk op www.ogh.nl of bel secretariaat 030 - 6997065
13
Herstel Basis Registratie Percelen en Oracle (Spatial) In het artikel Basis Registratie Percelen en Oracle (Spatial) van de hand van Johan Rosmalen en Jeroen Baltussen in de vorige uitgave van OGh Visie (december 2004, pagina 18) is helaas een storende fout geslopen. Bij de conversie van de tekst naar het opmaakprogramma is het laatste deel van het codevoorbeeld in het tekstkader op pagina 21 weggevallen. In onderstaand kader is het complete codevoorbeeld afgedrukt. De volledige versie van het artikel is te vinden op de website van de OGh: www.ogh.nl.
/*============================================== JTREE ordening jan 2002 Jeroen Baltussen omschrijving: Door een fysiek ordening aan te brengen in de records van een tabel met geometrie worden de ruimtelijk queries versneld. De ordening vindt plaats op basis van de centroïde en 10 km en 1km hokken vanuit de linkerbovenhoek. ==============================================*/ -- Tabel maken voor het opslaan van coördinaten: centroïdes, 1 km hokken en 10km hokken. CREATE TABLE MUT_INDEX ( ID NUMBER (9), X_10K NUMBER (3), X_1K NUMBER (3), X NUMBER (6), Y_10K NUMBER (3), Y_1K NUMBER (3), Y NUMBER (6) ); -- Tabel vullen met centroïdes van de percelen. INSERT INTO mut_index(id,x,y) (select rec.id, trunc(rec.centroid.sdo_point.X), trunc(rec.centroid.sdo_point.Y) from ( SELECT brp.id id, sdo_geom.SDO_CENTROID(brp.geometrie,0.001) centroid FROM BRP_GEOMETRIE BRP) rec ) -- Bepaal 10 km en 1 km eenheden van centroïde punt UPDATE MUT_INDEX SET X_10K= TRUNC(X/10000), X_1K=TRUNC(X/1000), Y_10K= TRUNC(Y/10000), Y_1K=TRUNC(Y/1000); -- Indexeren om de ordening te versnellen CREATE UNIQUE INDEX MUT_INDEX1 ON GEO.MUT_INDEX (ID); CREATE INDEX MUT_INDEX2 ON GEO.MUT_INDEX (X_10K); CREATE INDEX MUT_INDEX3 ON GEO.MUT_INDEX (X_1K); CREATE INDEX MUT_INDEX4 ON GEO.MUT_INDEX (X); CREATE INDEX MUT_INDEX5 ON GEO.MUT_INDEX (Y_10K); CREATE INDEX MUT_INDEX6 ON GEO.MUT_INDEX (Y_1K); CREATE INDEX MUT_INDEX7 ON GEO.MUT_INDEX (Y);
OG
VISIE
-- Ordening uitvoeren: Tabel maken waarin de percelen nu -- geografisch geordend worden weggeschreven op basis van -- de centroïdes in de 10 km en 1 km hokken CREATE SEQUENCE BRP_MUT_TEMP_SEQ;
14
CREATE TABLE BRP_MUT_ORDER AS SELECT BRP_MUT_TEMP_SEQ.NEXTVAL ORDER_ID ,BRP.ID BRP_ID FROM BRP_GEOMETRIE BRP, MUT_INDEX MUT WHERE BRP.ID = MUT.ID ORDER BY MUT.X_10K ASC, MUT.Y_10K DESC, MUT.X_1K ASC, MUT.Y_1K DESC, MUT.X ASC, MUT.Y DESC;
Open Source een alternatief voor Oracle Spatial? Een vergelijking tussen Oracle Spatial en PostgreSQL Open Source is een term waar men tegenwoordig veel van hoort. Het gaat hier om applicaties, tools, databases en dergelijke waarvan de broncode open is. Dit betekent dat deze broncode voor iedereen te raadplegen is en desgewenst veranderd kan worden. Open Source biedt onafhankelijkheid van leveranciers met hun gesloten producten. Licentiekosten zijn er in het algemeen niet of ze zijn laag. MySQL en PostgreSQL/PostGIS behoren tot de meest succesvolle Open Source databases met ruimtelijke ondersteuning. Ruimtelijke ondersteuning betekent concreet een datatype voor de opslag ruimtelijke gegevens, ruimtelijke indexering, ruimtelijke functies en ondersteuning voor verschillende coördinaat systemen. ATLIS heeft een jarenlange expertise met het bouwen van ruimtelijke informatiesystemen in met name Oracle Spatial. Gezien de opkomst van Open Source databases met ruimtelijke ondersteuning is door ATLIS onderzoek gedaan naar Oracle Spatial in vergelijking met Open Source databases. In dit artikel wordt Oracle Spatial vergeleken met PostgreSQL/ PostGIS zowel op functioneel als op performance gebied met dien verstande dat er noch voor Oracle Spatial noch voor PostGIS database optimalisatie plaatsgevonden heeft en dat Oracle Spatial en PostgreSQL op verschillende hardware draaien. Een vergelijking van Oracle Spatial met MySQL was niet mogelijk omdat MySQL ten tijde van het onderzoek (juli 2004) het gebruik van stored procedures nog niet ondersteunde. Het is de verwachting dat dit in versie 5, die in 2005 uitgebracht wordt, wel kan. Het onderzoek is uitgevoerd in juli 2004 met PostgreSQL versie 7.4.3 en PostGIS versie 0.8.2. In januari 2005 is versie 8.0 van PostgreSQL uitgekomen. PostGIS staat op het punt om als versie 1.0.0 uitgebracht te worden.
PostgreSQL/PostGIS PostgreSQL stamt af van Ingres, een relationele database ontwikkeld aan de Universiteit van Californië eind jaren zeventig. Via Postgres95 werd het uiteindelijk PostgreSQL. PostGIS, van recenter datum, is een uit een onderzoeksproject voortgekomen spatial data engine gebouwd op PostgreSQL. Het voldoet aan de ‘Simple Features Specifications’ van het OpenGIS Consortium.
Oracle Spatial heeft het datatype MDSYS.SDO_GEOMETRY voor de opslag van ruimtelijke gegevens. Het PostGIS equivalent hiervan is het datatype GEOMETRY. Zowel Oracle Spatial als PostGIS ondersteunen de Simple Features van het OpenGIS Consortium. Voor het creëren van ruimtelijk object heeft PostGIS de functie GeometryFromText. In Oracle Spatial wordt een ruimtelijk object aangemaakt door de constructor van het SDO_GEOMETRY object (zie figuur 1). PostGIS: GeometryFromText('POLYGON( ( 68353 440783 , 68600 440783 , 68600 441121 , 68353 441121 , 68353 440783 ) )' ,25831 )
-- type of geometry -- coördinates
-- SRID
Oracle Spatial: MDSYS.SDO_GEOMETRY( 2003 -- type of geometry , 82341 -- SRID , NULL -- store point geometry , MDSYS.SDO_ELEM_INFO_ARRAY( 1 -- ordinate offset , 1003 -- type of element ,1 -- interpretation ) , MDSYS.SDO_ORDINATE_ARRAY ( 68353 -- ordinates , 440783 , 68600 , 440783 , 68600 , 441121 , 68353 , 441121 , 68353 , 440783 ) )
Figuur 1 Representatie ruimtelijk object in PostGIS en Oracle Spatial
Het definiëren van ruimtelijke datatypen is met PostGIS eenvoudiger dan met Oracle Spatial. PostGIS en Oracle Spatial bieden een vergelijkbare set aan geometrie en aggregatie functies.
VISIE
Zowel PostGIS als Oracle Spatial bieden ondersteuning voor verschillende coördinaatsystemen. De SRID’s zoals deze in PostGIS gebruikt worden wijken af van de SRID’s zoals deze in Oracle Spatial gebruikt worden.
OG
PostgreSQL werkt onder de gangbare Operating Systems (Unix, Linux en vanaf versie 8.0 ‘native’ op Windows) en ondersteunt de ANSI-SQL standaards volledig. PostgreSQL beschikt over alles wat je van een volwassen RDBMS mag verwachten: bijvoorbeeld referentiële integriteit, views, triggers, sequences, inheritance, stored procedures, cursors, transacties, locking, rollbacks, omgaan met deadlocks, outer joins en verschillende back-up mogelijkheden (van database dump tot hot back-up). Als tegenhanger van Oracles PL/SQL biedt PostgreSQL de procedurele querytaal PL/pgSQL om stored procedures en triggers te implementeren.
Vergelijking Oracle Spatial met PostGIS
15
Open Source een alternatief voor Oracle Spatial? De metadata betreffende de geometriekolommen is in PostGIS opgenomen in de tabel GEOMETRY_COLUMNS. Deze tabel wordt automatisch gevuld bij het creëren van een spatial tabel. In Oracle Spatial is de metadata opgeslagen in de tabel USER_SDO_GEOM_METADATA. In Oracle Spatial wordt voor de ruimtelijke indexering gebruik gemaakt van QUAD-
TREE of RTREE indexen. Hoewel PostGIS ook RTREE indexering biedt, wordt geadviseerd om ruimtelijke indexen van het type GIST (Generalized Search Tree) te gebruiken. In tabel 1 wordt een overzicht gegeven van de belangrijkste overeenkomsten en verschillen tussen PostGIS en Oracle Spatial.
Tabel 1 Vergelijking Oracle Spatial met PostGIS Onderdeel Spatial datatype Geometry types Dimensie Laden van data Indexering
Metadata
Geometrie functies Aggregatie functies Coördinaatsysteem ondersteuning Tabel met coördinaatsystemen Linear referencing Partitioning
Oracle Spatial MDSYS.SDO_GEOMETRY ‘Simple Features’ defined by the OpenGIS Consortium 2 en 3 dimensionaal SQL*Loader INSERT statements QTREE index RTREE index Hybrid index USER_SDO_GEOM_METADATA USER_SDO_INDEX_INFO USER_SDO_INDEX_METADATA Ja Ja Ja MDSYS.CS_SRS Ja Ja
Installatie PostgreSQL/PostGIS en pgAdmin PostgreSQL is geïnstalleerd op een Linux server (RedHat 7.3 met een 2.4.18-3 kernel). Er is gewerkt met PostgreSQL versie 7.4.3 inclusief PL/pgSQL en PostGIS versie 0.8.2. Na installatie zijn de volgende bestanden geconfigureerd:
OG
VISIE
pg_hba.conf (te vergelijken met listener.ora) om een connectie vanaf de client mogelijk te maken. Postgresql.conf (te vergelijken met init.ora), het centrale configuratiebestand voor de database.
16
Na installatie van de PostgreSQL server is een database gecreëerd. PostGIS maakt gebruik van de ‘PL/pgSQL procedural language extension’. Deze moet eerst binnen de database worden geactiveerd. Het creëren van het PostGIS-objecttype en PostGIS functiedefinities in de database gebeurt met het script postgis.sql. Met het script spatial_ref_sys.sql wordt de SPATIAL_REF_SYS tabel gevuld met de coördinaatsysteem definities van European Petroleum Survey Group (EPSG). PgAdmin is een client tool die de beheerfunctionaliteit biedt voor PostgreSQL databases vergelijkbaar met SQL Plus en Enterprise Manager van Oracle (zie figuur 2). PgAdmin is gratis te downloaden van http://www.pgadmin.org.
PostGIS GEOMETRY ‘Simple Features’ defined by the OpenGIS Consortium 2 en 3 dimensionaal Copy commando INSERT statements RTREE index GIST index GEOMETRY_COLUMNS Ja Ja Ja SPATIAL_REF_SYS Nee Nee
Na installatie van pgAdmin is via de menu opties File => Connect Server een connectie gemaakt met de PostgreSQL server. In dit scherm dienen o.a. de host waarop de database draait en de database naam opgegeven te worden. PgAdmin maakt geen gebruik van een bestand vergelijkbaar met tnsnames.ora.
Creëren PostgreSQL/PostGIS applicatieschema Binnen de database is een applicatieschema met een aantal spatial tabellen gecreëerd. Als basis hiervoor zijn de uit Oracle Designer gegenereerde DDL scripts van het EPP57 applicatieschema gebruikt. EPP57 is een Oracle Spatial applicatie die gebruikt wordt voor de productie van Electronic Navigational Charts. EPP57 is ontwikkeld door ATLIS, QPS en HITT. De applicatie bestaat uit een database voor de opslag van ruimtelijke objecten volgens de S-57 standaard van de IHO (International Hydrographic Organization) en een database voor de opslag van surveys volgens WADI. WADI is het nieuwe opslagsysteem van Rijkswaterstaat voor natte meetgegevens. De DDL scripts zijn op de volgende punten aangepast: • Datatype NUMBER is vervangen door datatype NUMERIC • Datatype VARCHAR2 is vervangen door datatype VARCHAR • Het datatype DATE in PostgreSQL kan alleen een datum bevatten. Moet ook tijd opgeslagen worden dan wordt het datatype TIMESTAMP gebruikt
Open Source een alternatief voor Oracle Spatial? • De spatial kolom moet na creëren van een tabel met de functie AddGeometryColumn toegevoegd worden. Deze functie heeft de volgende inputparameters: • Schema • Tabel • Naam van geometrie kolom • SRID • Geometrie type (bijv: point/linstring/polygon) • De storage clause is verwijderd. PostgreSQL maakt pas vanaf versie 8.0 gebruik van tablespaces. PostgreSQL biedt in tegenstelling tot Oracle de mogelijkheid om in het DDL statement aan te geven dat een kolom automatisch zonder trigger gevuld moet worden vanuit een sequence (DEFAULT NEXTVAL('<sequence_name>'). Figuur 3 toont een voorbeeld van de aangepaste DDL scripts.
Figuur 2 Voorbeeld GUI PgAdmin
-- Create sequence CREATE SEQUENCE HOO_SEQ INCREMENT BY 1 START WITH 1000 MAXVALUE 999999999000; -- Create table CREATE TABLE HOOGTES ( ID NUMERIC(12) CONSTRAINT HOO_PK PRIMARY KEY DEFAULT NEXTVAL('HOO_SEQ') NOT NULL , SURVEY_ID NUMERIC(12) NOT NULL , HOOGTE NUMERIC(7,2) ); -- Add geometry column to table SELECT AddGeometryColumn('public', 'hoogtes', 'positie', 4258,'POINT',2); -- Create spatial index CREATE INDEX HOO_POS_GEO_IX ON HOOGTES USING GIST (POSITIE GIST_GEOMETRY_OPS ); Figuur 3 Voorbeeld DDL scripts voor PostgreSQL/PostGIS
GeometryFromText('
()',<SRID>)
De coördinaten worden opgegeven als komma gescheiden coördinaatparen (X1 Y1, X2 Y2, . . .). Bij het invoeren is een coördinaattransformatie uitgevoerd van UTM31 naar lat/long met de PostGIS functie TRANSFORM. Het laden van 15714 records in PostGIS duurde gemiddeld 2:26 minuten. In Oracle Spatial ging het laden iets langzamer (15714 records in gemiddeld 2:34 minuten).
VISIE
Om gegevens in PostgreSQL te kunnen laden is een bestand gemaakt waarin voor elk te laden record een insert statement opgenomen is. Met de functie GeometryFromText zijn de opgegeven coördinaten omgezet naar een ruimtelijk object dat opgeslagen wordt in de database (zie figuur 4).
OG
Laden van gegevens
17
Open Source een alternatief voor Oracle Spatial?
-- Insert row into table HOOGTES INSERT INTO HOOGTES ( ID , SURVEY_ID , HOOGTE , POSITIE ) VALUES ( 10001 , 1001 , 12.3 , TRANSFORM (GeometryFromText('POINT(68353 440783)',25831), 4258) ); Figuur 4 Voorbeeld INSERT statement in PostgreSQL/PostGIS
Het copy commando van PostgreSQL biedt functionaliteit die te vergelijken is de functionaliteit van SQL*loader. In tegenstelling tot SQL*Loader kan met het copy commando slechts één tabel per laadactie gevuld worden.
Realiseren functies in PL/pgSQL PostgreSQL biedt ondersteuning voor meerdere procedurele talen waaronder PL/pgSQL. PL/pgSQL is het equivalent van Oracle PL/SQL. PL/pgSQL ken alleen functies, geen procedures en packages zoals PL/SQL. PL/pgSQL biedt wel de mogelijkheid om te werken met cursoren, refcursoren en dynamisch SQL. De exception handling van PL/pgSQL is veel beperkter dan de exception handling van Oracle. Ook biedt PL/pgSQL beperkte debug mogelijkheden.
OG
VISIE
De belangrijkste verschillen tussen PL/SQL en PL/pgSQL worden toegelicht aan de hand van figuur 5:
18
1. De implementatie van de functie moet tussen enkele quotes (') geplaatst worden: 2. Aan het eind van de functie moet aangegeven worden in welke taal de functie geïmplementeerd wordt. VOLATILE geeft aan dat de functie gegevens in de database kan wijzigen. 3. De koppeling van input parameters van de functie aan variabelen binnen de functie vindt plaats op basis van positie in de aanroep. In de aanroep wordt alleen aangegeven welk datatype verwacht wordt. 4. Bij definitie van cursor wordt type cursor geplaatst na naam van de cursor variabele 5. Een rij uit een record wordt gefetched naar een variabele van het type record. 6. Enkele quotes (') moeten ‘escaped’ worden met een enkele quote 7. RAISE NOTICE is het PL/pgSQL equivalent van DBMS_OUTPUT waarbij % vervangen wordt door de waarde van de opgegeven variable (in dit voorbeeld l_output).
Gebruik van PostGIS functies De spatial functies van PostGIS zijn zowel op functioneel gebied als op performance vergeleken met de spatial functies van Oracle Spatial. Hiertoe zijn drie in PL/SQL gebouwde Oracle Spatial functies nagebouwd in PL/pgSQL:
Figuur 6 Spatial functie in MAAK_GEBIED 1. Functie MAAK_GEBIED die afhankelijk van de input of de vereniging (OF) of de doorsnede (EN) van twee gebieden bepaald (zie figuur 6). In deze functie worden de volgende PostGIS spatial functies gebruikt: • transform (Oracle Spatial => sdo_cs.transform) voor coördinaattransformaties naar ETRS89 lat/long. • geometry_union (Oracle Spatial => sdo_geom.sdo_union) voor het bepalen van de topologische OF tussen twee geometrieën. • intersection (Oracle Spatial => sdo_geom.sdo_intersection) voor het bepalen van de topologische AND tussen twee geometrieën. 2. De functie SELECT_SURVEYS waarin de intersectie van de gebiedsgeometrie (bepaald in MAAK_GEBIED) met een survey geometrie bepaald wordt (zie figuur 7). In deze functie worden de volgende PostGIS spatial functies gebruikt (zie ook figuur 5): • intersection (Oracle Spatial => sdo_geom.sdo_intersection) voor het bepalen van de topologische AND tussen twee geometrieën. • isempty om te bepalen of een functie een gevulde geometrie teruggegeven heeft (in Oracle Spatial wordt hiervoor sdo_geom.sdo_area gebruikt) • astext om de geometrie als tekst te tonen. Hiervoor is geen Oracle Spatial equivalent
Open Source een alternatief voor Oracle Spatial?
CREATE OR REPLACE FUNCTION select_surveys
( geometry , date )
(3) (3)
VISIE
Figuur 5 Voorbeeld PL/pgSQL functie
OG
RETURNS int4 AS ' (1) DECLARE -l_gebied_geom alias for $1 ; (3) l_startdatum alias for $2 ; (3) -l_intersec_geom geometry ; l_output int4 ; -c_surveys cursor (p_startdatum (4) ) is select id , geometrie from surveys where begindatum > p_startdatum ; -r_survey record ; (5) -BEGIN -for r_survey in c_surveys ( l_startdatum ) loop --- Bepaal intersectie opgegeven geometrie en survey gebied -l_intersec_geom := intersection ( r_survey.geometrie , l_gebied_geom ); --- Check of beide geometrieen een intersectie hebben -if isempty(l_intersec_geom) <> TRUE then --- Toon coördinaten van geometrie -l_output := '' survey id: ''||r_survey.id|| (6) '' geometrie: ''||astext(r_survey.geometrie) ; -RAISE NOTICE ''Resultaat : %: '', l_output ; (7) -end if ; -end loop ; -RETURN 0 ; -END; ' (1) LANGUAGE 'plpgsql' VOLATILE; (2)
19
Open Source een alternatief voor Oracle Spatial? 3. De functie SELECT_HOOGTES die door middel van een ruimtelijke selectie uit de tabel HOOGTES alle hoogtes selecteert die binnen de intersectie vallen die met de functie SELECT_SURVEYS bepaald is (zie figuur 8). In deze functie worden de volgende PostGIS spatial functies gebruikt (zie figuur 9): • intersection (Oracle Spatial =>sdo_relate) om te bepalen of een punt binnen een geometrie valt.
Tabel 2 Overzicht performance PostGIS Totaal aantal rijen in de lodingentabel 47142 157140 1178886 1807446
Duur uitvoeren query 18 sec. 23 sec. 14 min. 1 sec. 30 min. 58 sec.
Uit de cijfers blijkt dat bij een toenemend aantal rijen, de duur voor het uitvoeren van het testscenario sterk toeneemt. Hoewel niet exact dezelfde test in Oracle Spatial uitgevoerd is, leert de ervaring dat in Oracle Spatial een toename van het aantal rijen in een tabel niet leidt tot zo’n sterke afname van performance zoals deze bij PostGIS waargenomen is.
Bevindingen Figuur 7 Spatial functie in SELECT_SURVEYS
Figuur 8 Spatial functie in SELECT_HOOGTES
--- Bepaal welk punt in survey gebied ligt -select intersection(l_intersec_geom, positie) , hoogte from hoogtes where survey_id = l_survey_id ; Figuur 9 PostGIS functie in SELECT_HOOGTES
OG
VISIE
In PostGIS en in Oracle Spatial zijn de tabellen met dezelfde dataset gevuld en is hetzelfde testscenario uitgevoerd. PostGIS en Oracle Spatial leveren hetzelfde aantal hoogtemetingen als output. Op basis van deze test kan als voorlopige conclusie getrokken worden dat PostGIS en Oracle Spatial functioneel hetzelfde doen.
20
Het uitvoeren van dit testscenario gaat met Oracle Spatial gaat aanzienlijk sneller dan met PostGIS (2 seconden in Oracle Spatial t.o.v. 18 seconden in PostGIS). Om een indruk te krijgen van de performance van PostGIS bij grote datavolumes is hetzelfde scenario een aantal keer herhaald met elke keer meer rijen in de tabel HOOGTES. De resultaten zijn weergegeven in tabel 2.
Installatie Oracle (Spatial) wordt geïnstalleerd vanaf 4 CD’s en vereist ca. 2 GB aan schijfruimte. PostgreSQL/PostGIS wordt gedownload van internet. Een volledige installatie vereist ca. 20 MB aan schijfruimte (een factor 100 minder). De installatie van PostgreSQL/PostGIS is eenvoudiger en sneller dan die van Oracle (Spatial). In PostgreSQL wordt een nieuwe database gecreëerd door een kopie te maken van een standaard template database waardoor dit een factor 10 sneller gaat dan met Oracle waarbij een aantal scripts gedraaid moet worden. Beheertools PgAdmin heeft een Windows look and feel, er is eenvoudig mee te werken en het is intuïtief. De communicatie tussen de client (PgAdmin) en de database is eenvoudig te configureren via tcp/ip. SQL Plus en Enterprise Manager bieden meer mogelijkheden, maar PgAdmin voldoet aan en beschikt ook over de noodzakelijke opties en functionaliteit voor het bouwen en beheren van een databaseapplicatie. Creëren PostGIS applicatieschema Met een aantal kleine aanpassingen (datatypes en definitie geometry kolom) kunnen uit Designer gegenereerde DDL scripts gebruikt worden voor het creëren van objecten in Oracle. PostgreSQL biedt geen mogelijkheid tot partitionering. Het concept van tablespaces is pas vanaf versie 8.0 beschikbaar. PostGIS biedt minder mogelijkheden tot ruimtelijke indexering dan Oracle Spatial. Zowel PostGIS als Oracle Spatial bieden ondersteuning voor verschillende coördinaatsystemen en beschikken over een spatial metadata tabel. Laden van gegevens PostgreSQL/PostGIS is wat betreft het laden van data minder flexibel dan Oracle. Het vullen is mogelijk door gebruik te maken van een bestand met insert statements. Ook kan het copy commando gebruikt worden. Het vullen van een tabel is met PostgreSQL zonder meer mogelijk, maar het is bewerkelijker en minder flexibel dan met Oracle.
Open Source een alternatief voor Oracle Spatial? Realiseren functies in PL/pgSQL PL/pgSQL biedt minder mogelijkheden dan PL/SQL. Het concept van het werken met packages bestaat niet waardoor de code minder goed te beheersen is. Ook de foutenafhandeling is bij PL/pgSQL een minpunt vergeleken met PL/SQL. Ondanks bovengenoemde beperkingen is het mogelijk met PL/pgSQL dezelfde functionaliteit te realiseren als met PL/SQL. Alleen zal in sommige gevallen voor een afwijkende implementatie gekozen moeten worden. Gebruik van PostGIS functies Wat ruimtelijke functionaliteit betreft doet PostGIS niet onder voor Oracle Spatial. PostGIS beschikt over een hoger aantal standaard ruimtelijke functies dan Oracle Spatial. Een relevant deel van deze functies is getest, en inhoudelijk leveren PostGIS en Oracle Spatial dezelfde resultaten. PostgreSQL is stabiel ook bij grote hoeveelheden data. Noch tijdens het laden van de data, noch tijdens het bouwen van de indices, noch tijdens het uitvoeren van het testscenario crasht de database PostGIS lijkt minder geschikt om met grote hoeveelheden spatial data te werken dan Oracle Spatial. Data laden en queries uitvoeren duren in zulke gevallen lang. Op basis van ervaring met andere
Oracle Spatial applicaties zou men wellicht kunnen stellen dat Oracle Spatial op dit gebied beter scoort.
Conclusie Met PostgreSQL/PostGIS in combinatie met PL/pgSQL kan dezelfde ruimtelijke functionaliteit gerealiseerd worden als met Oracle Spatial in combinatie met PL/SQL. De PostGIS functies leveren hetzelfde resultaat als de Oracle Spatial functies. Bij grote datavolumes blijft PostgreSQL stabiel; wel gaan queries steeds langer duren naarmate de hoeveel data toeneemt. Op basis van deze bevinding en het feit dat PostgreSQL geen mogelijkheid tot partitionering biedt, lijkt PostGIS minder geschikt om ruimtelijke applicaties te realiseren waarbij met grote datavolumes (>1000000 rijen) gewerkt moet worden.
Dit artikel is geschreven door M.T.J. Terlien ([email protected]), Senior Consultant bij ATLIS. Het onderzoek is uitgevoerd door M.T.J. Terlien en S.W.P. Pulles, eveneens werkzaam bij ATLIS.
15 JAAR ORACLE EN JAVA EXPERTISE AMIS loopt voorop in de ontwikkelingen. Maak nu kennis met onze ervaring via de AMIS Weblog. Ga naar www.amis.nl, kijk onder Technology Corner en click op Blog voor onder andere:
• de eerste werkende pilot met Oracle BPEL; • het Beta-test programma van Oracle Warehouse Builder 10gR2;
www.amis.nl
VISIE
Het afgelopen half jaar gingen ruim 50.000 mensen u voor!
OG
• ervaringen met Data Guard en Oracle 10g database administratie; • een project met ADF/JHeadstart (release februari 2005); • en praktische ervaringen met de meer traditionele Oracle producten.
Java/J2EE productiviteit in de overtreffende trap
Door Lucas Jellema
Oracle ADF en JHeadstart Java is ontegenzeggelijk een blijvertje gebleken. Java/J2EE is een zeer wijd verspreid ontwikkelplatform, serieus te nemen door iedere organisatie die aan applicatieontwikkeling doet. Sinds de lancering van het J2EE platform hebben vele beloftes de ronde gedaan. Hergebruik en productiviteit, platformonafhankelijkheid, standaardisatie, leveranciersonafhankelijkheid en natuurlijk wereldvrede. Daarnaast hebben enkele tientallen acroniemen hun intrede gemaakt en hebben alle standaarden al verschillende releases doorlopen. Java is een moderne programmeertaal die nog volop in beweging is. Java/J2EE is een Walhalla voor de gevorderde programmeur en al helemaal voor de architect – een term die je sinds J2EE opgang doet ook veel meer tegenkomt. De beloftes van platformonafhankelijkheid en ten aanzien van in ieder geval de applicatieservers ook een grote mate van leveranciersonafhankelijkheid, zijn absoluut ingelost. De standaardisatie heeft een enorme golf van innovatie doen ontstaan, mede gevoed door de sterke open source beweging. Er zijn tientallen zo niet honderden tools en frameworks ontstaan rondom de standaard interfaces en specificaties die veelal tegen lage kosten ingezet kunnen worden.
OG
VISIE
Er bleken de afgelopen vijf jaar ook enkele grote bezwaren aan het Java platform te kleven. De enorme scope van Java/J2EE - van handcomputer tot complete Enterprise Architectuur - de grote dynamiek met als gevolg de enorme stroom aan alsmaar nieuwe versies - de applicatie is nog niet in productie of hij is technologisch al weer ouderwets - de enorme complexiteit van ‘het platform’ met al zijn tiers en technologieën en een schrijnend gebrek aan productiviteit. Daarnaast wil de ontwikkeling van J2EE/Java applicaties en vooral architecturen nog wel eens gecompliceerd worden door een soms bijna religieuze discussie tussen architecten, ontwikkelaars, leveranciers en projectleiders over het pure Java/J2EE gehalte enerzijds en pragmatisme anderzijds.
22
Overgang enorm Zeker voor organisaties die jarenlang ontwikkeld hebben met Oracle Forms, vaak in combinatie met Oracle Designer en mogelijk Headstart voor nog meer geavanceerde generatie, is de overgang naar het Java/J2EE platform enorm. Van een zeer productieve, erg gestructureerde ontwikkelomgeving naar een omgeving die nog complexer, veel minder gestructureerd en over het algemeen factoren minder productief is. Met name het inzetten van ervaren Designer/Forms ontwikkelaars als Java/J2EE ontwikkelaars voor vergelijkbare ontwikkeling van vergelijkbare applicaties met vergelijkbare productiviteit vergt een langdurig traject. Overigens moet ik hierbij aantekenen dat Java/J2EE niet zozeer voor de typische OLTP Forms applicatie wordt ingezet, maar vooral voor het ontwikkelen van een nieuwe klasse van applicaties, te weten HTML en in beperkte mate richClient Internet applicaties en applicaties die op het gebied van WebServices en Enterprise Application Integration hun werk doen. De grootste uitdaging van de afgelopen jaren voor alle leveranciers die actief willen zijn op Java/J2EE gebied is de ontsluiting van de tools en technologie naar de massa in plaats van alleen
de J2EE-goeroes. Productiviteit is het sleutelwoord. Oracle heeft die handschoen met grote voortvarendheid opgepakt, niet in de laatste plaats vanwege het feit dat de Oracle Applications divisie zelf een enorme behoefte heeft aan een productief ontwikkelplatform; zie ook het artikel Eating your own dogfood – interview met John Wookey in het vorige nummer van OGh Visie. De belangrijkste onderdelen van de Oracle product portfolio ten aanzien van de productiviteit van Java/J2EE applicatie ontwikkeling zijn: • ADF Business Components – sinds november 1999 beschikbaar onder de naam BC4J (Business Components for Java); dit is een OO/R Persistency Framework dat relationele data en services in object-vorm beschikbaar stelt aan Java applicaties • Oracle Toplink – sinds 1994 beschikbaar en in 2002 door Oracle ingelijfd; Toplink biedt een POJO (plain old Java Beans) gebaseerd OO/R Persistency Framework dat relationele data en services in object-vorm beschikbaar stelt aan Java applicaties; Toplink wordt als ‘meer OO en meer Java’ gezien dan ADF BC • ADF UIX – sinds 2000 beschikbaar en door Oracle zelf veel toegepast in ondermeer de CRM en Self-Service modules van Oracle Applications, maar ook in tools als Oracle Enterprise Manager. UIX staat voor User Interface XML, en biedt een declaratief, XML gebaseerd mechanisme om User Interfaces te definiëren; de UIX rendering engine kan op basis van deze definities HTML pagina’s genereren maar bijvoorbeeld ook WML en cHTML. ADF UIX zal op korte termijn verder evolueren tot ADF Faces, Oracle’s implementatie van de nog vrije nieuwe Java Server Faces standaard voor event driven User Interfaces in ondermeer HTML • JDeveloper – sinds 1998 beschikbaar als kloon van Borland’s JBuilder (overigens zit er sinds 2002 al geen Borland-code meer in JDeveloper). JDeveloper biedt naast de standaard ontwikkelomgeving voor Java code ook visuele editors voor ondermeer UIX, JSP, HTML, CSS en Struts en wizards voor BC4J, WebServices en Toplink. • JHeadstart – sinds 2001 beschikbaar; JHeadstart is een op standaard technologieën zoals Struts, Toplink, ADF BC, JSP en UIX gebaseerd framework met twee pijlers: • generatie van applicaties op basis van declaratieve definities of eventueel vanuit Oracle Designer • runtime componenten die de applicatie ondersteunen, ondermeer de ‘data binding’ - de koppeling tussen de View en Controller enerzijds en het Model anderzijds
Oracle ADF en JHeadstart
Met bovenstaande componenten heeft Oracle een krachtige geïntegreerde ontwikkelomgeving die niet onderdoet voor de beste Java IDE’s in de markt. Echter, ook hiermee zijn productiviteit, toegankelijkheid voor niet-goeroes en complexiteit respectievelijk vrij laag, laag en vrij hoog. Sinds april 2004 is het Oracle ADF (Application Development Framework) in productie, als onderdeel van JDeveloper 10g. ADF - eerder in OGH Visie besproken door Sandra Muller van Oracle Consulting - is allereerst een Binding Framework. ADF biedt faciliteiten om data elementen die door het Model beschikbaar worden gesteld - zoals Attributen of Methodes van ADF BC Objecten, Properties van JavaBeans en Methodes binnen WebServices - te koppelen aan de View pagina’s, meestal JSP of UIX. Voor Oracle Designer gebruikers: dit lijkt heel erg op het definiëren van Table- en Column-usages in Forms Modules. ADF biedt ontwikkelfaciliteiten om de databinding te specificeren - deels zelfs door simpel drag & drop naar de pagina. Daarnaast biedt ADF de runtime libraries die de data afhandeling rond een pagina regelen. Dit betekent dat ADF ervoor zorgt dat de data die een pagina nodig heeft bij het Model wordt aangevraagd en op een voor de pagina bekende plaats wordt klaargezet. Het betekent ook dat data die door de gebruiker in de pagina is ingevoerd of gewijzigd op de juiste manier door ADF aan het Model wordt teruggegeven om permanent vast te leggen in de database. ADF laat de ontwikkelaar alle beschikbare Business Services registreren als Data Controls – dit kunnen WebServices zijn, Java Beans, Database PL/SQL Functies en Tabellen/Views (de laatste twee indirect). Deze Data Controls zijn vervolgens de componenten die paginaontwikkelaars in hun pagina’s kunnen toepassen, door ze er simpelweg naar toe te slepen. Uiteraard dient er dan nog het nodige aan de pagina layout, eventuele client-side logica en ook niet-scherm gerichte Controller logica gebouwd te worden, maar de ruggegraat van een data- en transactie gerichte applicatie kan op deze wijze vrij snel worden neergezet. Het is bijna alsof je met de hand Forms bouwt: in een layout editor met slepen, klikken en property palettes de basis layout en functionaliteit bouwen. Met ADF besteedt de ontwikkelaar veel tijd aan het registreren van Data Controls en vervolgens het bouwen van individuele pagina’s, waarbij vrij weinig generieke definities over pagina’s heen gebruikt kunnen worden. Daarnaast kan relatief vaak gewenste functionaliteit –zoals multi-record schermen, List of Values, master-detail schermen- nog de nodige hoofdbrekens opleveren en veel tijd aan handmatig ontwikkelwerk vergen.
JHeadstart 10.1.2 voegt aan JDeveloper een geïntegreerd tool toe dat op basis van simpele declaratieve definities applicaties genereert op basis van ADF en naar keuze UIX of JSP. Dit houdt concreet in dat JHeadstart Data Controls registreert, de Struts configuratie file genereert en een menu, message teksten en individuele paginas creëert met een gemeenschappelijke look & feel. Bij de generatie ondersteunt JHeadstart geavanceerde constructies zoals: • Item Groups • Multi-level tabbed menus • Master-Detail(-Detail-Detail) • Multi-Record Insert/Update/Delete • Tree of Navigator Style • List of Values en Shuttle voor enkelvoudige en meervoudige selectie • Zoek pagina’s en Zoek Widgets binnen resultaat pagina’s • Sorteerbare kolommen in Tabel-layout schermen • Detail-Disclosure Al deze elementen kunnen ook handmatig worden gebouwd, vaak wel met flinke investeringen in tijd en moeite. ADF is nog betrekkelijk nieuw en nog sterk in ontwikkeling. Het Oracle JDeveloper ontwikkelteam probeert via How-To documenten en Sample-code uit te leggen hoe veel voorkomende situaties met ADF aangepakt kunnen worden. Om aan te geven om welke basale zaken dit soms nog gaat: in deze serie ondermeer een document dat beschrijft hoe je aan een Select list een lege regel kan toevoegen voor het geval het veld niet verplicht is. Een van de grote toegevoegde waarden van JHeadstart is het feit dat het een bundeling geeft van een groot aantal “best practices” met ADF zoals die het afgelopen jaar door Oracle Consulting verzameld zijn. Wil je weten hoe je iets kunt bereiken met ADF dan heb je een goeie kans dat je er achter komt als je de applicatie genereert met JHeadstart 10.1.2.
VISIE
Generatie vanuit Oracle Designer en Migratie van Oracle Forms Overigens kan JHeadstart de ADF applicatie ook rechtstreeks vanuit Oracle Designer genereren. Dat wil dus zeggen dat ontwikkelaars hun ontwikkelwerk in principe gewoon binnen Designer kunnen blijven doen, alleen nu een andere generator gebruiken! Uiteraard ligt de waarheid iets genuanceerder: de JHeadstart generator is minder geavanceerd dan de Forms generator. Er is dus meestal meer behoefte aan post-generatie aanpassingen. Om die te kunnen doen zal de ontwikkelaar toch in JDeveloper aan de slag moeten en ook enige kennis moeten meebrengen van de gebruikte technologieën.
OG
JHeadstart Dit is het punt waar JHeadstart zijn intrede doet. Waar Oracle Designer aan de ontwikkeling van Oracle Forms een grote mate van standaardisatie en productiviteit heeft toegevoegd door ondermeer het centraal en declaratief vastleggen van eigenschappen die door generatie op vele plaatsen in de applicatie kunnen worden toegepast, doet JHeadstart datzelfde voor ADF!
In februari 2005 zag de eerste ADF JHeadstart Release (10.1.2) het licht, nadat sinds september 2004 diverse bèta-versies al in de praktijk zijn ingezet. ADF JHeadstart bouwt voort op het fundament dat sinds 2001 is opgebouwd.
23
Oracle ADF en JHeadstart
Als een organisatie een bestaande, niet gegenereerde Forms applicatie heeft die overgebracht moet worden naar het Java/J2EE platform, dan kan via Design Capture in Designer gevolgd door generatie met JHeadstart een uitstekende start gemaakt worden. Het resultaat van zo’n migratie heeft de basisfunctionaliteit van de oorspronkelijke Forms applicatie maar behoeft ongetwijfeld nog nazorg op het vlak van layout en client-side logica. Veel belangrijker: het migratie product is volledig gebaseerd op de architectuur en componenten die ook voor nieuwbouw gebruikt zouden worden. Onderhoud en
uitbouw van zo’n gemigreerde applicatie meer specifiek, een ADF Business is net zo eenvoudig als onderhoud van een Components laag bovenop een database. nieuw gebouwde applicatie. We gaan voor dit voorbeeld uit van een bestaande applicatie voor het beheer van Hoe ontwikkel je een applicatie met ADF een boekencollectie. We gebruiken een en JHeadstart datamodel met vijf tabellen: Publisher, In het vervolg van dit artikel wil ik een Book, Author, Authorship en Copy. Deze heel korte beschrijving geven van de ont- database is met Oracle Designer ontworwikkeling van een ADF applicatie. Voor pen en gegenereerd. Dit kan ook met details en een echte tutorial verwijs ik naar JDeveloper: een database design inclusief de homepage van JHeadstart op OTN - zie een diagram en DDL scripts kan met het blokje meer informatie. JDeveloper worden geproduceerd. Het diagram zoals hier afgebeeld is afkomstig De basis van JHeadstart applicaties is een uit JDeveloper. set tabellen of views in een database. Of
Vervolgens starten we Oracle 10g JDeveloper 10.1.2. Deze kan van Oracle worden gedownload als trial. We hebben ook van OTN - JHeadstart 10.1.2 gedownload en geïnstalleerd. We creëren een Application Workspace in JDeveloper met Web Application [DEFAULT] als technology template. JDeveloper maakt nu een Model en een ViewController project aan.
OG
VISIE
We selecteren het Model project en kiezen uit het rechtermuisknop-menu de optie New. In de New Gallery kiezen we onder Business Tier de node Business Components. Uit de lijst van opties selecteren we Business Components from Tables. JDeveloper opent nu een wizard die ons achtereenvolgens een Database Connectie laat aanmaken naar het schema met onze tabellen, de tabellen laat selecteren en daar de objecten in genereert die we nodig hebben om het Model te implementeren.
24
• Nu switchen we naar het View project. Uit het rechtermuisknop-menu (RMB menu) kiezen we nu Enable JHeadstart on this Project. De JHeadstart Enable Project Wizard start. Deze gaat ons JDeveloper project voorbereiden op het gebruik van JHeadstart. Standaard componenten en libraries worden aan het project toegevoegd, de geëigende directorystructuur wordt gecreëerd en de configuratie-files worden geïnitialiseerd.
Oracle ADF en JHeadstart
• Uit het RMB-menu op het View project kiezen we nu de optie New JHeadstart Application Structure File. De wizard die nu start vraagt ons de ADF BC Application Module te selecteren. Vervolgens maakt deze wizard een default application structure file aan. Deze file beschrijft de pagina’s van onze applicatie, hun layout en data usages en hun onderlinge relaties - Multi/Single record, Master-Detail, List of Values etc. Met de JHeadstart Application Structure File Editor kunnen we deze file openen om te zien wat voor default applicatie JHeadstart voor ons in gedachten heeft - op basis van de Foreign Keys die in het Model zijn aangetroffen:
We kunnen ondermeer hier aangeven welke View implementatie we willen toepassen UIX of JSP. Ook kunnen we de taal die de applicatie als default aanhoudt - uiteraard is meertaligheid ondersteund, ondermeer door de resource bundles in meer dan tien talen die met JHeadstart worden meegeleverd. De default voor ons geprepareerde applicatie kunnen we met een druk op de knop
genereren. Let wel: tot hier aan toe hebben we geen letter geprogrammeerd en ook anderszins eigenlijk niets anders gedaan dan wat knoppen in wizards indrukken! Het generatieproces duurt enkele tientallen seconden. Vervolgens kunnen we het ViewController project runnen. De gegenereerde applicatie start, in UIX op dit moment.
OG VISIE
25
Oracle ADF en JHeadstart
Bij nader inzien vind ik JSP een beter geschikte technologie voor deze applicatie. Ik maak de wijziging in de application structure file. Ik voeg een eigen css (cascading stylesheet) file toe om beter de kleuren en layout van OGh Visie weer te geven. Daarnaast gebruik ik ons logo in plaats van het OGh Visie logo. Dit zijn eenmalige wijzigingen in een tweetal files. Om tot iets fraaiere schermen te komen pas ik een paar display kenmerken aan in de JHeadstart ViewObject Editor. Deze tool laat zich goed vergelijken met de Module Component en Item wizards/property palettes in de Design Editor van Oracle Designer. Hierin worden eigenschappen als Prompt, Display Type, Veldlengte, Hinttekst en dergelijke gedefinieerd:
OG
VISIE
De gegenereerde applicatie ziet er nu als volgt uit - en is ook al volledig operationeel nog steeds zonder enig handmatig programmeren:
26
NB: het scherm hiernaast bevat multi-record insert, update en delete functionaliteit - voor Java/J2EE webapplicaties is dat al buitengewoon geavanceerd. Dit is ook bij lange na nog niet standaard functionaliteit voor ADF en alleen al hiermee levert JHeadstart een substantiële toegevoegde waarde.
OG
VISIE
Oracle ADF en JHeadstart
JHeadstart ondersteunt ook meerdere niveaus van masterdetail nesting. Hiernaast een voorbeeld hiervan:
Merkwaardig genoeg ondersteunt JHeadstart ook met deze 10.1.2 release nog steeds niet het display type Radio. Het wordt ons al een poos beloofd en het zal vast wel komen – maar nu nog niet. Misschien is het aardig met een paar extra geavanceerde features af te sluiten, zoals de Tree of Navigator layout-style en de shuttle. Jammer genoeg zijn deze tree en de shuttle niet ondersteund voor JSP maar alleen in UIX. De tree ziet er bijvoorbeeld als volgt uit:
OG VISIE
27
Oracle ADF en JHeadstart
Een andere geavanceerde optie, is de mogelijkheid om data weer te geven door middel van grafieken. ADF en JDeveloper bieden voor JSP applicaties een buitengewoon eenvoudige optie om grafieken op te nemen in de schermen. Dit is wel een post-generatie handeling. Voor UIX wordt dit (nog) niet ondersteund.
OG
VISIE
Om onderstaande grafiek toe te voegen heb ik de volgende stappen gezet: • Maak nieuw read-only view object met een query die per publisher het aantal boeken bepaalt • Voeg dit view object toe aan de application module • Sleep de data control voor dit view object van het data control palet op de PublisherTablePage.jsp • Edit in de wizards de eigenschappen van de grafiek: wat is de titel, wat is het formaat, wat zijn de labels en datavelden
Conclusies De ontwikkeling van web-applicaties op basis van een Java/J2EE architectuur is geen sinecure. De overgang voor een ontwikkelorganisatie die ervaren is in traditionele Oracle technologie als Forms en Designer is enorm. De daling van productiviteit kan makkelijk tot een factor drie á vier oplopen. Oracle heeft een offensief ingezet om die productiviteit te verhogen en de drempels te verlagen. ADF en de visuele ontwikkelomgeving van JDeveloper zijn belangrijke elementen daarin. JHeadstart 10.1.2 geeft ADF nog een flinke duw in de rug door de belangrijkste schermconstructies en onderliggende logica te genereren.
Ook met al deze hulpmiddelen is het ontwikkelen van Java/J2EE web-applicaties minder productief dan het genereren van WebForms applicaties door ervaren Designer en Forms ontwikkelaars, zeker in situaties waar post-generatie aanpassingen nodig zijn. Maar ADF en JHeadstart hebben de kloof wel aanzienlijk verkleind. Bovendien is met de generatie capaciteit van JHeadstart prototyping voor web-applicaties nu een reële mogelijkheid.
28 Lucas Jellema is Technical Consultant bij AMIS Services en redactielid van OGh Visie.
Oracle ADF en JHeadstart
MVC architectuur en veel gebruikte J2EE frameworks Java/J2EE Web Applicaties worden over het algemeen opgezet volgens de MVC-architectuur. MVC beschrijft diverse componenten in de applicatie die elk een eigen verantwoordelijkheid hebben en tamelijk onafhankelijk van elkaar hun werk doen. Elk van de componenten is ook gebaseerd op specifieke technologie en vereist specifieke kennis om te ontwikkelen. Niet zelden worden binnen grotere teams verschillende ontwikkelaars voor de verschillende componenten ingezet. Hierin staat de M voor Model – de component die met de Database communiceert en de applicatie services voor Data Retrieval en Data Manipulatie biedt. Binnen het Model wordt ook de vertaling gemaakt van relationele data naar de OO wereld van Java Objecten; dit gebeurt met een OO/R persistency framework, zoals ADF Business Components, Oracle Toplink, Hibernate, handgecodeerde JDBC code of eventueel Enterprise Java Beans . De V staat voor View – de component die de web-pagina’s genereert die uiteindelijk aan de gebruiker worden getoond. De technologie voor het produceren van HTML pagina’s is vaak JSP (Java Server Page) of Oracle UIX. Daarnaast wordt ook XML en XSLT transformatie technologie ingezet. De C van MVC is de Controller, de besturing van de applicatie. De scheiding van de componenten in MVC houdt in dat de View niet rechtstreeks met het Model communiceert en dat het Model niet eens weet dat de View bestaat. Evenmin hebben Model of View weet van de Controller. Het is de Controller die alles aan elkaar knoopt: het request van de browser van gebruiker wordt ontvangen door de Controller en vertaalt in aanroepen van Model services om data uit de webpagina eventueel via het Model te laten vastleggen en om uit het Model data op te vragen die voor een volgende pagina nodig is. De Controller geeft tenslotte een seintje aan een View element, bijvoorbeeld een JSP dat deze zich moet gaan ‘renderen’ en daarbij gebruik kan maken van data die door de Controller voor hem is klaargezet. De bijna de-factor standaard op Controller gebied is Struts van het Apache open source project. Ook voor Oracle is Struts (op dit moment want er zijn plannen voor een ADF Controller) de enige serieuze optie voor de implementatie van de Controller rol. Daarnaast ondersteunt Oracle binnen JDeveloper verschillende implementaties van Model en View. Onderstaande figuur laat dat zien – waarbij zij aangetekend dat hier Model en Business Services apart zijn weergegeven waar ze in bovenstaande beschrijving samen zijn genomen. Een grote uitdaging in de ontwikkeling van Java/J2EE applicaties is de koppeling tussen Controller/View en Model/ Business Services. Dat is het vlak waar geen (de-facto) standaarden in de markt bestaan en dat is precies het gat waar met het ADF Data Binding Framework ingesprongen is.
OG VISIE
Meer informatie: De JHeadstart Home page op OTN: http://www.oracle.com/technology/consulting/9iServices/J Headstart.html De JDeveloper en ADF Home page op OTN: http://www.oracle.com/technology/products/jdev/index.html De ALS applicatie kan in zijn geheel worden gedownload van http://www.amis.nl/technology
29
Persistente data in Kleinschalige Basiskaart Amsterdam
Van een grafische naar een objectgerichte oriëntatie Het beheer van grote gegevenssets met ruimtelijke data levert al snel complexe problemen op. Tijdens een OGh themabijeenkomst bij Oracle in De Meern begin dit jaar kwam een specialistisch element aan bod om hier mee om te gaan: topologie. De gemeente Amsterdam toonde de mogelijkheden in de praktijk.
“Het uiteindelijke doel is integratie met andere ruimtelijke en administratieve vastgoedinformatie zoals bijvoorbeeld adressen, gebouwen en wegen. Verder zien we dat de vraag naar GIS-analyses toeneemt, daar spelen we op in. De vernieuwingen die we doorvoeren zorgen ervoor dat we van een grafische oriëntatie overgaan op een objectgerichte oriëntatie.”
De - drukbezochte - themabijeenkomst stond in het teken van topologie, om precies te zijn Radius Topology. Radius Topology is een soort ‘poortwachter’ die alleen correcte, accurate data toestaat in de database. Inconsistente data worden automatisch gecorrigeerd binnen de grenzen van door de gebruiker gestelde regels. De topologische functionaliteit stamt oorspronkelijk af van Gothic, een systeemomgeving van het Britse Laser-Scan. Deze functionaliteit inmiddels ook voor Oracle9i beschikbaar, en als oplossing voor Locator binnen Oracle 10g.
Ingrijpende verandering
Automatische correctiefunctie Martin Gregory, technisch adviseur van de Britse ontwikkelaar Laser-Scan, gaf uitleg bij de op zich nogal kaal aandoende lijntjes op het digitale kaartmateriaal. De grootste verbetering die te behalen is met de topologische controlelaag is tijdwinst bij de correctie- en revisie-workflow. Tijdens een van de internationale kaartvoorbeelden in de powerpointpresentatie ging het even mis met de automatische correctiefunctie. Alle aanwezige Oracle-gebruikers zagen een Italiaanse straat dwars door een gebouw lopen. En Radius Topology keurde dat goed. Gregory redde zich er op een typisch Britse manier uit. Hij stelde dat hij het niet met de Italiaanse situatie oneens durfde te zijn. “Uiteindelijk zijn Italianen veel cooler dan wij, dus wie ben ik om nu moeilijk te gaan doen?”
Amsterdam
OG
VISIE
De relatief kleine ontwikkelaar Laser-Scan uit Cambridge is erg trots op het feit dat de gemeente Amsterdam hun oplossing gebruikt, maar Gregory voegde er meteen aan toe dat er genoeg andere ‘glamourgebruikers’ zijn, zoals de CIA. Helaas mocht hij geen details loslaten. We zullen er dus voorlopig niet achterkomen wat de CIA precies uitspookt met Radius Topology.
30
Door Remco Takken
De afdeling Geo- en Vastgoedinformatie van de gemeente Amsterdam vernieuwt en verbetert de 1:10.000 kaart, de Kleinschalige BasisKaart (KBK). Amsterdam structureert en corrigeert haar bestaande ruimtelijke gegevens in deze basiskaart met behulp van Radius Topology. De datakwaliteit wordt nu deels automatisch bijgehouden tijdens de invoer en revisies. Jeroen de Vries is GIS-adviseur bij de gemeente Amsterdam. Hij begeleidt de overgang van een op Microstation gebaseerde CAD-structuur naar een objectgerichte Oracle-structuur.
Waarop wordt de Kleinschalige BasisKaart precies gecheckt? De Vries: “Het gaat om allerlei geometrische problemen. De zogenaamde opdelende objecten mogen niet overlappen. Dat zijn terreinen, waterdelen, wegdelen en spoorbaandelen. Radius controleert daarbij op undershoots, overshoots, gaps en slivers. Ook dubbel opgevoerde objecten moeten worden verwijderd.” Fouten van hetzelfde type worden tijdens de bijhouding automatisch opgespoord en gecorrigeerd. Specifiek Amsterdams zijn natuurlijk de vele grachten die in de kaart voorkomen. De Vries: “Hier zien we een ingrijpende verandering. In de oude situatie bevond zich slechts ‘water’ op de kaart waar een blauwe kleur te zien was. Nu we moeten aansluiten op de werkelijke situatie, krijgen cartografen te maken met het feit dat er ook onder de bruggen water loopt. Dat vergt een andere manier van denken.”
Transparant De Vries: “Cartografen moeten leren omgaan met een nieuwe datastructuur in een nieuwe (Geomedia-)omgeving. De datacontrole werkt echter op een voor de cartografen transparante manier. Voor het finetunen van de toleranties moet je tijdens de ontwikkeling veel tijd vrij maken. Voor fouten die Radius niet structureert, zoals overlap, hebben we een controlemodule ontwikkeld.” In augustus 2005 moet de vernieuwde Kleinschalige Basiskaart klaar zijn. De Vries: “Dan hebben we een kwalitatief goed GISbestand waarmee we niet alleen een mooie wandkaart kunnen maken. Het kan ook een basis zijn voor andere digitale toepassingen, zoals GIS-analyses, webtoepassingen of ontwerp en beheersystemen. De persistente data zijn vooral belangrijk als je onafhankelijk wilt blijven van de ‘vliegmaatschappij waarmee je vliegt’. Het maakt uitwisseling en koppeling mogelijk met allerlei soorten bestanden, onafhankelijk van de hulpmiddelen waarmee je deze data produceert of raadpleegt.” Meer informatie over de in dit artikel besproken onderwerpen is te vinden op: www.laser-scan.com of www.atlas.amsterdam.nl
Remco Takken ([email protected]) is redacteur van GISMagazine. In het [maand]nummer van het vakblad, dat informeert over de ontwikkelingen op het gebied van ruimtelijke informatie en Geo-ICT, is een verslag opgenomen van het OGh themabijeenkomst.
Meer Special Interest Groups binnen de Oracle Gebruikersclub Holland In 2003 zijn we vanuit de OGh gestart met een eerste Special Interest Group (SIG), de SIM (Spatial Information Management). Deze SIG richt zich op gebruikers van het product Oracle Spatial. Elk kwartaal komen leden van deze special interest group bij elkaar om specifieke presentaties bij te wonen, ervaringen uit te wisselen en van de laatste ontwikkelingen op de hoogte te blijven. Inmiddels heeft deze enthousiaste groep een trouwe schare aanhangers, die de zalen bij Oracle in De Meern prima weten te vinden. Elke bijeenkomst van de SIM was tot nog toe ‘uitverkocht’. Het bestuur van de OGh wil van haar leden weten of er interesse is in meer special interest groups. Deze zouden meerdere invalshoeken kunnen hebben:
• Special interest groups rondom technologie Een SIG waar gebruikers van bepaalde technologieën elkaar kunnen ontmoeten, bijvoorbeeld voor Oracle-productlijnen als Oracle Portal, Oracle Application Server, speciale databaseopties, Oracle workflow, Business Intelligence, XML of clustering & grids.
• Special interest groups rondom marktsegmenten Een SIG voor Oracle gebruikers in bepaalde marktsegmenten. Bijvoorbeeld de onderwijsmarkt, gezondheidszorg, lokale overheid, ICT-dienstverleners, retail, openbare orde en veiligheid (OOV) etc.
• Special interest groups rondom een functionele rol
We willen graag uw mening weten en nodigen u dan ook van harte uit mee te doen aan de ledenenquête. U kunt uw mening geven tot 20 mei, de datum van het OGh jaarcongres 2005. Naar aanleiding van het aantal reacties zal het OGh-bestuur besluiten voor welke special interest groups voldoende interesse bestaat. Kijk voor het enquêteformulier op www.ogh.nl of neem contact op met het secretariaat 030 - 6997065, e-mail: [email protected].
VISIE
Vandaar dat het bestuur van de OGh zich afvraagt of er wellicht animo is voor het opzetten van meer special interest groups. En aan wie dat beter te vragen dan aan u, de leden?
OG
Een SIG waarbij mensen die een functionele rol delen met elkaar samenkomen, bijvoorbeeld ICT-architecten, projectleiders, DBA’s of outsourcing managers.
31