Java Pet Store vs. .NET Pet Shop Seminar Software-Entwurf Jörg Eggermann <[email protected]> Gliederung • • • • Motivation Einordnung Einschub - Enterprise Java Beans Anwendungen in der Übersicht – Java Pet Store – .NET Pet Shop • Vergleich – Hintergründe & Geschichte – Vergleich – Kritik am Vergleich • Zusammenfassung Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 2 Motivation • .NET und J2EE führend für Webanwendungsentwicklung • Folge : Vergleich interessant • Durchgeführt an zwei Beispielanwendungen mit identischen Funktionen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 3 Einordnung Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 4 Enterprise Java Beans (EJB) - Kurzübersicht • Enterprise Java Bean – Software-Komponente, keine eigenständige Applikation – Funktioniert nur in EJB-Container • EJB-Container stellt Funktionalität zur Verfügung – Bsp.: Transaktionsverwaltung, Namensdienst, Multithreading – Anwendung steht im Vordergrund • Programmierer kümmert sich nur um Nutzung der Techniken • Technische Implementierung übernimmt Container • Ermöglicht effektives Programmieren • EJB Arten – Entity Beans – Session Beans Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 5 Enterprise Java Beans (EJB) - Kurzübersicht • Entity Beans – Bieten Zugriff auf Daten aus einer Datenbank – Repräsentiert persistent gespeicherte Daten • Meist Datensätze • Zwei Arten – Container Managed Persistence (CMP) • Container verwaltet Zugriffe • Bietet Arbeitsersparnis und Geschwindigkeitsvorteile – Bean Managed Persistence (BMP) • Bean zuständig für Laden/Schreiben der Daten • Bietet Flexibilität Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 6 Enterprise Java Beans (EJB) - Kurzübersicht • Session Beans – Schnittstelle zwischen Geschäftsanwendung und Client – Stellt Client Methoden zur Verfügung • Versteckt Komplexität des Servers (Information Hiding) • Zwei Arten – Stateful • Speichert Zustandsinformationen über Bean Lebensdauer hinaus – Stateless • Speichert keine Zustandsinformationen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 7 Enterprise Java Beans – Codebeispiel Erinnert an Interface Methoden liefern Entity Beans zurück Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 8 Anwendungen in der Übersicht – Java Pet Store Java Pet Store 3-Tier Architektur Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 9 Anwendungen in der Übersicht – Java Pet Store Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 10 Anwendungen in der Übersicht – Java Pet Store • Verwendet fast alle Kern-Designpatterns von J2EE Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 11 Anwendungen in der Übersicht – .NET Pet Shop • • • 3 Tier Architektur Implementiert durch C# Klassen Klare Trennung UI - Business Logic – ASP.NET Web Forms für Kommunikation • Business Komponenten greifen durch ADO.NET auf Datenbank zu • Datenzugriffe getrennt vom Business Layer Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 12 Typischer Einkaufsvorgang bei beiden Programmen • • • Startbildschirm der beiden Programme Benutzer wählt Abteilung (Tierart) aus Auswahl ruft neue Seite auf Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 13 Typischer Einkaufsvorgang bei beiden Programmen • • Benutzer erreicht Vogelabteilung Auswahl eines Tieres möglich Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 14 Typischer Einkaufsvorgang bei beiden Programmen • • Detaillierte Informationen zur letzen Auswahl Möglichkeit Tier zu kaufen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 15 Typischer Einkaufsvorgang bei beiden Programmen • Einkaufswagen – Kauf überprüfen – Ggf. ändern – Bestellung abschließen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 16 Vergleich – Hintergründe und Geschichte Versions Übersicht • Mai 2001 – Java Pet Store • Oktober 2001 – .NET Pet Shop • Juli 2002 – Middleware Pet Store 2.0 • Optimierte Version auf Geschwindigkeit und Skalierbarkeit • Ergänzt um XML basierte Web-Services und verteilte DatenbankTransaktionen • September 2002 – .NET Pet Shop 2.0 • Nochmals optimierte Version mit Funktionsumfang von Pet Store 2.0 • Juni 2003 – .NET Pet Shop 3.0 Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 17 Vergleich – Lines of Code v1.5 UI Tier J2EE 3x größer • J2EE – bietet viel Beispielcode • • Design Pattern EJBs – Organisation von Servlets/JSP´s • .NET – nutzt ASP.NET Web Forms und User Controls • vereinfacht Webpage Konstruktion • spart Codezeilen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 18 Vergleich – Lines of Code v1.5 Middle Tier J2EE 6x größer • J2EE – Design Pattern – EJBs – Methoden für Datenbankzugriffe verschiedener Hersteller • .NET – wenig Code da SQL Teil im Data Tier – nur Business Logic hier Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 19 Vergleich – Lines of Code v1.5 Data Tier .NET 1.6x größer • J2EE – Datenbank Code im Middle Tier (Bean Managed Persistence) • .NET – nutzt Stored Procedures • Bietet Performance Steigerung • -> mehr Code • Kern Datenbank Schema ungefähr identisch Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 20 Vergleich – Lines of Code v1.5 Config J2EE 45x größer • J2EE – viel Code nötig für Java Beans Container Konfiguration • .NET – wenig Code Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 21 Vergleich – Lines of Code Version 2.0 Änderungen • Neue Funktionen – – • XML basierter Web Service Verteilte Datenbank Transaktionen Änderungen – – Pet Shop nutzt dynamic SQL anstelle Stored Procedures Optimierung am Code Veränderungen v1.5 -> v2.0 • UI – – • Middle Tier – • .NET ~ gleich / J2EE ~15% mehr Data Tier – – • .NET ~ 45% weniger J2EE ~ 5% weniger .NET ~70% weniger J2EE ~50% weniger Gesamt – – .NET ~40% weniger J2EE ~ gleich Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 22 Vergleich - Performance • Web Application Benchmark – 2 Skripte typischer Benutzeraktionen • Skript 1 – Homepage besuchen – 3 Produkte suchen – Detailinformationen ansehen • Skript 2 – – – – – Einloggen mit Benutzeraccount 2 Produkte suchen Detailinformationen ansehen Kaufvorgang abschließen 1 Produkt suchen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 23 Vergleich - Performance • • J2EE Application Server A (Windows 2000, Java 1.4) und B (Windows 2000 Java 1.3) Datenbank: Oracle 9i Server • • Compaq Server (2-3 GB RAM) unter Windows 2000/2003 und .NET Framework 1.0/1.1 Datenbank : Microsoft SQL Server 2000 Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 24 Vergleich - Performance Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 25 Kritik – Lines of Code • Zählweise – Kommentare und Leerzeilen werden Übersprungen – Suche nach spezifischen Codefragmenten in Dateien – HTML Dateien wurden übersprungen • oft durch Tool generiert – XML config Dateien mitgezählt • für J2EE größer und zahlreicher als in .NET – meist durch Tool generiert • J2EE Dateien beinhalten weitaus mehr Informationen als .NET – Beschreibt wie EJB-Container Bean behandelt (Typ, Art, Methoden etc.) Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 26 Kritik – Lines of Code • Unterschiedliche Intentionen – J2EE Pet Store dient als Referenzapplikation / Lehrbeispiel • Beinhaltet viele Design Pattern und EJBs • Beispielcode für Entwickler • Besser wartbar und flexibler – Einfügen neuer Funktionen leichter Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 27 Kritik - Performance • Testumgebung unklar – Microsoft stellte Rechenzentrum zur Verfügung und übernahm Kosten – J2EE auf nicht genau genannten Rechnern getestet • Optimierung nicht ausreichend an Pet Store – Grundprogramm war nie als Benchmark gedacht • Optimierung hat Ursprungsprogramm nicht grundlegend geändert – Microsoft Angestellter optimierte Server/Database & .NET Framework vor Testbeginn Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 28 Kritik - Performance • Unfaire Testbedingung – J2EE Rechner nur mit Java 1.3 anstelle 1.4 betrieben • Angegebener Grund Server sei nicht kompatibel zu 1.4 • 1.4 wäre laut Sun ~ 50% schneller wegen besserer garbage collection – Testregeln pro .NET (caching, etc.) • Verschiedene Intentionen – J2EE priorisiert Stabilität und Plattform- / Herstellerunabhängigkeit – .NET priorisiert Performance, nur ein Hersteller Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 29 Kritik - Anti-Pattern Design bei .NET Importieren aus Presentation Layer • • • Bei Multi-Tier Anwendungen muss vom obersten zum untersten Layer gearbeitet werden Hier Aufrufe vom Service Layer auf Presentation Layer! Gefährlich bei großen Anwendungen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 30 Kritik – Anti Pattern Desing bei .NET • Direkter Aufruf vom Presentation Layer – (= Kurzschluß des Service Layers) • • • Item agiert als Service Objekt Technischer Code gemixt mit Attributen GetItem(ItemID) Methode ist statisch – besser Factory Design Pattern nutzen Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 31 Kritik – Schlechtes Design bei .NET • Komplette Applikation in einem Namespace (PetShop.Components) – Beinhaltet von Datenbank über Items bis zur Bestellung alles – Schweres zurechtfinden – Nachträgliches Ändern sehr Umständlich – Ein Package und 10 Klassen • Java Pet Store beinhaltet zahlreiche Packages und Klassen – Schnelles zurechtfinden durch intuitive Namensgebung – Nachträgliche Änderungen leicht Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 32 Kritik – Schlechtes Design bei .NET • Datenbank Unabhängigkeit nicht gewährleistet bei .NET Pet Shop – SQL Server stark integriert – Andere Hersteller nicht unterstützt • Möglich durch besseres Design • Kein Exception Handling bei .NET Pet Shop – Fundamental bei Multi Tier Anwendungen – Pet Shop übergibt Exceptions bis an Benutzer • Verteilte Transaktion bei .NET Pet Shop zu simpel umgesetzt – OrderCOM.cs Klasse führt lediglich zwei SQL insert statements Befehle in zwei Datenbanken aus • Ungeeignet als Referenzmodell Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 33 Zusammenfassung J2EE Pet Store Vorteile • • • • • Nachteile • • .NET Programmieranleitung / Hilfe • • Viele Codebeispiele Gutes Design Späteres Ändern/Einfügen neuer Funktionen leicht Plattform- und Datenbankunabhängig Viele Codezeilen Langsamer • • • Pet Shop Schnell Wenig Codezeilen Schlechtes unübersichtliches Design Späteres Ändern/Einfügen neuer Funktionen weitgehend unmöglich Einzelne Kombination aus Hardware/OS/Datenbank Jörg Eggermann : Java Pet Store vs. .NET Pet Shop 34