Spring Framework 3.0 The Next Generation Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. About SpringSource · Employs all committers for Spring · Committers for Tomcat, ActiveMQ, Apache HTTP · New: tc Server / dm Server · Groovy / Grails (acquisition of G2One) · Training · Consulting · Subscription / Support Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2 About me · Regional Director German speaking region and Principal Consultant · Author of several articles and books · First German Spring book · Speaker at national and international conferences · Blog: http://jandiandme.blogspot.com/ · Eberhard.Wolff@springsource.com Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3 Agenda · A Brief History of Spring · A Quick Review: Spring 2.5 · Spring 3.0 Themes and Features · Spring 3.0 Roadmap Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4 A Brief History of Spring · Spring is the most popular Java / J2EE application framework ­ POJOs + AOP + service abstractions · trademark: the tag · integration with popular persistence solutions etc ­ JDK 1.3+, J2EE 1.2+ · supporting any application server in the market · also able to run standalone ­ 'Traditional' versions: Spring 1.2, Spring 2.0 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5 Typical Spring XML Configuration Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6 Spring & Runtime Platforms · Spring's central value proposition ­ providing a unified programming model for business components ­ providing consistent configuration across different runtime environments · Foundation: plain Java objects ­ transparently integrating with environment services through Spring's generic container ­ rich annotation support on Java 5 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7 Spring: Portability · J2EE provides standard system services · Spring abstractions can run on top of J2EE · ..or OSGi, Tomcat, ... Application components (POJOs) Spring application container Spring service abstractions J2EE OSGi Tomcat Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8 Spring Framework 2.5 · Comprehensive support for annotation-based configuration ­ @Autowired (+ @Qualifier or custom qualifiers) ­ @Transactional ­ @Service, @Repository, @Controller · Common Java EE 5 annotations supported too ­ ­ ­ ­ @PostConstruct, @PreDestroy @PersistenceContext, @PersistenceUnit @Resource, @EJB, @WebServiceRef @TransactionAttribute Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9 Annotated Bean Component @Service public class RewardNetworkService implements RewardNetwork { Makes this class a Spring Bean Inject type compatible Spring Bean @Autowired public RewardNetworkService(AccountRepository ar) { ... } @Transactional public RewardConfirmation rewardAccountFor(Dining d) { ... } Do transactions } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10 Annotated DAO with Lifecycle Makes this class a Spring Bean Apply exception translation @Repository public class JdbcAccountRepository implements AccountRepository { Inject type compatible Spring Bean @Autowired public JdbcAccountRepository(DataSource ds) { ... } @PostConstruct Initialization after injection public initCache() { ... } @PreDestroy Clean up public cleanupCache() { ... } } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11 Minimal XML Bootstrapping Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12 Test Context Framework @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class RewardSystemIntegrationTests { @Autowired private RewardNetwork rewardNetwork; @Test @Transactional public void testRewardAccountForDining() { // test in transaction with auto-rollback } } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13 Spring Servlet MVC 2.5 @Controller public class MyController { private final MyService myService; @Autowired public MyController(MyService myService) { this.myService = myService; } @RequestMapping("/removeBook") public String removeBook(@RequestParam("book") String bookId) { this.myService.deleteBook(bookId); return "redirect:myBooks"; } } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14 Spring 3.0 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Status · Currently in 3.0M1 · Planned: M2, M3, RC1, release · So this is an early look at what's coming Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16 Spring 3.0 Themes · Comprehensive REST support · Spring Expression Language · Support for Portlet 2.0 ­ JSR-303 Bean Validation ­ JSF 2.0, JPA 2.0, etc ­ Unified EL++ ­ action/event/resource request mappings ­ and other Spring @MVC additions · Declarative model validation · Early support for Java EE 6 · Java 5+ foundation ­ compatible with J2EE 1.4 and Java EE 5 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17 REST Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. REST · Representational State Transfer · Simple and natural architectural pattern for web applications · Unified approach for HTML, XML, JSON Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19 REST example Create a reward POST/PUT http://rewarddining.com/reward/ Get reward GET http://rewarddining.com/reward/1234 Get reward as XML GET http://rewarddining.com/reward/1234 accepts application/xml GET http://rewarddining.com/reward/1234.xml Change data POST http://rewarddining.com/reward/1234 Delete reward DELETE http://rewarddining.com/reward/1234 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20 REST advantages · Simple ­ Have you taken a look at Web Service standards lately? ­ Simple usage allows better interoperability · Unified approach for HTML / XML ... · Builds on the strength of the Web ­ Ressources are globally adressable · Natural use of HTTP Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21 REST Support in Spring 3.0 · Spring MVC to provide first-class support for REST-style mappings ­ extraction of URI template parameters ­ content negotiation in view resolver · Goal: native REST support within Spring MVC, for UI as well as non-UI usage ­ in natural MVC style · Alternative: using JAX-RS through integrated JAX-RS provider (e.g. Jersey) ­ using the JAX-RS component model to build programmatic resource endpoints Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22 REST in MVC - @PathVariable GET http://rewarddining.com/reward/12345 @RequestMapping(value = "/rewards/{id}", method = GET) public Reward reward(@PathVariable("id") long id) { return this.rewardsAdminService.findReward(id); } Natural extension to existing annotations Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23 Different Representations · JSON GET http://rewarddining.com/accounts/1 accepts application/json GET http://rewarddining.com/accounts/1.json · XML GET http://rewarddining.com/accounts/1 accepts application/xml GET http://rewarddining.com/accounts/1.xml · ATOM / RSS GET http://rewarddining.com/accounts/1 accepts application/atom+xml GET http://rewarddining.com/accounts/1.atom Implementation not too hard thanks to Spring flexible view handling Optimizations like HTTP ETags Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24 XML handling · Spring Framework 3.0 will include a revised version of the Object/XML Mapping (OXM) module ­ known from Spring Web Services ­ Allows support for REST ­ also useful e.g. for SQL XML access Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25 Common @MVC Refinements · More options for handler method parameters ­ ­ ­ ­ in addition to @RequestParam and @PathVariable @RequestHeader: access to request headers @CookieValue: HTTP cookie access supported for Servlet MVC and Portlet MVC @RequestMapping("/show") public Reward show(@RequestHeader("region") long regionId, @CookieValue("language") String langId) { ... } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26 Expression Language EL Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Expression Language · Used in JSPs, JSF, Spring Web Flow etc. · ...to access objects, call methods etc · Currently Spring can only use values to configure Spring Beans · Obviously EL would be a nice extension... · Actually a very old enhancement request · Fundamental change Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28 EL in Bean Definitions Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29 EL in Component Annotations @Repository public class RewardsTestDatabase { @Autowired public void setDatabaseName( @Value("#{systemProperties.databaseName}") String dbName) { ... } @Autowired public void setKeyGenerator( @Value("#{strategyBean.databaseKeyGenerator}") KeyGenerator kg) { ... } } Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30 EL: Impact · Much more powerful configuration · Unified access to system properties and other configuration options · Classes with Annotations can be configured as well Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31 Powerful Spring EL Parser · Custom expression parser implementation shipped as part of Spring 3.0 ­ package org.springframework.expression ­ next-generation expression engine inspired by Spring Web Flow 2.0's expression support · Compatible with standard Unified EL but significantly more powerful ­ navigating bean properties, maps, etc ­ method invocations ­ construction of value objects Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32 EL Context Attributes · Example showed access to EL attributes ­ "systemProperties", "strategyBean" · Implicit attributes to be exposed by default, depending on runtime context ­ e.g. "systemProperties", "systemEnvironment" · global platform context ­ access to all Spring-defined beans by name · similar to managed beans in JSF expressions ­ extensible through Scope SPI · e.g. for step scope in Spring Batch 2.0 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33 Web Context Attributes · Implicit web-specific attributes to be exposed by default as well ­ ­ ­ ­ "contextProperties": web.xml init-params "contextAttributes": ServletContext attributes "request": current Servlet/PortletRequest "session": current Http/PortletSession · Exposure of all implicit JSF objects when running within a JSF request context ­ "param", "initParam", "facesContext", etc ­ full compatibility with JSF managed bean facility Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34 Other features... Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Conversation Management · Key problem: isolating concurrent windows in same browser ­ shared HTTP session ­ several independent conversations going on · keeping independent state · Generalized: conversation scope with shorter lifetime than session ­ scope="conversation" · on-demand scoping of conversational Spring beans · MyFaces Orchestra style ­ Spring Web Flow 3 still to provide sophisticated flow navigation management on top · i.e. page flows can be defined · JSF support Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36 Scoped Bean Serializability · Problem with Spring 2.5: serializability of session and conversation objects ­ when referencing shared service objects via Spring dependency injection ­ typical situation: scoped bean instance holds on to DataSource or the like · DataSource reference is not serializable · -> whole bean not serializable · Solution: proxies that reobtain references on deserialization ­ from current Spring WebApplicationContext Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37 Model Validation public class Reward { @NotNull @Past private Date transactionDate; } In view: · Same metadata can be used for persisting, rendering, etc · Spring: to be supported for MVC data binding · JSR 303 (Bean Validation) as common ground Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38 New Project Layout · Framework modules revised ­ now managed in Maven style ­ one source tree per module jar · spring-beans.jar, spring-aop.jar, etc ­ no spring.jar anymore! ­ Libraries not distributed · Built with new Spring build system as known from Spring Web Flow 2.0 ­ consistent deployment procedure ­ consistent dependency management ­ consistent generation of OSGi manifests · Impact: Use Maven, OSGi, ivy for dependency management Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39 Spring 3.0 and Java EE 6 · Early Java EE 6 support in Spring 3.0 ­ integration with JSF 2.0 · Spring as fully compatible managed bean facility ­ integration with JPA 2.0 · support for lock modes, query timeouts, etc ­ compliance with JSR-236 (EE Concurrency) · standard integration with server thread pools ­ AOP support for JSR-220 interceptors · "javax.interceptor" package from EJB 3.0/3.1 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40 Java EE 6 Story Continued · Spring 3.1/3.2 to provide full support for Java EE 6 platforms and conventions ­ Servlet 3.0 · auto-deployment of framework integration classes · Comet requests supported in Spring controllers · runtime support for Tomcat 7 and GlassFish 3 ­ JSR-299 (formerly known as "Web Beans") · now "Java Contexts and Dependency Injection" · Spring container support for new "javax.context", "javax.inject", "javax.event" annotation packages Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41 Spring 2.5 Mission Continued · Spring 3 continues Spring 2.5's mission ­ fully embracing Java 5 in the core Spring programming and configuration model ­ now with even the core framework requiring Java 5 · all framework API to use Java 5 language syntax · Backwards compatibility with Spring 2.5 ­ 100% compatibility of programming model ­ 95% compatibility of extension points ­ all previously deprecated API to be removed · Make sure you're not using outdated Spring 1.2 / 2.0 API anymore! Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42 Pruning & Deprecation in 3.0 · Some pruning planned ­ Commons Attributes support ­ traditional TopLink API support · in favor of JPA (EclipseLink) · Some deprecation planned ­ traditional MVC controller class hierarchy · superseded by annotated controller style ­ traditional JUnit 3.8 test class hierarchy · superseded by test context framework Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 43 Spring 3.0 Summary · Spring 3.0 embraces REST and EL ­ full-scale REST support ­ broad Unified EL++ support in the core · Spring 3.0 significantly extends and refines annotated web controllers ­ RESTful URI mappings ­ annotation-based model validation · Spring 3.0 is designed for Java EE 5 and 6 as well as OSGi ­ a common architectural enabler for both worlds! Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 44 Und als Danke Schön: · 100 Rabatt für die Mitglieder der RuhrJUG für unsere nächsten SpringTraining in der Umgebung! · Solingen 26.-29. Mai 2009 · Gummersbach 16.-19. Juni 2009 · Registrierung unter http://www.springsource.com/de · Rabattcode: 2009-Rhjug-100 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 45 Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 46