Die Jini-Projektarbeit stellt die Fachprüfung "Softwaredesign und Computernetze" dar. Intention dieser Arbeit ist es, mit Hilfe spezieller Java-Klassen und -Dienste, welche eigentlich Jini darstellen, ein Netzwerk zu erstellen, in dem mehrere spezifische Dienste miteinander kooperieren sollen.

 
   
 

Es soll ein einfaches automatisierungstechnisches System - ein Förderband - als JINI-Anwendung entwickelt werden.

 
   
  Dabei soll die Zeit gemessen werden, die JINI und das Netzwerk zur Übertragung der Steuerungsinformation benötigt.  
   
  Das Förderband besitzt einen Motor und zwei Näherungsschalter, die die beiden Endpositionen eines transportierten Gegenstandes auf dem Förderband feststellen können. Die im Projektteam "JINI" zu entwickelnde Anwendung soll dieses System durch zwei JINI-Dienste realisieren:  
   
  1. Das Förderband als JINI-Service, das den Motor und die Näherungsschalter enthält, und in dem es nur eine einzige Methode controlMotor() gibt, die über das Netz aufgerufen werden kann.  
   
  2. eine Java-Anwendung als JINI-Dienstnehmer (Client) die controlMotor() zyklisch abwechselnd mit dem Parameter "links" oder "rechts" aufruft und so dafür sorgt, das ein imaginäres Werkstück zwischen den an beiden Enden des Förderbandes angebrachten Näherungsschaltern hin und her transportiert wird.  
     
  Die Komponenten des Beispiels und ihre Funktion:  
     
  Im Fogenden werden die Inhalte der einzelnen Klassen und ihre Funktion kurz erklärt.  
     
  Foerderband:  
     
  Diese Klasse wird als SERVICE Aufgerufen.
Sie registriert die in JiniInterface enthaltene Methode controlMotor() beim LookupService.
 
     
  JiniInterface:  
     
  Das Interface ist eine Schnittstelle zwischen CLIENT und SERVICE und beinhaltet die Methode controlMotor()
controlMotor()
bekommt die Laufrichtung als Integer und gibt die erreichte Endposition und die Laufzeit als Rückgabevektor (v) zurück.
 
     
  Motorsteuerung:  
     
  Die Klasse Motorsteuerung wird vom SERVICE Aufgerufen.
Von ihr müssen die stubs und skeletons erzeugt werden (Motorsteuerung_Stub.class und Motorsteuerung_Skel.class)
Sie beinhaltet die Methode controlMotor(), die vom Client ( Motorsteuerung ) aufgerufen wird.
In der Methode controlMotor() wird das eigentliche Förderband simuliert und die Laufzeit der Befehle über das Netzwerk ermittelt:
 
     
  Zeitlicher Ablauf in der Methode controlMotor():  
     
  controlMotor() merkt sich die Systemzeit (a) als erste Anweisung nach dem Aufruf.
Die von controlMotor() übergebene Richtungsvariable (x) links/rechts wird empfangen und zur Kontrolle auf dem Bildschirm ausgegeben.
Die neue Endposition wird gesetzt (linke/rechte Endposition erreicht).
controlMotor()
bildet bei jedem Aufruf die Differenz der beiden Zeiten (t = a-b) , wobei (b) der gespeicherte Wert vom vorhergehenden Aufruf ist.
Aus dieser Zeit können wir ersehen , wie lange es dauert um Information zwischen zwei JINI-Objekten im Netzwerk auszutauschen.
controlMotor() merkt sich die Systemzeit (b) als letzte Anweisung vor Ausführung seiner return-Anweisung.
Ein neuer Rückgabevektor (v) wird erzeugt, mit den Werten für die Zeit (t) und der neuen Endposition (position) beschrieben,und mit seiner return Anweisung (return v;) zurück an den Client gesendet.
 
     
  Foerderbandsteuerung:  
     
  Die Klasse Foerderbandsteuerung wird als CLIENT gestartet und ruft controlMotor() zyklisch und ohne Zeitverzögerung beim LookupService auf.
Sie gibt die im Rückgabevektor (v) von controlMotor() gespeicherten Informationen aus.
 
     
  Inhalt des CLIENT bzw. der Klasse Foerderbandsteuerung:  
     
  Initialisierung des Remote Method Invocation Securitymanagers.
Initialisierung des LookUp Service (hier muss der aktuelle Hostname eingetragen werden )
Definition eines Vektors (v) mit der Grösse 2.
Initialisierung der Richtungsvariablen ( links steht für Linkslauf, rechts für Rechtslauf )
Initialisierung einer While-Schleife, die Bestimmt, wie viele Zeitmessungen vorgenommen werden (10 in diesem Beispiel).
Aufruf der Methode controlMotor() auf dem Server. Der Methode wird die Laufrichtung als Integer übergeben, diese gibt anschließend die neue Endposition und die Laufzeit über das Netz, in Form eines Vektors zurück.
DasVektorelement, dass die Endposition enthält, wird von einem Objekt zurück in einen String konvertiert.
Die aktuelle Endposition wird ausgegeben.
Die Netzlaufzeit des letzten Durchgangs wird ausgegeben.