(JDBC), Mehrschichten Architekturen, Dynamische Seitengenerierung

Werbung
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
Herunterladen