30
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Spring Framework 3.0 The Next Generation Jürgen Höller VP & Distinguished Engineer SpringSource

Hoeller Spring 3

  • Upload
    ramugus

  • View
    98

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Framework 3.0 The Next Generation

Jürgen Höller VP & Distinguished Engineer

SpringSource

Page 2: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2

Agenda

•  Quick Review: Spring 2.5 •  Spring 3.0 Themes and Features •  Spring 3.0 Roadmap

Page 3: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3

Spring Framework 2.5

•  Comprehensive support for annotation-based configuration –  @Autowired

•  with optional @Qualifier or custom qualifier –  @Transactional –  @Service, @Repository, @Controller

•  Common Java EE 5 annotations supported too –  @PostConstruct, @PreDestroy –  @PersistenceContext, @PersistenceUnit –  @Resource, @EJB, @WebServiceRef –  @TransactionAttribute

Page 4: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4

Annotated Bean Component

@Servicepublic class RewardNetworkService implements RewardNetwork {

@Autowired public RewardNetworkService(AccountRepository

ar) { … }

@Transactional public RewardConfirmation

rewardAccountFor(Dining d) { … }}

Page 5: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5

Minimal XML Bean Definitions

<!– Activating annotation-based configuration -->

<context:annotation-config/>

<bean class=”com.myapp.rewards.RewardNetworkImpl”/>

<bean class=”com.myapp.rewards.JdbcAccountRepository”/>

<!– Plus shared infrastructure configuration beans:

PlatformTransactionManager, DataSource, etc -->

Page 6: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6

Test Context Framework

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfigurationpublic class RewardSystemIntegrationTests {

@Autowired private RewardNetwork rewardNetwork;

@Test @Transactional public void testRewardAccountForDining() { // test in transaction with auto-rollback }}

Page 7: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7

@MVC Controller Style

@Controllerpublic 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"; }}

Page 8: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8

Spring 3.0 Themes

•  Java 5+ foundation –  compatible with J2EE 1.4 and Java EE 5

•  Spring Expression Language –  Unified EL++

•  Comprehensive REST support –  and other Spring @MVC additions

•  Declarative model validation –  Hibernate Validator, JSR 303

•  Support for Portlet 2.0 –  action/event/resource request mappings

•  Early support for Java EE 6 –  JSF 2.0, JPA 2.0, etc

Page 9: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9

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!

•  Built with new Spring build system as known from Spring Web Flow 2.0 –  Ivy-based "Spring Build" system –  consistent deployment procedure –  consistent dependency management –  consistent generation of OSGi manifests

Page 10: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10

Core APIs updated for Java 5

•  BeanFactory interface returns typed bean instances as far as possible –  T getBean(String name, Class<T> requiredType) –  Map<String, T> getBeansOfType(Class<T> type)

•  Spring's TaskExecutor interface extends java.util.concurrent.Executor now –  extended AsyncTaskExecutor supports standard

Callables with Futures •  New Java 5 based converter API and SPI

–  stateless ConversionService and Converters –  superseding standard JDK PropertyEditors

•  Typed ApplicationListener<E>

Page 11: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11

EL in Bean Definitions

<bean class="mycompany.RewardsTestDatabase">

<property name="databaseName"

value="“#{systemProperties.databaseName}”/>

<property name="keyGenerator"

value="“#{strategyBean.databaseKeyGenerator}”/>

</bean>

Page 12: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12

EL in Component Annotations

@Repositorypublic class RewardsTestDatabase {

@Value(“#{systemProperties.databaseName}”) public void setDatabaseName(String dbName) { … }

@Value(“#{strategyBean.databaseKeyGenerator}”) public void setKeyGenerator(KeyGenerator kg)

{ … }}

Page 13: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13

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 –  pluggable and customizable

•  Compatible with Unified EL but significantly more powerful –  navigating bean properties, maps, etc –  method invocations –  construction of value objects

Page 14: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14

EL Context Attributes

•  Example showed access to EL attributes –  "systemProperties", "strategyBean" –  implicit references in expressions

•  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

Page 15: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15

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

Page 16: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16

REST Support

•  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

Page 17: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17

REST in MVC - @PathVariable

@RequestMapping(value = "/rewards/{id}", method = GET)

public Reward reward(@PathVariable("id") long id) {

return this.rewardsAdminService.findReward(id);

}

http://rewarddining.com/rewards/12345

Page 18: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18

Different Representations

•  JSON

•  XML

•  ATOM

GET http://rewarddining.com/accounts/1 accepts application/json GET http://rewarddining.com/accounts/1.json

GET http://rewarddining.com/accounts/1 accepts application/xml GET http://rewarddining.com/accounts/1.xml

GET http://rewarddining.com/accounts/1 accepts application/atom+xml GET http://rewarddining.com/accounts/1.atom

Page 19: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19

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

...}

Page 20: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20

Model Validation

public class Reward { @NotNull @Past private Date transactionDate;}

In view:<form:input path="transactionDate">

•  Same metadata can be used for persisting, rendering, etc •  Spring: to be supported for MVC data binding •  JSR-303 "Bean Validation" as the common ground

Page 21: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21

Portlet 2.0 Support

•  Portlet 2.0: major new capabilities –  explicit action name concept for dispatching –  resource requests for servlet-style serving –  events for inter-portlet communication –  portlet filters analogous to servlet filters

•  Spring's Portlet MVC 3.0 to support explicit mapping annotations –  @ActionMapping, @RenderMapping,

@ResourceMapping, @EventMapping –  specializations of Spring's @RequestMapping

•  supporting action names, window states, etc

Page 22: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22

Spring Portlet MVC 3.0

@Controller@RequestMapping("EDIT")public class MyPortletController { …

@ActionMapping("delete") public void removeBook(@RequestParam("book") String

bookId) { this.myService.deleteBook(bookId); }

@EventMapping("BookUpdate") public void updateBook(BookUpdateEvent bookUpdate)

{ // extract book entity data from event payload

object this.myService.updateBook(…); }}

Page 23: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23

Conversation Management

•  Key problem: isolating concurrent windows in same browser –  shared HTTP session

•  identified by shared browser cookie –  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 to share common conversation management foundation with Spring MVC

Page 24: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24

Scoped Bean Serializability

•  Problem with Spring 2.5: serializability of session and conversation objects –  when referencing shared service objects via Spring

dependency injection •  and not marking them as transient

–  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

Page 25: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25

Scheduling Enhancements

•  Spring 3.0 introduces a major overhaul of the scheduling package –  extended java.util.concurrent support

•  prepared for JSR-236 "Concurrency Utilities for Java EE" –  TaskScheduler interface with Triggers

•  including cron expression triggers –  @Async annotation for asynchronous user methods

•  @Scheduled for cron-triggered methods

•  XML scheduling namespace –  cron expressions with method references –  convenient executor service setup

Page 26: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26

Spring 3.0 and Java EE 6

•  Early Java EE 6 API support in Spring 3.0 –  integration with JSF 2.0

•  full compatibility as managed bean facility –  integration with JPA 2.0

•  support for lock modes, query timeouts, etc –  support for JSR-303 Bean Validation annotations

•  through Hibernate Validator 4.0 integration –  all embeddable on Tomcat 5.5+ / J2EE 1.4+

•  Spring 3.2: support for Java EE 6 platforms –  Servlet 3.0 (waiting for GlassFish 3 and Tomcat 7) –  JSR-236 "Concurrency Utilities for Java EE"

Page 27: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27

Portfolio Rearrangements

•  Spring 3.0 M2 includes a revised version of the Object/XML Mapping (OXM) module –  known from Spring Web Services –  also useful e.g. for SQL XML access

•  Spring 3.0 M3 features a revised binding and type conversion infrastructure –  including the capabilities of Spring Web Flow's binding –  stateless type converter objects with EL integration

•  Spring 3.0 M3 also includes the core functionality of Spring JavaConfig –  configuration classes defining managed beans –  common handling of annotated factory methods

Page 28: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28

Pruning & Deprecation in 3.0

•  Some pruning: removal of outdated features –  Commons Attributes support

•  superseded by Java 5 annotations –  traditional TopLink API support

•  in favor of JPA (EclipseLink) –  subclass-style Struts 1.x support

•  Some deprecation: superseded features –  traditional MVC form controller hierarchy

•  superseded by annotated controller style –  traditional JUnit 3.8 test class hierarchy

•  superseded by test context framework –  several outdated helper classes

Page 29: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29

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 classes using 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!

Page 30: Hoeller Spring 3

Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30

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 remains backwards compatible with Spring 2.5 on Java 5+ –  enabling a smooth migration path