Realisierung verteilter Anwendungen: Teil 5 Beim vorigen Mal: Objektmigration (Voyager) Spontane Vernetzung (Jini) Inhalt heute Dynamische Datenbankanfragen (JDBC) Mehrschichten-Architekturen Lernziele: Grundlagen von JDBC zum Datenbankzugriff Motivation von Mehrschichten-Architekturen alf Möller, Universität Hamburg, Fachbereich Informatik
40
Embed
Realisierung verteilter Anwendungen: Teil 5 zBeim vorigen Mal: yObjektmigration (Voyager) ySpontane Vernetzung (Jini) zInhalt heute yDynamische Datenbankanfragen.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Realisierung verteilter Anwendungen: Teil 5
Beim vorigen Mal: Objektmigration (Voyager) Spontane Vernetzung (Jini)
Inhalt heute Dynamische Datenbankanfragen (JDBC) Mehrschichten-Architekturen
Lernziele: Grundlagen von JDBC zum Datenbankzugriff Motivation von Mehrschichten-Architekturen
Ralf Möller, Universität Hamburg, Fachbereich Informatik
Dienste in einer Umgebung
Internet
gateway
PDA
service
Music service
serviceDiscovery
Alarm
Camera
Guestsdevices
LaptopTV/PC
Hotel wirelessnetwork
Jini: Registrierung
Jini: Lookup und Leasing
Dienste: Beispiel Baseball
public class Ball extends UnicastRemoteObject implements RemoteBall ServiceIDListener { public Ball throws RemoteException { super(); } public void serviceIdNotify(ServiceID id) {
System.out.println("ServiceId is " + id); }
public hit() { System.out.println("Ball has been hit.")}
}
Das Anmelden von Diensten (2) public class BallStarter {
public static void main(String[] args) {try {
System.setSecurityManager(new RMISecurityManager ()); RemoteBall ball = new Ball(); LeaseRenewalManager renewal = new LeaseRenewalManager(); Entry[] attributes = new Entry[]{ new Name("Jini enabled ball") }; JoinManager join = new JoinManager(ball, attributes, (Ball) ball, renewal); System.out.println("Ball started and registered at Lookup-Server");
} catch (Exception e) { e.printStackTrace(); } }
}
Lookup von Diensten: Suche durch Muster
Klasse ServiceTemplate und entspr. Konstruktor
Übergabe an Konstruktor entweder eines ServiceID-Objekts oder einer Service-Beschreibung:
einer Menge von Klassen oder einer Menge von Attribut-Wert-Paaren
Beispiel mit Service-Beschreibung als Klasse: Class[] classes = new Class[] { RemoteBall.class };ServiceTemplate template =
new ServiceTemplate(null, classes, null);
Zugriff auf den Dienstvermittler
Repräsentation des Dienstvermittlers als Objekt
Dienstvermittler enthält RegistraturSuchmuster wird an Registratur übergebenBeispiel:
LookupLocator l = new LookupLocator("jini://sun");
ServiceRegistrar r = l.getRegistrar(); RemoteBall b = (RemoteBall) r.lookup(template);
Aufruf eines Dienstes (1)
import java.rmi.*import net.jini.core.discovery.*;import net.jini.core.lookup.*;public class Bat {
public void play(RemoteBall ball) { try { ball.hit(); System.out.println("I hit the ball"); } catch (RemoteException e) { System.out.println(e) }}
Aufruf eines Dienstes (2)
public static void main(String[] args) { Bat bat = new Bat(); try { System.setSecurityManager(new RMI SecurityManager ()); LookupLocator locator = new LookupLocator("jini://sun"); ServiceRegistrar registrar = locator.getRegistrar(); Class[] classes = new Class { RemoteBall.class }; ServiceTemplate template = new ServiceTemplate(null,