SlideShare a Scribd company logo
1 of 35
Download to read offline
What’s coming in Spring 3.0


              Matt Raible
      Colorado Software Summit 2008
          http://www.linkedin.com/in/mraible
Agenda

• Introductions
• Spring History
• Spring Overview
• Choose Your Own Adventure
• Q and A
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?
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
The Spring Framework


• Simplify J2EE
• Manage Dependencies
• Inversion of Control
• À la carte framework
Spring Mission Statement
Spring Modules
Spring Portfolio
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
3.0 Release Schedule

• 3.0 M1 scheduled for September 2008
• 3.0 RC1 scheduled for December 2008
• 3.0 Final in January 2009
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
Annotation Examples
@Repository(value = quot;userDaoquot;)
public class UserDaoHibernate implements UserDao {
    HibernateTemplate hibernateTemplate;

    @Autowired
    public UserDaoHibernate(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    public List getUsers() {
        return hibernateTemplate.find(quot;from Userquot;);
    }

    @Transactional
    public void saveUser(User user) {
        hibernateTemplate.saveOrUpdate(user);
    }
}
                           @Service(value = quot;userManagerquot;)
                           public class UserManagerImpl implements UserManager {
                               @Autowired UserDao dao;

                               public List getUsers() {
                                   return dao.getUsers();
                               }
                           }
Annotation Examples
@Repository(value = quot;userDaoquot;)
public class UserDaoHibernate implements UserDao {
    HibernateTemplate hibernateTemplate;

    @Autowired
    public UserDaoHibernate(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    public List getUsers() {
        return hibernateTemplate.find(quot;from Userquot;);
    }

    @Transactional
    public void saveUser(User user) {
        hibernateTemplate.saveOrUpdate(user);
    }
}
                           @Service(value = quot;userManagerquot;)
                           public class UserManagerImpl implements UserManager {
                               @Autowired UserDao dao;

                               public List getUsers() {
                                   return dao.getUsers();
                               }
                           }
XML Configuration
Annotation Scanning
<!-- Replaces ${...} placeholders with values from a properties file -->
<!-- (in this case, JDBC-related settings for the dataSource definition below) -->
<context:property-placeholder location=quot;classpath:jdbc.propertiesquot;/>

<!-- Enable @Transactional support -->
<tx:annotation-driven/>

<!-- Enable @AspectJ support -->
<aop:aspectj-autoproxy/>

<!-- Scans for @Repository, @Service and @Component -->
<context:component-scan base-package=quot;org.appfusequot;/>
XML Configuration
Declarative Transactions

 <aop:config>
     <aop:advisor id=quot;managerTxquot; advice-ref=quot;txAdvicequot;
                  pointcut=quot;execution(* *..service.*Manager.*(..))quot;/>
 </aop:config>

 <tx:advice id=quot;txAdvicequot;>
     <tx:attributes>
         <tx:method name=quot;get*quot; read-only=quot;truequot;/>
         <tx:method name=quot;*quot;/>
     </tx:attributes>
 </tx:advice>
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() {

        }
    }
Spring MVC Improvements
 @Controller
 public class UserController {
     @Autowired
     UserManager userManager;

      @RequestMapping(quot;/usersquot;)
      public String execute(ModelMap model) {
          model.addAttribute(userManager.getUsers());
          return quot;userListquot;;
      }
 }

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

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

     <!-- View Resolver for JSPs -->
     <bean id=quot;viewResolverquot;
         class=quot;org.springframework.web.servlet.view.InternalResourceViewResolverquot;>
         <property name=quot;viewClassquot;
                   value=quot;org.springframework.web.servlet.view.JstlViewquot;/>
         <property name=quot;prefixquot; value=quot;/quot;/>
         <property name=quot;suffixquot; value=quot;.jspquot;/>
     </bean>
ModelMap Naming


• Automatically generates a key name
 • o.a.m.User ➟ ‘user’
 • java.util.HashMap ➟ ‘hashMap’
 • o.a.m.User[] ➟ ‘userList’
 • ArrayList, HashSet ➟ ‘userList’
@RequestMapping

• Methods with @RequestMapping are
  allowed very flexible signatures
• Arguments supported:
 • ServletRequest and ServletResponse
 • HttpSession
 • Locale
 • ModelMap
 • http://is.gd/2wly
Spring 2.0 ➟ 2.5
Spring Annotations

http://refcardz.dzone.com/refcardz/spring-annotations
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
New in Spring 3.0
• Java 5+
• Spring Expression Language
• New Spring MVC Features
 • REST
 • Ajax
 • Declarative Validation
• Backwards compatible with Spring 2.5
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
REST Support
               http://infoq.com/articles/rest-introduction
REST with @PathParam

   http://myserver/myapp/show/123

   @RequestMapping(method = RequestMethod.GET)
   public User show(@PathParam Long id) {
   	 return userManager.getUser(id);
   }
REST with RestController
@Controller
public class ResumesController implements RestController<Resume, Long> {
	
	   GET http://myserver/myapp/resumes
	   public List<Resume> index() {}

	   POST http://myserver/myapp/resumes
	   public void create(Resume resume) {}

	   GET http://myserver/myapp/resumes/1
	   public Resume show(Long id) {}

	   DELETE http://myserver/myapp/resumes/1
	   public void delete(Long id) {}

	   PUT http://myserver/myapp/resumes/1
	   public void update(Resume resume) {}
}
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
Dropping Support For...

• Commons Attributes
• TopLink (EclipseLink instead)
• MVC Controller hierarchy
• JUnit 3.8 Test classes
      import 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[] {quot;classpath*:/WEB-INF/applicationContext*.xmlquot;};
         }

         protected void onSetUpInTransaction() throws Exception {
             deleteFromTables(new String[] {quot;app_userquot;});
         }
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
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
Get the Source




  http://raibledesigns.com/rd/entry/the_colorado_software_summit_and
Spring 3.0 Kickstart
      http://spring-kickstart.googlecode.com
Spring 2.0 ➟ 3.0
Questions?


matt@raibledesigns.com
http://raibledesigns.com
http://twitter.com/mraible
Download Presentation
 http://raibledesigns.com/rd/page/publications

More Related Content

What's hot

20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
Tse-Ching Ho
 

What's hot (20)

Spring annotation
Spring annotationSpring annotation
Spring annotation
 
Jsp presentation
Jsp presentationJsp presentation
Jsp presentation
 
Data Access with JDBC
Data Access with JDBCData Access with JDBC
Data Access with JDBC
 
Grails Advanced
Grails Advanced Grails Advanced
Grails Advanced
 
Developing ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller PatternDeveloping ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller Pattern
 
ASP.NET MVC 4 - Routing Internals
ASP.NET MVC 4 - Routing InternalsASP.NET MVC 4 - Routing Internals
ASP.NET MVC 4 - Routing Internals
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andev
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Switch to React.js from AngularJS developer
Switch to React.js from AngularJS developerSwitch to React.js from AngularJS developer
Switch to React.js from AngularJS developer
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
 
Spring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentationSpring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentation
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
 
50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
Practical Protocol-Oriented-Programming
Practical Protocol-Oriented-ProgrammingPractical Protocol-Oriented-Programming
Practical Protocol-Oriented-Programming
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
Basic Tutorial of React for Programmers
Basic Tutorial of React for ProgrammersBasic Tutorial of React for Programmers
Basic Tutorial of React for Programmers
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentation
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, maven
 

Similar to What's Coming in Spring 3.0

[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
Carles Farré
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
funkatron
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
Sagar Nakul
 

Similar to What's Coming in Spring 3.0 (20)

Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
ASP.NET MVC introduction
ASP.NET MVC introductionASP.NET MVC introduction
ASP.NET MVC introduction
 
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
 
DWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A TutorialDWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A Tutorial
 
Retrofitting
RetrofittingRetrofitting
Retrofitting
 
Jsf Ajax
Jsf AjaxJsf Ajax
Jsf Ajax
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
Asp.Net Mvc
Asp.Net MvcAsp.Net Mvc
Asp.Net Mvc
 
Introduction To ASP.NET MVC
Introduction To ASP.NET MVCIntroduction To ASP.NET MVC
Introduction To ASP.NET MVC
 
Codemotion appengine
Codemotion appengineCodemotion appengine
Codemotion appengine
 
Spine.js
Spine.jsSpine.js
Spine.js
 
Annotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVCAnnotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVC
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Struts2
Struts2Struts2
Struts2
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 

More from Matt Raible

More from Matt Raible (20)

Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
 
Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022
 
Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022
 
Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
 
Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022
 
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
 
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021
 
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
 
Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
 
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
 
JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

What's Coming in Spring 3.0

  • 1. What’s coming in Spring 3.0 Matt Raible Colorado Software Summit 2008 http://www.linkedin.com/in/mraible
  • 2. Agenda • Introductions • Spring History • Spring Overview • Choose Your Own Adventure • Q and A
  • 3. 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?
  • 4. 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
  • 5. The Spring Framework • Simplify J2EE • Manage Dependencies • Inversion of Control • À la carte framework
  • 9. 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
  • 10. 3.0 Release Schedule • 3.0 M1 scheduled for September 2008 • 3.0 RC1 scheduled for December 2008 • 3.0 Final in January 2009
  • 11. 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
  • 12. Annotation Examples @Repository(value = quot;userDaoquot;) public class UserDaoHibernate implements UserDao { HibernateTemplate hibernateTemplate; @Autowired public UserDaoHibernate(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public List getUsers() { return hibernateTemplate.find(quot;from Userquot;); } @Transactional public void saveUser(User user) { hibernateTemplate.saveOrUpdate(user); } } @Service(value = quot;userManagerquot;) public class UserManagerImpl implements UserManager { @Autowired UserDao dao; public List getUsers() { return dao.getUsers(); } }
  • 13. Annotation Examples @Repository(value = quot;userDaoquot;) public class UserDaoHibernate implements UserDao { HibernateTemplate hibernateTemplate; @Autowired public UserDaoHibernate(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public List getUsers() { return hibernateTemplate.find(quot;from Userquot;); } @Transactional public void saveUser(User user) { hibernateTemplate.saveOrUpdate(user); } } @Service(value = quot;userManagerquot;) public class UserManagerImpl implements UserManager { @Autowired UserDao dao; public List getUsers() { return dao.getUsers(); } }
  • 14. XML Configuration Annotation Scanning <!-- Replaces ${...} placeholders with values from a properties file --> <!-- (in this case, JDBC-related settings for the dataSource definition below) --> <context:property-placeholder location=quot;classpath:jdbc.propertiesquot;/> <!-- Enable @Transactional support --> <tx:annotation-driven/> <!-- Enable @AspectJ support --> <aop:aspectj-autoproxy/> <!-- Scans for @Repository, @Service and @Component --> <context:component-scan base-package=quot;org.appfusequot;/>
  • 15. XML Configuration Declarative Transactions <aop:config> <aop:advisor id=quot;managerTxquot; advice-ref=quot;txAdvicequot; pointcut=quot;execution(* *..service.*Manager.*(..))quot;/> </aop:config> <tx:advice id=quot;txAdvicequot;> <tx:attributes> <tx:method name=quot;get*quot; read-only=quot;truequot;/> <tx:method name=quot;*quot;/> </tx:attributes> </tx:advice>
  • 16. 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() { } }
  • 17. Spring MVC Improvements @Controller public class UserController { @Autowired UserManager userManager; @RequestMapping(quot;/usersquot;) public String execute(ModelMap model) { model.addAttribute(userManager.getUsers()); return quot;userListquot;; } } <!-- Activates mapping of @Controller --> <context:component-scan base-package=quot;org.appfuse.webquot;/> <!-- Activates @Autowired for Controllers --> <context:annotation-config/> <!-- View Resolver for JSPs --> <bean id=quot;viewResolverquot; class=quot;org.springframework.web.servlet.view.InternalResourceViewResolverquot;> <property name=quot;viewClassquot; value=quot;org.springframework.web.servlet.view.JstlViewquot;/> <property name=quot;prefixquot; value=quot;/quot;/> <property name=quot;suffixquot; value=quot;.jspquot;/> </bean>
  • 18. ModelMap Naming • Automatically generates a key name • o.a.m.User ➟ ‘user’ • java.util.HashMap ➟ ‘hashMap’ • o.a.m.User[] ➟ ‘userList’ • ArrayList, HashSet ➟ ‘userList’
  • 19. @RequestMapping • Methods with @RequestMapping are allowed very flexible signatures • Arguments supported: • ServletRequest and ServletResponse • HttpSession • Locale • ModelMap • http://is.gd/2wly
  • 22. 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
  • 23. New in Spring 3.0 • Java 5+ • Spring Expression Language • New Spring MVC Features • REST • Ajax • Declarative Validation • Backwards compatible with Spring 2.5
  • 24. 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
  • 25. REST Support http://infoq.com/articles/rest-introduction
  • 26. REST with @PathParam http://myserver/myapp/show/123 @RequestMapping(method = RequestMethod.GET) public User show(@PathParam Long id) { return userManager.getUser(id); }
  • 27. REST with RestController @Controller public class ResumesController implements RestController<Resume, Long> { GET http://myserver/myapp/resumes public List<Resume> index() {} POST http://myserver/myapp/resumes public void create(Resume resume) {} GET http://myserver/myapp/resumes/1 public Resume show(Long id) {} DELETE http://myserver/myapp/resumes/1 public void delete(Long id) {} PUT http://myserver/myapp/resumes/1 public void update(Resume resume) {} }
  • 28. 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
  • 29. Dropping Support For... • Commons Attributes • TopLink (EclipseLink instead) • MVC Controller hierarchy • JUnit 3.8 Test classes import 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[] {quot;classpath*:/WEB-INF/applicationContext*.xmlquot;}; } protected void onSetUpInTransaction() throws Exception { deleteFromTables(new String[] {quot;app_userquot;}); }
  • 30. 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
  • 31. 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
  • 32. Get the Source http://raibledesigns.com/rd/entry/the_colorado_software_summit_and
  • 33. Spring 3.0 Kickstart http://spring-kickstart.googlecode.com