Download - Das Java-Spring-Framework in der Praxis
Ihr Partner für IT Schulung
g GFU Cyrus AG
"Semicolon" Vortragsreihe bei der GFU
Vortrag am Dienstag, 12. Mai 2009
Thema
Das Java Spring-Framework in der Praxis
Einführung
Peter Hecker, GFU Cyrus AG
Vortrag
Dipl. Inform. Torsten Friebe
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 1
Disclaimer
Dieses Folienset ist nicht zum Selbststudium geeignet!
Bitte konsultieren Sie die Literatur- und Referenzliste am Ende der
Foliensammlung für Verweise zu Referenzhandbüchern und weiteren
Informationsquellen!
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 3
Das Spring Framework
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 4
Wer spricht zu Spring?
● Torsten Friebe● GFU-Trainer seit 2006● selbständiger IT-Berater seit 1997● Schwerpunkt: Architekturen mit Java● Projekterfahrung mit Spring seit 2005
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 5
Was gibt’s zu sehen?
● Folien (ca. 42 Minuten)– Ideen zu sauberen Code– Spring Framework
● Live Demo (ca. 10 Minuten)– mit ein bisschen Java Code (frisch!)– und XML-Gemüse– angerichtet mit Eclipse, JUnit und Java
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 6
Auf geht's...
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 7
Jedes Projekt ist eine Reise
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 8
im goldenen Dreieck
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 9
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 10
... doch war das das Ziel?
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 11
Der Guru sagt: Das V-Modell löst alle Probleme
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 12
Was macht Projekte erfolgreich?
• Kriterien für das Produkt:–erfüllt den Zweck–billig in der Herstellung– leicht zu warten–möglichst fehlerfrei
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 13
Erfolgreiche Produkte
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 14
Falsche Anforderungen?
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 15
Anforderungsmanagment in der Praxis
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 16
Kommunikation
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 17
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 18
Big Design Up Front
Quelle: Neal Ford, http://www.nealford.com
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 19
Clean Code
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 20
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 21
Sauberer Code
• Lesbare API• Aussagekräftige Namen für Klassen,
Methoden, Attribute• gutes Fehler-Handling• keine Verschleierung der
Problemstellung und -domäne• Klarer Kontext• Unit-Tests sind vorhanden
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 22
Warum testen?
• „It is professionally irresponsible – to not write tests – to use the most cumbersome tools“– to write unit tests without asserts!
Quelle: Neal Ford, http://www.nealford.com
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 23
Party time it's a Spring-Break
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 24
Spring und ...
Software-Software-Entwicklung mit Entwicklung mit Java EnterpriseJava Enterprise
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 25
Probleme bei der Java SE/EE Entwicklung
● Zu starke Abhängigkeit vom Container● JEE-Anwendung insb. EJB's sind
schwer zu testen● Verstoß gegen OO-Paradigma -
gerade bei EJB 2.x● Zu viele JEE spezifische Idiome● Zu komplex und viel zu teuer
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 26
„J2EE-Development without EJB“
● Focus auf fachliche Anforderungen● Elegantes OO Design das
Wiederverwendung erlaubt– Arbeiten mit Domain Objekten
● Leichte Testbarkeit der Anwendung● Steigerung der Produktivität● Einfachheit
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 27
Spring – DAS JEE Framework?
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 28
Anti-Pattern: Silver Bullet
„A silver bullet is a method to kill mythical creatures such as werewolves or a metaphor for any solution of extreme effectiveness.“ (aus Wikipedia.org)
siehe auch Anti-Pattern „Golden Hammer“
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 29
Und was kann Spring?
● Vereinfachte und vereinheitlichte API-Schicht über viele Java-SE-APIs, Java-EE-APIs und Open-Source-Frameworks
● Aufbau von Objektnetzen mit Dependency Injection (DI)
● Unterstützung für aspektorientierte Programmierung (AOP)
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 30
● Enterprise Anwendungen basierend auf POJOs (Plain Old Java Objects)– Persistenz mit ORM oder nativen JDBC– Webanwendungen mit Spring MVC und
WebFlow– Web Services mit Spring Web Services– u.v.m.
Einsatzbereiche von Spring
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 31
Ursprung und Verfügbarkeit
● Gegründet 2003 von Rod Johnson (Version 1.0 wurde 2004 publiziert)
● Spring wird heute von SpringSource Inc. entwickelt
● Ist Open-Source (Apache License 2.0) und kann kostenfrei eingesetzt werden
● Download unter:http://www.springframework.org/
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 32
Module des Spring Frameworks
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 33
Inversion of Control (IoC)
● IoC Paradigma beschreibt die Arbeitsweise von Frameworks
● Nicht die Anwendung steuert den Kontrollfluss, sondern das Framework
● Beispiel in Java sind Listener● Sogenanntes „Hollywood-Prinzip“:
"don't call us, we'll call you"
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 34
Dependency Injection (DI)
● Ist ein Entwurfsmuster („Fabrik“)● Dient zur Erzeugung von
Objektnetzen● Überträgt die Verantwortung für das
Erzeugen von Objekten an das Framework
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 35
IoC und Formen der DI
Dependency LookupErzeugung der Objekte durch
Container-spezifische API
Dependency InjectionObjekte werden über Sprach-Level
Abhängigkeiten erzeugt
Setter InjectionObjekte werden JavaBean
Eigenschaften erzeugt
Inversion of ControlFramework verwaltet
Lebenszyklus der Objekte
Constructor InjectionObjekte werden über
Konstruktor-Argumente erzeugt
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 36
Spring Konfigurationsdatei
● Beschreibt das Objektnetz● Beinhaltet ganz normale Java Objekte
(POJOs)● Die Objekte heissen „Spring-Beans“● Jedes Spring-Bean hat einen Namen
bzw. eine ID– und man kann diesem einen Wert oder
eine Referenz zuweisen
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 37
Singleton-Pattern
● Alle Spring-Beans sind Singletons● Konsequenzen:
– Methoden müssen Thread-Safe sein– Geschäftsobjekte sollten nicht über die
Spring Konfiguration erzeugt werden– Der Scope „Prototype“ erzeugt mehrere
Instanzen eines Spring-Beans
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 38
Spring Konfiguration
SpringContainer
pojo-2
pojo-3
pojo-1
Application
<beans>... <bean id=“pojo-1“ ...> <... ref=“pojo-2“/> </bean> <bean id=“pojo-2“ ...> <... ref=“pojo-3“/> </bean> <bean id=“pojo-3“ ...>
<... value=“Hello!“/> </bean>...</beans>
getBean(„pojo-1“)
create
create
create
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 39
Spring und ...
PersistenzPersistenz
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 40
Persistenz mit Spring
● Template und DaoSupport für:– JDBC – iBATIS – Hibernate– JPA – Java Persistence API (EJB 3.0)– JDO – Java Data Objects– Oracle TopLink
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 41
JDBC Template
● Die JdbcTemplate-Klasse vereinfacht den Datenbankzugriff mittels JDBC– Keine Programmierung von
try/catch/finally nötig– Vereinheitlichte SQLExceptions– Austauschbare Datenquellen
(javax.sql.DataSource)
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 42
Vorteile des JDBC Templates
Macht Benutzung von JDBC deutlich einfacher Wandelt Exceptions in RuntimeExceptions
um Isoliert vom Rest von Spring nutzbar (spring-jdbc.jar)
Verwenden von: RowMapper oder ResultSetExtractor in query Methoden
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 43
Welche Technologie für den Datenbankzugriff?
● JDBC für– Stored Procedures– Optimierte Massenabfragen
● iBATIS für – Datenbank-zentrierte Systeme
● O/R Mapper wie Hibernate/JPA für– Komplexe Datenmodelle
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 44
Spring und ...
AOPAOP
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 45
AOP
Aspektorientierte Programmierung Konzept für Cross-Cutting ConcernsDRY-Prinzip: „Don't repeat yourself“Kernbegriffe:
Pointcut, Join point, Advice, Advisor,...
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 46
AOP Kernbegriffe
Aspect: Modularisierung eines Cross-Cutting Concerns
Cross-Cutting Concern:Sind querschnittliche Belange einer Software wie z.B. Logging, Tracing, Security und Fehlerbehandlung
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 47
AOP Kernbegriffe
Join point:Ein Punkt während der Programmausführung, z.B. Aufruf einer Methode
Pointcut:Ist eine Beschreibung (Muster) für einen Join point, z.B.:@Pointcut("execution(public * *(..))")
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 48
AOP Kernbegriffe
Advice:Aktion die zu einem Join point ausgeführt wird
Advisor:Representiert einen Aspekt durch das Advice und den Pointcut.
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 49
AOP Kernbegriffe
Introduction:Das Einfügen von Methoden oder Feldern in eine Klasse
Weaving:Zusammenführen (einweben) von Aspekten in bestehenden Programmcode
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 50
Spring AOP
Basiert auf Dynamic ProxiesEinsatz u.a. bei
–Tracing–Transaktionskontrolle–Security
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 51
Spring und AspectJ
● Spring 2.0 unterstützt AspectJ-Syntax● Aspekte können über @Aspect-
Annotation markiert werden● Konfiguration mit <aop:*/> in der
Spring-Konfigurationsdatei
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 52
Transaktionsmanagement
● Spring unterstützt deklarative Transaktionssteuerung
● Verwendet Spring-AOP – TransactionInterceptor
● ermöglicht hohe Flexibilität, z.B. Standalone-Betrieb oder Ablauf im J2EE-Container
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 53
Spring Transaktionsmanager
● Abstraktion von API's für Transaktionen in Java
● Spring bietet Implementierungen von PlatformTransactionManager für– JDBC– ORM-Frameworks wie z.B. Hibernate– JMS, JCA, JTA
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 54
Spring und ...
Web Web AnwendungenAnwendungen
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 55
Model-View-Controller Pattern
View Controller
Model
<<Präsentationsschicht>> <<Geschäftslogikschicht>>
<<Datenschicht>>
Web-Client
Darstellungerzeugen
<<Web-Container>>
Umwandlungder Parameter
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 56
Spring MVC
● Implementierung von MVC2● Management von Web Komponenten
(z.B. wie das Controller-Servlet)● Request Routing zu Handlern● Data Binding und Validierung● Testbarkeit von Web Komponenten
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 57
Spring Web Flow
● Spring Web Flow ergänzt Spring MVC– Page Flow Management – Management von conversational state
● Anwendungsgebiete:– Komplexe zustandsbehafte Seiten
Abfolgen– Kontrollierte Navigation– Flow Historie
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 58
Integration anderer View-Technologien
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 59
Welche Technologie für die Webentwicklung?
● Spring MVC für– Einfache Web-Anwendungen
● Spring WebFlow für– Komplexere, statusbehaftete
Anwendungen mit Seiten-Navigation● Spring und JSF für
– Web-Anwendungen mit UI-Komponenten
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 60
Spring und ...
Web ServicesWeb Services
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 61
Spring und Web Services
● Spring Framework und Spring Web Services
● Spring Remoting● Spring mit Apache CXF (Celtix+XFire)● Spring und Apache Axis / Axis2
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 62
Weitere Spring Features
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 63
Typische Architektur einer Spring-Anwendung
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 64
Ausblick auf Spring 3.0
Unterstützung von Java SE >=1.5 mehr Annotationen aus
JSR 220 (EJB 3.0) JSR 250 (Common Annotations) JSR 299 (Web Beans)
RESTful im Web Expression Language
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 65
Demo
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 66
Money, Money, Money
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 67
Fazit
● Leichte Testbarkeit von Code● Programmierung gegen Interfaces● Einfachere Nutzung von API's● Code weitgehend unabhängig vom
Spring Framework● Keine Zwänge: Man muss nicht alles
von Spring nutzen
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 68
Grüne Welle für Spring?
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 69
Die Schattenseiten
● Spring ist kein Standard und wird wahrscheinlich nie Standard werden
● noch Open-Source, aber wie geht es mit SpringSource Inc. weiter?
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 70
Die Folgen
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 71
Glue Code
● Beinhaltet keine Funktionalität
● Klebt verschiedene Bibliotheken zusammen
● Integriert andere Systeme
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 72
Code Cleaner
● Überflüssigen Code entfernen
● Refactorings konsquent durchführen
● Duplikate entfernen● Zyklische
Abhängigkeiten vermeiden
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 73
Anti-Pattern: Big Ball of Mud
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 74
Wie baue ich eine Stadt?
Quelle: CodeCityhttp://www.inf.unisi.ch/phd/wettel/codecity.html
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 75
Das Spring Framework und ...
das das Seminar-Angebot Seminar-Angebot
derderGFU Cyrus AGGFU Cyrus AG
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 76
Spring Seminar bei der GFU
Erstes Seminar Mai 2007seitdem 6 offene Seminare mit35 Teilnehmern
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 77
GFU Seminar S806
● Zielgruppe: – Java Entwickler und Architekten mit
guten Java Kenntnissen● Agenda:
– http://www.gfu.net/seminare-schulungen-kurse/java_sk5/spring_framework_s806.html
● Dauer:– 3 Tage
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 78
Weitere GFU-Seminare zu Spring
Spring kompaktSpring und Datenbanken: Persistenz mit JDBC, Hibernate, JPA und iBatisSpring im Web mit WebFlow und JSFWeb Services mit Spring
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 79
je 1 Tropfen:je 1 Tropfen:TDDTDDOOPOOP
IoC + DIIoC + DIAOPAOP
... führt zu ... führt zu WohlbefindenWohlbefinden
Fit durch den Frühling mit ...
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 80
Und zum Schluss ...
F & A
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 81
Literatur [1]
[BHSS06] Hibernate/Persistenz in Java-Systemen mit Hibernate 3: R. Beeger, A. Haase, S. Roock, S. Sanitz. dpunkt.verlag. 2006. ISBN: 3-89864-371-9.
[FTW07] Java Web Services mit Apache Axis2: Thilo Frotscher, Marc Teufel, Dapeng Wang. Entwickler.Press. 2007. ISBN: 978-3-935042-81-9.
[HM05] Pro Spring: From Professional to Expert: Rob Harrop, Jan Machacek. APress. 2005. ISBN: 1590594614.
[Jo02] Expert One-on-one J2EE Design and Development: Rod Johnson. Wiley & Sons. 2002. ISBN: 0764543857.
[JH04] Expert One-on-One – J2EE Development without EJB: Rod Johnson, Jürgen Höller. Hungry Minds Inc,U.S. 2004. ISBN: 0764558315.
[JHA05] Professional Java Development with the Spring Framework: Rod Johnson, Jürgen Höller, Alef Arendsen. Wiley & Sons. 2005. ISBN: 0764574833.
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 82
Literatur [2]
[LS07] Building Spring 2 Enterprise Applications: Seth Ladd, Bram Smeets. APress. 2007. ISBN: 1590599187.
[LD06] Expert Spring MVC and Web Flow: Seth Ladd, Darren Davison, Steven Devijver. APress. 2006. ISBN: 159059584X.
[LR06] J2EE und JBoss. Verteilte Enterprise Applikationen auf der Basis von J2EE, JBoss & Eclipse: T. Langner, D. Reiberg. Hanser Verlag. 2006. ISBN: 3-446-40508-9.
[NSch05] Java und XML: Stephan Niedermeier, Michael Scholz. Galileo Press. 2005. ISBN: 3898426467.
[Ull07] Java ist auch eine Insel: Christian Ullenboom. Galileo Computing. ISBN: 3-89842-747-1. http://www.galileocomputing.de/1082?GPP=opjV.
[WBFT04] Java Web Services mit Apache Axis: Dapeng Wang (Herausgeber), Thomas Bayer, Thilo Frotscher, Marc Teufel. Entwickler.Press. 2004. ISBN: 3935042574.
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 83
Literatur [3]
[Walls07] Spring im Einsatz: Craig Walls. Hanser Verlag. 2.Aufl. 2008. ISBN: 978-3-446-41240-8.
[Wolff07] Spring 2. Framework für die Java-Entwicklung: Eberhard Wolff. Dpunkt Verlag. 2007. ISBN: 978-3-89864-465-5.
[ZLMG08] Spring 2.5: Eine pragmatische Einführung: Alfred Zeitner, Birgit Linner, Martin Maier, Thorsten Göckeler .Addison-Wesley. 2008. ISBN: 978-3827326225.
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 84
Referenzen [1]
[Spring] Spring Framework:http://www.springframework.org/[SpringSec] Spring Security (ehemals Acegi):http://static.springsource.org/spring-security/[SpringWS] Spring Web Services:http://www.springframework.org/spring-ws[SpringIDE] Spring IDE:http://springide.org/[SpringSource] SpringSource Inc. ehemals Interfaces21:http://www.springsource.com/
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 85
Referenzen [2]
[Hib] Hibernate:http://www.hibernate.org/[IBAT] IBATIS Framework:http://ibatis.apache.org/[JDO] JDO:http://java.sun.com/products/jdo/[JPA] JPA:http://java.sun.com/javaee/technologies/persistence.jsp[ELINK] Eclipse Link:http://www.eclipse.org/eclipselink/
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 86
Referenzen [3]
[Eclipse] Eclipse:http://www.eclipse.org[Maven] Maven:http://maven.apache.org[Junit] JUnit:http://www.junit.org[TSS] TheServerSide: http://www.theserverside.com/[WORDL] Wordl (World Cloud):http://www.wordle.net[CCIT] CodeCity:http://www.inf.unisi.ch/phd/wettel/codecity.html
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 87
Referenzen [4]
JSF:https://javaserverfaces.dev.java.net/Apache MyFaces:http://myfaces.apache.org/Apache CXF: http://cxf.apache.org/Apache Axis2: http://ws.apache.org/axis2/
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 88
Referenzen [5]
[NFord] Neal Ford:http://www.nealford.com[New06] Ted Neward „The Vietnam of Computer Science“:http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx[SAmb] Scott Ambler:http://www.ambysoft.com/[Wlo08] Nils Wloka „Dependency Injection für Geschäftsobjekte“:http://87.230.78.21:8080/pages/viewpageattachments.action?pageId=1179684
(c) 2007-2009 / Torsten Friebe / GFU Cyrus AG 89
Kontakt & Lizenz
Autor:Torsten Friebemailto:[email protected]
Dieses Werk ist unter der creative commons Lizenz veröffentlicht.
Weitergabe nur unter gleichen Bedingungen
Keine kommerzielle Nutzung Inhalt darf vervielfältigt und verbreitet werden
Bearbeitung ist erlaubt
Weitere Informationen unter:http://creativecommons.org/licenses/by-nc-sa/3.0/deed.de