Spring 2.0
Upcoming SlideShare
Loading in...5
×
 

Spring 2.0

on

  • 2,379 views

Eine Einführung in Spring 2. Was sind die neuen Features, welche Verbesserungen gibt es?

Eine Einführung in Spring 2. Was sind die neuen Features, welche Verbesserungen gibt es?

Statistics

Views

Total Views
2,379
Slideshare-icon Views on SlideShare
2,370
Embed Views
9

Actions

Likes
0
Downloads
19
Comments
0

2 Embeds 9

http://www.thorsten-kamann.de 5
http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Spring 2.0 Spring 2.0 Presentation Transcript

    • Thorsten Kamann ● thorsten.kamann@itemis.de 1
    • Inhalt Einführung Konfiguration AOP Transaktionen Spring Web MVC Sonstiges Zusammenfassung Thorsten Kamann ● thorsten.kamann@itemis.de 2
    • Einführung: Was ist Spring? Thorsten Kamann ● thorsten.kamann@itemis.de 3
    • Einführung: Was ist Spring? IoC Ansammlung (Dependency von API‘s Injection) Programmiermodell Thorsten Kamann ● thorsten.kamann@itemis.de 4
    • Einführung: Spring Komponenten Spring Core The IoC Container AOP Web JEE Spring AOP Spring Web MVC JMX AspectJ Integration Struts JMS WebWork JCA Tapestry Remoting DAO ORM JSF EJB‘s Spring JDBC Hibernate PDF Email Transaction JPA Jasper Reports Management TopLink Excel JDO Spring Portlet MVC Thorsten Kamann ● thorsten.kamann@itemis.de 5
    • Einführung: Features Leichtgewichtiger Container • Zentralisierte und automatisierte Konfiguration und Verdrahtung der Anwendungsobjekte • Nicht invasiv • Fügt lose gekoppelte Komponenten (POJO's) zu komplexen Systemen zusammen • Skalierbar • Verbessert die Testbarkeit der Komponenten, indem sie zuerst unabhängig von der Serverinfrastruktur getestet werden können Thorsten Kamann ● thorsten.kamann@itemis.de 6
    • Einführung: Features Abstraktionsschicht für Transaktions- Management • Erweiterbares Transaktions-Management • Deklarative Konfiguration der Transaktionen, ohne tief in das entsprechende Framework einzusteigen • Im Gegensatz zu reinem JTA oder EJB CMP ist dieses Transaktions-Management nicht auf J2EE-Umgebungen beschränkt Thorsten Kamann ● thorsten.kamann@itemis.de 7
    • Einführung: Features Abstraktionsschicht für reines JDBC • Reduziert den Code für auf JDBC-basierte Anwendungen • Vereinfacht die Fehlerbehandlung • Bietet eine aussagekräftige Exception- Hierarchie (herstellerunabhängig) • Exceptions basieren auf der DAO-Exception- Hierarchie Thorsten Kamann ● thorsten.kamann@itemis.de 8
    • Einführung: Features Integration von populären O/R-Mappern • Unterstützung von Hibernate, Toplink, JDO und iBATIS SQL Maps • Vereinfacht die Entwicklung mit diesen O/R- Mappern • Unterstützung von Transaktionen • Unterstützung des DAO-Patterns Thorsten Kamann ● thorsten.kamann@itemis.de 9
    • Einführung: Features AOP Funktionalität • Basiert auf AspectJ • Vollständig integriert in das Spring Konfigurations-Management • Transaktions-Management basiert auf AOP • Jedes Objekt in Spring kann mittels AOP gemanaged werden Thorsten Kamann ● thorsten.kamann@itemis.de 10
    • Einführung: Features Flexibles MVC-Webapplication Framework • Benutzt die Spring-Core Funktionalitäten • Sehr konfigurierbar durch verschiedene Strategie-Interfaces • Kombinierbar mit den verschiedensten Viewtechnologien: • JSP, Velocity, Tiles, iText, POI Thorsten Kamann ● thorsten.kamann@itemis.de 11
    • Konfiguration Thorsten Kamann ● thorsten.kamann@itemis.de 12
    • Konfiguration: XML-Schema Konfiguration per XML-Schema • Spring Konfigurationen basieren auf XML- Schema • Durch XML-Schema ist eine direktere Konfiguration möglich • Dadurch kürzere und eindeutigere Konfigurationen Thorsten Kamann ● thorsten.kamann@itemis.de 13
    • Konfiguration: XML-Schema Alt: • <bean id=“bean1quot; class=“a.b.Beanquot;> <property name=“prop1“ value=“value1quot;/> </bean> Neu: • <bean id=„bean1“ class=„a.b.Bean“ p.prop1=„value1“/> Thorsten Kamann ● thorsten.kamann@itemis.de 14
    • Konfiguration: Modularisierung Konfiguration besteht aus verschiedenen Schemata • Beans - Konfiguration von Spring-Beans • Utils - Utilities wie Maps, Lists, Static Fields • JEE - J2EE Konfiguration, wie EJB, JNDI • Lang - Scriptsprachen (Groovy, JRuby, BeanShell) • Tx - Transaktionen • Aop - Aspekte • Tool - 3rd Party Erweiterungen Thorsten Kamann ● thorsten.kamann@itemis.de 15
    • Konfiguration: Erweiterungen Erweiterbare Konfiguration • 3rd Party Erweiterungen • Domänen-spezifische Konfigurationsdialekte • Tools-Schema unterstützt die Erstellung von Erweiterungen • Einfaches Deployment mittels JAR Thorsten Kamann ● thorsten.kamann@itemis.de 16
    • Konfiguration: XML • <beans> <bean id=„marge“ class=„Person“ p:name=„marge“> <property name=„husband“> <bean class=„Person“ p:name=„homer“ p:age=„45“> <property name=„props“> <props> <prop key=„overweight“>true</prop> <prop key=„height“>1.8m</prop> </props> </property> </bean> </property> <property name=„children“><list>…</list></property> </bean> <bean id=„bart“ …/> <bean id=„lisa“ …/> </beans> Thorsten Kamann ● thorsten.kamann@itemis.de 17
    • Konfiguration: Java • @Configuration public class MyConfig { @Bean public Person marge() { Person marge = new Person(); Person husband = new Person(); marge.setName(„marge“); marge.setHusband(husband); marge.addCildren(bart); return marge; } @Bean public Person bart () { Person bart = new Person(); return bart; } } Thorsten Kamann ● thorsten.kamann@itemis.de 18
    • Konfiguration: GroovyBuilder • bb.beans { marge(Person.class) { name = quot;marge„ husband = { Person p -> name = quot;homer„ age = 45 props = [overweight:true, height:quot;1.8mquot;] } children = [bart, lisa] } bart(Person.class) {} lisa(Person.class) {} } Thorsten Kamann ● thorsten.kamann@itemis.de 19
    • Konfiguration: Bean Scopes 5 Bean Scopes • Singleton • Prototype • *Request (Web) • *Session (Web) • *Global Session (Portlets) Thorsten Kamann ● thorsten.kamann@itemis.de 20
    • AOP Thorsten Kamann ● thorsten.kamann@itemis.de 21
    • AOP: Allgemein SpringAOP vs AspectJ • SpringAOP ist einfacher und kann mit einfachen Beans arbeiten • SpringAOP unterstützt zur Zeit nur Methoden- basierte Join Points • AspectJ wird vollständig unterstützt und kann auch auf nicht-SpringBeans angewandt werden Thorsten Kamann ● thorsten.kamann@itemis.de 22
    • AOP: Konfiguration Konfigurationsoptionen • Annotations (@AspectJ) oder XML-basiert • Aktivierung von @AspectJ mit <aop:aspectj- autoproxy/> • Pointcut-Definition mit AspectJ Expression- Sprache • AOP-Autoproxies (default) oder CGLIB- Proxies Thorsten Kamann ● thorsten.kamann@itemis.de 23
    • AOP: Beispiel (Java-Code) public class SimpleProfiler { public Object profile(ProceedingJoinPoint call) throws Throwable { StopWatch clock = new StopWatch( quot;Profiling for 'quot; + call.toShortString() + quot;'quot;); try { clock.start(call.toShortString()); return call.proceed(); } finally { clock.stop(); System.out.println(clock.prettyPrint()); } } } Thorsten Kamann ● thorsten.kamann@itemis.de 24
    • AOP: Beispiel (Konfig. mit Schema) <bean id=quot;profiler“ class=„d.it.s2.test.aop.SimpleProfilerquot; /> <aop:config> <aop:aspect ref=quot;profilerquot;> <aop:pointcut id=quot;daoCreatequot; expression=quot;execution(* d.i.s.dao.*.create*(..))quot; /> <aop:around pointcut-ref=quot;daoCreatequot; method=quot;profilequot; /> </aop:aspect> <aop:aspect ref=quot;profilerquot;> <aop:pointcut id=quot;daoSavequot; expression=quot;execution(* d.i.s2.dao.*.save*(..))quot; /> <aop:around pointcut-ref=quot;daoSavequot; method=quot;profilequot; /> </aop:aspect> </aop:config> Thorsten Kamann ● thorsten.kamann@itemis.de 25
    • AOP: Beispiel (Annotations) @Aspect public class SimpleProfilerAnnotated { @Pointcut execution(* de.itemis.spring2.dao..create*(..)) public void create(){}; @Around(„create()“) public Object profile(ProceedingJoinPoint call) throws Throwable { […] } } Thorsten Kamann ● thorsten.kamann@itemis.de 26
    • AOP: Beispiel (Konfig. mit @AspectJ) <bean id=quot;profiler“ class=„d.i.s2.test.aop.SimpleProfilerAnnotatedquot; /> <aop:aspectj-autoproxy/> Thorsten Kamann ● thorsten.kamann@itemis.de 27
    • Transaktionen Thorsten Kamann ● thorsten.kamann@itemis.de 28
    • Transaktionen:Übersicht In: Create Transaction Out: Commit/Rollback AOP- Transaction- Custom Caller Target Proxy Advisor Advisor(s) Vor oder nach Business- Proxy dem Transaction- Logik anstatt des Ziels Advisor Thorsten Kamann ● thorsten.kamann@itemis.de 29
    • Transaktionen:Konfiguration Konfiguration • XML-Schema (tx-Namensraum) • Annotations • Programmatisch • Intern wird AOP verwendet • Durch Verwendung von AspectJ Ausweitung auf nicht-Spring-Objekte möglich Thorsten Kamann ● thorsten.kamann@itemis.de 30
    • Transaktionen: Konfiguration (XML-Schema) <bean id=„txManager“/> <tx:advice id=„txAdvice“ transaction-manager=„txManager“> <tx:attributes> <tx:method name=„get*“ read-only=„true“/> <tx:method name=„*“/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id=„pid“ expression=„…“/> <aop:advisor advice-ref=„txAdvice“ pointcut-ref=„pid“/> </aop:config> Thorsten Kamann ● thorsten.kamann@itemis.de 31
    • Transaktionen: Konfiguration (Annotations) @Transactional(readOnly = true) public class DefaultFooService implements FooService { public Foo getFoo(String fooName) { } @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) public void updateFoo(Foo foo) { } } Thorsten Kamann ● thorsten.kamann@itemis.de 32
    • Transaktionen: Konfiguration (Annotations) <tx:annotation-driven transaction-manager=quot;txManagerquot;/> <bean id=quot;txManagerquot; class=„o.s.jdbc.datasource.DataSourceTransactionManager„ p:dataSource-ref=„dataSource“/> Thorsten Kamann ● thorsten.kamann@itemis.de 33
    • Spring Web MVC Thorsten Kamann ● thorsten.kamann@itemis.de 34
    • Spring Web MVC: Übersicht Features • Trennung von Rollen (Controller, Validator, Command Object, Form Object, Model,…) • Convention over Configuration • Unterstützung sämtlicher Spring Features • Eigene TagLibrary • Unterstützung einer großen Anzahl von Web- Frameworks (JSP, JSF, Struts, Tapestry, WebWork, Velocity) Thorsten Kamann ● thorsten.kamann@itemis.de 35
    • Spring Web MVC Convention over Configuration • URL  Controller /welcome/*  WelcomeController • Automatische Übergabe von Modellelementen an die View: de.itemis.modell.User ist als user in der View bekannt • URL View /welcome.jsp  /WEB-INF/jsps/welcome.jsp Thorsten Kamann ● thorsten.kamann@itemis.de 36
    • Spring Web MVC Form TagLibrary • Seit Spring 2.0 • Ermöglicht den direkten Zugriff auf Controller und Command-Objekte • Vereinfacht die JSP‘s <form:form commandName=quot;userquot;> <form:input path=„firstName“/> </form:form> Thorsten Kamann ● thorsten.kamann@itemis.de 37
    • Sonstiges Thorsten Kamann ● thorsten.kamann@itemis.de 38
    • Sonstiges: JPA JPA • Abstraktionsschicht für JPA • JPATemplate und JPADaoSupport arbeiten gegen die „Plain JPA-API“ • Einfache Arbeit mit verschiedenen JPA- Implementierungen Thorsten Kamann ● thorsten.kamann@itemis.de 39
    • Sonstiges: JDBC JDBC • NamedParameterJdbcTemplate String sql = „SELECT * FROM C WHERE c.fn = :firstName“ anstatt String sql = „SELECT * FROM C WHERE c.fn = ?“ • SimpleJdbcTemplate • Autoboxing • varargs Thorsten Kamann ● thorsten.kamann@itemis.de 40
    • Sonstiges: Dynamische Sprachen Dynamische Sprachen • Groovy, JRuby, BeanShell • Eigener Namespace für jede Sprache • lang:groovy, lang:jruby, lang:bsh • Autom. Reloading • refresh-check-delay=quot;TIME_IN_MSECquot; • Inline-Scripts • Grails ist eine Spring Web MVC Anwendung Thorsten Kamann ● thorsten.kamann@itemis.de 41
    • Sonstiges: JMX JMX • Notification Mechanismus • NotificationListener • NotificationPublisher • Kontrolle des Verhaltens bei der Registrierung im MbeanServer • REGISTRATION_FAIL_ON_EXISTING • REGISTRATION_IGNORE_EXISTING • REGISTRATION_REPLACE_EXISTING Thorsten Kamann ● thorsten.kamann@itemis.de 42
    • Sonstiges: Task Scheduler Task Scheduler • Abstraktionsschicht für das Konzept der Executors (Thread Pools in Java 5) • Verfügbar auch für Java 1.3 und Java 1.4 • Synchrone, asynchrone, zeitgesteuerte Tasks • Konfiguration über Beandefinitionen <bean id=quot;tEquot; class=quot;o.s.ThreadPoolTaskExecutor“/> <bean ...> <constructor-arg ref=quot;tEquot; /> </bean> Thorsten Kamann ● thorsten.kamann@itemis.de 43
    • Sonstiges: Java5-Support Java5-Support • Annotations • AOP, Transaktionen, Konfiguration • Verlagert die Konfiguration von XML nach Java Vor- oder Nachteil? • Beispiele: <tx:annotation-driven transaction-manager=quot;txManagerquot;/> <aop:aspectj-autoproxy/> • Generics Thorsten Kamann ● thorsten.kamann@itemis.de 44
    • Sonstiges: Portlet MVC Framework Portlet MVC Framework • Basiert auf den gleichen Konzepten wie das Spring Web MVC • JSR-168 The Java Portlet Specification • Unterstützt Spring Webflow Thorsten Kamann ● thorsten.kamann@itemis.de 45
    • Spring im Entwicklungsprozess Thorsten Kamann ● thorsten.kamann@itemis.de 46
    • Agiles und iteratives Vorgehen Agil • Agiles Vorgehen wird im Sinne von Flexibilität unterstützt • Hohe Modularisierung möglich • Flexible Anpassung von Konfigurationen Iterativ • Die Konfiguration wächst mit der Software • Zusätzliche Features brauchen erst konfiguriert werden, wenn die Implementierung existiert Thorsten Kamann ● thorsten.kamann@itemis.de 47
    • Modellgetriebene Entwicklung MDSD • Konfigurationen sind einfach zu generieren • Annotations verringern die Menge an generierten Codezeilen • Modularisierung ermöglicht manuelle Anpassung des Generats • Erzeugung von Testhelpern und –stubs beschleunigen die Erstellung von Tests Thorsten Kamann ● thorsten.kamann@itemis.de 48
    • Unit-Test Software-Tests • Dependency Injection fördert die Testbarkeit von Systemen • Austauschbare Konfiguration ermöglicht angepasste Konfiguration für Tests • Integrationstests werden unterstützt • Tests selber können mit Spring konfiguriert werden Thorsten Kamann ● thorsten.kamann@itemis.de 49
    • Zusammenfassung Thorsten Kamann ● thorsten.kamann@itemis.de 50
    • Zusammenfassung Fazit • Spring2 bietet viele sinnvolle Verbesserungen und Erweiterungen • Die fast 100% Abwärtskompatibilität vereinfacht die Migration bestehender Anwendungen • Durch die vollständige Integration von AOP lässt sich sehr bequem Funktionalität zu bestehendem Code hinzufügen • Der Scriptsupport ermöglicht es, sehr dynamische Software zu bauen Thorsten Kamann ● thorsten.kamann@itemis.de 51
    • Zusammenfassung Ausblick • Spring befindet sich auf dem Weg zu einer noch besseren Modularisierung • Teile werden in Spring-Modules ausgelagert • Einbindung in 3rd-Party Produkte ist heute schon problemlos möglich (z.B. Celtix – ein OS ESB) • Spring Web MVC und Spring Portlet Framework bieten eine sehr gute Basis für Webanwendungen (siehe Grails) Thorsten Kamann ● thorsten.kamann@itemis.de 52
    • Links Thorsten Kamann ● thorsten.kamann@itemis.de 53
    • Links • Springframework Webseite http://www.springframework.org • Spring IDE (Eclipse Plugin) http://www.springide.org • Grails http://www.grails.org/ • Thorsten Kamann http://www.thorsten-kamann.de • Beispielprojekt mit Spring2, Hibernate und AOP http://thorque.wiki.com/Spring_2.0 Thorsten Kamann ● thorsten.kamann@itemis.de 54