Het is opvallend hoe vandaag binnen computer netwerken de grens tussen client en server gaandeweg vervaagt om plaats te maken voor een nieuwe vorm van gedistribueerde programma's. Door de enorme toename in performantie van de modale PC is de zogenaamde client immers reeds in staat om zuivere netwerk programma's zoals FTP- en WWW-servers te ondersteunen. Anderzijds blijven er natuurlijk een hele reeks diensten over die niet lokaal kunnen aangeboden worden en die toch een hoge graad van interactiviteit langs de client-kant vereisen. Een voorbeeld hiervan zijn de talrijke search engines op het internet: door hun omvang en algemeenheid leveren ze minder relevante informatie op zodat een intelligente interactie met de eindgebruiker onontbeerlijk wordt. Denken we hierbij aan een adaptieve filter die tijdelijk lokaal wordt geïnstalleerd om relevante informatie te herkennen en die nauw samenwerkt met de eigenlijke search engine. Een ander voorbeeld zijn web crawlers: aangezien deze vanuit een lokale machine het internet doorlopen geeft dit aanleiding tot een spectaculaire verspilling van de beschikbare bandbreedte. Eigenlijk moet men dus stellen dat de enorme toename in stabiliteit en performantie van de hardware een drastische terugloop in de verhouding aantal clients/aantal servers met zich meebrengt.
Op het gebied van de software architectuur treffen we in dit kader de grootste afwijkingen van het traditionele client/server beeld; Java applets die delen van de programmatuur van een traditionele server exporteren naar de client zijn het best gekende voorbeeld. Nochtans zijn er reeds verschillende resultaten in de zoektocht naar een meer symmetrische structuur in gedistribueerde systemen: SUN en IBM ontwikkelen respectievelijk zogenaamde servlets [20] en aglets [17]. De visie die hierbij ontstaat is er een van ver doorgedreven uniformiteit: alle processen binnen een dergelijk netwerk zijn in hetzelfde medium uitgedrukt. Daarom nemen wij ons hier voor toekomstige gedistribueerde systemen te beschouwen als dynamische omgevingen waarbinnen mobiele software agents met elkaar en met menselijke gebruikers kunnen communiceren. 1
De voornaamste reden om de notie van mobiele software in overweging te nemen is de reductie van nodeloze communicatie binnen een groot netwerk. In een systeem zoals het internet, waarbij een immens groot aantal machines op een niet reguliere manier met elkaar verbonden zijn kan het reactievermogen van agents, dat wil zeggen persistente en autonome software componenten, verhoogd worden door ze ook mobiel te maken. Zo kan bijvoorbeeld de mobiliteit van een menselijke gebruiker weerspiegeld worden in de mobiliteit van een persoonlijke agent die hem of haar op het internet vertegenwoordigt.
Enerzijds is er dus het probleem van distributie, maar anderzijds is er ook de push die de huidige technologie geeft. Krachtige computers en netwerken laten toe het performantieverlies van virtuele machine (VM) technologie te accepteren om de voordelen ervan te kunnen uitbuiten.
In zijn thesis `Language support for Mobile Agents' [9] beschrijft Frederick Colville wat een programmeertaal nodig heeft en welke voorzieningen aangaande taalconstructies en taalimplementatie aangenaam zijn als we zelf een agent framework willen programmeren. Laat ons hierover even uit wijden.
In deze thesis willen we testen hoe goed we in staat zijn dergelijk mobiele agents te implementeren met behulp van Java. Hiertoe zullen we dus de voor- en nadelen van bestaande agent systemen moeten onderzoeken. Aangezien dit nog een jonge technologie is die nog niet op punt gebracht is, is er ongetwijfeld plaats voor verbetering. We zullen trachten een aantal problemen zoals location transparency en communicatie te behandelen door het bouwen van een eigen agent systeem.
Het programmeren van agents in dit framework zou moeten overeenkomen met het expliciteren van de objecten die we ontdekken in een . De gemakkelijkste wijze om hierover te redeneren is te denken aan diensten die iemand nodig heeft, aan diensten die iemand aanbied. Beschouw een agent als een representatie van de wensen van een gebruiker.
In het eerste deel onderzoeken we een aantal agent systemen die in Java geprogrammeerd zijn. Hierbij trachten we de voordelen en nadelen van elk systeem grondig af te wegen. Om dit te kunnen doen diepen we eerst allerhande aspecten van agents uit en creëren we het nodige referentiekader. Naderhand bespreken we in hoeverre de Java virtuele machine en zijn bijhorende taal voorzieningen bieden voor de ontwikkelingen van een dergelijk systeem.
Na de literatuurstudie zullen we in het tweede deel een eigen framework ontwikkelen dat de voordelen van de bekeken systemen tracht te integreren. Speciale aandacht zal hierbij worden geschonken aan location transparency en persistentie.
Om de leesbaarheid te verhogen zullen we, als we code in de tekst voegen, enkel het essentiële overhouden. Constructors die onmiddellijk hun super aanroepen, try-catch clauses en dergelijke worden niet vermeld. URL's en gelijkaardige namen worden sans serif gezet. Bijvoorbeeld http://ketchup.rave.org/~werner Klassenamen en methodenamen worden altijd in typewriter mode geprint. We nemen de conventie van Java en SmallTalk over en laten elke klassenaam met een hoofdletter beginnen; methodenamen laten we van start gaan met een kleine letter. Bijvoorbeeld: object myDictionary is een instantie van de klasse MyDictionary.
Deze thesis is niet in perfect algemeen Nederlands geschreven omdat sommige termen onvertaalbaar zijn zonder een onverstaanbare tekst over te houden. Waar we konden hebben we Nederlands op een consistente wijze gehanteerd. Vaktermen en code hebben we in hun standaardtaal, het Engels, gelaten. Zo nu en dan wordt zowel het Nederlands als het Engels voor een bepaald woord gebruikt, bijvoorbeeld `message' of `bericht'. Dit komt omdat we langzaam van een vakterm zoals `message passing' overgaan naar `het sturen van berichten'
Eerst en vooral zou ik Wolfgang De Meuter (Wolf) willen bedanken voor de uren die hij samen met mij gespendeerd heeft om mij van `char*' tot `String' te promoveren. Professor Theo D'Hondt is zo gul geweest mij de vrijheid te geven allerhande onderzoeksdomeinen af te schuimen vooraleer ik dit onderwerp ter hand heb genomen. Patrick Steyaert heeft de tekst nagelezen en een aantal sublieme meta-meta-hints gegeven aangaande het nut van agents. Niels Boyen, de distributie expert van het 10e, heeft mij een hoop papers in verband met data distributie aan de hand gedaan. Geert Lathouwers heeft mijn werk geregeld geminimaliseerd door telkens weer opnieuw een paper op te diepen die net hetgene uitlegt dat ik bedacht had. Technische ondersteuning heb ik gekregen van Joe Kiniry (de schrijver van de Infosphere) en Joachimm Baum (één van de ontwikkelaars van het Mole systeem). Carinne Lucas, Tom Lenaerts en Thomas Unger hebben de finale versie opgepoetst. Zeker wat betreft de LATEXcode moet ik Thomas dankbaar zijn.