Enterprise Java Beans Einführung Vorlesung 8 Ralf Gitzel ralf_gitzel@hotmail.de 1
Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2
Übersicht EJBs im JEE Umfeld Verschiedene Typen von EJBs Von der Javaklasse zur EJB Ein EJB-Projekt Hello World Session Bean 3
EJBs im JEE Umfeld Ralf Gitzel ralf_gitzel@hotmail.de 4
Motivation Was fehlt noch? Web Container ist sehr gut für die Darstellung geeignet Unterstützung für die eigentliche Geschäftslogik ist kaum vorhanden (d.h. man baut alles von Hand) Wir benötigen weitere Services für die einfache Erstellung der Geschäftslogik 5
EJB Architektur Request Web Container Response Servlet EJB Container DB Persistence Provider EJB 6
EJB Container (Application Server) Glassfish: Referenzimplementation von Sun JBoss: bekannter kommerzieller Open Source Server IBM Websphere Die Application Server enthalten typischerweise auch den Web Container 7
Was sind EJBs? Enterprise Java Beans Komponenten, die Funktionalität und Daten kapseln Nicht-geschäftsspezifische Aufgaben werden vom Container übernommen! 8
Beispiele - Abgrenzung Geschäftsspezifisch (Funktionales Design): Nicht Geschäftsspezifisch (Nicht-Funktionales Design): Personendatenbank Algorithmus für Buchempfehlungen Sudoko-Spiel Sicherheit Netzwerkverbindung Persistenz 9
Übersicht EJB Container Services Transaktion Persistenz Security Messaging Pooling Web Services 10
EJB Container Services (1) Transaktionen: Vermeidet Inkonsistenzen in den Daten durch gleichzeitigen Zugriff zweier Clients Security: Zugriffsbeschränkungen Persistenz: Speichern von Daten über den Persistence Provider Messaging: Nachrichtenversand zwischen Beans 11
EJB Container Services (2) Pooling: Wiederverwendung von Objekten aus Effizenzgründen Web Services: Zugriff auf Stateless Session Beans als Web Service 12
Argumente für EJB 3 Einfach einzusetzen Vielfältige Container Services Offener Standard mit breiter Herstellerunterstützung Stabile Implementierungen 13
Verschiedene Typen von EJBs Ralf Gitzel ralf_gitzel@hotmail.de 14
Die 3 Sorten EJBs Session Beans Message Driven Beans Geschäftslogik Geschäftslogik Entity Daten 15
Schematisches Beispiel einer Anwendung Web Container Request Response Person.jsp Personen Anzeige Personen EJB Container DB Persistence Provider Personensuche 16
Schematisches Beispiel einer Anwendung Web Container Person.jsp Controller Personen Anzeige View Personen EJB Container DB Persistence Provider Personensuche Daten Geschäftslogik (Model) 17
Session Beans Stateful vs. Stateless Typ des Interfaces Stateful: Merkt sich den Zustand der Bean Stateless: Zustandslos, jeder Aufruf wie neu Session Beans Remote Invocation Local Invocation Stateless Session Beans können auch als Web Service aufgerufen werden. 18
Message-Driven Beans Message Driven Beans Aufruf erfolgt über eine Nachricht, die von einem Message Server verschickt wurde Ansonsten der Session Bean nicht unähnlich Wird hier nicht weiter vertieft 19
Entity Entity Object-Relational Mapping (ORM) Persistence Manager Umwandlung Java-Objekt zu RDB Eintrag erfolgt automatisch DB 20
Von der Java-Klasse zur EJB Ralf Gitzel ralf_gitzel@hotmail.de 21
Metadata = Attribute Seit Java Version 5 kann man Metadaten zu Klassen, Methoden und Variablen hinzufügen Die Metadaten nennt man Attribute Werden in Paketen definiert Wir verwenden vordefinierte Attribute, die den Zugriff auf die EJB Container Services steuern 22
Metadaten Beispiel Wird wie eine Klasse importiert! Attribut Stateless 23
Java-Klasse zu EJB Erstellen eines Interfaces IBerechnung BerechnePreis() BerechneMwSt() = Interface Berechnung BerechnePreis() BerechneMwSt() Hinzufügen von Annotationen = SessionBean Berechnung BerechnePreis() BerechneMwSt() Java Klasse EJB 24
Dependency Injection Verwendung von Metadaten um aus normalen Java Klassen EJBs zu machen Ziel: Reduzierung der Kopplung zwischen den Komponenten Die schmutzigen Details des Erstellens einer Referenz etc. wird vom Container übernommen. 25
Gruppendiskussion Warum kann ich nicht einfach normal Objekte erzeugen, wenn ich EJBs verwende? Warum brauche ich ein Interface? Hinweis: s. Bild auf Folie 5 26
Gemeinsame Übung: Ein EJB Projekt anlegen Ralf Gitzel ralf_gitzel@hotmail.de 27
Grundlegende Bemerkungen 2 Projekte: Wir benötigen typischerweise ein EJB und Web Projekt als Paket Bündelung: Ein Enterprise Application Project kann beide als Unterprojekte enthalten 28
Enterprise Application Project 29
Einstellungen 5.0 Next 30
Module erzeugen Wir brauchen nur EJB und Web! 31
Module in einem JEE Projekt Klammer JEE Projekt XYZ Web Projekt XYZWeb EJB Projekt XYZEJB Darstellung Logik 32
Web Project konfigurieren Wie gehabt (s. die ersten Vorlesungen) Zusätzlich: Das EJB Project in den Buildpath aufnehmen (s. nächste Folie) javaee.jar in den Buildpath aufnehmen 33
Project in den Buildpath (Properties) Rechtsklick auf Web Project > Properties 34
javaee.jar Im Applicationserver-Verzeichnis (z.b. Glassfish, JBoss ) 35
EJB Projekt konfigurieren javaee.jar in den Buildpath einfügen Rechtsklick > Buildpath > Configure Buildpath (jar file liegt im lib ordner des Enterprise Application Servers, z.b. JBoss oder Glassfish!) 36
Add External JAR 37
javaee.jar Im Applicationserver-Verzeichnis (z.b. Glassfish, JBoss ) 38
Elemente des EJB Projekts Deployment Descriptor (optional): Kann anstelle der Metadaten verwendet werden, bzw. diese überschreiben EJBs (=ejbmodule) 39
Gemeinsame Übung: Hello World Session Bean Ralf Gitzel ralf_gitzel@hotmail.de 40
Hinweis Details werden die nächsten Male besprochen. Hier geht es nur um ein Hello World 41
Konzept EnterpriseIntroductionWeb (Dynamic Web Project) Servlet Zugriff EnterpriseIntroductionEJB (EJB Project) Interface IHelloUser Zugriff Session Bean HelloUser 42
Anzulegende Projekte Hauptprojekt mit 2 Unterprojekten 43
EJB anlegen 44
Das EJB Local Interface Wir definieren alle Methoden, die wir in der Session Bean implementieren wollen. Interessant: Ganz normales Interface! 45
Die EJB Klasse 46
Servlet anlegen 47
Das Servlet 48
Anmerkungen zum Servlet Wir verwenden eine Referenz auf das Interface um die EJB zu benutzen Durch die @EJB-Annotation wird der Referenz automatisch das passende Objekt zugewiesen. 49
Anwendung testen 50
Server einrichten Muss man evtl. machen um Glassfish als Option zu bekommen 51
Server einrichten 52
Server einrichten JDK konfigurieren 53
JDK konfigurieren Nicht durch das JRE irreführen lassen! 54
Server einrichten Neues JDK als JRE setzen und Pfad für den Application Server setzen 55
Evtl. Security Settings 56
Anwendung auswählen und Deployen 57
Hinweise Glassfish ist etwas temperamentvoll Manchmal ist es besser, wenn man den Server erst startet und dann deployed Generell gilt: Shutdown, Undeploy, Restart und Redeploy sind manchmal hilfreich, wenn es Probleme gibt, die man sich nicht erklären kann. 58
Anwendung läuft 59
Gruppendiskussion Was hat der Programmierer auf der nächsten Folie falsch gemacht? Was wird passieren, wenn man das Servlet startet? Wann kann hierdurch ein Problem entstehen? Hinweis: Wer dieses Problem versteht hat einen wichtigen EJB-Mechanismus verstanden! 60
Gruppendiskussion 61
Lernziele Ralf Gitzel ralf_gitzel@hotmail.de 62
Lernziele Unterschiede zwischen den Containern Arten von EJBs Was macht eine Javaklasse zu einer EJB? Dependency Injection Prinzip Enterprise Application Project anlegen können 63
Anhang Ralf Gitzel ralf_gitzel@hotmail.de 64
Auswahl des Servers Falls nicht in Liste 65
Probleme und Antworten Warum kriege ich eine NullPointerException bei Verwendung der Dependency Injection (z.b. mit @EJB)? Verwende ich die richtigen Versionen von EJB (3.0) und Servlets (2.5)? Manchmal ist Undeploy/Server-Stop/Server- Start/Deploy keine schlechte Idee. Was sagt das Glassfish/JBoss Server Log? Warum ist alles so langsam? Evtl. läuft der Server im Hintergrund und führt für jede Änderung ein Hot Deploy durch Server stoppen! 66