Realisierung verteilter Anwendungen: Teil 5
Ralf Möller, Universität Hamburg, Fachbereich Informatik
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
Dienste in einer Umgebung
Music
service
gateway
Alarm
service
Internet
Hotel wireless
network
Discovery
service
Camera
TV/PC
Laptop
PDA
Guests
devices
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 Registratur
Suchmuster wird an Registratur übergeben
Beispiel:
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, classes, null);
RemoteBall b = (RemoteBall) registrar.lookup(template);
bat.play(b);
} catch (Exception e) {
e.printStackTrace();
}
}}
Leasing
public interface Lease {
long getExpiration();
void renew (long duration) throws LeaseDeniedException,
UnknownLeaseException,
RemoteException;
void cancel() throws UnknownLeaseException,
RemoteException;
}
Vorher verwendete Klasse LeaseRenewalManager
erneuert Leasing-Verträge automatisch
Datenbanken in verteilten Systemen
Datenbanken zur Kopplung von verteilten Systemen
Weitverbreitet: Relationale Datenbanken
JDBC: Anbindung von Java an Relationale DBen
Java DataBase Connectivity
Entwicklung aus ODBC (Open DataBase Connectivity)
JDBC als Protokoll konzipiert
Bequemer für Nutzer durch API
Fester Bestandteil der Sprache Java
Aufbau und Struktur von JDBC : Treibermanager
Java Anwendung
JDBC Treibermanager
Datenbanktreiber A
Datenbanktreiber B
Aufbau und Struktur von JDBC: Treiberarten
JDBC-Treiber-API
JDBC/ODBC
Bridge-Treiber
Spezifischer
Treiber
ODBC-Treiber
Native Code
Universeller
Treiber
Native Code
Datenbank-API
Direkter
Treiber
Registrierung eines JBDC-Treibers
try {
Class.forName("org.gjt.mm.mysql.Driver")
} catch (ClassNotFoundException cnfe) {
System.out.println("Cannot load driver");
}
Auch: oracle.jdbc.driver.OracleDriver
Verbindungsaufbau zu Datenbank
DriverManager
Connection
Statement
Connection
Connection
Statement
Statement
ResultSet
ResultSet
Verbindungen
Connection con;
try {
con = DriverManager.getConnection(
"jdbc:odbc://vodka.fh-wedel.de/Db",
username,
password);
} catch (Exception e) {
System.out.println(e);
} ...
con.close();
Anfragen und Antworten
Statement stmt = con.createStatement();
String query = "SELECT * FROM Table";
ResultSet results = stmt.executeQuery(query);
Boolean bool = stmt.executeUpdate(
"INSERT INTO Table VALUES ('a', 'b', 'c')");
while (results.next()) {
String attr1=results.getString(1);
String attr2=results.getString(2);
System.out.println(attr1 + attr2);
}
Das Client-Server-Modell
Das Client-Server-Modell
Client-Software muß immer wieder neu
entwickelt werden
Spezielle Tools für spezielle Geräte
erforderlich
Software muß für jedes Gerät
installiert und konfiguriert werden
Das Client-Server-Modell
Clients greifen direkt auf
Unternehmensressourcen zu
Sicherheitsprobleme
Änderungen der Technologie kann Clients
ausschließen
Kapazitäts- und Verfügbar-keitserhöhung
schwierig
Enterprise Services
Enterprise Services
Neue Schicht zwischen Kunden und Ressourcen
Schnittstelle auf der Service-Ebene
Ansatzpunkt für Sicherheit, Lastverteilung und Fehlererholung
Enterprise Services
Komponentenorientierte Systemkonstruktion
Komponentenorientierte Systemkonstruktion
Komponentenorientierte Systemkonstruktion
Komponenten vs. Objekte
Instanzenbasierte Systemkonstruktion
Ereignisverwaltung
Suche und Einbettung von Komponenten
Spezifikation der Leistungen einer Komponente
Meta-Protokoll
Attributanzeige
Initialisierung
Nachfolgende Folien über JSP übernommen aus:
Database Integration using
JavaServer Pages (JSP)
Chád (shod) Darby
J9 CONSULTING
darby @ j-nine.com
Java Server Pages: RainForest - Video Store
Rain Forest - Video Store
What are Java Server Pages (JSP)?
A Java Server Page is
An HTML page with embedded Java code
Files have a .jsp extension
Loosely similar to server-side includes
JSP can be used to
Replace traditional CGI processing
Access enterprise services (RMI, CORBA, JDBC)
Create an HTML interface for web-based applications
Simple JSP File
simple.jsp
<html>
<body>
<h2>Welcome to the Weather Site</h2> <hr>
Today’s date is <%= new java.util.Date() %>
</body>
</html>
The Java code is placed inside of a “scriplet tag” <% … %>
How is the JSP file Processed?
Client
Web Server
1. File is loaded
HttpRequest
Web
Browser
JSP file
HTML Page
Client sends HttpRequest using URL of JSP
http://localhost:8080/simple.jsp
JSP returns a plain HTML page.
2. Compiled to servlet (only once)
3. Contents executed
4. Results included in HTML file
Output of simple.jsp
Output of simple.jsp
<html>
<body>
<h2>Welcome to the Weather Site</h2> <hr>
Today's date is Mon Mar 22 01:22:46 EST 1999
</body>
</html>
Result of
<%= new java.util.Date() %>
JSP Design Goals
Emphasize Components
Reusable code placed in components or JSP Beans
Allows separation of web page design from component
development
Web Page Designer
Component Developer
Java Expert
HTML Expert
JSP Design Goals (cont)
Provide a gateway to enterprise services
Sockets
Web Server
Socket Server
Client
Web
Browser
RMI
CORBA
JSP file
EJB
JDBC
DB
JSP Design Goals (cont)
Make dynamic web sites easy to build
JSP file is simply an HTML file
Embedded code can call reusable components for
dynamic content
A web page designer can create a dynamic page with
very little Java programming knowledge.
JSP…A Radical New Breakthrough?
Not really
Resembles Microsoft’s Active Server Pages (ASP)
So why JSP?
Would you rather program in VBScript or Java?
Gain full features of Java (networking, JDBC, etc)
Supported by many servers
Enterprise Java Beans (EJB)
Teile von einigen der nachfolgenden Folien wurden übernommen aus:
VL Anwendungssysteme
Gerald Weber
Und beim nächsten Mal ...
... gibt's mehr über:
Servlets
Multitier-Architekturen (J2EE)
Komponentenorientierte
Softwarekonstruktion (Beans)
Enterprise Java Beans