Middleware- und Komponentenprogrammierung Who needs Outlook? Ein verteiltes und komponentenbasiertes Projekt zur Kontakt- und Terminverwaltung im .NET Framework Claudia Vogel Stefan Hüttenrauch Tobias Queck Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 1 Gliederung Überblick über das Projekt Idee Architekturentscheidung Verwendete Design-Pattern Technische Details Einbinden von Assemblies Kommunikation mit der Datenbank per Remoting Tests mit CS-Unit / NUnit Präsentation Ausblick und Vergleich mit anderen Plattformen Die Arbeit im Team Vorgehensweise Probleme Erfahrungen für zukünftige Projekte Literatur Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 2 Überblick über das Projekt: Idee 1/3 Die Idee Ausgewählte Funktionen von Outlook als Komponenten realisieren Datenhaltung nötig: SQL-Datenbank; Kommunikation per Remoting Use-Case Kontakte verwalten <<includes>> <<extends>> Weltzeit anzeigen Komponenten auswählen <<extends>> Daten verwalten <<extends>> <<includes>> Termine verwalten <<extends>> Zeitspanne berechnen Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 3 Überblick über das Projekt: Idee 2/3 Einige Komponenten und ihre Funktionen Kontakte verwalten Kontakte verwalten <<includes>> <<extends>> Weltzeit anzeigen Weltzeit anzeigen Komponenten auswählen <<extends>> Daten verwalten <<extends>> <<includes>> Termine verwalten Termine verwalten <<extends>> Zeitspanne Zeitspanne berechnen berechnen Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 4 Überblick über das Projekt: Idee 3/3 Aufbauplan in FMC & '! ! "# $ % Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 5 Überblick über das Projekt: Architekturentscheidung Framework: Warum .NET ? Zusammenwirken der verschiedenen Sprachen erfahren C#, VB .NET, Visual C++, J# Jeder Entwickler kann seine ‚Lieblingssprache‘ wählen Systemvoraussetzungen Windowsplattform .NET Framework MyODBC 3.51.06 MySQL Server Version 1.4 Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 6 Überblick über das Projekt: Verwendete Design-Pattern Model-View-Controller Views durch die verschiedenen GUIs der Komponenten gegeben Prinzipiell hat jede View einen eigenen Controller, aber auch Komponentenübergreifende Nutzung möglich Modell in Form des DatabaseServer Façade Anbindung verschiedener Datenbanken möglich Proxy Durch Activator.GetObject() Singleton Singleton Object auf DatabaseServer-Seite Reflection .NET Reflection zum dynamischen Einbinden von Assemblies Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 7 Technische Details Einbinden von Assemblies Reflection using System; using System.Reflection; namespace MainComponent { public class Form1 : System.Windows.Forms { other stuff private void Form1_Load(object sender, System.EventArgs e) { IsMdiContainer = true; } private void loadComponent(String CompPfadAndName) { Assembly aktuelleComp = Assembly.LoadFrom(CompPfadAndName); Type[] TypesOfComp = aktuelleComp.GetTypes(); foreach(Type t in TypesOfComp) { Object obj = Activator.CreateInstance(t); if (obj is System.Windows.Forms.Form) { (obj as System.Windows.Forms.Form).MdiParent = this; (obj as System.Windows.Forms.Form).Show(); Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 8 Technische Details Kommunikation mit der Datenbank 1/2 – Remoting BeispielCode RemotingConfiguration.Configure("remoting.config"); SqlCommand = (IDatabase) Activator.GetObject(typeof(IDatabase), Url); <configuration> <system.runtime.remoting> <application> <service> <wellknown mode = "Singleton, type = "Database.SqlCommands, Database" url = "tcp://localhost:1234/DatabaseService" /> </service> <channels> <channel type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting" /> </channels> </application> </system.runtime.remoting> </configuration> Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 9 Technische Details Kommunikation mit der Datenbank 2/2 - MySQL DBMS “MySQL Server Version 1.4” Datenkonsistenz Datenhaltung Sicherheit (Authentifizierung) Datenverteilung (SQL DumpFiles) ODBC Connector als Schnittstelle zwischen .NET und DBMS Beispielcode OdbcConnection Connection = new OdbcConnection(ConnectParameter); Connection.Open(); OdbcCommand Command = new OdbcCommand(SqlQuery, Connection); DataReader = Command.ExecuteReader(); if (DataReader != null) DataReader.Close(); Connection.Close(); Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 10 Technische Details Tests Testverfahren manuelle Tests CS-Unit NUnit Komponententests DatabaseServer - Datenüberprüfung nach verschiedenen Befehlsfolgen Komponenten - ‘TestDummies’ anstelle einer Datenbankanbindung Main - Laden von DummyComponent Integrationstest BottomUp Verfahren Anbindung der Datenbank an die einzelnen Komponenten Einladen der Komponenten Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 11 Präsentation Sequenzdiagramm des Ladens der Terminverwaltungskomponente Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 12 Ausblick Ausblick: Funktionalität und Bedienkomfort der Komponenten erhöhen Weitere Komponenten Synchronisation paralleler Datenbankzugriffe Portabilität Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 13 Vergleich mit anderen Plattformen Wie siehts aus in Corba Server legt Instanz des Servant an Legt Referenz in IOR-File ab Client erzeugt Objekt aus IOR-File Wie siehts aus in Java: serialisierte JBs einbinden Ähnlich .NET Reflection ORB mySOrb = ORB.init(args, null); IImpl EofI = new IImpl(); private void loadLightBulb() { try { ObjectInputStream is = new ObjectInputStream(new FileInputStream("lb1.ser")); LightBulb bulb = (LightBulb)is.readObject(); Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut CORBAUtil.writeIOR (mySOrb, EofI, “Filename”); ORB myCOrb = ORB.init(args,props); Org.omg.CORBA.Object obj = CORBAUtil.readIOR(myCOrb, “Filename”); Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 14 Die Arbeit im Team: Vorgehensweise Brainstorming zu Inhalten Realisierungsvorstellungen festgehalten Getrennte Entwicklung der Komponenten und der Datenbankanbindung Gruppentreffen Probleme und Verbesserungsvorschläge diskutiert Eigene Erkenntnisse und Erfahrungen an das Team weitergegeben Anbindung der Komponenten an die DB Anbindung der Komponenten an die ‚Main‘ XP (meist zu zweit) Teilweise jeder für sich Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 15 Die Arbeit im Team: Probleme Das Problem mit der Zeit Alle unter einen Hut kriegen ist schwierig Zu viele Versionen und Änderungen gerade in der Schlussphase Wer hat die aktuellste Version Jeder schreibt an allem rum (Endphase) Konsistenzhaltung unübersichtlich und schwierig Keine Dokumentation von Veränderungen Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 16 Die Arbeit im Team: Erfahrungen für zukünftige Projekte XP für kleine Projekte gut geeignet Spart Zeit Erhöht Lerneffekt Ab drei Personen nicht mehr so gut geeignet, meist sitzt einer rum Dennoch: individuelle Arbeit ist nicht immer ersetzbar Vor allem bei Einarbeitung in neue Technologien Versionskontrolle nötig Änderungsbefugnisse vergeben Zeitplanung aufstellen, feste Termine frühzeitig planen Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 17 Literatur Microsoft Visual Studio .NET 2003-Dokumentation RAMMER, Ingo: Advanced .NET Remoting. Springer Verlag GmbH & Co. KG Heidelberg, 2002 WESTPHAL, Ralf: .NET kompakt. Spektrum akademischer Verlag GmbH Heidelberg/Berlin, 2001 HOFMANN, JOBST, SCHABENBERGER: Programmieren in COM und CORBA. Carl Hanser Verlag München/Wien, 2001 <http://www.csunit.org/index.php> (Stand 10.06.2004) <http://gd.tuwien.ac.at/languages/java/GoToJava2/html/k100275.html #sectlevel4id044003004002> (Stand 28.06.2004) Professor Andreas Polze; Lehrstuhl für Betriebssysteme und Middleware Hasso-Plattner-Institut Claudia Vogel, Stefan Hüttenrauch, Tobias Queck Middleware- und Komponentenprogrammierung : Who needs Outlook? 18