Ich • Prof. Dr. Stephan Kleuker, geboren 1967, verheiratet, 2 Kinder • seit 1.9.09 an der FH, Professur für Software-Entwicklung • vorher 4 Jahre FH Wiesbaden • davor 3 Jahre an der privaten FH Nordakademie in Elmshorn • davor 4 ½ Jahre tätig als Systemanalytiker und Systemberater in Wilhelmshaven Komponentenbasierte Softwareentwicklung Prof. Dr. Stephan Kleuker Fachhochschule Osnabrück • [email protected], Raum SI 0109 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 1 Ablauf Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 2 Verhaltenscodex • 2h Vorlesung + 2h Praktikum = 5 CP • Praktikum: – 75% Anwesenheit = (Übungsblatt vorliegen + Lösungsversuche zum vorherigen Aufgabenblatt) – 12-13 Übungsblätter mit jeweils 8 Punkten (Σ ≥ 100) – Praktikum mit 75 oder mehr Punkten bestanden • Vorlesung: Projektaufgabe (Kenntnisse aus der Vorlesung anwenden + eigene Untersuchungen, 2-3 Studis) • Folienveranstaltungen sind schnell, bremsen Sie mit Fragen • von Studierenden wird hoher Anteil an Eigenarbeit erwartet • • • • Rechner sind zu Beginn der Veranstaltung aus Handys sind aus Wir sind pünktlich Es redet nur eine Person zur Zeit • Sie haben die Folien zur Kommentierung in der Vorlesung vorliegen, ab So-Abend mit Aufgaben im Netz, Aufgabenzettel liegen in der Übung vor (Ihre Aufgabe) http://www.edvsz.fhhttp://www.edvsz.fh-osnabrueck.de/kleuker/index.html • Probleme sofort melden • Wer aussteigt teilt mit warum Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 3 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 4 Minimale Grundvoraussetzungen Konzept der Lehrveranstaltung • Gute Programmierkenntnisse in Java (z. B. Polymorphie) • Gute Kenntnisse in objektorientiertem Design (z. B. einfache Pattern, wie Observer-Observable bzw. Model-ViewController) • Ordentliche Kenntnisse in der Datenbankmodellierung (ERModelle und deren Übersetzung in Tabellen) • Ordentliche Kenntnisse des Transaktionsbegriffs • Ordentliche Kenntnisse der Problematiken verteilter Systeme (z. B. Deadlock, Livelock, synchronized) synchronized • Grundkenntnisse HTML/HTTP Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker • Zentrale, sich immer wiederholende Ideen des Komponentenansatzes verstehen • Zentrales Beispiel: Java Enterprise Edition (JEE) (u. a. Enterprise JavaBeans EJB); ein zentraler Jobmotor im Enterprise-/Web-Bereich • Ergänzung um Darstellungs- und Verknüpfungsschichten (z. B. JavaServer Pages (JSP), JavaServer Faces (JSF)) • Vorlesung: Vermittlung grundlegender Konzepte (20% mit denen 80% erledigt werden) • Praktikum: konkrete Umsetzung der Vorlesungsinhalte; Selbststudium weiterer Teilbereiche 5 Themengebiete ( erste Planung ) Prof. Dr. Stephan Kleuker Prof. Dr. Stephan Kleuker 6 Literatur 0 Grundlagen 1 Historie und Ziele der Softwareentwicklung 2 JavaBeans als Komponenten 3 Java Persistence API (JPA) 4 Servlets 5 JavaServer Pages (JSP) 6 JavaServer Faces (JSF) 7 Enterprise JavaBeans (EJB) 8 Reflection 9 Dependency Injection 10 RMI (Remote Method Invocation) Komponentenbasierte Software- Entwicklung Komponentenbasierte Software- Entwicklung • DAS Buch gibt es nicht, aber viele passende Bücher / Internetquellen für Teilthemen • Sun, The Java EE 5 Tutorial, 2008, http://java.sun.com/javaee/5/docs/tutorial/doc/ • Oliver Ihns, Dierk Harbeck, Stefan M. Heldt, und Holger Koschek, EJB 3 professionell, Dpunkt Verlag , 2007 • Thomas Stark, Java EE 5.0, Addison-Wesley, 2006 • Weitere: wird konkret zum jeweiligen Kapitel angegeben 7 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 8 0. Grundlagen Erinnerung : XML ( 1 / 2 ) • XML-Erinnerung • Datenbanken – ER-Modellierung – Tabellenableitung – SQL – JDBC – Transaktionen • Design-Pattern Observer-Observable • Java Naming and Directory Interface (JNDI) • eXtensible Markup Language • strukturierte maschinen- und ansatzweise menschenlesbare Informationsbeschreibung • Processing Instruction am Anfang (evtl. mit encoding-Info) <?xml version="1.0"?> • Aufbau eines Elements mit Start- und End-Tags als Klammer <Elementname> Inhalt </Elementname> • Inhalt kann wieder aus Elementen bestehen, es ergibt sich Baumstruktur • Elemente können Attribute enthalten <Elementname att1="bla" att2="blubb" > Inhalt </Elementname> Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 9 Erinnerung : XML ( 2 / 2 ) 10 • Relationen (Tabellen) beschreiben einfache Entitäten (Stammdaten) • Relationen beschreiben Verknüpfungen zwischen Entitäten (-> Fremdschlüssel) <Elementname att1="bla" att2="blubb" /> • Kommentar <!-- Isch bin ähn Gommenta --> • • • • • • weitere Möglichkeiten, wie Querverweise • Neben reiner Syntax kann auch die erlaubte inhaltliche Struktur spezifiziert werden (DTD: Document Type Definition), XML-Schema • Viele spannende Werkzeuge zur XML-Verarbeitung Prof. Dr. Stephan Kleuker Prof. Dr. Stephan Kleuker Erinnerung : Relationale Datenbanken • Elemente, die maximal Attribute, aber keinen Inhalt haben, können verkürzt geschrieben werden Komponentenbasierte Software- Entwicklung Komponentenbasierte Software- Entwicklung Modellierung mit ER-Diagramm Einfache Übersetzung in Tabellen Effizienter Zugriff mit SQL ACID-Transaktionen Zugriff von Java mit JDBC • Wir nutzen JavaDB (Apache Derby) http://developers.sun.com/javadb/ 11 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 12 Studenten besuchen Vorlesungen ( 1 / 5 ) Student Hoert Vorlesung CREATE TABLE Student( matnr INTEGER, name VARCHAR(16), semester VARCHAR(6), CONSTRAINT PK_Student PRIMARY KEY(matnr) ); matnr name semester matnr modulnr modulnr titel 42 Ute WiSe09 42 6942 6942 OOAD 3 43 Uwe WiSe09 42 6943 6943 DB 2 44 Urs SoSe10 43 6942 6944 Java 1 Komponentenbasierte Software- Entwicklung Studenten besuchen Vorlesungen ( 2 / 5 ) semester Prof. Dr. Stephan Kleuker INSERT INTO Student VALUES(42,'Ute','WiSe09'); INSERT INTO Student VALUES(43,'Uwe','WiSe09'); INSERT INTO Student VALUES(44,'Urs','SoSe10'); 13 Studenten besuchen Vorlesungen ( 3 / 5 ) 14 CREATE TABLE Hoert( Matnr INTEGER, Modulnr INTEGER, CONSTRAINT PK_Hoert PRIMARY KEY (MatNr,Modulnr), CONSTRAINT FK_Hoert1 FOREIGN KEY (Matnr) REFERENCES Student(Matnr), CONSTRAINT FK_Hoert2 FOREIGN KEY (Modulnr) REFERENCES Vorlesung(Modulnr) ); INSERT INTO VORLESUNG VALUES(6942,'OOAD',3); INSERT INTO VORLESUNG VALUES(6943,'DB',2); INSERT INTO VORLESUNG VALUES(6944,'Java',1); Prof. Dr. Stephan Kleuker Prof. Dr. Stephan Kleuker Studenten besuchen Vorlesungen ( 4 / 5 ) CREATE TABLE Vorlesung( modulnr INTEGER, titel VARCHAR(10), semester INTEGER, CONSTRAINT PK_Vorlesung PRIMARY KEY(modulNr) ); Komponentenbasierte Software- Entwicklung Komponentenbasierte Software- Entwicklung INSERT INTO Hoert VALUES(42,6942); INSERT INTO Hoert VALUES(42,6943); INSERT INTO Hoert VALUES(43,6943); 15 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 16 Studenten besuchen Vorlesungen ( 5 / 5 ) Erinnerung : ACID - Transaktionen public static void main(String[] s) { try { Connection con = DriverManager.getConnection( "jdbc:derby://localhost:1527/Hochschule", "kleuker", "kleuker"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM Student"); while (rs.next()) { System.out.print(rs.getInt(1) + ": " + rs.getString(2)+" Start:" + rs.getString(3)); } con.close(); } catch (SQLException e) { e.printStackTrace(); 42: Ute Start:WiSe09 } 43: Uwe Start:WiSe09 } 44: Urs Start:SoSe10 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 17 Atomicity (Atomarität) Transaktionen werden entweder ganz oder gar nicht ausgeführt Consistency Transaktionen überführen die Datenbank (Konsistenz) Isolation (Isolation) Durability (Dauerhaftigkeit) Komponentenbasierte Software- Entwicklung von einem konsistenten Zustand in einen anderen konsistenten Zustand Nebenläufige (gleichzeitige) Transaktionen laufen jede für sich so ab, als ob sie alleine ablaufen würden. Die Wirkung einer abgeschlossenen Transaktion bleibt (auch nach einem Systemausfall) erhalten. Prof. Dr. Stephan Kleuker 18 Design - Pattern Observer - Observable Transaktionen Zustände einer Transaktion • Es gibt Subjekte, für deren Zustand sich viele interessieren, (z. B. Nachrichtenkanäle) • Die Subjekte bieten die Möglichkeit, dass sich Interessenten anmelden (z. B. Kanal abonnieren) • Bei jeder Subjektzustandsänderung werden Interessenten informiert (neue Nachrichten) • Interessent muss sich bei Subjekt anmelden • Damit obiges Objekt weiß, wie Interessent angesprochen werden soll, muss Interessent Schnittstelle realisieren • Hinweis: Enge Verwandtschaft zu Model-View-Controller Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 19 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 20 Beobachter ( Observer – Observable ) Neu : Java Naming and Directory Interface Anmerkung: Gibt Varianten; diese ist C++-typisch • JNDI: flexible Anbindung sehr unterschiedlicher Systeme (Drucker, Filesystem, LDAP, Services eines Server), betriebssystemunabhängig • Sun spezifiziert API; andere Systeme müssen es realisieren • Grundidee: man kann unter festgelegten Namen bestimmte Objekte erhalten „Hey, JNDI-Realisierung, gib mit mal zu „datenbank“ passendes Objekt, das ich auf Datenbankklasse casten kann“ • Man kann über JNDI Eigenschaften der verwalteten Objekte abfragen (gelbe Seiten, directory service) • Literatur: http://java.sun.com/developer/technicalArticles/ Programming/jndi/index.html http://java.sun.com/products/jndi/tutorial/index.html Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 21 Prof. Dr. Stephan Kleuker 22 Konzept des JNDI - Ablaufes Konzept JNDI • Ansatz sollte von JDBC bekannt sein • Zusammenbasteln der Aufrufparameter (was will ich genau, was muss JNDI wissen), z. B. mit Properties oder HashTable • Zentral: Context.INITIAL_CONTEXT_FACTORY • Erstellung eines Zugriffs über ein Context-Objekt • Abfrage von Informationen über Context-Objekt; Ergebnisse vom Typ Object (zu casten) • Typischer Aufruf Object o = context.lookup(<name>) • Beispiel im Folgenden: Zugriff auf Dateisystem (geht auch über File-Klassen) • Benötigt fscontext.jar, providerutil.jar (fscontext-1_2-beta3.zip) Meine Java-Applikation nutzt JNDI-Interface JNDI-Realisierung „wildes System“ Komponentenbasierte Software- Entwicklung Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 23 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 24 Beispiel Beispiel public static void main(String[] args) { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); env.put(Context.PROVIDER_URL, "file:///arbeit/lib"); try { Context context = new InitialContext(env); Object ob = context.lookup("fscontext.jar"); System.out.println(ob); context.rename("test", "tast"); Object ob2 = context.lookup("tast"); System.out.println(ob2.getClass()); context.rename("tast", "test"); context.close(); } catch (NamingException ex) { System.out.println("Frust weil: " + ex.getExplanation()); } D:\ D:\arbeit\ arbeit\lib\ lib\fscontext.jar } class com.sun.jndi.fscontext.RefFSContext public static void main(String[] args) { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); env.put(Context.PROVIDER_URL, "file:///arbeit/lib"); try { Context context = new InitialContext(env); NamingEnumeration ne = context.listBindings(""); while (ne.hasMore()) { Binding b = (Binding) ne.next(); System.out.println(b.getName() + " :: " + b.getObject()); } context.close(); } catch (NamingException ex) { System.out.println("Frust weil: " + ex.getExplanation()); } fscontext.jar :: D:\ D:\arbeit\ arbeit\lib\ lib\fscontext.jar } providerutil.jar :: D:\ D:\arbeit\ arbeit\lib\ lib\providerutil.jar Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 25 Weitere Details zu JNDI • Informationen sind hierarchisch gruppiert (vergleichbar zum Dateisystem) • Nutzer kann neue Daten mit Hilfe von JNDI anlegen • Nutzer kann Daten über JNDI verändern • Nutzer kann sich anmelden, um über Änderungen von JNDIEinträgen informiert zu werden • JNDI bietet Möglichkeit zum Informationsaustausch zwischen Programmen • JNDI wird eher für statische Informationen genutzt (Funktionalität abfragen, Funktionalität anbieten) Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 27 } test :: com.sun.jndi.fscontext.RefFSContext@3a6727 Komponentenbasierte Software- Entwicklung Prof. Dr. Stephan Kleuker 26