Spring 2.0

Post on 02-Jul-2015

1,653 views 0 download

description

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

transcript

Thorsten Kamann ● thorsten.kamann@itemis.de 11

Thorsten Kamann ● thorsten.kamann@itemis.de 22

Inhalt

Einführung

Konfiguration

AOP

Transaktionen

Spring Web MVC

Sonstiges

Zusammenfassung

Thorsten Kamann ● thorsten.kamann@itemis.de 33

Einführung: Was ist Spring?

Thorsten Kamann ● thorsten.kamann@itemis.de 44

Einführung: Was ist Spring?

IoC(Dependency

Injection)

Ansammlung von API‘s

Programmiermodell

Thorsten Kamann ● thorsten.kamann@itemis.de 55

Einführung: Spring Komponenten

Spring CoreThe IoC Container

AOPSpring AOP

AspectJ Integration

DAOSpring JDBCTransaction

Management

ORMHibernate

JPATopLink

JDO

JEEJMXJMSJCA

RemotingEJB‘sEmail

WebSpring Web MVC

StrutsWebWorkTapestry

JSFPDF

Jasper ReportsExcel

Spring Portlet MVC

Thorsten Kamann ● thorsten.kamann@itemis.de 66

Einführung: Features

• 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

Leichtgewichtiger Container

Thorsten Kamann ● thorsten.kamann@itemis.de 77

Einführung: Features

• 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

Abstraktionsschicht für Transaktions-Management

Thorsten Kamann ● thorsten.kamann@itemis.de 88

Einführung: Features

• 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

Abstraktionsschicht für reines JDBC

Thorsten Kamann ● thorsten.kamann@itemis.de 99

Einführung: Features

• 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

Integration von populären O/R-Mappern

Thorsten Kamann ● thorsten.kamann@itemis.de 1010

Einführung: Features

• 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

AOP Funktionalität

Thorsten Kamann ● thorsten.kamann@itemis.de 1111

Einführung: Features

• Benutzt die Spring-Core Funktionalitäten• Sehr konfigurierbar durch verschiedene

Strategie-Interfaces• Kombinierbar mit den verschiedensten

Viewtechnologien:• JSP, Velocity, Tiles, iText, POI

Flexibles MVC-WebapplicationFramework

Thorsten Kamann ● thorsten.kamann@itemis.de 1212

Konfiguration

Thorsten Kamann ● thorsten.kamann@itemis.de 1313

Konfiguration: XML-Schema

• Spring Konfigurationen basieren auf XML-Schema

• Durch XML-Schema ist eine direktere Konfiguration möglich

• Dadurch kürzere und eindeutigere Konfigurationen

Konfiguration per XML-Schema

Thorsten Kamann ● thorsten.kamann@itemis.de 1414

Konfiguration: XML-Schema

•<bean id=“bean1" class=“a.b.Bean">

<property name=“prop1“ value=“value1"/>

</bean>

Alt:

•<bean id=„bean1“ class=„a.b.Bean“

p.prop1=„value1“/>

Neu:

Thorsten Kamann ● thorsten.kamann@itemis.de 1515

Konfiguration: Modularisierung

• 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

Konfiguration besteht aus verschiedenen Schemata

Thorsten Kamann ● thorsten.kamann@itemis.de 1616

Konfiguration: Erweiterungen

• 3rd Party Erweiterungen• Domänen-spezifische Konfigurationsdialekte• Tools-Schema unterstützt die Erstellung von

Erweiterungen• Einfaches Deployment mittels JAR

Erweiterbare Konfiguration

Thorsten Kamann ● thorsten.kamann@itemis.de 1717

• <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>

Konfiguration: XML

Thorsten Kamann ● thorsten.kamann@itemis.de 1818

• @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;

}

}

Konfiguration: Java

Thorsten Kamann ● thorsten.kamann@itemis.de 1919

• bb.beans {

marge(Person.class) {

name = "marge„

husband = { Person p ->

name = "homer„

age = 45

props = [overweight:true,

height:"1.8m"] }

children = [bart, lisa]

}

bart(Person.class) {}

lisa(Person.class) {}

}

Konfiguration: GroovyBuilder

Thorsten Kamann ● thorsten.kamann@itemis.de 2020

Konfiguration: Bean Scopes

• Singleton• Prototype• *Request (Web)• *Session (Web)• *Global Session (Portlets)

5 Bean Scopes

Thorsten Kamann ● thorsten.kamann@itemis.de 2121

AOP

Thorsten Kamann ● thorsten.kamann@itemis.de 2222

AOP: Allgemein

• 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

SpringAOP vs AspectJ

Thorsten Kamann ● thorsten.kamann@itemis.de 2323

AOP: Konfiguration

• Annotations (@AspectJ) oder XML-basiert• Aktivierung von @AspectJ mit <aop:aspectj-

autoproxy/>• Pointcut-Definition mit AspectJ Expression-

Sprache• AOP-Autoproxies (default) oder CGLIB-

Proxies

Konfigurationsoptionen

Thorsten Kamann ● thorsten.kamann@itemis.de 2424

public class SimpleProfiler {

public Object profile(ProceedingJoinPoint call)

throws Throwable {

StopWatch clock = new StopWatch(

"Profiling for '" + call.toShortString() + "'");

try {

clock.start(call.toShortString());

return call.proceed();

} finally {

clock.stop();

System.out.println(clock.prettyPrint());

}

}

}

AOP: Beispiel (Java-Code)

Thorsten Kamann ● thorsten.kamann@itemis.de 2525

<bean id="profiler“ class=„d.it.s2.test.aop.SimpleProfiler" />

<aop:config>

<aop:aspect ref="profiler">

<aop:pointcut id="daoCreate"

expression="execution(* d.i.s.dao.*.create*(..))" />

<aop:around pointcut-ref="daoCreate" method="profile" />

</aop:aspect>

<aop:aspect ref="profiler">

<aop:pointcut id="daoSave"

expression="execution(* d.i.s2.dao.*.save*(..))" />

<aop:around pointcut-ref="daoSave" method="profile" />

</aop:aspect>

</aop:config>

AOP: Beispiel (Konfig. mit Schema)

Thorsten Kamann ● thorsten.kamann@itemis.de 2626

@Aspect

public class SimpleProfilerAnnotated {

@Pointcut

execution(* de.itemis.spring2.dao..create*(..))

public void create(){};

@Around(„create()“)

public Object profile(ProceedingJoinPoint call)

throws Throwable {

[…]

}

}

AOP: Beispiel (Annotations)

Thorsten Kamann ● thorsten.kamann@itemis.de 2727

<bean id="profiler“

class=„d.i.s2.test.aop.SimpleProfilerAnnotated" />

<aop:aspectj-autoproxy/>

AOP: Beispiel (Konfig. mit @AspectJ)

Thorsten Kamann ● thorsten.kamann@itemis.de 2828

Transaktionen

Thorsten Kamann ● thorsten.kamann@itemis.de 2929

Transaktionen:Übersicht

CallerAOP-Proxy

Transaction-Advisor

Custom Advisor(s)

Target

In: Create TransactionOut: Commit/Rollback

Proxyanstatt des Ziels

Vor oder nach dem Transaction-

Advisor

Business-Logik

Thorsten Kamann ● thorsten.kamann@itemis.de 3030

Transaktionen:Konfiguration

• XML-Schema (tx-Namensraum)• Annotations• Programmatisch• Intern wird AOP verwendet• Durch Verwendung von AspectJ Ausweitung

auf nicht-Spring-Objekte möglich

Konfiguration

Thorsten Kamann ● thorsten.kamann@itemis.de 3131

<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>

Transaktionen: Konfiguration (XML-Schema)

Thorsten Kamann ● thorsten.kamann@itemis.de 3232

@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) {

}

}

Transaktionen: Konfiguration (Annotations)

Thorsten Kamann ● thorsten.kamann@itemis.de 3333

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="txManager"

class=„o.s.jdbc.datasource.DataSourceTransactionManager„

p:dataSource-ref=„dataSource“/>

Transaktionen: Konfiguration (Annotations)

Thorsten Kamann ● thorsten.kamann@itemis.de 3434

Spring Web MVC

Thorsten Kamann ● thorsten.kamann@itemis.de 3535

Spring Web MVC: Übersicht

• 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)

Features

Thorsten Kamann ● thorsten.kamann@itemis.de 3636

Spring Web MVC

• 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

Convention over Configuration

Thorsten Kamann ● thorsten.kamann@itemis.de 3737

Spring Web MVC

• Seit Spring 2.0• Ermöglicht den direkten Zugriff auf Controller

und Command-Objekte• Vereinfacht die JSP‘s<form:form commandName="user">

<form:input path=„firstName“/>

</form:form>

Form TagLibrary

Thorsten Kamann ● thorsten.kamann@itemis.de 3838

Sonstiges

Thorsten Kamann ● thorsten.kamann@itemis.de 3939

Sonstiges: JPA

• Abstraktionsschicht für JPA• JPATemplate und JPADaoSupport arbeiten

gegen die „Plain JPA-API“• Einfache Arbeit mit verschiedenen JPA-

Implementierungen

JPA

Thorsten Kamann ● thorsten.kamann@itemis.de 4040

Sonstiges: JDBC

• NamedParameterJdbcTemplateString sql =

„SELECT * FROM C WHERE c.fn = :firstName“

anstatt

String sql =„SELECT * FROM C WHERE c.fn = ?“

• SimpleJdbcTemplate• Autoboxing• varargs

JDBC

Thorsten Kamann ● thorsten.kamann@itemis.de 4141

Sonstiges: Dynamische Sprachen

• Groovy, JRuby, BeanShell• Eigener Namespace für jede Sprache

• lang:groovy, lang:jruby, lang:bsh• Autom. Reloading

• refresh-check-delay="TIME_IN_MSEC"• Inline-Scripts• Grails ist eine Spring Web MVC Anwendung

Dynamische Sprachen

Thorsten Kamann ● thorsten.kamann@itemis.de 4242

Sonstiges: JMX

• Notification Mechanismus• NotificationListener• NotificationPublisher

• Kontrolle des Verhaltens bei der Registrierung im MbeanServer• REGISTRATION_FAIL_ON_EXISTING • REGISTRATION_IGNORE_EXISTING• REGISTRATION_REPLACE_EXISTING

JMX

Thorsten Kamann ● thorsten.kamann@itemis.de 4343

Sonstiges: 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="tE"

class="o.s.ThreadPoolTaskExecutor“/>

<bean ...>

<constructor-arg ref="tE" />

</bean>

Task Scheduler

Thorsten Kamann ● thorsten.kamann@itemis.de 4444

Sonstiges: Java5-Support

• Annotations• AOP, Transaktionen, Konfiguration• Verlagert die Konfiguration von XML nach

Java Vor- oder Nachteil?• Beispiele:<tx:annotation-driven

transaction-manager="txManager"/>

<aop:aspectj-autoproxy/>

• Generics

Java5-Support

Thorsten Kamann ● thorsten.kamann@itemis.de 4545

Sonstiges: Portlet MVC Framework

• Basiert auf den gleichen Konzepten wie das Spring Web MVC

• JSR-168 The Java Portlet Specification• Unterstützt Spring Webflow

Portlet MVC Framework

Thorsten Kamann ● thorsten.kamann@itemis.de 4646

Spring im Entwicklungsprozess

Thorsten Kamann ● thorsten.kamann@itemis.de 4747

Agiles und iteratives Vorgehen

• Agiles Vorgehen wird im Sinne von Flexibilität unterstützt

• Hohe Modularisierung möglich• Flexible Anpassung von Konfigurationen

Agil

• Die Konfiguration wächst mit der Software• Zusätzliche Features brauchen erst konfiguriert

werden, wenn die Implementierung existiert

Iterativ

Thorsten Kamann ● thorsten.kamann@itemis.de 4848

Modellgetriebene Entwicklung

• 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

MDSD

Thorsten Kamann ● thorsten.kamann@itemis.de 4949

Unit-Test

• Dependency Injection fördert die Testbarkeitvon Systemen

• Austauschbare Konfiguration ermöglicht angepasste Konfiguration für Tests

• Integrationstests werden unterstützt• Tests selber können mit Spring konfiguriert

werden

Software-Tests

Thorsten Kamann ● thorsten.kamann@itemis.de 5050

Zusammenfassung

Thorsten Kamann ● thorsten.kamann@itemis.de 5151

Zusammenfassung

• 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

Fazit

Thorsten Kamann ● thorsten.kamann@itemis.de 5252

Zusammenfassung

• 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 PortletFramework bieten eine sehr gute Basis für Webanwendungen (siehe Grails)

Ausblick

Thorsten Kamann ● thorsten.kamann@itemis.de 5353

Links

Thorsten Kamann ● thorsten.kamann@itemis.de 5454

• Springframework Webseitehttp://www.springframework.org

• Spring IDE (Eclipse Plugin)http://www.springide.org

• Grailshttp://www.grails.org/

• Thorsten Kamannhttp://www.thorsten-kamann.de

• Beispielprojekt mit Spring2, Hibernate und AOPhttp://thorque.wiki.com/Spring_2.0

Links