AVO-Übung 1 Übungsszenario, Entwicklungswerkzeuge Andreas I. Schmied (andreas.schmied@uni-ulm.de) AspectIX-Team Abteilung Verteilte Systeme Universität Ulm WS2005 Allgemeines Übungsbetrieb Kalender-Szenario Server verwaltet Personen und Einträge Client-Anwendung für Zugriff Technologien aus der Vorlesung einsetzen, vergleichen Prüfungsrelevante und erweiternde Inhalte Eclipse-Projekte, z.t. aufeinander aufbauend Übungen benötigen i.a. Java 1.5, v.a. für typisierte Collections, z.b. List<Person>, enum for-konstrukt: for(person p: list) aktuelle Verbesserungen im Java-SDK Individuelle Korrektur nicht vorgesehen Fragen rechtzeitig stellen! Quellcodes i.a. auf Folien stark gekürzt andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 1
Allgemeines UML-Modell Overview avo Calendar title :String + user Person name :String users * * + entries Entry text :String when :Date + entry * + owner entryownership / personsentries + owner context personsentries inv justown: entry.owner = owner ReEntry every :Recurrence << enumeration >> Recurrence day :int week :int month :int year :int Created with Poseidon for UML Community Edition. Not for Commercial Use. andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 2 Eclipse Aufbau Eclipse 3.1.1 von http://www.eclipse.org kein Support für andere Umgebungen Workspace-Verzeichnis mit Projekten Diverse Perspektiven Java, Resource, Debug,... Editor + Sammlung von Views (spez. Einzelfenster) Weitere Views in Menü Window/Show View Wichtige Views: Package Explorer, Console, Problems, Progress, Outline,... Launcher im Debug- und Start-Modus, für externe Programme andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 3
Eclipse Java-Perspektive (1) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 4 Eclipse Java-Perspektive (2) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 5
Eclipse Resource-Perspektive (1) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 6 Eclipse Resource-Perspektive (2) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 7
Eclipse Erstes Projekt Übung als ZIP/JAR-Archiv auf Website kann ggf. mehr als ein Projekt enthalten Start- oder Testklassen Menü: File/Import/Existing Project.../Select archive file Projekt besteht aus Quellverzeichnissen (src, src-gen) Zielverzeichnis (class) Skripte, Shared Launchers mit Präfix avo (bin) Dokumentation (doc, doc-gen) Sonstiges (etc) Konfiguration.project,.classpath via Kontextmenü im Package Explorer andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 8 Eclipse Projekt-Eigenschaften andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 9
Eclipse Launcher andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 10 Eclipse External Tools Launcher Menü Run/External Tools/... Ausführen beliebiger Prozesse aus Eclipse Für Generatoren, Code-Prozessoren o.ä. RMI-Compiler für Java vor Version 1.5 aufrufen Hinweis für generierte Dateien in eigene Verzeichnisse! Quellcode: src-gen Javadoc: doc-gen andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 11
Aufgabe: Multi-Threading in Java im Folgenden mit MT abgekürzt mehrere Aktivitätsträger im selben Prozess simulieren Knoten im verteilten System... Ziel der Übung Sensibilisierung für nebenläufiges Arbeiten Koordinierung in Java Mehrere Benutzer sollen auf Kalender zugreifen Finden und Löschen der Einträge Anzahl der verbleibenden Einträge Starten im Menü Run/Run... Startklasse avo1.main Ausgabe in Konsole Prozess abschießen im Console View andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 12 Aufgabe: Multi-Threading in Java Code: Client.run() 1 while(active) {... 2 3 int sizepre = calendar.getentrycount(person); 4 Entry entry = calendar.getrandomentry(person); 5 6 if (entry!=null) { 7 calendar.removeentry(person, entry); 8 int sizepost = calendar.getentrycount(person); 9 10 if (sizepost!=sizepre 1) 11 log.warning(name+ removed nothing! ); 12 else 13 log.info(name+ removed entry: +entry); 14 } 15 else { 16 active=false; 17 log.info(name+ leaves: no entries left. ); 18 } 19 20 sleep(delay); 21 } andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 13
Debugging mit Eclipse Debugger vs. Logging-API (java.util.logging) Perspektive Debug Fehler finden Programmabläufe verstehen Start via Launcher im Menü Run/Debug... Eclipse-Debugger Variables, Expressions, Memory, Register, Breakpoints, Threads Breakpoints: Haltepunkte (siehe nächste Folien) Stepping Nicht Vergessen: Thread auswählen Schrittweites Weiterarbeiten Return, Step Over Menü Window/Pref.../Java/Debug/Step Filtering andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 14 Debugging mit Eclipse Debugging-Sitzung (1) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 15
Debugging mit Eclipse Debugging-Sitzung (2) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 16 Debugging mit Eclipse Breakpoint-Eigenschaften (1) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 17
Debugging mit Eclipse Breakpoint-Eigenschaften (2) andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 18 Aufgabe Installation Eclipse Java 1.5 integrieren: Menü Window/Preferences/Installed JREs/... Projekt importieren, ausführen Wo muss koordiniert werden? Debugging: Breakpoints + MT RMI-Portierung Server schreiben Calendar, Person als Remote-Klassen Entry als Wertobjekt-Klasse Client umschreiben Zugriff per RMI Was muss angepasst werden? andreas.schmied@uni-ulm.de AVO-Übung 1 (WS2005) 19