BeJUG - Spring 3 talk
-
Upload
stephan-janssen -
Category
Technology
-
view
1.855 -
download
1
description
Transcript of BeJUG - Spring 3 talk
![Page 1: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/1.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Spring Framework 3.0Alef Arendsen
![Page 2: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/2.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Configuration options in 1.0, 2.0, 2.5 and 3.0• Introduction of REST support in Spring MVC•Migration of OXM from WS to Spring Framework• Introduction of expression language support•Other features and considerations for Spring 3.0
2
Agenda
![Page 3: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/3.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Configuration options in 1.0, 2.0, 2.5 and 3.0• Introduction of REST support in Spring MVC•Migration of OXM from WS to Spring Framework• Introduction of expression language support•Other features and considerations for Spring 3.0
3
Agenda
![Page 4: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/4.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="...">
<bean id="clinic" class="org.springframework.samples.petclinic.JdbcClinic">
<constructor-arg ref="dataSource"/> </bean>
</beans>
Spring 1.0 <beans/> schema
![Page 5: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/5.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="...">
<tx:annotation-driven base-package="org.springframework.samples.petclinic"/>
</beans>
Spring 2.0 schema support
![Page 6: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/6.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
@Transactional @Repositorypublic class HibernateClinic implements Clinic { private SessionFactory sessionFactory;
@Autowired public HibernateClinic(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory; }}
Spring 2.5 annotations
![Page 7: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/7.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="...">
<context:component-scan base-package="org.springframework.samples.petclinic"/>
</beans>
Component scanning
![Page 8: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/8.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
@Controllerpublic class ClinicController {
private final Clinic clinic;
@Autowired public ClinicController(Clinic clinic) { this.clinic = clinic; }
...}
@Controller for Spring MVC
![Page 9: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/9.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
@Controllerpublic class ClinicController {
...
@RequestMapping("/vets") public List<Vet> vets() { return clinic.getVets(); }}
@RequestMapping methods
![Page 10: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/10.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Constantly simplifying
•LoC for sample application PetClinic over time
10
Spring 2.5Spring 2.0
![Page 11: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/11.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Spring as a foundation
•Other technologies building on the Spring foundation
•Spring Batch 2.0 (e.g. with @BatchComponent)•Spring Integration 1.0 (e.g. with @MessageEndpoint)•Spring Web Services (e.g. with @Endpoint)•...
•Most projects feature annotation-based options as well as XML-based ones
11
![Page 12: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/12.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Other portfolio example: Spring Integration 1.0 - dec08
•Relatively new project under the Spring Portfolio umbrella
• Focuses on in-VM lightweight integration scenarios–asynchronous messaging in a single VM–with adapters for many formats to integrate with external systems (JMS, Email, File, et cetera)
• Implement of the Patterns of Enterprise Application Integration (Hohpe et. al.)
12
![Page 13: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/13.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13
@MessageEndpointpublic class OrderSplitter {
@Splitter(inputChannel="orders",outputChannel="drinks")
public List<OrderItem> split(Order order) { return order.getItems(); }}
@MessageEndpoint
![Page 14: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/14.jpg)
<si:splitter input-channel="orders" output-channel="drinks" ref="orderSplitter" method="split" />
<bean id="orderSplitter" class="org.sfw.integration..xml.OrderSplitter"/>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14
@MessageEndpoint
public class OrderSplitter {
public List<OrderItem> split(Order order) { return order.getItems(); }}
Look ma, no annotations!
![Page 15: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/15.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
New in Spring 3.0
•Previously available in a separate project(Spring JavaConfig)
•Has been available in prototype form since early 2005
•Now promoted to the coreSpring Framework
15
![Page 16: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/16.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="...">
<bean id="clinic" class="org.springframework.samples.petclinic.JdbcClinic">
<constructor-arg ref="dataSource"/> </bean>
</beans>
Spring 1.0 <beans/> schema
![Page 17: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/17.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
@Configurationpublic abstract class MyConfig { @Bean public Clinic clinic() { DataSource ds = dataSource(); return new JdbcClinic(ds); }
@Autowired public abstract DataSource dataSource();
}
JavaConfig in Action
One method per bean
![Page 18: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/18.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Configuration options in 1.0, 2.0, 2.5 and 3.0• Introduction of REST support in Spring MVC•Migration of OXM from WS to Spring Framework• Introduction of expression language support•Other features and considerations for Spring 3.0
18
Agenda
![Page 19: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/19.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
• (Ideally) stateless server architecture•Resources•Actions / operations on those resources•Representations
19
Summary of REST
![Page 20: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/20.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
A practical example
•http://bank.com/account/1234•Represents the account resources
–GET retrieves the account•GET to bank.com/account/1234 to retrieve
–PUT creates or modifies a resource•Post to bank.com/account/1234 to create/update
–POST creates a resource•Post to bank.com/account to create a new account
–DELETE deletes a resources•DELETE to bank.com/account/1234 to delete or for example deactiveate / cancel
20
![Page 21: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/21.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Summary of Spring REST
•URI template support (client & controller)•Support for representations
(HTML, XML, RSS, Atom, PDF, Excel, JSON)•Servlet Filter to PUT/DELETE support•Built on Spring MVC
21
![Page 22: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/22.jpg)
@Controller@RequestMapping("/account/*")public class AccountController { @RequestMapping(value="/*/{id}",
method=RequestMethod.GET) public Account get(@PathVariable long id) { // retrieve and return account }}
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Support for URI templates
22
Handles URL: http://bank.com/account/1234
![Page 23: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/23.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Representations
•Neatly laid-out support for several representations of your data:–HTML (e.g. through FreeMarker or JSPs)–PDF and Excel (POI, JExcelApi, iText)–JSON, RSS, Atom–XML
•Support for changing the representation based on extension or the accept-header
23
![Page 24: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/24.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Support for PUT and DELETE
•Most browsers don’t support PUT / DELETE•So what about the following:
24
@RequestMapping(value="/*/{id}", method=RequestMethod.DELETE) public void delete(@PathVariable long id) { // delete account }
![Page 25: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/25.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Support for PUT and DELETE
•Most browsers don’t support PUT / DELETE•So what about the following:
•Support for PUT and DELETE is added through a special ServletFilter (and in HTML for example using a hidden input field)
25
@RequestMapping(value="/*/{id}", method=RequestMethod.DELETE) public void delete(@PathVariable long id) { // delete account }
![Page 26: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/26.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Recap of Spring 2.5 configuration options and @MVC
• Introduction of REST support in Spring MVC•Migration of OXM to Spring Framework• Introduction of expression language support•Other features and considerations for Spring 3.0
26
Agenda
![Page 27: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/27.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Mapping objects to XML and vice versa through–XmlBeans, JiBX, Castor, JAXB (2), XStream
•Used to be part of Spring WS•Useful for REST purposes as well•Moved to core Spring Framework as of 3.0
27
Object-XML mapping abstraction in Spring
![Page 28: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/28.jpg)
public interface Marshaller { public void marshal(Object graph, Result result) throws XmlMappingException, IOException;}
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Interfaces for marshalling and unmarshalling
28
public interface Unmarshaller { public Object unmarshal(Source source) throws XmlMappingException, IOException;}
![Page 29: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/29.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
• JMS (MarshallingMessageConverter•MVC (MarshallingView)•Batch• ...
29
Usages throughout portfolio
![Page 30: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/30.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Recap of Spring 2.5 configuration options and @MVC
• Introduction of REST support in Spring MVC•Migration of OXM from WS to Spring Framework• Introduction of expression language support•Other features and considerations for Spring 3.0
30
Agenda
![Page 31: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/31.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Property externalization in 2.5
•Traditionally using
31
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="usernane" value="${username}"/> <property name="password" value="${password"/></bean>
<context:property-placeholder location="/WEB-INF/jdbc.properties"/>
![Page 32: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/32.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Drawbacks of this approach
• It only supports properties•The replacement is done at initialization
time»Not at bean creation time
• It doesn’t support conditionals or other constructs
• It’s not very extensible for other frameworks
32
![Page 33: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/33.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Introducing expressions
•Spring 3.0 will include full support for the unified expression language
•The replacement is done when the bean is created (and not when reading the configuration)
33
![Page 34: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/34.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Introducing expressions
•Spring 3.0 will include full support for the unified expression language
•The replacement is done when the bean is created (and not when reading the configuration)
34
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" scope=”prototype”> ...
<property name="url" value="${systemProperties.url}"/></bean>
![Page 35: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/35.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Using expressions in other parts of the portfolio
•An extensible expression language•Will be used by other frameworks
–Security (example below)–Integration / JMS (e.g. dynamic queue names)–Et cetera
35
@PreAuthorize("hasRole('ROLE_SUPERVISOR') or " + "hasRole('ROLE_TELLER') and " + "(#account.balance + #amount >= -#account.overdraft)" ) public void post(Account account, double amount);
![Page 36: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/36.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
• Recap of Spring 2.5 configuration options and @MVC• Introduction of REST support in Spring MVC• Migration of OXM from WS to Spring Framework• Introduction of expression language support• Other features and considerations for Spring 3.0
36
Agenda
![Page 37: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/37.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Backwards compatibility
37
•Spring 3.0 will deprecate / remove various things
•Traditional Spring MVC controller hierarchy (??)•Commons Attributes support•Traditional TopLink support•Traditional JUnit 3.8 class hierarchy
•95% backwards compatible with regards to APIs
•99% backwards compatible in the programming model
![Page 38: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/38.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
•Spring 3.0 M1 released in December•Spring 3.0 M2 to be released any time now•Further Milestones later this quarter•Spring 3.0 RC and release Q2 2009
•More information on what features are included in which milestones: http://jira.springframework.org
38
Roadmap
![Page 39: BeJUG - Spring 3 talk](https://reader033.fdocuments.us/reader033/viewer/2022051514/5495ca37ac79591d2e8b4edc/html5/thumbnails/39.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Questions?