Upload
ramugus
View
98
Download
1
Embed Size (px)
Citation preview
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
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
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
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) { … }}
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 -->
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 }}
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"; }}
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
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
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>
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>
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)
{ … }}
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
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
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
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
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
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
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) {
...}
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
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
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(…); }}
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
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
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
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"
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
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
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!
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