tss spring for advanced -...

66
Spring Update: Implications for the Advanced Developer Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Rod Johnson Founder, Spring CEO, SpringSource

Upload: nguyentram

Post on 27-Feb-2019

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring Update:Implications for the Advanced Developer

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

Advanced Developer

Rod Johnson

Founder, SpringCEO, SpringSource

Page 2: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Agenda

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

• Special emphasis:

• What does this mean for best practice for advanced developers?

Page 3: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring Framework 2.5

• Comprehensive support forannotation-based configuration

– @Autowired (+ @Qualifier or custom qualifiers)

– @Transactional

– @Component, @Service, @Repository, @Controller

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

– @Component, @Service, @Repository, @Controller

• Common Java EE 5 annotations supported

– @PostConstruct, @PreDestroy

– @PersistenceContext, @PersistenceUnit

– @Resource, @EJB, @WebServiceRef

– @TransactionAttribute

Page 4: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Annotated Bean Component

@Servicepublic class RewardNetworkService

implements RewardNetwork {

@Autowiredpublic RewardNetworkService(AccountRepository ar) {

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

public RewardNetworkService(AccountRepository ar) {…}

@Transactionalpublic RewardConfirmation rewardAccountFor(Dining d) {…}}

Page 5: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Annotated DAO with Lifecycle

@Repository

public class JdbcAccountRepository

implements AccountRepository {

@Autowired

public JdbcAccountRepository(DataSource ds) { … }

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

public JdbcAccountRepository(DataSource ds) { … }

@PostConstruct

public initCache() { … }

@PreDestroy

public cleanupCache() { … }

}

Page 6: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Minimal XML Bean Definitions

<!-- Activating annotation-based configuration -->

• Spring no longer requires XML

• Need to use XML only when you need to externalize something

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

<!-- Activating annotation-based configuration --><context:annotation-config/>

<!-- Just define beans – no constructor-arg/property --><bean class=”com.myapp.rewards.RewardNetworkImpl”/>

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

<!-- Plus shared infrastructure configuration beans:PlatformTransactionManager, DataSource, etc -->

Page 7: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Minimal XML Bootstrapping

<!--// Scans for:// @Component, @Service, @Repository, @Controller // (and custom annotations) and deploys automatically// No user bean definitions at all!-->

<context:component-scan

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

<context:component-scanbase-package=”com.myapp.rewards”/>

Page 8: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Resolving Dependencies: @Autowired in Detail

• Injection at constructor/field/method level

• Supports multi argument methods

• Concise

• Default behavior is Spring’s traditional autowire by type

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

autowire by type

• Annotations make autowiring more useful

@Autowired

public void createTemplates(DataSource ds,

ConnectionFactory cf) {

this.jdbcTemplate = new JdbcTemplate(ds);

this.jmsTemplate = new JmsTemplate(cf);

}

Page 9: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@Qualifier Annotation

• Autowiring by type may have too many candidates

• Provide hints using qualifiers• @Qualifier annotation

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

• @Qualifier annotation

• Can be used on fields / parameters or on custom annotations

Page 10: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Resolution of dependencies by name

public class JdbcOrderRepositoryImpl

implements OrderRepository {

@Autowired

public void init(

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

public void init(

@Qualifier("myDS")

DataSource orderDataSource,

@Qualifier("otherDS")

DataSource inventoryDataSource,

MyHelper autowiredByType) {

// ...

}

Page 11: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Resolution of dependencies by annotation

public class JdbcOrderRepositoryImpl

implements OrderRepository {

@Autowired

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

@Autowired

public void setOrderServices(

@Emea OrderService emea,

@Apac OrderService apac) {

// ...

}

Page 12: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Association of injection target with annotation: By annotation

@Emea

public class EmeaOrderService

implements OrderService { @Qualifier

@Component

public @interface Emea {

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

...

}

@Apac

public class ApacOrderService

implements OrderService {

...

}

public @interface Emea {

}

@Qualifier

@Component

public @interface Apac{

}

Page 13: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Association of injection target with annotation: XML

<bean class="example.EmeaOrderService"><qualifier type=“example.Emea“/><!–...

EmeaOrderService need not be annotated-->

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

--></bean>

<bean class="example.ApacOrderService"><qualifier type=“example.Apac“/><!-- inject any dependencies required by this bean -->

</bean>

Page 14: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

The @Component meta-annotation

• Meta-annotations

• Annotations can annotate other annotations

• Allow extensibility

• Similar to Java inheritance

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

• Spring stereotypes

• Concept introduced in Spring 2.0, but more stereotypes added later

• Identify classes with a particular purpose

• Help to build a strong semantic model of application

• Not Spring-specific

• Common identifiers for regular code

Page 15: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring stereotypeannotations

• @Service• Identifies a stateless service

• @Repository• Identifies a repository (DAO)

• @Aspect• @AspectJ aspect

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

• @AspectJ aspect

• @Controller• Spring MVC controller

• Can define your own…

• @Component• Meta-annotation

• Annotate your own annotation with @Component and your classes get picked up by scanning

@Qualifier

@Component

public @interface Emea {

}

Page 16: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Component Scanning

• Scans the classpath for annotated classes

• Removes the need for XML definitions unless you want to need to do something you can’t do in annotations

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

@Service

public class DefaultAccountService { ...

<bean id="defaultAccountService"

class="DefaultAccountService"/>

Page 17: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Component Scan Usage

• Use Spring core context namespace

• Specify package(s) to pick up

• Can coexist with XML bean definitions and namespaces

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

and namespaces

<context:component-scan

base-package="com.mycompany.myapp"/>

Page 18: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

More advanced component scanning usage

• Not limited to annotations

• Can use type or other checks

• Highly customizable, as you expect from Spring

• Can even work without using annotations<context:component-scan base-package="blog"

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

<context:component-scan base-package="blog"

use-default-filters="false">

<context:include-filter type="annotation"

expression="org.sf.stereotype.Component"/>

<context:include-filter type="regex"

expression="blog\.Stub.*"/>

<context:exclude-filter type="assignable"

expression="blog.JdbcMessageRepository"/>

</context:component-scan>

Page 19: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Component Scan Pros

• No need for XML unless you need the greater sophistication it allows

• Changes are picked up automatically

• Great during development

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

• Works great with Annotation Driven Injection

• picking up further dependencies with @Autowired

• Highly configurable

Page 20: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Component Scan Cons

• Not a 100% solution

• Can’t do everything with annotations

• Requires classes to be annotated

• Need to take care not to scan an

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

• Need to take care not to scan an excessive number of classes, using Spring’s filtering mechanism

• Don’t get the valuable application structure blueprints you get with XML configuration

Page 21: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Mix and Match

• All Spring metadata in the end

• Spring component model is independent of metadata

• One approach does not exclude

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

• One approach does not exclude others

• Can have multiple contributions to a single context

Page 22: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Best Practice Changes

• Emerging best practice

• Use XML for:

• Classes you can’t or won’t annotate, particularly third party components

• Data sources

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

• Message queues etc.

• Use annotations and classpath scanning for application objects

• Jump into XML for complex injection behavior, per-instance configuration

• Classes you’ll reuse in different ways

• See Spring Web Flow sample applications

• booking-mvc

Page 23: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

What if I like XML?

• Externalizing configuration remains very important

• Options include XML, properties files

• Don’t worry if you are an annotation

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

• Don’t worry if you are an annotation skeptic

• We still love you!

• We aim to provide the best configuration solution whatever your preferences

Page 24: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

How do I understand my application blueprint?

• XML blueprint has real value

• Container will merge contributions from different sources

• Spring IDE can help to visualize

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

• Spring IDE can help to visualize everything together

• Help to navigate model

Page 25: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring Servlet MVC 2.5

@Controllerpublic class BookController {

private final BookService bookService;

@Autowired

public MyController(BookService bookService) {

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

this.bookService = bookService;

}

// Responds to URL http://host/servlet/book/removeBook

@RequestMapping

public String removeBook(@RequestParam("book") String bookId) {this.bookService.deleteBook(bookId);

return "redirect:myBooks";

}

Page 26: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Best Practice Changes

• Do not use old Controller interface, SimpleFormController and friends

• Annotation model is simply superior

• Keeps everything good about Spring

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

• Keeps everything good about Spring MVC

• More concise

• Should be no need to use XML bean definitions for @Controllers

• Rely on annotation scanning

Page 27: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Test Context Framework

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(“test-config.xml”) public class RewardSystemIntegrationTests {

@Autowired

• Escape JUnit 3 concrete inheritance hell

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

@Autowiredprivate RewardNetwork rewardNetwork;

@Test@Transactionalpublic void testRewardAccountForDining() {// test in transaction with auto-rollback

}}

Page 28: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Agenda

• Quick Review: Spring 2.5

• Spring 3.0 Themes and Features

• Spring 3.0 Roadmap

• Groovy and Grails

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

• Groovy and Grails

Page 29: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

– and other Spring @MVC additions

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

• Declarative model validation– Hibernate Validator, JSR 303

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

Page 30: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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!

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

– no spring.jar anymore!

• 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

Page 31: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

A word on Build

• OSGi provides a rigorous solution for modularization

• We will provide a solution for both Ant and Maven that allows

• pom or Ivy-driven generation of OSGi bundle

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

• pom or Ivy-driven generation of OSGi bundle metadata

• Transitive dependency resolution driven by OSGimanifests

• Ideal for dm Server, but emerging as best way to handle dependencies in general

• Check out Rob Harrop’s recent blog

Page 32: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Powerful Spring EL Parser

• Custom expression parser implementationshipped as part of Spring 3.0

– package org.springframework.expression

– next-generation expression engine inspired bySpring Web Flow 2.0's expression support

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

Spring Web Flow 2.0's expression support

• Compatible with Unified EL but significantly more powerful

– navigating bean properties, maps, etc

– method invocations

– construction of value objects

Page 33: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

EL in Bean Definitions

<bean class="mycompany.RewardsTestDatabase">

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

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

<property name="keyGenerator"value="“#{strategyBean.databaseKeyGenerator}”/>

</bean>

Page 34: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

EL in Component Annotations

@Repository

public class RewardsTestDatabase {

@Value(“#{systemProperties.favoriteColor}”)

private String favoriteColor;

• Makes annotation model much more powerful

• Minimizes need for recompilation

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

private String favoriteColor;

@Value(“#{systemProperties.databaseName}”)

public void setDatabaseName(String dbName) { … }

@Value(“#{strategyBean.databaseKeyGenerator}”)

public void setKeyGenerator(KeyGenerator kg) { … }

}

Page 35: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

EL in Component Annotations (2)

@Repository

public class RewardsTestDatabase {

@Value(“#{systemProperties.favoriteColor}”)

private String favoriteColor;

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

@Autowired

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

@Value(“#{strategyBean.timeout}”

int timeout) { … }

}

Page 36: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

EL Context Attributes

• Example showed access to EL attributes

– "systemProperties", "strategyBean"

• Implicit attributes exposed by default, depending on runtime context

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

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

Page 37: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Web Context Attributes

• Implicit web-specific attributes exposed by default as well

– "contextProperties": web.xml init-params

– "contextAttributes": ServletContext attributes

– "request": current Servlet/PortletRequest

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

– "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 38: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

• 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 39: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

REST in MVC - @PathVariable

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

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

return this.rewardsAdminService.findReward(id);

http://rewarddining.com/rewards/show/12345

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

return this.rewardsAdminService.findReward(id);

}

Similar to @RequestParam, but from URL path

Page 40: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Different Representations

• JSON

• XML

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

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

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

• XML

• ATOM

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 41: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@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

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

– supported for Servlet MVC and Portlet MVC

@RequestMapping("/show")

public Reward show(@RequestHeader("region") long regionId,@CookieValue("language") String langId) {

...

}

Page 42: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@MVC Extensibility

• Ability to register and handle custom annotations

@RequestMapping("/show")

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

public Reward show(@RequestHeader("region") long regionId,@CookieValue("language") String langId,

@MyMagicContextValue Magical m) {

...

}

Page 43: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

– 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

Page 44: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring Portlet MVC 3.0

@Controller@RequestMapping("EDIT")

public class MyPortletController {

@ActionMapping("delete")

public void removeBook(@RequestParam("book") String bookId) {

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

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 objectthis.myService.updateBook(…);

}

}

Page 45: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Conversation Management

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

– several independent conversations going on

• keeping independent state

• Generalized: conversation scope with shorter

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

• Generalized: conversation scope with shorter lifetime than session– scope="conversation"

• on-demand scoping of conversational Spring beans

• MyFaces Orchestra style

– Spring Web Flow 3 provides moresophisticated flow navigationmanagement on top

Page 46: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

– 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 47: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Model Validation

public class Reward {

@NotNull

@ShortDate

private Date transactionDate;

}

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

In view:

<form:input path="transactionDate">

• Same metadata can be used for persisting, rendering, etc

• Hibernate Validator annotations supported

• JSR 303 (Bean Validation) to be supported as well

Page 48: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring 3.0 and Java EE 6

• Early Java EE 6 support in Spring 3.0

– integration with JSF 2.0

• full compatibility as managed bean facility

– integration with JPA 2.0

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

• support for lock modes, query timeouts, etc

– integration with JAX-RS / Jersey

• using the JAX-RS component model to build programmatic resource endpoints

– JSR 236 WorkManager & TimerManager

• rich standardized access to thread pools

Page 49: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Third-Party Library Update

• Spring 2.5.x proactively tracks the latest versions of third-party libraries

– Hibernate 3.3, EclipseLink 1.0 final, etc

– compatible with J2EE 1.3 (e.g. Servlet 2.3, JSP 1.2)

• Spring 3.0 presents an opportunity to upgrade

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

• Spring 3.0 presents an opportunity to upgrade to the latest versions

– where it was impossible in the 2.5.x line

– e.g. JUnit 4.5, JRuby 1.1

– J2EE 1.4+ required (e.g. Servlet 2.4+, JSP 2.0+)

– even stronger Java 6 and Java EE 5 focus

Page 50: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Project Rearrangements

• Spring 3.0 will include 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 will also feature revised binding and type conversion infrastructure

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

• Spring 3.0 will also feature 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 will include the core functionality of Spring JavaConfig– configuration classes defining managed beans

Page 51: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring Java Configuration

• Annotation-centric approach, but unique

• Annotations are in dedicated configuration classes, not application classes

• Preserves centralized configuration model of XML

• Indeed, stronger centralization than with XML

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

• Indeed, stronger centralization than with XML

• Allows objects to be created and wired in Java

• Research project since 2005

• Available in milestone form as a separate project since 2007

• Core functionality moves to Spring Framework in 3.0

Page 52: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@Configuration

• A configuration class is similar to a <beans/> document

• Specifies a configuration class that creates beans

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

creates beans

• Defines defaults for the current context

@Configuration(

defaultAutowire = Autowire.BY_TYPE,

defaultLazy = Lazy.TRUE)

Page 53: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@Bean

• Analogous to <bean>

• Indicates a bean creation method

• Supports standard bean attributes from BeanDefinition internal metadata

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

BeanDefinition internal metadata

• lazy

• scope

• depends-on

• …

Page 54: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@Bean

@Bean (scope = REQUEST)

public Page currentPage() { … }

@Bean (scope = SESSION,

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

@Bean (scope = SESSION,

destroyMethodName = “shutdown”);

public Preferences prefs() { … }

@Bean (lazy = Lazy.FALSE);

public Admin admin() { … }

Page 55: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Java Configuration Class Example

@Configuration

public abstract class JavaConfig {

@Autowired

private DataSource dataSource;

@Bean

public AccountDAO accountDAO() {

<bean name=“accountDAO”

class=“...JdbcAccountDao”>

Method creates a bean

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

// return new InMemoryAccountDAO();

JdbcAccountDAO dao = new JdbcAccountDAO();

dao.setDataSource(dataSource);

dao.init();

return dao;

}

@Bean

public AccountService accountService() {

DefaultAccountService service = new DefaultAccountService();

service.setAccountDAO(accountDAO());

return service;

}

<property name=“dataSource”

ref=“dataSource” />

</bean>

Page 56: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

@Bean

public AccountDAO accountDAO() { ... }

...

service.setAccountDAO(accountDAO());

Bean-to-Bean Dependencies handled elegantly, with correct lifecycle semantics

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

service.setAccountDAO(

ctx.getBean(“accountDAO”));

Page 57: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

• Easy, elegant way to reference external beans using Spring 2.5 annotation-driven injection

• Strongly typed

@Autowired

Referencing external beans

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

@Autowired

private DataSource dataSource;

public DataSource dataSource() {

return (DataSource) ctx.getBean(“dataSource”);

}

Page 58: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Java Configuration Benefits

• Pure Java

• Allows visibility control

• Allows use of inheritance in configurations

• Powerful object creation

• Ability to use arbitrary Java code

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

• Ability to use arbitrary Java code

• Good for configuring existing classes

• Refactoring friendly

• Strongly typed

• Preserves valuable application blueprint

• IDE support with Spring IDE

Page 59: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Likely impact of Java Configuration on best practice

• Provides the ability to provide abstract configurations

• Compiler can enforce definition of missing beans

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

• Great for third parties

• Great for arbitrary object creation in Java in complex scenarios

• Complements existing configuration options

Page 60: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Annotation configuration vs Spring Java Configuration

• Complementary

• Different philosophies

• Annotation driven injection adds metadata to container identifying components and

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

to container identifying components and injection methods

• Java Configuration is programmatic object creation on steroids, benefiting from all container features

• Essentially a Java DSL for bean creation

Page 61: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Pruning & Deprecation in 3.0

• Some pruning planned– Commons Attributes support

– traditional TopLink API support

• in favor of JPA (EclipseLink)

– subclass-style Struts 1.x support

• Some deprecation planned

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

• 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

– several outdated helper classes

Page 62: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

• 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 outdatedSpring 1.2 / 2.0 API anymore!

Page 63: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

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

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

Page 64: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

Spring 3.0 Roadmap

• Spring Framework 3.0 M3 releasedat the end of March

• With Java Config features

• Spring Framework 3.0 RC1 scheduled for early May

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

early May

– after two further milestones

• Spring Framework 3.0 final expected in June

– depending on RC feedback

Page 65: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

More capable, but simpler to use

• We remain very focused on simplifying applications

• Each version of Spring has made Spring

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

has made Spring applications Simpler

• Spring 3.0 continues this tradition

• Pet Clinic sample LOC stats, showing reduction due to Spring 2.0 and 2.5

Page 66: tss spring for advanced - TechTargetjavasymposium.techtarget.com/html/images/RJohnson_Spring_Advanced.pdffrom Spring Web Flow 2.0 –consistent deployment procedure ... –full compatibility

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

Q&A