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