What's Coming in Spring 3.0

35
What’s coming in Spring 3.0 Matt Raible Colorado Software Summit 2008 http://www.linkedin.com/in/mraible

description

What's Coming in Spring 3.0 presentation from the Colorado Software Summit. http://softwaresummit.com/2008/speakers/raible.htm

Transcript of What's Coming in Spring 3.0

Page 1: What's Coming in Spring 3.0

What’s coming in Spring 3.0

Matt RaibleColorado Software Summit 2008

http://www.linkedin.com/in/mraible

Page 2: What's Coming in Spring 3.0

Agenda

• Introductions

• Spring History

• Spring Overview

• Choose Your Own Adventure

• Q and A

Page 3: What's Coming in Spring 3.0

Introductions

• Your experience with Spring?

• Your experience with Java and J2EE?

• What do you hope to learn today?

• Open Source experience: Ant, Maven, Eclipse, Hibernate, Tomcat, JBoss?

• Favorite IDE? Favorite OS?

Page 4: What's Coming in Spring 3.0

Who is Matt Raible?

• Java Blogger since 2002

• Power user of Java Frameworks

• Author of Spring Live and Pro JSP 2.0

• Founder of AppFuse (http://appfuse.org)

• Lead UI Architect at LinkedIn

• Father, Skier, Cyclist and Beer Connoisseur

• http://www.linkedin.com/in/mraible

Page 5: What's Coming in Spring 3.0

• Simplify J2EE

• Manage Dependencies

• Inversion of Control

• À la carte framework

The Spring Framework

Page 6: What's Coming in Spring 3.0

Spring Mission Statement

Page 7: What's Coming in Spring 3.0

Spring Modules

Page 8: What's Coming in Spring 3.0

Spring Portfolio

Page 9: What's Coming in Spring 3.0

Past Releases

• March 24, 2004 - Spring 1.0

• October 5, 2006 - Spring 2.0

• November 19, 2007 - Spring 2.5

• January 2009 - Spring 3.0

Page 10: What's Coming in Spring 3.0

3.0 Release Schedule

• 3.0 M1 scheduled for September 2008

• 3.0 RC1 scheduled for December 2008

• 3.0 Final in January 2009

Page 11: What's Coming in Spring 3.0

New in Spring 2.5

• Extended Platform Support

• Java SE 6, Java EE 5 and OSGi

• Enhanced AspectJ support

• Comprehensive support for Annotations

• Bean lifecycle

• Autowiring

• Spring MVC enhancements

Page 12: What's Coming in Spring 3.0

Annotation Examples@Repository(value = "userDao")public class UserDaoHibernate implements UserDao { HibernateTemplate hibernateTemplate; @Autowired public UserDaoHibernate(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); }

public List getUsers() { return hibernateTemplate.find("from User"); }

@Transactional public void saveUser(User user) { hibernateTemplate.saveOrUpdate(user); }} @Service(value = "userManager")

public class UserManagerImpl implements UserManager { @Autowired UserDao dao;

public List getUsers() { return dao.getUsers(); }}

Page 13: What's Coming in Spring 3.0

Annotation Examples@Repository(value = "userDao")public class UserDaoHibernate implements UserDao { HibernateTemplate hibernateTemplate; @Autowired public UserDaoHibernate(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); }

public List getUsers() { return hibernateTemplate.find("from User"); }

@Transactional public void saveUser(User user) { hibernateTemplate.saveOrUpdate(user); }} @Service(value = "userManager")

public class UserManagerImpl implements UserManager { @Autowired UserDao dao;

public List getUsers() { return dao.getUsers(); }}

Page 14: What's Coming in Spring 3.0

XML Configuration

<!-- Replaces ${...} placeholders with values from a properties file --> <!-- (in this case, JDBC-related settings for the dataSource definition below) --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- Enable @Transactional support --> <tx:annotation-driven/> <!-- Enable @AspectJ support --> <aop:aspectj-autoproxy/>

<!-- Scans for @Repository, @Service and @Component --> <context:component-scan base-package="org.appfuse"/>

Annotation Scanning

Page 15: What's Coming in Spring 3.0

XML Configuration

<aop:config> <aop:advisor id="managerTx" advice-ref="txAdvice"

pointcut="execution(* *..service.*Manager.*(..))"/> </aop:config> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice>

Declarative Transactions

Page 16: What's Coming in Spring 3.0

Testing

package org.appfuse.service;

import org.appfuse.model.User;import static org.junit.Assert.*;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration public class UserManagerTest { @Autowired UserManager userManager;

@Test @Transactional public void testGetUsers() {

}}

Page 17: What's Coming in Spring 3.0

Spring MVC Improvements@Controllerpublic class UserController { @Autowired UserManager userManager;

@RequestMapping("/users") public String execute(ModelMap model) { model.addAttribute(userManager.getUsers()); return "userList"; }}

<!-- Activates mapping of @Controller --> <context:component-scan base-package="org.appfuse.web"/>

<!-- Activates @Autowired for Controllers --> <context:annotation-config/>

<!-- View Resolver for JSPs --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean>

Page 18: What's Coming in Spring 3.0

ModelMap Naming

• Automatically generates a key name

• o.a.m.User ➟ ‘user’

• java.util.HashMap ➟ ‘hashMap’

• o.a.m.User[] ➟ ‘userList’

• ArrayList, HashSet ➟ ‘userList’

Page 19: What's Coming in Spring 3.0

@RequestMapping

• Methods with @RequestMapping are allowed very flexible signatures

• Arguments supported:

• ServletRequest and ServletResponse

• HttpSession

• Locale

• ModelMap

• http://is.gd/2wly

Page 20: What's Coming in Spring 3.0

Spring 2.0 ➟ 2.5

Page 21: What's Coming in Spring 3.0

Spring Annotations

http://refcardz.dzone.com/refcardz/spring-annotations

Page 22: What's Coming in Spring 3.0

Other Spring Technologies

• Spring Security 2.x with OpenID Support

• Spring Web Flow 2.x

• Spring Remoting (HttpInvoker)

• Spring Web Services

• Spring Batch

• Spring Dynamic Modules

• SpringSource Application Platform

Page 23: What's Coming in Spring 3.0

New in Spring 3.0

• Java 5+

• Spring Expression Language

• New Spring MVC Features

• REST

• Ajax

• Declarative Validation

• Backwards compatible with Spring 2.5

Page 24: What's Coming in Spring 3.0

Spring Expression Language

• Unified EL++

• Deferred evaluation of expressions

• Support for expressions that can set values and invoke methods

• Pluggable API for resolving Expressions

• Unified EL Reference: http://is.gd/2xqF

• Spring 3.0 allows usage in XML files and @Value annotations

Page 25: What's Coming in Spring 3.0

REST Supporthttp://infoq.com/articles/rest-introduction

Page 26: What's Coming in Spring 3.0

REST with @PathParam

@RequestMapping(method = RequestMethod.GET)public User show(@PathParam Long id) { return userManager.getUser(id);}

http://myserver/myapp/show/123

Page 27: What's Coming in Spring 3.0

REST with RestController@Controllerpublic class ResumesController implements RestController<Resume, Long> { public List<Resume> index() {}

public void create(Resume resume) {}

public Resume show(Long id) {}

public void delete(Long id) {}

public void update(Resume resume) {}}

GET http://myserver/myapp/resumes

POST http://myserver/myapp/resumes

GET http://myserver/myapp/resumes/1

DELETE http://myserver/myapp/resumes/1

PUT http://myserver/myapp/resumes/1

Page 28: What's Coming in Spring 3.0

JAX-RS Annotations

• JAX-RS: Java API for RESTful Web Services

• http://jcp.org/en/jsr/detail?id=311

• http://www.infoq.com/news/2008/10/jaxrs-comparison

• @Path, @GET, @PUT, @POST, @DELETE

• @DefaultValue, @PathParam, @QueryParam

Page 29: What's Coming in Spring 3.0

Dropping Support For...

• Commons Attributes

• TopLink (EclipseLink instead)

• MVC Controller hierarchy

• JUnit 3.8 Test classesimport org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

public class UserManagerTest extends AbstractTransactionalDataSourceSpringContextTests { private UserManager userManager;

public void setUserManager(UserManager userManager) { this.userManager = userManager; }

protected String[] getConfigLocations() { setAutowireMode(AUTOWIRE_BY_NAME); return new String[] {"classpath*:/WEB-INF/applicationContext*.xml"}; }

protected void onSetUpInTransaction() throws Exception { deleteFromTables(new String[] {"app_user"}); }

Page 30: What's Coming in Spring 3.0

2.5 Community Feedback

• Most common requests for Spring MVC:

• Add REST Support

• Add EL Support

• Add Conversation Support

• 3.0 Targeted Issues:

• http://snurl.com/3ob7o

Page 31: What's Coming in Spring 3.0

Choose Your Own Adventure

• Create a new Spring 3.0 Application with JPA and Spring MVC

• Upgrade an existing Spring 2.0 Application to Spring 3.0

Page 32: What's Coming in Spring 3.0

Get the Source

http://raibledesigns.com/rd/entry/the_colorado_software_summit_and

Page 33: What's Coming in Spring 3.0

Spring 3.0 Kickstarthttp://spring-kickstart.googlecode.com

Page 34: What's Coming in Spring 3.0

Spring 2.0 ➟ 3.0