Bob Swart (aka Dr.Bob)
MIDAS 2 N-Tier Ontwikkelingen

Dit paper is gebruikt tijdens mijn MIDAS sessis van de CttM'99, waarbij ik Delphi 4 Enterprise en MIDAS 2 heb toegepast. We zullen in dit artikel een ActiveForm als Client gaan maken (eerst "fat" client, later "thin" client), en een "gewone" database toepassing als "fat" Server. De TClientDataSet component zal een sleutelrol vervullen bij het verbinden van de thin client met de fat server (gebruikmakend van MIDAS of CORBA), zoals we in de loop van dit artikel zullen zien.

ActiveForm Fat Client
Laten we beginnen met een "normale" ActiveForm. Start Delphi 4, kies de File | New menu optie, selecteer "ActiveForm" uit de "ActiveX" tab van de Object Repository, en start een ActiveForm project genaamd SDGN:

Merk op dat - vergeleken met dezelfde dialoog in Delphi 3 - we nu het Threading Model kunnen specificeren (dat default op Apartment staat). Dit is nodig om Internet Explorer 4 te kunnen ondersteunen, die eist dat ActiveX controls (zoals ActiveForms) zich aan het Apartment Threading Model conformeren. Dit is dus ook de reden waarom ActiveForms geschreven in Delphi 3 niet werken in Internet Explorer 4. Verder kies ik voor de optie "Include Version Information", zodat we straks makkelijk(er) nieuwe versies van de SDGN.ocx kunnen laten gebruiken door Internet Explorer.
Als we op de OK-knop drukken genereert Delphi 4 een hoop code voor ons, waaronder een leeg (Active)Form. Zet een TTable component op dit ActiveForm, geef de DatabaseName de waarde DBDEMOS, de TableName de waarde BIOLIFE.DB (inderdaad, dezelfde die we altijd gebruiken) en dubbelklik op de TTable component op de Fieldseditor op te starten. Klik met de rechtermuisknop eenmaal in de Fieldseditor, en kies voor "Add all fields", waarna we alle velden uit de BIOLIFE tabel kunnen zien:

Selecteer alle velden uit de Fieldseditor, en sleep ze naar de ActiveForm (laat ze linksbovenin vallen, zodat ze netjes verdeeld worden over de ActiveForm). Voor ieder veld uit de table wordt nu automatisch een label en data-aware edit control gegenereerd (en netjes onder elkaar). Merk op dat Delphi 4 ook automatisch een DataSource component heeft gegenereerd als "verbindingsstukje" tussen de table en de data-aware controls. Om de layout van de ActiveForm een beetje mooi te maken schuif ik meestal de DBGraphic control op naar rechtsboven, en zet er tenslotte nog een DBNavigator control bij (die ik dan met de hand moet verbinden met de DataSource component).
Al met al ziet de ActiveFormSDGNX er tijdens design-time (met Active table) er als volgt uit:

Deze ActiveForm kunnen we op de gebruikelijke manier "deployen" in een web browser zoals Internet Explorer. Hiervoor moeten we eerst de Web Deployment Options invullen, en vervolgens daadwerkelijk Web Deploy uitvoeren (zie ook mijn artikel in SDGN Magazine #44, pagina's 17 t/m 21).

Het grote nadeel van bovenstaande ActiveForm is echter het feit dat de BDE (Borland Database Engine) nodig is op de client machine, en dat hiermee in deze opzet ook alleen maar een lokale tabel benaderd wordt. Niet echt een "groupware" oplossing. Bovendien nauwelijks bruikbaar in een internet omgeving, waar lang niet iedereen de BDE op zijn machine zal hebben (SDGN leden natuurlijk wel, maar lang niet al onze "klanten"). Daarom gaan we nu kijken naar een manier om van deze "dikke" ActiveForm een "dunne" client te maken door de BDE te elimineren (en meteen gebruik te maken van data op een centrale server)...

Remote DataModule Server
Laten we nu de andere kant van het verhaal bekijken: een database server die de tabel BIOLIFE vanaf een remote web server kan aanbieden. Open de Project Manager, en start een nieuw (gewoon) projekt. We gaan hier een remote data module aan toe voegen, te vinden in File | New op de "Multitier" tab:

Merk op dat we kunnen kiezen voor een CORBA Data Module (als we CORBA willen gebruiken), een MTS Data Module (voor Microsoft Transaction Server) of een "standard" Remote Data Module (voor MIDAS, en uitbreidbaar met CORBA, zoals we zullen zien). We kiezen hier dus voor de normale Remote Data Module (met als naam BiolifeServer), en krijgen een nieuwe datamodule die zich in niets lijkt te onderscheiden van een gewone data module. Totdat we een kijkje nemen in de source code, en zien dat er behalve de TDataModule class, ook van een interface class afgeleid wordt.

Op de Remote Data Module kunnen we nu een TTable component plaatsen die we laten wijzen naar de BIOLIFE table van DBDEMOS (net als in de ActiveForm van vorig voorbeeld). Deze keer willen we de TTable echter exporteren naar "client" toepassingen, en hiervoor hebben we nog een Provider component nodig uit de Midas tab van Delphi 4. Zet de TProvider component naast de TTable component, en geef de DataSet property de waarde Table1. Nu moeten we deze Provider nog fysiek "exporteren" naar de buitenwereld, en dat doen we door met de rechtermuisknop op de Provider component te klikken, en de optie "Export Provider1 from data module" te kiezen.

Er wordt nu wederom (achter de schermen) code gegenereerd die ervoor zorgt dat we straks als client aan deze MIDAS server kunnen gaan hangen, en de data uit Table1 (de BIOLIFE tabel) kunnen benaderen.
Het enige wat we nog moeten doen aan deze MIDAS server is het bewerken van de main form met een mooie tekst (label component) zodat we altijd herkennen dat de juiste MIDAS server opgestart is (of wordt). Een label met mooie kleur geeft samen met de titelbalk van de main form netjes aan dat dit onze BIOLIFE.DB MIDAS server is:

Een druk op de RUN knop zorgt er nu voor dat de BIOLIFE MIDAS Server gaat draaien, en hierdoor (bij de eerste keer) automatisch geregistreerd wordt op de huidige machine. Dit is voldoende om de server weer af te kunnen sluiten - door de registratie zal een behoeftige client straks automatisch deze server kunnen vinden (maar dat zien we in het volgende stukje nog wel).

ActiveForm Thin Client
Gebruikmakend van de BIOLIFE MIDAS Server die we net hebben gemaakt, gaan we nu de "dikke" ActiveForm omtoveren tot een ware "thin client"; dus zonder de BDE nog langer nodig te hebben. Open het ActiveForm project weer, en verwijder de TTable component. Haal meteen ook de DBTables unit uit de uses clause, anders hebben we nog steeds de BDE nodig (ook al gebruiken we geen tables meer).
Zet vervolgens een TClientDataSet en TDCOMConnection component (uit de MIDAS tab) op de ActiveForm. Deze twee zullen samen de funktie van de oude TTable overnemen. Selecteer de DCOMConnection component, ga naar de Object Inspector en click op het pijltje bij de "ServerName" property. Dit laat alle MIDAS Servers zien die op de huidige machine geregistreerd zijn, waaronder de BIOLIFE MIDAS Server die we zojuist gemaakt en gedraaid hebben. Selecteer de juiste MIDAS Server, waarna de ServerGUID automatisch zal worden ingevuld. Verbind vervolgend de RemoteServer property van de TClientDataSet component met de TDCOMConnection component, en klik op het pijltje bij de property "ProviderName" van de TClientDataSet. Deze aktie zal tot gevolg hebben dat we van de BIOLIFE MIDAS Server dynamisch willen gaan bepalen welke tabellen of queries allemaal "ge-provide" worden. Om dit te weten te komen zal de server gestart moeten worden, en we zien dan ook de speciale main form opkomen. We kunnen nu uit de drop-down combobox in de Object Inspector kiezen voor Provider1 die aan de BIOLIFE tabel hangt in de Remote Data Module van vorig voorbeeld. Het enige wat de nu nog moeten doen is de DataSet property van de DataSource component laten wijzen naar de TClientDataSet, en de Active property van de TClientDataSet op True zetten...

We zien wederom de data uit de BIOLIFE.DB tabel in de ActiveForm, maar deze keer heeft de ActiveForm geen BDE meer nodig, doch slechts de DBCLIENT.DLL die de MIDAS technology bevat (zie http://www.borland.com/midas voor meer informatie over de bestanden die deel uitmaken van MIDAS). Veel makkelijker te distribueren - ook over het internet - en veel eenvoudiger te configureren (slechts één extra bestand dat we moeten deployen naast onze ActiveForm).

Conclusie
Dankzij MIDAS en de mogelijkheid tot het ontwikkelen van echte N-tier toepassingen kunnen we ActiveForms nu wel op het internet toepassen. MIDAS is de middle-ware die echter op meerdere plaatsen gebruikt kan worden (en niet alleen voor Delphi).
Inmiddels is ook MIDAS 3 beschikbaar - nog krachtiger en vooral veel goedkoper!

Meer Informatie
Mocht iemand nog vragen, opmerkingen of suggesties hebben, dan hoor ik die het liefst via . Voor meer informatie verwijs ik graag naar de MIDAS website van Borland.


This webpage © 1999-2006 by webmaster drs. Robert E. Swart (aka - www.drbob42.com). All Rights Reserved.