Integratie met Hydra
De overheid ziet inzet van meer ICT als een goede mogelijkheid om de dienstverlening aan burgers en bedrijven te verbeteren en daarbij ook de administratieve lasten te drukken. De initiatieven op dit gebied vallen onder het kopje ‘De elektronische overheid’ of E-Government [1].
Burgers en bedrijven worden centraler geplaatst in de dienstverlening. Dit uit zich in een vraaggestuurde aanpak. Waar overheidsapplicaties van oudsher rond overheidsafdelingen zijn gerealiseerd - elke afdeling heeft zijn eigen specialistische informatiesystemen -, moeten de informatiesystemen nu dus meer vanuit het perspectief van de klant benaderd kunnen worden.
De verschillende specialistische pakketten op het gebied van milieu die aan overheidsorganisaties geleverd worden, moeten dus kunnen worden geïntegreerd in een groter geheel. In dit artikel wordt het Hydra plugin framework [2] beschreven, dat kan helpen om die integratie technisch te realiseren.
Hydra plugin framework
Er zijn meerdere plugin frameworks beschikbaar voor de Delphi-omgeving. Na evaluatie bleek in ons geval dat Hydra het best aansloot op onze wensen.
Er zijn meerdere plugin frameworks beschikbaar voor de Delphi-omgeving. Na evaluatie bleek in ons geval dat Hydra het best aansloot op onze wensen
In het framework is de host-application de gastheer van de plugins. De host wordt daarbij geholpen door de module-controller, die als centraal registratie-object voor de plugins dient en waaraan de host kan vragen om een plugin.

Fig. 1: Hydra Onderdelen
Een Hydra-plugin is onderdeel van een Hydra-module, die na compilatie uiteindelijk een DLL is. Er kunnen meerdere plugins in een module worden opgenomen. Op deze manier kan worden voorkomen dat bij intensief gebruik van plugins een explosie van het aantal DLL’s ontstaat. Stop plugins die functioneel en/of technisch bij elkaar horen dus in dezelfde module.
Visuele plugins
Als een plugin een user interface beschikbaar stelt aan de host-application, dan wordt gesproken van een visuele plugin. Bij activeren van dit type plugin moet daarom een object (TWinControl) worden toegewezen waarop de plugin zich kan presenteren.
Visuele plugins bieden ook de mogelijkheid om een menu of toolbar samen te voegen met die van de host bij het activeren van de plugin.
Non-visuele plugins
Als uitwisseling van gegevens en/of uitvoeren van functies de taak is van een plugin, dan zijn non-visuele plugins van toepassing.
Het interface is een van de krachtigste taalconstructies binnen talen om de koppeling tussen systeemonderdelen en daarmee de afhankelijkheden zo beperkt mogelijk te houden (Separated Interface [3]). Hydra heeft de communicatie tussen een host en plugin dan ook op interfaces gebaseerd.
NB: Een Interface is een contract, besteed daar dus de nodige aandacht aan!
Een interface is een contract, besteed daar dus de nodige aandacht aan
Kan het niet met bpl’s?
Plugins kunnen ook worden gerealiseerd met behulp van Borland Package Libraries (bpl’s). Het voordeel van het Hydra framework is echter, dat allerlei zaken al voor je geregeld worden of worden gefaciliteerd. Om er een aantal te noemen:
- Simpele zaken zijn al voor je gedaan, zoals het borderless maken van je form in een visuele plugin of de alignment alClient maken. Op zich geen spannende zaken, maar makkelijk als het voor je geregeld wordt.
- Het creëren van plugins wordt ondersteund door wizards. Hierbij worden templates gebruikt, die door de ontwikkelaar kunnen worden aangepast.
- Autorisatie op gebruik van een plugin is ingebouwd. Een gebruiker kan op grond van zijn profiel al dan niet toegang krijgen tot een plugin.
- Remote autoupdate wordt gefaciliteerd. Het uitleveren van updates wordt hierdoor vereenvoudigd.
- Hydra biedt integratie met REM Objects SDK, een product voor het bouwen van services (o.a. SOAP).
Het bovenstaande kan natuurlijk ook allemaal gerealiseerd worden met bpl’s maar de hoeveelheid code zal hiervoor aanzienlijk meer zijn.
Een minpunt aan het framework is de mogelijkheid om zowel object- als interface-referenties naar een plugin te hebben. Dit kan leiden tot moeilijk te achterhalen runtime geheugenfouten vanwege het automatisch opruimen van objecten bij reference counting in geval van interfaces. Hier is dus alertheid van de ontwikkelaar vereist: probeer de twee typen referenties niet met elkaar te combineren, maar communiceer altijd via een interface met je plugin.
Conclusie
Het Hydra framework faciliteert ons bij het integreren van onze applicaties, waarbij de verschillende modules toch zoveel mogelijk ontkoppeld blijven. Daarnaast biedt het de mogelijkheid om aan andere systemen te koppelen en daarbij de problematiek van die koppeling geconcentreerd in een plugin te houden.
De kwaliteit van de interfaces tussen de host en de plugins en tussen de plugins onderling is van doorslaggevend belang voor het succes van de integratie. Besteed daar dus de nodige aandacht aan. Een interface is een contract, dat je op een gegeven moment niet meer zo makkelijk kan wijzigen.
Als u in de praktijk toepassing van plugins overweegt, is het Hydra plugin framework een goede kandidaat. Hydra is beschikbaar voor Delphi 6, 7 en 2005 (Win32), Kylix 3 en voor eind dit jaar staat een .NET variant gepland.
Literatuurverwijzingen