Oracle Forms en WebUtil
September 2006 - Traditioneel biedt Oracle voor Forms veel mogelijkheden voor integratie met software en het bestandsysteem op de computer van de gebruiker. Bijvoorbeeld het aanmaken van een Word document, het wegschrijven van een bestand op de PC van de gebruiker of het aanroepen van een C-routine. Deze interactie vindt plaats via standaard Forms built-ins (zoals OLE2) en/of via de uitgebreide functionaliteit van de forms library d2kwutil.
De overgang van Client/Server forms naar webforms zorgde voor een nieuwe 3-tier architectuur. Het forms runtime proces draait niet langer op de machine van de gebruiker maar op een applicatieserver, het enige wat op de client PC draait is een Java Applet in de browser met daarin de representatie van de forms user interface. Interactie vanuit het Forms runtime proces met de machine waarop dit draait betekent dan ook interactie met de applicatieserver en niet met de client computer. Dit is lang niet altijd gewenst, toegang tot clientfunctionaliteit is soms noodzakelijk. Stel het is nodig om Word te starten met wat vooringevulde gegevens waarna de gebruiker direct daarmee verder kan, of er moet een bestand aangemaakt worden op de computer van de gebruiker. Als oplossing hiervoor biedt Oracle WebUtil aan, waarmee alsnog de aanroepen vanuit webforms worden uitgevoerd op de client-browser machine.

WebUtil globale werking
Om de client browser machine functionaliteit vanuit Forms te kunnen benaderen is een oplossing in Java bedacht. Omdat de clientlaag van de nieuwe 3-tier architectuur voor webforms geïmplementeerd is in Java, kan deze uitgebreid worden om extra functionaliteit te bieden. Middels JavaBeans in het form en Pluggable Java Components op de client wordt ingehaakt op de client Java Virtual machine en kan de clientfunctionaliteit worden benaderd. Runtime draagt WebUtil zelf zorg voor het automatisch downloaden van de benodigde Java programmatuur (signed jar files) en eventueel benodigde operating system libraries naar de client. Aan de client kant installeert WebUtil daarmee zichzelf, de gebruiker krijgt wel een certificaat in beeld alvorens er iets gedownload wordt naar zijn computer. Onderstaande figuur geeft een overzicht van de diverse WebUtil componenten.

WebUtil functionaliteit
WebUtil biedt gelijkwaardige vervangers voor de meest gebruikte Forms built-ins voor het aanroepen van client browser machine functionaliteit, dit zijn de zogeheten Client Server Parity API’s. Deze packages hebben allemaal het prefix CLIENT_, zoals bijvoorbeeld CLIENT_TEXT_IO.
Verder biedt WebUtil extra, dan wel verbeterde functionaliteit ten opzichte van wat voorheen mogelijk was met Forms in het Client/Server tijdperk, dit zijn de zogeheten Value added functions:
- File transfer van en naar de applicatieserver en de database.
- Meer mogelijkheden om informatie over de client machine op te halen.
- Uitgebreidere mogelijkheden voor HOST commando’s.
- C API op de client: ten opzichte van de built-in ORA_FFI vereenvoudigde manier om calls naar C-libraries op de client te doen (werkt alleen voor 32 bits Windows clients).
- De belangrijkste functies van d2kwutil zijn ge-port naar WebUtil (werkt alleen voor 32 bits Windows clients).
- Functionaliteit om de browser naar een pagina te re-directen wanneer het forms proces crashed.
- Functionaliteit om een aantal dingen aan de browser waarin het form draait te veranderen, zoals het zetten van een message in de browser statusbar.
WebUtil versies
Sinds 2004 biedt Oracle de eerste volledig supported WebUtil versie 1.0.5 aan, geschikt voor Oracle Forms 10g (9.0.4). De meest recente versie 1.0.6 is geschikt voor Oracle Forms 10g (10.1.2) en met wat kleine aanpassingen ook voor Oracle Forms 10g (9.0.4).
Op Internet is informatie te vinden hoe de productie releases van WebUtil te gebruiken zijn in combinatie met forms 6i en 9.0.2, dit wordt echter niet ondersteund vanuit Oracle. Eventueel kan ook gebruik gemaakt worden van de eerdere - niet door Oracle ondersteunde - preview WebUtil release 1.0.2 die goed werkt met Forms 9.0.2.
Naast een aantal bug fixes is release 1.0.6. ten opzichte van 1.0.5. vooral een release die zich richt op de security issues ten aanzien van het automatisch te downloaden frmwebutil.jar bestand. Indien het domein van de server waarvan de file gedownload wordt niet in het configuratiebestand TrustedDomains.txt voorkomt, wordt het form beëindigd met de melding: "URL {0} is not a trusted site from which WebUtil functionality can be downloaded".
In algemene zin kan worden opgemerkt dat Oracle redelijk laat was met het aanbieden van een goed werkende manier voor integratie met de client PC. Natuurlijk was het mogelijk om voor die tijd met zelfgeschreven JavaBeans in te haken op de client. Maar dit is toch een aardige klus waarbij Java kennis een vereiste is. De vele Forms built-ins voor client integratie zijn natuurlijk niet voor niets ooit toegevoegd aan het Forms product, in de praktijk wordt veel gebruik gemaakt van clientfunctionaliteit. Neem bijvoorbeeld de veel voorkomende integratie met Word voor het sturen van een standaardbrief.
WebUtil installatie
De installatie is redelijk eenvoudig en staat goed gedocumenteerd in de meegeleverde WebUtil Users guide (inclusief een handige checklist). Het enige wat niet standaard meegeleverd wordt met de WebUtil download zijn de JACOB componenten (jacob.jar & jacob.dll) die benodigd zijn voor OLE2 integratie. Deze OLE2 functionaliteit is noodzaak voor de veelgebruikte integratie met Word/Excel/Outlook. De JACOB componenten zijn open source en moeten apart gedownload worden.
WebUtil kan zowel lokaal in een OC4J ontwikkelomgeving worden geïnstalleerd als op de applicatieserver, de installatiehandelingen wijken niet veel van elkaar af. Wat betreft de ontwikkelomgeving is het vermelden waard dat WebUtil 1.0.6 nu standaard wordt meegeleverd met de Oracle Developer Suite 10g (10.1.2.x.x).
Na de installatie is het een goed idee om de WebUtil demo te downloaden van de Oracle website. Daarmee kan gecontroleerd worden of alle functionaliteit ook daadwerkelijk werkt, bovendien geeft de demo een uitstekend beeld van de mogelijkheden van WebUtil.
Forms ontwikkelen met WebUtil
Alhoewel WebUtil zelf intensief Java gebruikt, hoeft een Forms ontwikkelaar geen kennis te hebben van Java om WebUtil functionaliteit te kunnen gebruiken. Alles wat de ontwikkelaar nodig heeft is via de PL/SQL packages van de WebUtil forms library beschikbaar.
Om binnen een form gebruik te kunnen maken van WebUtil functionaliteit zijn twee stappen nodig:
- koppel de WebUtil forms library (webutil.pll) aan het form;
- subclass de object group webutil uit de object library webutil.olb in het form.
Zorg daarna ervoor dat er niet naar het hiermee ontstane blok WEBUTIL genavigeerd kan worden in het form. Dit blok bevat alle JavaBeans waarvan WebUtil gebruik maakt.
Vervolgens kunnen aanroepen van de client-integratie built-ins van forms vervangen worden door de WebUtil versie. Dit gaat zeer eenvoudig door CLIENT_ te plaatsen voor de built-in aanroep. Bijvoorbeeld TEXT_IO.FOPEN (l_filename,’r’) wordt CLIENT_TEXT_IO.FOPEN (l_filename,’r’).

Designer: genereren WebUtil enabled forms
Het is mogelijk om vanuit Designer WebUtil enabled forms te generen zonder verdere handmatige aanpassingen. WebUtil enabled forms kunnen vanuit Designer gegenereerd worden door de webutil.pll aan de forms module te koppelen via het module network of de MODLIB preference. Verder moet de vereiste webutil objectgroep in het form worden gesubclassed vanuit de webutil.olb. Dit kan via de preference OLBLST - zie onderstaand voorbeeld.

WebUtil en performance
Algemeen is te stellen dat de WebUtil performance minder is dan de directe interactie vanuit forms met de client PC zoals dat mogelijk was met Client/Server. WebUtil heeft per call de extra kosten van een network roundtrip tussen het Forms proces op de applicatieserver en de client browser machine. Voor het gebruik van WebUtil moet steeds de mogelijkheid worden overwogen of de logica niet deels of in zijn geheel op de applicatieserver kan worden uitgevoerd. Het is bijvoorbeeld veel efficiënter in netwerk verkeer om, middels WEBUTIL_FILE_TRANSFER, een compleet tekstbestand vanaf de client PC naar de applicatieserver te kopiëren en daar regel voor regel te verwerken (met de gewone forms TEXT_IO built-in), dan hetzelfde tekstbestand regel voor regel in te lezen vanaf de client via WebUtil’s CLIENT_TEXT_IO.
In de WebUtil Users guide (zie Referenties) staan nog meer performance tips. Een belangrijke - en tegelijk voor de hand liggende - tip is om alleen die forms WebUtil te enablen die ook daadwerkelijk deze functionaliteit nodig hebben. Elk WebUtil enabled form zal namelijk een bepaalde hoeveelheid netwerk verkeer genereren en geheugen gebruiken, simpel vanwege het instantiëren van de utility. Dit is een aandachtspunt bij genereren vanuit Designer, de WebUtil componenten moeten op moduleniveau worden gekoppeld en niet op applicatiesysteemniveau.
Conclusie
WebUtil is een goed werkend product om alsnog client functionaliteit vanuit Forms te benaderen. Het grote voordeel van WebUtil is dat, hoewel intern intensief Java wordt gebruikt, de forms ontwikkelaar verder geen Java kennis nodig heeft om WebUtil toe te passen. Er kan gewerkt worden in PL/SQL middels de WebUtil forms library. Bij migratie van Client/Sserver forms naar webforms kan, veelal door simpelweg het CLIENT_ prefix toe te voegen aan de bestaande aanroepen naar forms built-ins, de gewenst client integratie weer hersteld worden. Een ander voordeel van WebUtil zijn de Value-added functions, die extra functionaliteit bieden ten opzichte van wat in Client/Server mogelijk was.
Nadeel van WebUtil is bijvoorbeeld het feit dat niet alle d2kwutil functies zijn ge-port naar WebUtil of geïmplementeerd zijn in een soortgelijke maar wel afwijkende functie. Ook is de C API alleen maar geschikt voor 32 bits Windows clients. Groter nadeel van WebUtil is de verminderde performance, maar in een intern bedrijfsnetwerk is de performance meestal wel acceptabel. Bovendien kan met handig programmeerwerk en een goede verdeling van de workload tussen client en applicatieserver veel aan de performance verbeterd worden.
Referenties
- Oracle WebUtil home page:
www.oracle.com/technology/products/forms/htdocs/webutil/webutil.htm - Webutil Users Guide:
www.oracle.com/technology/products/forms/htdocs/webutil/web_util.pdf - WebUtil Demo applicatie:
www.oracle.com/technology/products/forms/htdocs/webutil/webutil_demo.zip - JACOB:
prdownloads.sourceforge.net/jacob-project/
Over de auteur
Jochem Budding is Oracle consultant bij Whitehorses en heeft ruim 8 jaar ervaring als ontwerper en ontwikkelaar van Oracle applicaties. Hij heeft in die tijd ruime ervaring opgedaan met Designer, Forms en PL/SQL.

Reacties
Nieuwe reactie inzenden