vierseitig

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