what’s coming in spring 3 - raible...
TRANSCRIPT
![Page 1: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/1.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/2.jpg)
Agenda
• Introductions
• Spring History
• Spring Overview
• Choose Your Own Adventure
• Q and A
![Page 3: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/3.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/4.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/5.jpg)
• Simplify J2EE
• Manage Dependencies
• Inversion of Control
• À la carte framework
The Spring Framework
![Page 6: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/6.jpg)
Spring Mission Statement
![Page 7: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/7.jpg)
Spring Modules
![Page 8: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/8.jpg)
Spring Portfolio
![Page 9: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/9.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/10.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/11.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/12.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/13.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/14.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/15.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/16.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/17.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/18.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/19.jpg)
@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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/20.jpg)
Spring 2.0 ➟ 2.5
![Page 21: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/21.jpg)
Spring Annotations
http://refcardz.dzone.com/refcardz/spring-annotations
![Page 22: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/22.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/23.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/24.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/25.jpg)
REST Supporthttp://infoq.com/articles/rest-introduction
![Page 26: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/26.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/27.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/28.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/29.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/30.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/31.jpg)
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 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/32.jpg)
Get the Source
http://raibledesigns.com/rd/entry/the_colorado_software_summit_and
![Page 33: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/33.jpg)
Spring 3.0 Kickstarthttp://spring-kickstart.googlecode.com
![Page 34: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/34.jpg)
Spring 2.0 ➟ 3.0
![Page 35: What’s coming in Spring 3 - Raible Designsstatic.raibledesigns.com/.../WhatsComingInSpring30.pdf · Introductions • Your experience with Spring? • Your experience with Java](https://reader033.vdocuments.site/reader033/viewer/2022060314/5f0b7bc07e708231d430bdff/html5/thumbnails/35.jpg)
http://raibledesigns.com
http://twitter.com/mraible
Download Presentation
http://raibledesigns.com/rd/page/publications
Questions?