6. JEE /JSF / EJB / CDI

Größe: px
Ab Seite anzeigen:

Download "6. JEE /JSF / EJB / CDI"

Transkript

1 6. JEE /JSF / EJB / CDI 6.1 Grundlagen 6.2 Einführendes nulltes Beispiel 6.3 Validierung 6.4 JSF mit EJB und JPA 6.5 Get 6.6 Sicherheit 6.7 Weitere JSF-Möglichkeiten 6.8 JSF-Lebenszyklus 6.9 Templates und Komponenten 6.10 Nutzung von Ajax 6.11 Testen von Web-Applikationen - Selenium 6.12 JSF-Erweiterungen 313

2 Literatur E.Burns, C. Schalk, JavaServer Faces 2.0: The Complete Reference, Mc Graw Hill, New York, 2010 M. Marinschek, M. Kurz, G. Müllan, JavaServer Faces 2.0, dpunkt, Heidelberg, 2010 (im Wesentlichen auch: D. Geary, C. Horstmann, Core JavaServer Faces, 3. Auflage, Prentice Hall, USA, 2010 Standard: Sun, JSR 344: JavaServer Faces 2.2, M. Çalışkan, O. Varaksin, PrimeFaces Cookbook - Second Edition, Packt Publishing, Birmingham UK, 2015 Sun, JEE7 Tutorial, Bücher nutzen teilweise Eclipse und JBoss/WildFly; nicht notwendig, funktioniert fast alles mit Netbeans und Glassfish / Apache 314

3 6.1 Grundlagen verschiedene Ziele von JSF-Applikationen Software, die Web als zusätzlichen Nutzen hat (z. B. Web- Präsenz, Kataloge, Bestellmöglichkeiten) verteilte Softwaresysteme, die Netz als Komponentenverbindung nutzen (z. B. B2B) Arbeitsplatzsoftware, die auch das Web nutzt (nahtlose Integration, Web ist unsichtbar ) letztes Ziel gewinnt immer mehr Bedeutung für andere Ziele Aber: Nicht immer ist Web-fähige Software gewünscht! 315

4 Technische Herausforderungen (1/2) auf welchem Rechner läuft welche Software zentraler Server oder peer-to-peer Client-Server, wer ist thin, wer ist fat Browser-fähig oder standalone welcher Browser, welche Sicherheitseinstellungen, welche Plugins, welches HTML wie bekommt Kunde Software zum Laufen, wie funktionieren Updates darf man, muss man offline arbeiten können mobil, nativ Usability 316

5 Technische Herausforderungen (2/2) Sicherheit wie Daten sicher verschicken, wem gehört Internet, wer muss zuhören dürfen Performance und Stabilität schnelle Antworten auch bei Last saubere, reproduzierbare Transaktionen was passiert bei Netzausfall 317

6 Typische splattformen (Ausschnitt).Net / Microsoft ASP.Net (Active Server Pages, gute Abstraktion, zunächst zu wenig Web-Server (IIS)) Silverlight (Browser-PlugIn) für RIA, mittlerweile auch lokal Oberflächen basierend auf WPF (Windows Presentation Forum, vektorbasiert, anfänglich zu langsam) Java Servlets, JSP, JSF [später genauer], angegeben mit steigenden Abstraktionsgrad sehr weit verbreitet verschiedene neue Frameworks (z. B. Apache Wicket) GWT (Google Widget Toolset), SW einmal in Java schreiben, dann individuell für Browser in Javascript übersetzen JavaFX, eigene Sprache, nutzt im Browser JRE Meinung: Silverlight und JavaFX gegenüber HTML5 und aktuell noch Flash im Nachteil, JavaFX geht in andere Richtung 318

7 Web- Container EJB- Container Konzept eines Seitenaufrufs HTTP-Request Client HTTP-Response mit HTML-Datei im Body Application Server HTML (Hypertext Markup Language) Auszeichnungssprache mit festgelegten tags zum Aufbau der Ausgabe Ebene 3/4 typisch TCP/IP, Session Ebene 5: HHTP, Darstellungsebene 6: HTML, Programmebene 7: JVM 319

8 HTTP-Ablauf Client: Request get, post, head, put,... URL HTTP1.x Header Info: Accept, Cookie,... Body: Post-Parameter Server: Response Statusmeldung: HTTP1.x 200 OK, oder 404 Error Header Info: Content-type, set-cookie,... Body: Dokument Verbindungsabbau Protokoll ist zustandslos/gedächtnislos; Client wird bei erneutem Request ohne Trick nicht als Bekannter erkannt 320

9 Web-Server mit Container nutzen Servlet: Wortkreation aus den Begriffen Server und Applet, (serverseitiges Applet) Web-Server leitet HTTP- Request an Servlet weiter Servlet kann Antwort (HTML-Code) berechnen Servlet kann Anfrage- Informationen und Serverumgebung nutzen Servlet kann mit anderen Servlets kommunizieren Container 321

10 Motivation für JSF Die Widerverwendbarkeit von Servlets ist gering Innerhalb jeder JSP (Java ServerPage) bzw. jedes Servlets müssen ähnliche Schritte ausgeführt werden Nur ein Teil der Applikationslogik kann in Tag-Bibliotheken gekapselt werden Workflow ist in der Applikationslogik versteckt, dadurch schwer nachvollzierbar ab JSF 2.0 sehr flexible Gestaltungsmöglichkeiten, u. a. AJAX- Einbettung Hinweis: wir betrachten nur Grundkonzepte (-> mehr evtl. Semesteraufgabe) 322

11 Web-Server mit JSF- (und EJB-) Unterstützung Beispiele: Apache Tomcat / TomEE BEA WebLogic Server IBM WebSphere (Apache Geronimo) JBoss Wildfly Oracle WebLogic Glassfish (Oracle, Referenzimplementierung) Unterschiedliches Tempo bei der Unterstützung neuer JEE- Versionen 323

12 Konzeptübersicht Web-Seite in XHTML Input-Komponente beschrieben in XHTML... Web-Seite in XHTML Output-Komponente beschrieben in XHTML... event leitet auf Folgeseite liest Modell Java-Programm im Container im Server 324

13 XHTML Idee: HTML nicht XML-konform und zu viele Freiheiten XHTML in fast allen Elementen wie HTML XHTML basierend auf XML-Schema leichter zu verarbeiten Unterschiede zu HTML (Ausschnitt) Tags und Attribute müssen klein geschrieben werden Attributwerte immer in Anführungsstrichen boarder="7" korrekte XML-Syntax: <br/> nicht <br> generell saubere Terminierung <input... /> XHTML2 wegen HTML5 eingestellt (verschwimmt damit) Standard: 325

14 Web-GUI-Komponenten JSF bietet alle klassischen GUI-Komponenten zur Darstellung und Bearbeitung an Grundidee: Komponenten schicken bei Veränderungen Events Nutzung von MVC2 Komponenten als XHTML eingebettet <h:inputtext id="imname" value="#{modul.name required="true"/> <h:outputtext id="omname" value="#{modul.name"/> Kontakt zum Java-Programm über Methodenaufrufe (lesend und aufrufend, z. B. modul.setname(...), modul.getname() große Komponenten können aus kleineren komponiert werden 326

15 Elementare Aufgabe: Eingabeseite mit Ausgabeseite Managed public class Modul implements Serializable { private String name; WebSeite ="#{modul.name" WebSeite ="#{modul.name" Modulname: Modulnummer: Abschicken Modulname: <Ausgabe> Modulnummer: <Ausgabe> Zur Eingabe Knopf Eingabefeld Ausgabefeld 327

16 Projekt einrichten (1/2) 328

17 Projekt einrichten (2/2) 329

18 6.2 Nulltes JSF-Beispiel (1/11) Aufgabe: Modul (Name + Nummer) eingeben und auf zweiter Seite wieder ausgeben Beispiel zeigt: Konzept der XHTML-Nutzung erste JSF-Befehle Seitenmanövrierung durch JSF 0. Beispiel zeigt nicht: ordentliche Softwarearchitektur (Controller und Model trennen) Validierungsmöglichkeiten für Eingaben Layout-Gestaltung viele weitere coole Dinge 330

19 Nulltes JSF-Beispiel (2/11) - Start index.xhtml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>moduleingabe</title> </h:head> <h:body> <h:form id="form" > <h:outputtext value="modulname "/> <h:inputtext id="mname" value="#{modul.name" required="true"/><br/> <h:outputtext value="modulnummer "/> <h:inputtext id="mnr" value="#{modul.nr" required="true"/><br/> <h:commandbutton value="abschicken" action="#{modul.uebernehmen"/> </h:form> </h:body> </html> 331

20 Nulltes JSF-Beispiel (3/11) - Analyse der Startseite Einbinden der JSF-Bibliotheken <html xmlns=" xmlns:h=" xmlns:f =" > Nutzung von Standard XHTML (vereinfacht, da so als Standardnamensraum gesetzt) enge Verwandtschaft HTML zu XHTML (<h:form>) für value="#{modul.name" offene Fragen: was ist modul? ( -> Managed Bean) warum #? (Trennung von ausführbaren Elementen) was passiert bei modul.name? (set/get abhängig von in/out) Ausblick: action="#{modul.uebernehmen", echtes Event- Handling (Methodenaufruf) 332

21 Nulltes JSF-Beispiel (4/11) - Ausgabe ausgabe.xhtml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>modulausgabe</title> </h:head> <h:body> <h:form id="form"> <h:outputtext value="modulname: "/> <h:outputtext id="mname" value="#{modul.name"/> <br/> <h:outputtext value="modulnummer: "/> <h:outputtext id="mnr" value="#{modul.nr"/><br/> <h:commandbutton value="zur Eingabe" action="#{modul.eingeben"/> </h:form> </h:body> </html> 333

22 Nulltes JSF-Beispiel (5/11) - Managed Bean [1/3] package entities; import java.io.serializable; import javax.enterprise.context.requestscoped; import // nur im Minimalbeispiel hat eine // einen zugeordneten Scope public class Modul implements Serializable { private static final long serialversionuid = 1L; private int nr; private String name; public Modul(){ public Modul(int nr, String name) { this.nr = nr; this.name = name; 334

23 Nulltes JSF-Beispiel (6/11) - Managed Bean [2/3] public String uebernehmen(){ return "/ausgabe.xhtml"; public String eingeben(){ return "/index.xhtml"; public String getname() { return name; public void setname(string name) { this.name = name; public int getnr() { return nr; public void setnr(int nr) { this.nr = nr; //Manövrieren 335

24 Nulltes JSF-Beispiel (7/11) - Managed Bean public boolean equals(object object) { if (object==null!(object instanceof Modul)) return false; Modul other = (Modul) object; if (this.nr!= other.nr!this.name.equals(other.name)) return false; return // generieren lassen public int hashcode() { int hash = 5; hash = 47 * hash + this.nr; hash = 47 * hash + (this.name!= null? this.name.hashcode() : 0); return public String tostring() {return name+"("+nr+")"; 336

25 Nulltes JSF-Beispiel (8/11) - web.xml [1/2] Konfigurationsdatei für Servlets (hier benötigt) <?xml version="1.0" encoding="utf-8"?> <web-app version="3.1" xmlns=" xmlns:xsi=" xsi:schemalocation=" <context-param> <param-name>javax.faces.project_stage</param-name> <param-value>development</param-value> </context-param> <servlet> <servlet-name>faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> 337

26 Nulltes JSF-Beispiel (9/11) - web.xml [2/2] <servlet-mapping> <servlet-name>faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 2 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app> fehlt z. B. gesamte Fehlercodebehandlung in glassfish-web.xml (Glassfish-spezifisch) steht, wenn existent, z. B. <context-root>/vljsfnulltesbeispiel</context-root> 338

27 Nulltes JSF-Beispiel (10/11) - Projektstruktur 339

28 Nulltes JSF-Beispiel (11/11) - Ergebnis 340

29 beans.xml Datei garantiert korrekte Abarbeitung von Annotationen Datei ist Konfigurationsdatei von Contexts- and Dependency Injection (CDI) einige Teile CDI werden in Veranstaltung nebenbei eingeführt Datei muss in Projekten selbst erzeugt werden <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="all"> </beans> Wert muss von Hand von annotated auf all gesetzt werden 341

30 beans.xml in NetBeans erzeugen 342

31 Richtige Klassen und Annotationen nutzen! bei Korrekturvorschlägen immer auch richtige Klasse achten, steht nicht immer oben oder ist ausgewählt!!! falsche Klasse führt teilweise zu extrem schwer zu findenden Fehlern Historisch sind diese Klassen oft verwandt und ältere Ansätze werden nicht verschwinden 343

32 Einschub: IE 9 ggfls. Problem Programm läuft problemlos in Firefox und Chrome in IE 8 gab es auch keine Probleme in IE 9, erfolgt nach Drücken des Knopfes folgende Ausgabe 344

33 Einschub: IE 9 - Lösung Session-Informationen können statt im Server auch im Client gehalten werden entlastet Server, ist aber für Nutzer langsamer Ergänzung in web.xml: <context-param> <param-name>javax.faces.state_saving_method</param-name> <param-value>client</param-value> </context-param> Anmerkung: fehlt systematische Fehleranalyse: NetBeans 6.3.1, Glassfish 4, MS IE 9, MS IE 9 Nutzereinstellungen, Win 7 x64, 345

34 Einschub: korrekte Pfadangabe Browser zeigt immer vergangene Seite wenn nicht gewünscht, dann Manövrierungsstring ändern ist etwas langsamer (warum, später genauer) Scope setzen public String uebernehmen(){ return "/ausgabe.xhtml?faces-redirect=true"; public String eingeben(){ return "/index.xhtml?faces-redirect=true"; 346

35 Basisprinzip der Applikationssteuerung Im Controller: Aufruf einer Methode ohne Parameter vom Rückgabetyp String <h:commandbutton value="abschicken" action="#{modul.uebernehmen"/> Im Modell: public String uebernehmen(){ return "/ausgabe.xhtml"; // Endung weglassbar Methode kann natürlich abhängig von Variablen unterschiedliche Seiten liefern Beachten: Navigation kann in den Tiefen des Codes verschwinden ( -> Konstanten nutzen, Architektur) gibt XML-basierte Variante 347

36 Lebensdauer von Informationen (Scope) Request Session Application nur ein Aufruf für eine Nutzer- Sitzung solange Zeit aktuelles Deployment läuft Anmerkung: Obwohl es verlockend ist, viele Informationen in Session oder Application zu legen, ist dies wegen Performance verboten (wird gespeichert, evtl. passiviert, hat wilde Referenzen, Zugriff muss ggfls. synchronisiert werden) fehlt: CoversationScoped; im Programm Scope starten und enden 348

37 Scope-Beispiel (1/5) - Bean-Klassen //@Named("modul") //@RequestScoped Modul als einfache Klasse (wichtig!) public class Modul implements Serializable {...// wie = public class ModulRequest public class ModulSession public class ModulApplication extends Modul{ 349

38 Scope-Beispiel (2/5) - Ausschnitt index.xhtml <h:form> <h:panelgrid columns="3" > <h:outputlabel for="mnamer" value="modulname "/> <h:inputtext id="mnamer" value="#{modulr.name"/> <h:message for="mnamer" /> <h:outputlabel for="mnrr" value="modulnummer "/> <h:inputtext id="mnrr" value="#{modulr.nr"/> <h:message for="mnrr" /> <!-- auch moduls und modula --> <h:commandbutton value="abschicken" action="#{modulr.uebernehmen"/> </h:panelgrid> </h:form> 350

39 Scope-Beispiel (3/5) - Ausschnitt ausgabe.xhtml <h:form> <h:messages globalonly="true"/> <h:outputtext value="modulname r: "/> <h:outputtext id="mnamer" value="#{modulr.name"/> <br/> <h:outputtext value="modulnummer r: "/> <h:outputtext id="mnrr" value="#{modulr.nr"/><br/> <h:commandbutton value="zur Eingabe" action="#{modulr.eingeben"/><br/> <!-- auch moduls und modula --> <h:commandbutton value="ausgabe wiederholen" action="#{modulr.uebernehmen"/> </h:form> 351

40 Scope-Beispiel (4/5) - Ein Nutzer, zwei Klicks 352

41 Nutzer 2 Nutzer 1 Scope-Beispiel (5/5) - Zwei Nutzer Zeit 353

42 ConversationScope (1/4) Entwickler kann selbst Länge der Session bestimmen, damit zwischen RequestScope und SessionScope import javax.enterprise.context.conversation; import javax.enterprise.context.conversationscoped; import javax.inject.inject; public class Scopeanalyse implements Serializable { private String wert; private List<String> liste = new private Conversation conver; Vorgriff auf CDI: Container stellt Conversation-Objekt zur Verfügung 354

43 ConversationScope (2/4) public Scopeanalyse(){ // get- und set-methoden fehlen public void hinzu(){ if(this.conver.istransient()){ this.conver.begin(); if(this.wert!= null &&!this.wert.trim().equals("")){ this.liste.add(wert); // kein String zurueck, da auf gleicher Seite geblieben public void vergiss(){ if (!this.conver.istransient()){ this.conver.end(); 355

44 ConversationScope (3/4) <h:head> <title>scope Spielerei</title> </h:head> <h:body> <h:form id="main"> <h:inputtextarea id="ein" value="#{scope.wert" rows="3"/><br/> <ui:repeat value="#{scope.liste" var="w"> <h:outputtext value="#{w "/> </ui:repeat> <br/> <h:commandbutton value="übernehmen" action="#{scope.hinzu"/> <h:commandbutton value="vergessen" action="#{scope.vergiss"/> </h:form> </h:body> Anmerkung: mit <ui:repeat> wird über eine Sammlung (scope.liste) iteriert, jeweiliges Objekt in Laufvariable w 356

45 ConversationScope (4/4) Bild jeweils nach dem Klicken 357

46 Ausgabeprobleme: Umlaute und Zeilenumbrüche vor Knopfnutzung danach danach 358

47 Umlaute Text-Encoding Sonderzeichen, wie Umlaute bei Eingaben problematisch wenn konsequent UTF-8 genutzt, dann kein Problem; trifft man öfter nicht an häufig, gerade im MS-Bereich, nur ISO nutzbar nicht ganz sauberer Trick: Eingaben selbst passend umwandeln (läuft ggfls. nicht in Ländern mit nichtlateinischer Schrift) String s1 = new String("äöüÄÖßÜ"); System.out.println(s1); String s2 = new String(s1.getBytes("UTF-8"), "ISO "); System.out.println(s2); String s3 = new String(s2.getBytes("UTF-8"), "ISO "); System.out.println(s3); 359

48 Umlaute saubere Glassfish-Lösung Codierung des Glassfish auf UTF-8 umstellen in glassfishweb.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" " <glassfish-web-app error-url=""> <class-loader delegate="true"/> <locale-charset-info default-locale=""> <locale-charset-map locale="" charset=""/> <parameter-encoding default-charset="utf-8"/> </locale-charset-info> </glassfish-web-app> 360

49 Zeilenumbrüche (1/2) verschiedene Lösungen, alle nicht optimal Konvertierer schreiben <h:outputtext converter="wandel" hier: HTML-Wissen nutzen, genauer CSS <h:inputtextarea id="ein" value="#{scope.wert" rows="3"/><br/> <div style="white-space: pre-wrap"> <ui:repeat value="#{scope.liste" var="w"> <h:outputtext value="#{w "/> </ui:repeat> </div> <h:commandbutton value="übernehmen" action="#{scope.hinzu"/> <h:commandbutton value="vergessen" action="#{scope.vergiss"/> 361

50 Zeilenumbrüche (2/2) 362

51 Kein Konstruktor in Managed Beans (Scopes) generell vieles nebenläufig unklar, wann Objektvariablen und andere Objekte genau erzeugt werden Races möglich: Zugriff auf Objekt, das gerade Konstruktor durchläuft alle Scopes können Methoden mit folgenden Annotationen nachdem das Objekt erzeugt wurde; sinnvoll hier Variablen initialisieren; Nutzung statt bevor Scope abläuft (aufräumen); auch wenn Session beendet wird Anmerkung: für kritische Ressourcen sinnvoll Ergänzung zum Aufräumen 363

52 public class Session implements Serializable{ private int zaehler; public Session(){ System.out.println("Session Konstruktor: " + new public void init(){ System.out.println("Session PostConstruct: " + new public void destroy(){ System.out.println("Session PreDestroy: " + new Date()); public int plus(){ return ++this.zaehler; 364

53 (2/5) public class Bean implements private Session session; public Bean(){ System.out.println("Bean Konstruktor: " + new public void init(){ System.out.println("Bean PostConstruct: " + new public void destroy(){ System.out.println("Bean PreDestroy: " + new Date()); public void mach(){ // ohne Rückgabe, dann auf Seite bleiben System.out.println("mach: " + this.session.plus()); 365

54 (3/5) index.xhtml <h:body> <h:form id="form"> <h:commandbutton id="b" value="mach" action="#{bean.mach"/> </h:form> </h:body> Sessiondauer in web.xml <session-config> <session-timeout> 1 </session-timeout> </session-config> 366

55 (4/5) Bean Konstruktor: Sat Nov 19 16:20:44 CET 2016 Session Konstruktor: Sat Nov 19 16:20:44 CET 2016 Bean PostConstruct: Sat Nov 19 16:20:44 CET 2016 Session Konstruktor: Sat Nov 19 16:20:44 CET 2016 Session PostConstruct: Sat Nov 19 16:20:44 CET 2016 mach: 1 Bean PreDestroy: Sat Nov 19 16:20:44 CET 2016 Bean Konstruktor: Sat Nov 19 16:20:53 CET 2016 Bean PostConstruct: Sat Nov 19 16:20:53 CET 2016 mach: 2 Bean PreDestroy: Sat Nov 19 16:20:53 CET 2016 Bean Konstruktor: Sat Nov 19 16:20:57 CET 2016 Bean PostConstruct: Sat Nov 19 16:20:57 CET 2016 mach: 3 Bean PreDestroy: Sat Nov 19 16:20:57 CET 2016 nach Klick (oder Session PreDestroy: Sat Nov 19 16:22:13 CET 2016 längerem Warten) FATAL: JSF1073: javax.faces.application.viewexpiredexception FATAL: viewid:/index.xhtml - Ansicht /index.xhtml konnte nicht wiederhergestellt werden. 367

56 (5/5) kleine Änderung in Bean-Klasse public Bean(){ System.out.println("mach: " + this.session.plus()); System.out.println("Bean Konstruktor: " + new Date()); möglicher Effekt bei erstem Klick: Warnung: #{bean.mach: java.lang.nullpointerexception javax.faces.facesexception: #{bean.mach: java.lang.nullpointerexception 368

57 Manövrieren vor JSF 2.0 Grundidee: Automat mit Seiten als Knoten (Zustände), Übergang findet durch String-Konstanten statt String-Konstanten sind Ergebnisse von (Action-) Methoden (oder stehen direkt in action="eingeben") index.xhtml ausgabe.xhtml 369

58 Manövrieren vor JSF faces-config.xml 1/2 <?xml version='1.0' encoding='utf-8'?> <faces-config version="1.2" xmlns=" xmlns:xsi=" xsi:schemalocation=" <navigation-rule> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <from-outcome>anzeigen</from-outcome> <to-view-id>/ausgabe.xhtml</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/ausgabe.xhtml</from-view-id> <navigation-case> <from-outcome>eingeben</from-outcome> <to-view-id>/ index.xhtml </to-view-id> </navigation-case> </navigation-rule> 370

59 Manövrieren vor JSF Managed Bean // statt durch Annotationen können Beans auch in faces- // config.xml angelegt werden public class Modul implements Serializable { private static final long serialversionuid = 1L; private int nr; private String name; // fehlt: get- und set-methoden für Exemplarvariablen public Modul(){ public String uebernehmen(){ //Action-Methode // Zugriff auf Exemplarvariablen möglich return "ANZEIGEN"; public String eingeben(){ // Zugriff auf Exemplarvariablen möglich return "EINGEBEN";

60 Manövrieren vor JSF faces-config.xml 2/2 <managed-bean> <managed-bean-name>modul</managed-bean-name> <managed-bean-class>entities.modul</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config> Vorteil der klassischen Navigation: Es gibt zentrale Stelle, an der es einen Überblick über mögliche Abläufe gibt Nachteile: JSF 2.0 bietet flexiblere Ablaufsteuerung XML ist schwer nachvollziehbar Konfigurationsdatei faces-config.xml bleibt trotzdem wichtig 372

61 Erinnerung: Konstanten in Programmen schlecht return "ANZEIGEN"; besser: Konstanten getrennt deklarieren public class Modul implements Serializable{ private final static string ANZEIGEN = "ANZEIGEN";... return ANZEIGEN; Alternativ: Klasse mit Konstanten package konstanten; public class Navigation{ public final static string ANZEIGEN = "ANZEIGEN";... return konstanten.navigation.anzeigen; sumgebungen erlauben dann einfache Suche und Änderung (Refactoring) 373

62 Standardattribut rendered (1/3) JSF-Elemente werden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elemente haben Attribut rendered; Boolescher Wert, ob Element dargestellt public class Mojo implements Serializable { private boolean jo=true; public Mojo(){ public boolean getjo() {return jo; public void setjo(boolean jo) {this.jo = jo; public String change(){ jo=!jo; return "/index.xhtml"; 374

63 Standardattribut rendered (2/3) - JSF-Seite <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>klickklack</title> </h:head> <h:body> <h:form id="f1"> <h:panelgrid id="p1" rendered="#{mo.jo"> <h:outputlabel value= HS rocks"/> </h:panelgrid> <h:panelgrid id="p2" rendered="#{!mo.jo"> <h:outputlabel value="os rocks"/> </h:panelgrid> <h:commandbutton action="#{mo.change" value="press"/> </h:form> </h:body> </html> 375

64 Standardattribut rendered (3/3) 376

65 Strukturierung mit panelgrid / Kommentare mit h:panelgrid können einzelne Komponenten zu einem Block zusammengefasst und einheitlich behandelt werden (ähnlich zu JPanel in Swing) durch columns="3" eine Spaltenanzahl angebbar Ausgabe erfolgt in Tabellenform Elemente werden zeilenweise ergänzt mit h:panelgroup Sammlung ohne Formatierung möglich (?!) Kommentare In JSF-Seiten <!-- Dies liest eh keiner --> wandern in Ausgabe, Ausdrücke mit #{ werden ausgewertet Ergänzung in web.xml: <context-param> <param-name>javax.faces.facelets_skip_comments</param-name> <param-value>true</param-value> </context-param> 377

66 Unified Expression Language Zugriff auf Exemplarvariablen und Methoden der Managed Beans zentrale Typen: Zahlen und Strings (können sehr gut verarbeitet und verglichen werden) Schreiben von Werten über set-methoden "#{mo.jo" Lesen erfolgt über get-methoden, generell Berechnungen möglich, die beim Schreiben keinen Sinn haben "#{!mo.jo" Bei Methoden mit fest vorgegebener Aufgabe (vorgegebener Signatur), stehen keine Klammern beim Aufruf action="#{mo.change" sonst ja "#{bean1.machwasmit(bean2)" Zugriff auf Variablen aus festen Namensraum: Managed Beans und Servlet Parameter JSR 341: Expression Language 3.0, 378

67 Implizite Objekte der EL (Ausschnitt) requestscope (analog sessionscope, applicationscope) Zugriff auf Request-Map des External-Contexts param Zugriff auf Request-Parameter-Map des External-Contexts header Zugriff auf Request-Header-Map des External-Contexts facescontext Zugriff auf den Faces-Context initparam Zugriff auf Kontextparameter der Webapplikation cookie Zugriff auf die Request-Cookie-Map des External-Contexts 379

68 6.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Eingabe: Fehler wird automatisch unter der bleibender Seite ausgegeben j_idt7 ist interner Name, mname ist unsere id des Eingabefeldes 380

69 Fehleingaben im nullten Beispiel (2/2) Anpassung des Projektstatus (oder Parameter löschen) in web.xml (Development, UnitTest, SystemTest, Production) <context-param> <param-name>javax.faces.project_stage</param-name> <!-- <param-value>development</param-value> --> <param-value>production</param-value> </context-param> Applikation bleibt auf der Seite, keine sichtbare Fehlermeldung im Server-Log: INFO: WARNUNG: FacesMessage(s) wurde(n) in die Warteschlange gestellt, aber möglicherweise nicht angezeigt. sourceid=j_idt7:mname[severity=(error 2), summary=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.), detail=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.)] 381

70 Direkte Validierungen - einige Möglichkeiten <h:form> <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{modul.name" required="true" size="8" requiredmessage="nich leer" validatormessage="4 Zeichen"> <f:validatelength minimum="4" maximum="4"/> </h:inputtext> <h:message for="mname" /> <h:outputlabel for="mnr" value="modulnummer "/> <h:inputtext id="mnr" value="#{modul.nr" required="true" requiredmessage="eingabe notwendig" size="4" convertermessage="normale Zahl"/> <h:message for="mnr" /> <h:commandbutton value="abschicken" action="#{modul.uebernehmen"/> </h:panelgrid> </h:form> 382

71 Ausgaben beim Drücken von Abschicken 383

72 Globale Fehlermeldungen erzeugen und anzeigen public String uebernehmen() { if (name.equals("ooad")) { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage(); ms.setseverity(facesmessage.severity_error); ms.setsummary("ooad ist schon da"); ms.setdetail("ooad im Standard"); ctxt.addmessage(null, ms); return "ANZEIGEN"; //in ausgabe.xhtml <h:form> <h:messages globalonly="true"/> <h:outputtext value="modulname: "/> 384

73 Validierer selbst gestrickt (1/2) public class Modul implements Serializable {... // Validierungsmethoden können beliebigen Namen haben, // müssen aber die folgende Signatur haben public void pruefe(facescontext context, UIComponent component, Object value) throws ValidatorException { if (((String) value).equals("ooad")) { throw new ValidatorException(new FacesMessage( FacesMessage.SEVERITY_ERROR, "oweh", "ole ole"));... Hinweis: wird?faces-redirect=true genutzt, ist zu ergänzen: context.getexternalcontext().getflash().setkeepmessages(true); 385

74 Validierer selbst gestrickt (2/2) in index.xhtml <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{modul.name" validator="#{modul.pruefe"/> <h:message for="mname" /> 386

75 Anmerkungen zu vorherigen Folien man kann eigene Validierungsmethoden schreiben man könnte auch hier BeanValidation nutzen (folgt danach), muss dies aber selbst zu passenden Ausgaben umwandeln FacesContext ist der zentrale Zugang zu den Innereien von JSF Zugriff bis auf genutzte Servlets mit deren Parametern möglich leider auch eine Art Voodoo-Klasse, da fast die gesamte JSF- Steuerung manipulierbar und so keine JSF-Schicht mehr richtig existiert FacesContext macht Code-Wiederverwendung mit anderen Technologien fast unmöglich (hier gehen z. B. auch einfache Bean-Variablen mit Meldungstexten) 387

76 Erinnerung: Bean Validation nicht: Nutzer Oberfläche Java fachliche Ebene Datenzugriffsschicht DB besser: individuelle Datenvalidierung individuelle Datenvalidierung Java individuelle Datenvalidierung individuelle Datenvalidierung Nutzer Oberfläche fachliche Ebene Datenzugriffsschicht DB Datenmodell mit Validierungsregeln 388

77 Beispiel public class Modul implements Serializable { private static final long serialversionuid = message="dreistellig") private groups={validators.modulgroup.class) private String name; //... übliche Konstruktoren, get und set Hinweis: Implementierung des Validierers in Libraries benötigt (Klasseneigenschaften werden nicht unterstützt!?) 389

78 Beispiel @Constraint(validatedBy = Modulnamenregel { String message() default "Modul unerwuenscht"; Class<?>[] groups() default {; Class<? extends Payload>[] payload() default {; String[] verboten() default {; package validators; public interface ModulGroup { 390

79 Beispiel Bean-Validation (3/6) public class ModulnamenregelValidator implements ConstraintValidator<Modulnamenregel,String>{ private String[] niveau; public void initialize(modulnamenregel ca) { this.niveau=ca.verboten(); public boolean isvalid(string t, ConstraintValidatorContext cvc) { System.out.println("isValid"); for(string s:this.niveau) if(s.equals(t)){ cvc.buildconstraintviolationwithtemplate( "Modul in unerwuenschter Liste: " + Arrays.toString(niveau)).addConstraintViolation(); return false; return true; 391

80 Beispiel Bean-Validation (4/6) - index.xhtml <h:body> <h:form> <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{modul.name"> <f:validatebean disabled="false" validationgroups="validators.modulgroup"/> </h:inputtext> <h:message for="mname" /> <h:outputlabel for="mnr" value="modulnummer "/> <h:inputtext id="mnr" value="#{modul.nr" /> <h:message for="mnr" /> <h:commandbutton value="abschicken" action="#{modul.uebernehmen"/> </h:panelgrid> </h:form> </h:body> 392

81 Beispiel Bean-Validation (5/6) 393

82 Beispiel Bean-Validation (6/6) Bean Validation- (und JPA-) Realisierungen enthalten 394

83 Ordentliche Softwarearchitektur JSF-Seite <<managed-bean>> Controller Bean (Entität) #{controller.bearbeiten #{controller.bean.attribut #{controller.speichern Controller (und Bean) auch backing bean, Handler genannt bei DB-Nutzung greift Controller auf DB-Verwaltungsschicht zu; die verwaltet Bean-Objekte JPA einfach im Controller (besser eigener Schicht) nutzen (später schöner mit JEE als 395

84 6.4 JSF mit EJB und JPA Ziel: einfache Persistierung von Daten (Create, Read, Update, Delete) mit Transaktionssteuerung DB einbinden Kurzer Überblick EJB Controller zur Seitenverwaltung Ausgabe dynamischer Tabellen 396

85 Datenbank in Server einbinden (1/2) Einschub: Nutzung von JPA bei DB im Server Datenbank einrichten Data Source einrichten 397

86 Datenbank in Server einbinden (2/2) Datenbank wird unter JNDI-Namen im Server registriert JSF-Applikation kann über JNDI auf DB zugreifen JSF-Container regelt DB-Zugriff (nicht Nutzer!), typische container-managed Persistance [geht auch individuell] 398

87 beans.xml Für die Nutzung von CDI (Contexts and Dependency Injection) wird Datei beans.xml benötigt, die sich im Ordner WEB-INF befinden muss Wenn nicht da, erzeugen vorletzte Zeile ändern (statt annotated in all) 399

88 EJB-SessionBeans Architekturvariante bisher einfache direkte Software-Architektur (nutzbar für kleinere und mittlere Projekte) Problem: Skalierung nicht unbedingt sichergestellt, da Server nicht im Detail eingreifen kann Problem: direkte Nutzung von JPA wäre sehr bastelig Lösung: Datenbankzugriff in eigene Klasse (Enterprise JavaBean, EJB) auslagern EJB werden vom Server verwaltet (Tempo, Skalierung) EJB werden in Managed Bean injiziert 400

89 EJB - Konzept Standardisierte Komponenten eines JEE-Servers Klassen zur Steuerung von Prozessen und Verwaltung von Daten, die leicht in anderen EJB-Applikationen nutzbar sind Unterstützt mit wenig Aufwand Transaktionssteuerung (Transaktion pro Methodenaufruf) Sicherheitseinstellungen Identifikation von Objekten zur Zusammenarbeit Drei Arten (local und remote Varianten) Entity Bean wie bereits bekannt) Session Bean: Kommunikation mit bei jeder Nutzung neu in einer Session nutzbar Message Driven Bean: asynchroner Nachrichtenablauf 401

90 Systematische Architektur Ansatz: mehrere Schichten, jede Schicht redet nur mit den umgebenden Schichten GUI konsequent vom Rest trennen, um Schicht einfach auszutauschen GUI kennt keine Fachklassen, nur Strings und Zahlen GUI erhält View-Controller, der Zustand des GUIs kennt und Verbindung zur Geschäftslogik enthält Geschäftslogik hat keine Information über GUI Persistenz-Schicht sollte austauschbar sein Hier: konsequenter Einsatz von Injection 402

91 Mini-Beispiel (1/9) Nicht editierbare Aufgabenliste 403

92 Mini-Beispiel (2/9): Architektur 404

93 Mini-Beispiel (3/9): Projektaufbau 405

94 Mini-Beispiel (4/9): public class Aufgabe = GenerationType.AUTO) private int id; private String aufgabe; public int getid() { return id; public void setid(int id) { this.id = id; public String getaufgabe() { return aufgabe; public void setaufgabe(string aufgabe) { this.aufgabe = aufgabe; 406

95 Mini-Beispiel (5/9): Persistenzschicht (1/2) public class MyProducers // evtl. mit Qualifier = "ListeJSFEJBPU") private EntityManager em; Injection passiert mit CDI (Contexts and Dependency Injection, später mehr) mit eigenem Lebenszyklus CDI und EJB getrennte Konzepte so werden EJBs dem CDI-Zyklus angelegtes Objekt über CDI injizierbar Muss! bei vorgeschlagener Architektur 407

96 Mini-Beispiel (6/9): Persistenzschicht public class Persistence private EntityManager em; public void persist(object object) { em.persist(object); //Exception weiterreichen public Object merge(object object) { return em.merge(object); //Exception weiterreichen public List<Aufgabe> findallaufgaben() { return em.createquery("select a FROM Aufgabe a", Aufgabe.class).getResultList(); 408

97 Mini-Beispiel (7/9): // hier wären fachliche Berechnungen public class Modell implements private Persistence db; public List<String> aufgaben(){ List<String> erg = new ArrayList<>(); for(aufgabe a:this.db.findallaufgaben()){ erg.add(a.getaufgabe()); return erg; public void aufgabehinzu(string aufgabe){ Aufgabe a = new Aufgabe(); a.setaufgabe(aufgabe); this.db.persist(a); 409

98 Mini-Beispiel (8/9): = public class ViewModel implements Serializable{ private String private Modell model; public List<String> aufgaben(){ return this.model.aufgaben(); public void aufgabehinzu(){ this.model.aufgabehinzu(this.aufgabe); this.aufgabe = ""; public String getaufgabe() { return aufgabe; public void setaufgabe(string aufgabe) { this.aufgabe = aufgabe; 410

99 Mini-Beispiel (9/9): View <h:head> <title>aufgaben</title> </h:head> <h:body> <h:form id ="form"> <h:outputtext value="aufgabe: "/> <h:inputtext id="aufgabe" value="#{vm.aufgabe"/> <h:commandbutton id="hinzu" value="ok" action="#{vm.aufgabehinzu()"/> <br/> <ui:repeat value="#{vm.aufgaben()" var="a"> #{a <br/> </ui:repeat> </h:form> </h:body> </html> 411

100 public class Modell implements Serializable{ Annotation gehört zu CDI (später) Injiziertes Objekt übernimmt Scope des nutzenden Objekts es werden dann ausschließlich Objekte dieser Klasse vom CDI-Framework erzeugt; nie selbst den Konstruktor aufgerufen // in anderer private Modell model; 412

101 Fallstudie Sprinter Verwaltung von Sprints, in denen BacklogElemente abgearbeitet werden Zu jedem BacklogElement gibt es einen Menge von Mitarbeiten (Teilaufgaben) Jeder Mitarbeiter kann an mehreren Mitarbeiten mitwirken Das Werkzeug soll Informationen über den aktuellen Stand von BacklogElementen und Sprints ausgeben 413

102 Hintergrund Im agilen Vorgehensmodell wird Projekt in mehrere Sprints aufgeteilt (diese Aufgaben stehen im Product-Backlog) Arbeiten in einem Sprint werden Backlog-Elemente genannt Backlog-Elemente werden von Mitarbeitern abgearbeitet Prozess: 1. aus Sprint-Länge und Anzahl der Mitarbeiter wird maximal verfügbare Stundenzahl berechnet 2. Festlegung der (Sprint-)Backlog-Elemente, die im Sprint zu erledigen sind, mit Aufwandsschätzung durch Mitarbeiter 3. Festlegung der durchführenden Mitarbeiter mit Arbeitsanteil 4. ggfls. Anpassung der für Sprint zur Verfügung stehenden Stundenanzahl 414

103 Ausschnitt (eines Sprints) 415

104 Datenmodell 416

105 Zentrale Aufgabe: JSF zur Mitarbeiterverwaltung 417

106 Strategische Entscheidung SessionScoped braucht wesentlich mehr Speicher; wird für Status des Fensters benötigt (Alternativ zwei Fenster) zentrale Frage wann wird auf die Datenbank zugegriffen bei RequestScoped bei Erstellung eines neuen Objekts, d.h. sehr häufig wenn SessionScoped immer aktuell sein soll, dann auch hier sehr häufig (bei jeder Aktion) aktualisieren Kompromiss: am Anfang einmal Lesen und nur, wenn Änderungen nach außen gegeben werden 418

107 Erinnerung: Verwandt mit public class PersistenzService private EntityManager em; wird vom Server gefüllt, (noch) unklar woher public void persist(object object) { em.persist(object); //Exception weiterreichen Transaktion vom Container gesteuert, public Object merge(object object) { keine eigene Steuerung! return em.merge(object); //Exception weiterreichen public List<Mitarbeiter> findallmitarbeiter() { return em.createnamedquery("mitarbeiter.findall").getresultlist();

108 Erzeugen des Persistence-Objekts über CDI import javax.enterprise.inject.produces; import javax.persistence.entitymanager; import javax.persistence.persistencecontext; public class = "SprinterPU") private EntityManager em; Anmerkung: Diese (wenig intuitive) Hilfsklasse ermöglicht flexible Verknüpfung von EJB und CDI Sollen Objekte erzeugt werden können, die in JEE- Klassen nutzbar sind Server verwaltet Verbindung, damit auch Transaktionssteuerung 420

109 persistence.xml (Ausschnitt) <persistence-unit name="sprinterpu" transaction-type="jta"> <provider>org.eclipse.persistence.jpa.persistenceprovider </provider> <jta-data-source>java:app/jdbc/sprinterdb</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="javax.persistence.schemageneration.database.action" value="create"/> </properties> </persistence-unit> 421

110 public class MitarbeiterController implements Serializable PersistenzService auch direkt Objekte nutzbar private List<Mitarbeiter> allemitarbeiter; private Mitarbeiter mitarbeiter; // Hilfsobjekt für Oberfläche private Status modus; // aktuell Status.BASIC oder Status.EDIT private List<Mitarbeiter> alleelemente() { return pers.findallmitarbeiter(); 422

111 MitarbeiterController public void init() { this.mitarbeiter = new Mitarbeiter(); this.modus = Status.BASIC; this.allemitarbeiter = alleelemente(); public String abbrechen() { this.mitarbeiter = new Mitarbeiter(); this.modus = Status.BASIC; return Konstanten.MITARBEITER; public boolean getimeditmodus() { return this.modus.equals(status.edit); garantiert, dass dies Nach der Erstellung und vor anderen Methoden aufgerufen wird (Konstruktor bleibt leer) Zugriff von XHTML- Seite aus, da Methode mit "get" beginnt 423

112 MitarbeiterController (3/6) public String uebernehmen() { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage("Erfolgreich übernommen"); try { if (this.modus.equals(status.edit)) { this.mitarbeiter = (Mitarbeiter) pers.merge(this.mitarbeiter); aktualisieremitarbeiter(this.mitarbeiter); // lokale Liste this.modus = Status.BASIC; else { this.pers.persist(this.mitarbeiter); this.allemitarbeiter.add(this.mitarbeiter); // lokal this.mitarbeiter = new Mitarbeiter(); // neues Hilfsobjekt 424

113 MitarbeiterController (4/6) catch (Exception e) { ms = Utilities.meldung(e); this.allemitarbeiter = alleelemente(); // hier wichtig ctxt.addmessage(null, ms); return Konstanten.MITARBEITER; private void aktualisieremitarbeiter(mitarbeiter m) { int position = -1; for (int i = 0; i < this.allemitarbeiter.size(); i++) { if (this.allemitarbeiter.get(i).getid() == m.getid()) { position = i; this.allemitarbeiter.set(position, m); 425

114 MitarbeiterController (5/6) public String loeschen(long id) { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage("Erfolgreich gelöscht"); ctxt.getexternalcontext().getflash().setkeepmessages(true); try { this.pers.removemitarbeiter(id); loeschemitarbeiter(id); // lokal catch (Exception e) { ms = Utilities.meldung(e); this.allemitarbeiter = alleelemente(); // hier wichtig ctxt.addmessage(null, ms); this.mitarbeiter = new Mitarbeiter(); this.modus = Status.BASIC; return Konstanten.MITARBEITER; 426

115 MitarbeiterController (6/6) public String editieren(long id) { this.mitarbeiter = pers.findmitarbeiter(id); if (this.mitarbeiter == null) { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage("Objekt wurde" + "zwischenzeitlich gelöscht"); ctxt.getexternalcontext().getflash().setkeepmessages(true); ctxt.addmessage(null, ms); this.allemitarbeiter = alleelemente(); // wichtig else { this.modus = Status.EDIT; return Konstanten.MITARBEITER; 427

116 Einschub: Ausgabe von Sammlungen in Tabellen <h:datatable value="#{sprintcontroller.sprints" var="s"> datatable erlaubt die Datenaufbereitung einer Collection in Tabellenform (Iterator über Daten mit getsprints(); Elemente in Variable m); grundlegende Darstellungsmöglichkeiten einstellbar Zur Ausgabe wird minimal <h:column> benötigt Attribut first für erste Zeile und rows für Zeilenzahl Nie, nie Elemente der alten JSTL nutzen <c:foreach> wenn keine Tabelle gewünscht <ui:repeat value= var > nutzt xmlns:ui=" 428

117 Strukturierung in XHTML (Facelets) Templating wird unterstützt auch einfaches inkludieren von Seiten nutzbar, dann wird Header ignoriert Parameter-Übergabe möglich generell (leicht eingeschränkte) Nutzung von CSS möglich (Attribut für jedes Objekt oder/und generell für gerenderte Dateien) <div> - Blöcke (aus HTML) erleichtern Strukturierung generell: JavaScript für einzelne Aktionen nutzbar 429

118 Konzept der Basisseite rahmen.xhtml <h:head> <title>#{titel</title> <h:outputstylesheet library="css" name="tabelle.css" /> </h:head> <h:body> <div id="kopf"> <div id="knopfleiste"> </div> <div id="detailinformation"> <ui:insert name="uebersicht"/> </div> </div> <div id="nachricht" style="height: 45px; overflow: hidden"> <h:messages globalonly="true"/> </div> <div id="hauptteil"> <ui:insert name="inhalt"/> </div> </h:body> 430

119 Ausschnitt mitarbeiter.xhtml (1/4): Kopf/Parameter <html xmlns=" xmlns:h=" xmlns:f=" xmlns:ui=" <h:head> <title>mitarbeiter-bearbeitung</title> <h:outputstylesheet library="css" name="tabelle.css" /> </h:head <h:body> <ui:composition template="./resources/templates/rahmen.xhtml"> <ui:param name="titel" value="mitarbeiter-bearbeitung"/> <ui:param name="sprints" value="true"/> <ui:param name="mitarbeiter" value="false"/> <ui:param name="kanban" value="true"/> <ui:param name="sprintid" value="-1"/> 431

120 Ausschnitt mitarbeiter.xhtml (2/4): Eingabefelder <ui:define name="inhalt"> <h3> Mitarbeiter neu / bearbeiten </h3> <h:panelgrid columns="3" > <h:outputtext value="id "/> h:outputtext value="#{mitarbeitercontroller.mitarbeiter.id" rendered="#{mitarbeitercontroller.imeditmodus"/> <h:outputtext value="wird vom System vergeben" rendered="#{!mitarbeitercontroller.imeditmodus"/> <h:outputtext value=" "/> <h:outputtext value="mitarbeiternummer "/> <h:inputtext id="minr" required="true" value ="#{mitarbeitercontroller.mitarbeiter.minr" requiredmessage="eindeutige Nummer ge 0 angeben" convertermessage="geben ganze Zahl ein"/> <h:message for="minr" style="color:red"/> 432

121 Ausschnitt mitarbeiter.xhtml (3/4): Übersicht <h3> Aktuelle Mitarbeiter </h3> <h:panelgrid rendered ="#{!empty mitarbeitercontroller.allemitarbeiter"> <h:datatable border="1" frame="box" value="#{mitarbeitercontroller.allemitarbeiter" var="m" styleclass="tabelle" headerclass="tabelle-kopfzeile" rowclasses="tabelle-ungerade-zeile,tabelle-gerade-zeile" > <h:column > <f:facet name="header"> <h:outputtext value="id" /> </f:facet> <h:outputlabel value="#{m.id"/> </h:column> 433

122 Ausschnitt mitarbeiter.xhtml (4/4): Aktionen <h:column> <f:facet name="header"> <h:outputtext value="mitarbeiten" /> </f:facet> <h:commandlink value="mitarbeiten" action="#{mitarbeitcontroller.fuermitarbeiter(m)"/> </h:column> <h:column> <f:facet name="header"> <h:outputtext value="editieren" /> </f:facet> <h:commandbutton value="editieren" action="#{mitarbeitercontroller.editieren(m.id)" immediate="true"/> </h:column> 434

123 Analyse erreichter Architektur 435

124 Kritische Analyse der erreichten Architektur für Projektgröße ok evtl. kritisch: JSF-Controller müssen recht detailliert Persistenz steuern, sollten sich aber nur um die Seite kümmern (-> Auslagern der Steuerung in ViewModels) evtl. kritisch JSF-Controller greifen direkt auf Entities zu (die in Data Transfer Objects (DTO) kapseln; hier auch berechnete Werte hinein) neues Problem: recht viel redundanter Code in Controller und ViewModel; DTOs müssen vollständiges ER-Modell abdecken 436

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3)

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3) Standardattribut rendered(1/3) JSF-Elementewerden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elementehaben Attribut rendered; Boolescher

Mehr

4. JEE /JSF / EJB / CDI

4. JEE /JSF / EJB / CDI 4. JEE /JSF / EJB / CDI 4.1 Grundlagen 4.2 Einführendes nulltes Beispiel 4.3 Validierung 4.4 JSF-Lebenszyklus 4.5 JSF mit EJB und JPA 4.6 Detaillierteres Beispiel: Mitarbeiterverwaltung 4.7 Testen von

Mehr

5. JavaServer Faces(JSF)

5. JavaServer Faces(JSF) 5. JavaServer Faces(JSF) Grundlagen Nutzung von JSF-Annotationen Validierung von Eingaben Ausgabe von Fehlermeldungen Auswahl darzustellender Elemente typische elementare Software-Architektur JSF + JPA

Mehr

5. JavaServer Faces (JSF) / JEE

5. JavaServer Faces (JSF) / JEE 5. JavaServer Faces (JSF) / JEE 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 Einschub: Contexts and Dependency-Injection 5.5 JSF mit JPA und JNDI 5.6 Funktionale Erweiterung 5.7

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2018 Michael Theis, Lehrbeauftragter 2 Servlet API Websockets JSF JAX-WS JAX-RS JMS JAXB JSON-P JEE Enterprise Application

Mehr

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2)

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2) Erinnerung: Eine Komponentenarchitektur-Variante Datenbank als zentrale Kommunikationsplattform Ansatz 1: alle Komponenten kennen Entitäten-Modell Ansatz 2: Datenzugriffsschicht kapselt Datenbank Ansatz

Mehr

Multimedia im Netz Wintersemester 2012/13

Multimedia im Netz Wintersemester 2012/13 Multimedia im Netz Wintersemester 2012/13 Übung 10 Ludwig-Maximilians-Universität München Multimedia im Netz WS 2012/13 - Übung 10-1 Lösung zu Übungsblatt 08 Ludwig-Maximilians-Universität München Multimedia

Mehr

Web-Anwendungen mit JavaServer Faces

Web-Anwendungen mit JavaServer Faces Web-Anwendungen mit JavaServer Faces Seminarunterlage Version: 3.06 Version 3.06 vom 1. September 2016 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

4. Servlets Ein kleiner Einstieg

4. Servlets Ein kleiner Einstieg 4. Servlets Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web Servern und Containern Erstellung einfacher Servlets (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K.

Mehr

Programmierung von Client/Server- Anwendungen

Programmierung von Client/Server- Anwendungen Programmierung von Client/Server- Anwendungen Komponenten des Web-Containers (Java EE) SoSe2015 Prof. Dr. Andreas Schmietendorf 1 Übersicht zur Vorlesung Entwicklung der Java Enterprise Edition Servlets,

Mehr

4.5 JSF mit EJB und JPA

4.5 JSF mit EJB und JPA 4.5 JSF mit EJB und JPA Ziel: einfache Persistierung von Daten (Create, Read, Update, Delete) mit Transaktionssteuerung DB einbinden Kurzer Überblick EJB Controller zur Seitenverwaltung Ausgabe dynamischer

Mehr

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Komponentenorientierte Software-Entwicklung. Seite 1 / 42 Seite 1 / 42 Wiederholung Messaging Java Messaging Service (JMS) Pub/Sub P2P Messaging Middleware XMPP-Protokoll Java API for XML-Processing (JAXP) Java API for XML-Binding Webservices / SOA Simple Object

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 6.

Mehr

Persistenz. Ralf Gitzel

Persistenz. Ralf Gitzel Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte

Mehr

Facelets. - der Durchbruch für JavaServer Faces?

Facelets. - der Durchbruch für JavaServer Faces? Facelets - der Durchbruch für JavaServer Faces? Andy Bosch IT-Berater und Projektleiter Autor des JavaMagazins, JavaSpektrums und des ObjektSpektrums SENS-Experte, www.softwareexperts.de Betreiber von

Mehr

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009 JBoss Seam Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009 Inhalt Einführung Warum Seam? Zentrale Konzepte Demo Validierung Abschliessende Gedanken 04.02.2009 Infopoint - JBoss Seam - Jörg

Mehr

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH Erfahrungen und Erkenntnisse Klaus Richarz, HBT GmbH Java Enterprise Edition 5.0 JBoss Seam Konsequenzen für Realisierung Qualitätssicherung Build & Deployment Fazit & Empfehlungen JBoss Seam in Projekten,

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

4. JavaServer Faces (JSF) / JEE

4. JavaServer Faces (JSF) / JEE 4. JavaServer Faces (JSF) / JEE 4.1 Grundlagen 4.2 Einführendes nulltes Beispiel 4.3 Validierung 4.4 JSF mit EJB und JPA 4.5 Get 4.6 Sicherheit 4.7 Weitere JSF-Möglichkeiten 4.8 JSF-Lebenszyklus 4.9 Templates

Mehr

Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE. Vorstellung

Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE. Vorstellung Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE http://www.frotscher.com @thfro thilo@frotscher.com Vorstellung Softwarearchitekt, Entwickler und

Mehr

Session Beans & Servlet Integration. Ralf Gitzel

Session Beans & Servlet Integration. Ralf Gitzel s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Aufbau einer Stateless s Stateful s Web Client Offene Antwort von

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

<Insert Picture Here> Clean Code in der Java EE - Welt

<Insert Picture Here> Clean Code in der Java EE - Welt Clean Code in der Java EE - Welt Alexander Fox Senior Berater Agenda Dauer ca. 45 Minuten Einführung und Allgemeines zu Clean Code Clean Code in Java Clean-Code

Mehr

5. JavaServer Faces (JSF)

5. JavaServer Faces (JSF) 5. JavaServer Faces (JSF) 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 JSF mit JPA und JNDI 5.5 Kompakt: EJB-SessionBeansund CDI 5.6 Funktionale Erweiterung 5.7 Sicherheit 5.8 Weitere

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

JSF 2 - Kompositkomponenten

JSF 2 - Kompositkomponenten THE SOFTWARE EXPERTS JSF 2 - Kompositkomponenten Kompositkomponenten im Einsatz Gerald Müllan IRIAN THE SOFTWARE EXPERTS Agenda Motivation JSF 2-Ressourcenverwaltung Einführung Kompositkomponenten Erweiterte

Mehr

Webanwendungen mit Java und JavaServerPages

Webanwendungen mit Java und JavaServerPages Webanwendungen mit Java und JavaServerPages ohne JS und ohne Framework Michael Dienert 24. Februar 2016 Inhaltsverzeichnis 1 model2 mit Netbeans und tomcat 1 1.1 Projekt anlegen.............................

Mehr

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI Java-Applets Unterlagen zum Modul OOP mit Java V 3.0 2007 by WBR1/BFH-TI 2011 by MOU2/BFH-TI Java-Applets V3.0 2011 by WBR1&MOU2/BFH- TI Lernziele Die Kursteilnehmer sind in der Lage: Möglichkeiten und

Mehr

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi Projektgruppe Thomas Kühne Komponentenbasiertes Software Engineering mit OSGi Anforderungen der PG IDSE an ein Komponenten- Client Nativer Client Web Client Alternativen IDSE Nutzer Szenario Pipe IDSE

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Enterprise JavaBeans Überblick: 12. Session Facade Einleitung 12.2 Problem 12.3 Lösung. Prof. Dr. Björn Dreher Liste V Enterprise JavaBeans 460

Enterprise JavaBeans Überblick: 12. Session Facade Einleitung 12.2 Problem 12.3 Lösung. Prof. Dr. Björn Dreher Liste V Enterprise JavaBeans 460 Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Probleme bei der Nutzung der Bean Validation in JPA

Probleme bei der Nutzung der Bean Validation in JPA Probleme bei der Nutzung der Bean Validation in JPA Die aktuelle Netbeans-Installation 6.9.1 bietet als JPA-Realisierung EclipseLink in der Version 2.0.2, die in der Zusammenarbeit mit der Referenzimplementierung

Mehr

Freundliche Eindringlinge. Moderne Web- Applika1onen mit CDI

Freundliche Eindringlinge. Moderne Web- Applika1onen mit CDI Freundliche Eindringlinge Moderne Web- Applika1onen mit CDI Norman Erck Holis1con AG - Management- und IT- Beratung Architektur Agil/Projektmanagement BPM/SOA Berater Architektur ebusiness Web- Technologien

Mehr

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte

Mehr

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Play Framework, MySQL, JPA, HQL, HTML, jquery, Play Framework, MySQL, JPA, HQL, HTML, jquery, Wer Mit wem Resultat 1.Kunde Schalter: Bibliothekarin Bestimmt,welcher Archivar die Zeitschrift holen geht 2. Schalter: Bibliothekarin Archivar Kontrollübergabe

Mehr

Erste Schritte mit JavaServer Faces und MyEclipse. Allgemeines. Erstellen eines JavaServer Faces Projektes

Erste Schritte mit JavaServer Faces und MyEclipse. Allgemeines. Erstellen eines JavaServer Faces Projektes Erste Schritte mit JavaServer Faces und MyEclipse Dieses Tutorial soll den Einstieg in das noch recht neue Framework, JavaServer Faces (JSF), erleichtern. Es wird Schritt für Schritt eine Beispiel-Anwendung

Mehr

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs 4. s Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web n und Containern Erstellung einfacher s (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K. Sierra, B. Bates, Head

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Java - Webapplikationen

Java - Webapplikationen Java - Webapplikationen Bestandteile (HTTP,, JSP) Aufbau (Model View Controller) Datenverwaltung (Java Beans, Sessions) Entwicklung (Projektstruktur, Sysdeoplugin für Eclipse) 17. Januar 2006 Jan Hatje

Mehr

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel ralf_gitzel@hotmail.de 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.

Mehr

JavaServer Faces Ein Arbeitsbuch für die Praxis

JavaServer Faces Ein Arbeitsbuch für die Praxis Bernd Müller JavaServer Faces Ein Arbeitsbuch für die Praxis HANSER Inhaltsverzeichnis Vorwort XI 1 Einleitung 1 1.1 Das Ziel dieses Buches 1 1.2 Der Leser 3 1.3 Das Buch im Netz 4 1.4. Verwendete Software

Mehr

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans Projekt Entwicklung verteilter Softwaresysteme mit Web Services SoSe 2008 - Java Server Pages und Servlets - 7. April 2008 Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität

Mehr

Agenda. Einleitung. Einbinden von JSF AJAX Beispiele Komponenten Entwicklung PrimeFaces Praktikum. Was ist JSF Aufbau und Techniken HTML vs.

Agenda. Einleitung. Einbinden von JSF AJAX Beispiele Komponenten Entwicklung PrimeFaces Praktikum. Was ist JSF Aufbau und Techniken HTML vs. JavaServer Faces E-Commerce (WS 2011/12) Fachhochschule Münster FB02 Elektrotechnik und Informatik Referenten: Matthias Wellmeyer, Sven Wermers, Malte Wesker Agenda Einleitung Was ist JSF Aufbau und Techniken

Mehr

JavaServer Faces. JSF die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE. Michael

JavaServer Faces. JSF die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE. Michael JavaServer Faces JSF 2.3 - die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE Michael Müller @muellermi Referent Michael Müller Mehr als 35 Jahre Softwareentwicklung Bereichsleiter Softwareentwicklung

Mehr

JavaServer Faces 2.2

JavaServer Faces 2.2 D3kjd3Di38lk323nnm Michael Kurz Martin Marinschek JavaServer Faces 2.2 Grundlagen und erweiterte Konzepte 3., vollständig überarbeitete Auflage Michael Kurz / Martin Marinschek, JavaServer Faces 2.2, dpunkt.verlag,

Mehr

Hauptseminar Informatik. Java Web Frameworks Alexander Löser

Hauptseminar Informatik. Java Web Frameworks Alexander Löser Hauptseminar Informatik Java Web Frameworks 14.06.2002 Alexander Löser Gliederung Frameworks Model View Controller Struts Turbine Barracuda Expresso Fazit Hauptseminar Informatik: Java-Web-Frameworks (Alexander

Mehr

Kompendium der Web-Programmierung

Kompendium der Web-Programmierung . Thomas Walter Kompendium der Web-Programmierung Dynamische Web-Sites Mit 510 Abbildungen und 22 Tabellen 4ü Springer OOM- Hinweise zum Gebrauch des Buches XIII Teil I Grundlagen der Web-Programmierung

Mehr

DB-Aspekte des E-Commerce Schwerpunkt: Techniken. Servlets und JavaServer Pages

DB-Aspekte des E-Commerce Schwerpunkt: Techniken. Servlets und JavaServer Pages Seminar DB-Aspekte des E-Commerce Schwerpunkt: Techniken Servlets und JavaServer Pages Boris Stumm Servlets und JavaServer Pages 1 Inhalt Einführung Technologie der Servlets und JavaServer Pages Umgebung

Mehr

Benutzeroberflächen mit JSF 2.2

Benutzeroberflächen mit JSF 2.2 Benutzeroberflächen mit JSF 2.2 Studienarbeit zum FWP-Modul Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Nikola Topalovic, IB4C Agenda 1 Einführung 2 JSF 2.1 Grundlegendes 2.2 Softwareumgebung

Mehr

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets - Praktikum Datenbanken und verteilte Systeme SS 2008 - Java Server Pages und Servlets - Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität Hamburg Infrastruktur vsispoolx

Mehr

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk Workshop Java Webentwicklung Einführung in Hibernate Ulrich Stärk Ablauf Montag bis Donnerstag 09:00 Uhr s.t. Beginn, bis ca. 17:00 Uhr 1 Stunde Mittagspause Donnerstag Experiment Aufzeichnung der Programmiertätigkeit

Mehr

Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP

Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP Thorsten Berger Diplomstudiengang Informatik 8. Semester 10. Juli 2005 Einführung 1. Einführung Portal-Begriff Vorteile Software 2. Java-Portlet-Standard

Mehr

Java Persistence API. Phillip Ghadir Oliver Tigges

Java Persistence API. Phillip Ghadir Oliver Tigges Phillip Ghadir phillip.ghadir@innoq.com Oliver Tigges oliver.tigges@gmx.de Was wissen Sie in 45 Minuten? Wie man mit JPA entwickelt. Dass wir viele Eigenschaften von JPA ausgelassen haben. Dass Sie nicht

Mehr

Enterprise Java Beans Einführung

Enterprise Java Beans Einführung 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

Mehr

D.18 D.20 D Java-Server-Pages. 4 Java-Server-Pages (2) 4.1 Auszeichnungen. 4.2 Deployment. Nachteil von Servlets

D.18 D.20 D Java-Server-Pages. 4 Java-Server-Pages (2) 4.1 Auszeichnungen. 4.2 Deployment. Nachteil von Servlets 4 Java-Server-Pages Nachteil von Servlets Programmieraufwand für fast vollständig statische Web-Inhalte z.b. lediglich Page-Counter hinzuzufügen z.b. lediglich wenige benutzerspezifischen Teile anzupassen

Mehr

2. Bean Validation. Java Bean

2. Bean Validation. Java Bean 2. Bean Validation Java Bean Annotationen zur Validierung von Java Beans Auswertung von Bean Annotationen Gruppierung von Bean Annotationen Erstellung eigener Bean Annotationen 80 Java Bean Ist die Spezifikation

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1 FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2017 2017 Michael Theis, Lehrbeauftragter 1 2 Servlet API Websockets JSF JAX-WS JAX-RS JMS JAXB JSON-P JEE Enterprise

Mehr

Faclets. Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz

Faclets. Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz Facelets Faclets Eine alternative View Technologie um JSF Applikationen OHNE JSP zu entwickeln Wird unter java.net gehostet Open Source, CDDL Lizenz (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE) Von Jacob

Mehr

The Power of JSF 2.0

The Power of JSF 2.0 The Power of JSF 2.0 - Sieben Thesen und Antithesen - Andy Bosch Freier Berater und Trainer Betreiber von www.jsf-forum.de SENS-Experte (www.softwareexperts.de) Was habe ich in den nächsten 45 Minuten

Mehr

Stefan Zörner. Portlets. Portalkomponenten in Java. ntwickier

Stefan Zörner. Portlets. Portalkomponenten in Java. ntwickier Stefan Zörner Portlets Portalkomponenten in Java ntwickier Vorwort 9 1 Portalkomponenten in Java 11 1.1 Hype beiseite 11 Was ist ein Portal? 11 Portalkomponenten in Java 14 Das Portlet-Ökosystem 16 1.2

Mehr

Webtechnologien. Stunde 6 ( ) - HTTP - HTML - Servlets - AJAX. Verschoben haben wir - JSP (Java Server Pages) - JSF (Java Server Faces)

Webtechnologien. Stunde 6 ( ) - HTTP - HTML - Servlets - AJAX. Verschoben haben wir - JSP (Java Server Pages) - JSF (Java Server Faces) Stunde 6 (2006-05-26) Webtechnologien - HTTP - HTML - Servlets - AJAX Verschoben haben wir - JSP (Java Server Pages) - JSF (Java Server Faces) Gemäß Ihres Wunsches verschieben wir die Stunden vom 30. Juni

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Präsentation zur Diplomarbeit von Übersicht Java 2 Enterprise Edition Java Servlets JavaServer Pages Enterprise JavaBeans Framework

Mehr

JSF Basics. Ralf Gitzel

JSF Basics. Ralf Gitzel JSF Basics Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Konzepte von JSF Managed Beans Expression Language Grundlegende JSF Tags 3 Konzepte von JSF

Mehr

Contexts and Dependency Injection. W3L AG info@w3l.de

Contexts and Dependency Injection. W3L AG info@w3l.de 1 Contexts and Dependency Injection W3L AG info@w3l.de 2015 2 Inhaltsverzeichnis Teil 1: Motivation Teil 2: Inversion of Control Teil 3: Contexts and Dependency Injection Teil 4: Beispiel zurück 3 Motivation

Mehr

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo Webentwicklung mit Vaadin 7 Theoretische und praktische Einführung in Vaadin 7 Christian Dresen, Michael Gerdes, Sergej Schumilo Agenda Allgemeines Architektur Client-Side Server-Side Vaadin UI Components

Mehr

Programmierung von Java- Webanwendungen. paluno

Programmierung von Java- Webanwendungen. paluno Programmierung von Java- Webanwendungen Gliederung 1 Vorstellung und Einführung 2 Basiswissen Web 3 XML und JSF- Einführung 4 JSF- Komponenten und RichFaces 5 Wiederholung der ersten Woche 6 JSF- Konzepte

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1 FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2017 2017 Michael Theis, Lehrbeauftragter 1 2 Java EE Spezifikation definiert ein Programmiermodell für Applikationen

Mehr

Vortrag. Thema: Apache Struts + Tiles

Vortrag. Thema: Apache Struts + Tiles Vortrag Thema: Apache Struts + Tiles Mohamed Haji Julian Cordes Robin Röttger Web 2.0 WS 2014/2015 1 Inhalte 1. Einleitung 2. Grundlegendes mit Struts 3. Apache Tiles (mit Struts) 4. Praktikum 5. Diskussion

Mehr

Fallstricke bei der Entwicklung einer JEE6 Anwendung

Fallstricke bei der Entwicklung einer JEE6 Anwendung DOAG 2012 Fallstricke bei der Entwicklung einer JEE6 Anwendung Moritz Lippe www.syntegris.de syntegris information solutions GmbH, Hermannstr. 54-56, 63263 Neu-Isenburg Firmenprofil gegründet am 01. September

Mehr

Schritt 4: Hallo Enterprise Bean

Schritt 4: Hallo Enterprise Bean Prof. Dr. Th. Letschert FB MNI JEE Schritt 4: Hallo Enterprise Bean Einstieg: EJBs erzeugen und nutzen Meine erstes EJB Projekt Enterprise Beans sind eine Backend Technologie, die mit unterschiedlichen

Mehr

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung

Mehr

FH LU JEE Vorlesung SS Ralf Gitzel

FH LU JEE Vorlesung SS Ralf Gitzel FH LU JEE Vorlesung SS 2016 Ralf Gitzel ralf_gitzel@hotmail.de 1 Einführung + Organisatorisches Ralf Gitzel ralf_gitzel@hotmail.de 2 Dozent Dr. Ralf Gitzel Promotion an der Universität Mannheim in Wirtschaftsinformatik

Mehr

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful

Mehr

Model-Driven Development in der Praxis. mit objectif. Herzlich willkommen

Model-Driven Development in der Praxis. mit objectif. Herzlich willkommen Model-Driven Development in der Praxis mit objectif Herzlich willkommen Die Themen: microtool stellt sich vor live Model-Driven Development die Grundlagen Model-Driven Development von Web-Anwendungen in

Mehr

Fortgeschrittene JSF- Techniken. Ralf Gitzel

Fortgeschrittene JSF- Techniken. Ralf Gitzel Fortgeschrittene JSF- Techniken Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Navigation Konvertierung von Eingabewerten Verifizierung von Eingabewerten

Mehr

Übung 1: Object Inspector

Übung 1: Object Inspector Übung 1: Object Inspector Es ist ein System zu entwickeln, mit dem man Objektstrukturen bezüglich ihrer Properties analysieren und dann in einem Tree Viewer (JTree) anzeigen und bearbeiten kann. Properties

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 11

Praktikum aus Softwareentwicklung 2, Stunde 11 Praktikum aus Softwareentwicklung 2, Stunde 11 Lehrziele/Inhalt 1. Java Servlet Java Servlet Java Servlets sind auf Java basierende Web-Komponenten. Sie werden von einem Container verwaltet und können

Mehr

Introduction to JSF technology and Rapid Application Development Roland Zänger

Introduction to JSF technology and Rapid Application Development Roland Zänger Introduction to JSF technology and Rapid Application Development Roland Zänger University of Paderborn Business Computing 2 Information Management & Office Systems Faculty of Business Administration, Business

Mehr

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de JSP Grundlagen JEE Vorlesung Teil 5 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept Model-View-Controller mit JSPs JSP Expression Language EL Literale

Mehr

Es wird das Struts <html:options> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Es wird das Struts <html:options> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder

Mehr

Bean-Mapping mit MapStruct

Bean-Mapping mit MapStruct Machst Du noch Reflection oder annotierst Du schon? Bean-Mapping mit MapStruct Thomas Much thomas@muchsoft.com www.muchsoft.com 1 20 Jahre Java, 18 Jahre Beans JavaBeans JAXBEntities 2015 2006 2005 2000

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Entwicklung von Web-Anwendungen auf JAVA EE Basis

Entwicklung von Web-Anwendungen auf JAVA EE Basis Entwicklung von Web-Anwendungen auf JAVA EE Basis Java Enterprise Edition - Überblick Prof. Dr. Bernhard Schiefer Inhalt der Veranstaltung Überblick Java EE JDBC, JPA, JNDI Servlets, Java Server Pages

Mehr