Um das Ausführen der Services vom Client aus möglich
zu machen benutzt Jini das Java Remote Method Invocation (RMI). Um Dateien
und Code (z.B. Class-Files) zu übertragen wird in der Regel auch noch
ein HTTP-Server benötigt (falls nicht schon vorhanden wird mit Jini
ein rudimentärer HTTP-Server mitgeliefert).
Basis für die Sicherheit ist das Security Model
der JDK 1.2 um mit dem SecurityManager
den Zugriff auf Resourcen freizugeben oder zu beschränken.
package net.jini.core.discovery;
public Class LookupLocator {
LookupLocator(java.lang.String
url)
throws java.net.MalformedURLException;
LookupLocator(java.lang.String
host,int port);
}
Hier findet noch Discovery statt. Im ersten Fall wird nur die Syntax der URL überprüft und zweiten Fall nicht einmal das. Methoden von LookupLocatorsind:
String getHost();
int getPort();
Bei bekannter Adresse bekommt man hier natürlich keine neuen Information.
Die Methode getRegistrar erhält vom Lookup Service ein Objekt der Klasse ServiceRegistrar.
public ServiceRegistrar
getRegistrar()
throws java.io.IOException,
java.lang.ClassNotFoundException
Das ServiceRegistrar ist eine Abstrakte Klasse die vom Lookup Service implementiert wird. Es übernimmt die Rolle eines Proxys für den Lookup Service und ist das erste Object, das von einem Javaprozess (Lookup Service) zu einem anderen (Service oder Client) gesendet wird.
public ServiceRegistration
register(ServiceItem item,
long leaseDuration)
throws java.rmi.RemoteException
Es kann hier zwar die leaseDuration
angegeben
werden, endgültig entschieden über das Intervall, in dem das
Lease erneuert werden muss, wird aber beim Lookup Service.
Wichtig ist hingegen der Parameter ServiceItem.
package net.jini.core.lookup;
public Class ServiceItem
{
public
ServiceID serviceID;
public
java.lang.Object service;
public
Entry[] attributeSets;
public
ServiceItem(ServiceID serviceID,
java.lang.Object service,
Entry[] attrSets);
}
ServiceID ist
eine 128-Bit Zahl, die den Service weltweit eindeutig identifizieren soll.
Vergeben wird der Wert vom Lookup Service. Besitzt der Service bereits
eine ServiceID, dann soll er bei
einer erneuten Registrierung wieder benutzen.
Der zweite Parameter ist das Objekt, das registriert
wird. Das Objekt wird serialisiert und an den Lookup Service gesendet zu
Verwaltung. Dieses Objekt wird später vom Client geladen und benutzt,
um den Service anzuwenden.
Der dritte Parameter soll den Service weiter beschreiben,
damit ein Client ihn leichter aussuchen kann.
Die letzte Methode die der Service benutzen muss ist getLease(). Dadurch erhält er vom Lookup Service ein Lease-Objekt, das im erlaubt sein Lease zu erneuern oder abzubrechen.
Beispielcode für Service Registration: SimpleService.txt
public java.lang.Object
lookup(ServiceTemplate tmpl)
throws java.rmi.RemoteException;
Die Klasse ServiceTemplate beschreibt den Service und sieht dabei wie folgt aus:
package net.jini.core.lookup;
public Class ServiceTemplate
{
public
ServiceID serviceID;
public
java.lang.Class[] serviceTypes;
public
Entry[] attributeSetTemplates;
ServiceTemplate(ServiceID
serviceID,
java.lang.Class[] serviceTypes,
Entry[] attrSetTemplates);
}
Falls die serviceID
bekannt ist, dann sollte sie hier benutzt werden, andernfalls ist der Wert
Null.
Bei dem serviceTypes
die gesucht werden, handelt es sich sinnvollerweise entweder