EJB Beispiel JEE Vorlesung 10 Ralf Gitzel ralf_gitzel@hotmail.de 1
Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw. vertieft 2
Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 3
Übersicht Kurzwiederholung Eclipse: Project Import Beispiel: PersonenDB 4
Kurzwiederholung Ralf Gitzel ralf_gitzel@hotmail.de 5
Motivation Web Container Servlet Sichtbarer Einstiegspunkt für das Servlet EJB Container DB Persistence Provider Session Bean Entity 6
Session Beans Stateful: Merkt sich den Zustand der Bean Stateless: Zustandslos, jeder Aufruf wie neu Session Beans Remote Interface Local Interface EJB Container Verschiedene Client Typen 7
Stateful Session Bean Implementierung Client I A.doX() EJB Container Session Bean Klasse A Client II 1-zu-1 Zuordnung bis zum Ende der Session A.doX() Session Bean A Objekt für I Session Bean A Objekt für II 8
Gemeinsame Übung: Eclipse Project Import Ralf Gitzel ralf_gitzel@hotmail.de 9
Übung Gemeinsamer Import aus der zip-datei Uebung-11-10.zip Wird nachher in der Programmier-Übung verwendet 10
Import 11
Import des/der Projects Nicht(!) ein Archive Importieren! 12
Import aus Archive Kann Projekte auch aus einem Archive importieren. 13
Lokale Anpassung 14
Für beide Projekte (EJB & Web) 15
Das passende JDK auswählen Ihre Nummer kann abweichen! Ggf. muss man über den Button rechts ein neues JDK anlegen 16
Den passenden EJB Server auswählen 17
EJB Server Evtl. müssen Sie noch diesen Server anlegen, wie in der ersten JEE Vorlesung beschrieben! 18
Nur bei Enterprise Application Project 19
Zum Starten Wählen Sie die JSP oder das Servlet, die/das zuerst aufgerufen werden soll! 20
Zum Starten 21
Beispiel: Personen DB Lite Aufgabenbeschreibung Ralf Gitzel ralf_gitzel@hotmail.de 22
Ziel-Applikation 23
Person anlegen 24
Person suchen 25
Personenliste 26
Liste Löschen Beendet die Session mit der EJB und startet die Anwendung für diesen Benutzer effektiv neu! 27
Beispiel: Personen DB Lite Unser Entwurf Ralf Gitzel ralf_gitzel@hotmail.de 28
Entwurf des Programms 29
Entwurf des Programms 30
Beispiel: Personen DB Lite Gemeinsame Programmierung Ralf Gitzel ralf_gitzel@hotmail.de 31
Programmstart StartServlet Was muss hier passieren? PersonenQuelle (EJB) StartSeite.jsp 32
Personenquelle EJB Welche Java-Dateien (Klassen, Interfaces etc.) müssen wir erzeugen? In welchem Projekt müssen wir dieses anlegen? Welche Annotationen sind notwendig? 33
Local Interface PersonenQuelle (EJB) Ergänzen Sie: IPersonenQuelle.java 34
Stateful Session Bean Klasse PersonenQuelle (EJB) Ergänzen Sie: PersonenQuelle.java 35
StartServlet Wie erzeugen wir eine Verbindung zum EJB Container bzw. zur Stateful Session Bean? Wo müssen wir die Verbindung speichern? 36
Wie verwende ich die Stateful Session Bean im Servlet? StartServlet (erster Aufruf der Applikation!) 1. JNDI Lookup Referenz auf EJB 2. Speicherung in Session 37
Wie verwende ich die Stateful Session Bean im Servlet? StartServlet (erster Aufruf der Applikation!) 1. JNDI Lookup Referenz auf EJB 2. Speicherung in Session 38
Konzept des JNDI Aufrufs aus einem Servlet (Automatisch) Session Bean im Context anmelden Bean Informationen konfigurieren Context vom Container holen Eine Referenz auf die Bean aus dem Context holen Für weitere Verwendung in der HttpSession ablegen 39
Konzept des JNDI Aufrufs aus einem Servlet (Automatisch) Session Bean im Context anmelden Bean Informationen konfigurieren Context vom Container holen Eine Referenz auf die Bean aus dem Context holen Für weitere Verwendung in der HttpSession ablegen 40
Nicht klausurrelevant! Was macht der EJB Container? JNDI: Java Naming and Directory Interface Namensdienst: Erlaubt das Suchen von Dateien, Objekten etc. in verschiedensten Quellen (z.b. Dateisystem, LDAP, EJB Container, ) Session Bean bekommt eine Adresse im Container (genauer im Environment Naming Context): java:comp/env = wir sind im ENC Name der EJB erlaubt eindeutige Zuordnung Prinzip ähnlich zu einer URL 41
Konzept des JNDI Aufrufs aus einem Servlet (Automatisch) Session Bean im Context anmelden Bean Informationen konfigurieren Context vom Container holen Eine Referenz auf die Bean aus dem Context holen Für weitere Verwendung in der HttpSession ablegen 42
EJB Bean Informationen 1 2 2 1 Legen Sie an: StartServlet.java 43
Konzept des JNDI Aufrufs aus einem Servlet (Automatisch) Session Bean im Context anmelden Bean Informationen konfigurieren Context vom Container holen Eine Referenz auf die Bean aus dem Context holen Für weitere Verwendung in der HttpSession ablegen 44
Context Zugriff Datei: StartServlet.java Anm: Die Befehle könnten auch direkt in doget/post stehen 45
Konzept des JNDI Aufrufs aus einem Servlet (Automatisch) Session Bean im Context anmelden Bean Informationen konfigurieren Context vom Container holen Eine Referenz auf die Bean aus dem Context holen Für weitere Verwendung in der HttpSession ablegen 46
EJB Objekt in die Session speichern Legen Sie an: StartServlet.java 47
Personeneingabe Eingabe der Personendaten Anzeige der Hauptseite Welche Elemente benötigen wir für diesen Schritt? HTML-Seite oder JSP: PersonalDatenEingabe.html Servlet: PersonAnlegenServlt.java Dateneingabe 48
Zugriff auf die SessionBean Diesen Schritt bitte später selbstständig bearbeiten Liegt ganz normal in der Session der Servlets! Wichtig: Nur über Interface arbeiten! 49
Die @Remove Methode Was tun? Liste löschen 50
Was passiert bei @Remove? (I) Servlet A Servlet B Session für User Alpha Attribut: DiePersonenQuelle Servlet C Objekt vom Typ PersonenQuelle (=EJB) 51
Was passiert bei @Remove? (II) Servlet A Servlet B Session für User Alpha Attribut: DiePersonenQuelle Servlet C Aufruf: @Remove Objekt vom Typ PersonenQuelle (=EJB) 52
Was passiert bei @Remove? (III) Servlet A Servlet B Session für User Alpha Attribut: DiePersonenQuelle Servlet C Aufruf: @Remove Objekt vom Typ PersonenQuelle (=EJB) Ungültig! 53
Was passiert bei @Remove? (IV) Session für User Alpha Attribut: DiePersonenQuelle Objekt vom Typ PersonenQuelle (=EJB) Ungültig! Jeder folgende Aufruf an das ungültige Objekt führt zu einer Exception! 54
Die @Remove Methode LoeschenListe Servlet, das die @Remove Methode aufruft StartServlet Herstellen eines neuen gültigen Objekts Liste löschen 55
Aufruf der Remove-Methode Bitte legen Sie das Servlet an: LoeschenListe.java 56
Hinweis Oftmals ist @Remove der letzte Aufruf eines Users, d.h. man muss kein neues Objekt mehr anlegen Hier haben wir eine Demoanwendung, d.h. der User meldet ich wieder als neuer User mit neuer Session an! 57
Weitere Übungsmöglichkeiten 58
Lernziele Ralf Gitzel ralf_gitzel@hotmail.de 59
Lernziele Stateful Session verwenden können @Remove-Methode 60
Anhang (Anlegen eines neuen Projekts) Ralf Gitzel ralf_gitzel@hotmail.de 61
Enterprise Application Project 62
Einstellungen Bel. Name 5.0 Next 63
Module erzeugen Wir brauchen nur EJB und Web! 64
Web App Link zum EJB Project Rechtsklick auf Web Project > Properties 65
javaee.jar (in beiden Projekten) Im Applicationserver-Verzeichnis (z.b. Glassfish, JBoss ) 66