SlideShare a Scribd company logo
1 of 54
Hands-on Spring 3.0:
    The next generation

Sun Open Communities Forum 2009    Sergi Almar i Graupera
     Madrid, 18 y 19 de Junio
                                    sergi.almar@javahispano.org
                                  salmar@extrema-sistemas.com
Formación Extrema Sistemas

   Cursos SpringSource
       Core Spring
            21 – 24 Julio 09 / Madrid
            24 – 27 Agosto 09 / Barcelona
            28 Septiembre 09 – 01 Octubre 09 / Madrid
       Rich Web Applications With Spring
            07 -10 Septiembre 09 / Barcelona
   Curso Agile Project Management
   Más info:
            http://extrema-sistemas.com/formacion
Aplicación ejemplo
   Disponible en http://sergialmar.wordpress.com
Agenda

   Visión general Spring
   De Spring 2.5...
   ... a Spring 3.0!
Agenda

   Visión general Spring
   De Spring 2.5...
   ... a Spring 3.0!
Spring Portfolio

                               Proyectos Spring

   Spring Web Services             Spring MVC        Spring Web Flow

                                                       Spring Faces
  Spring BlazeDS Integration
                                     Spring
                                   Framework         Spring JavaScript
  Spring Dynamic Modules
                                                        Spring IDE

      Spring Rich Client                              Spring for .NET

        Spring Security                 AspectJ          Spring Roo

       Spring Batch             Spring Integration      Spring LDAP
Agenda

   Visión general Spring
   De Spring 2.5...
   ... a Spring 3.0!
Spring Framework 2.5

   Soporte para configuración basada en
    anotaciones
       @Autowired (@Quilifier opcionalmente)
       @Transactional
       @Service, @Repository, @Controller
   Anotaciones Java EE 5 soportadas
       @PostConstruct, @PreDestroy
       @PersistenceContext, @PersistenceUnit
       @Resource, @EJB, @WebServiceRef
       @TransactionAttribute
Componente anotado
@Service
public class AccountServiceImpl implements AccountService {


    @Autowired
    public AccountServiceImpl(AccountRepository ar) { … }


    @Transactional
    public void saveAccount(Account account) { … }


    @PostConstruct
    public initCache() { ... }


    @PreDestroy
    public cleanupCache() { ... }


}
Configuración mínima en XML

<!– Activando la configuración con annotation-based -->


<context:annotation-config/>


<!– Sólo definición de bean – no constructor-arg/property -->
<bean id=”accountService”
            class=”org.jh.service.AccountServiceImpl”/>
<bean id=”accountRepository”
            class=”org.jh.dao.jdbc.JdbcAccountRepository”/>


<!– Y otras definiciones de beans de infrastructura:
   PlatformTransactionManager, DataSource, etc -->
Bootstrap mínimo en XML


<!– Escanea en búsqueda de:
   @Component, @Service, @Repository, @Controller
   y los registra automáticamente
   -->


<context:component-scan base-package=”org.javahispano” />
Framework para test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class JavaHispanoIntegrationTests {


    @Autowired
    private AccountService accountService;


    @Test
    @Transactional
    public void testSaveAccount() {
        // test transaccional con auto-rollback
    }
}
Controlador Spring @MVC
@Controller
public class CommentController {


    private final CommentService commentService;


    @Autowired
    public CommentController(CommentService commentService) {
        this.commentService = commentService;
    }
    // Responde a la URL: http://host/servlet/comment/deleteComment
    @RequestMapping
    public String deleteComment(@RequestParam("c") int commentId) {
        this.commentService.deleteComment(commentId);
        return "redirect:commentList";
    }
}
Agenda

   Visión general Spring
   De Spring 2.5...
   ... a Spring 3.0!
Lo nuevo en Spring 3.0

   Basado en Java 5+
       Compatible con J2EE 1.4 y Java EE 5
   Spring Expression Language
   Configuración al estilo JavaConfig
   Soporte REST
       y otras adiciones a Spring @MVC
   OXM
API actualizada para Java 5

   Usuarios con Java 1.4 deben seguir en la
    versión 2.5.6
   API refactorizada para utilizar generics,
    varargs...
   Interfaz BeanFactory devuelve instancias de
    beans tipadas
       T getBean(String name, Class<T> requiredType)
       Map<String, T> getBeansOfType(Class<T> type)
Parser Spring EL

   Implementación de parseador de expresiones
    con Spring 3.0
       paquete org.springframework.expression
       motor de expresiones de nueva generación
            inspirado en las expresiones de Spring Web Flow 2.0
   Compatible con Unified EL pero más potente
       acceso a propiedades de beans, maps, etc
       invocación de métodos
       construcción de objetos
EL en XML


<bean class="org.javahispano.BDTest">

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

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

</bean>
EL en componentes anotados


 @Repository
 public class BDTest {

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

     @Value(“#{strategyBean.databaseKeyGenerator}”)
     public void setKeyGenerator(KeyGenerator kg) { … }
 }
Atributos para el contexto web

   Atributos específicos web expuestos
    implícitamente
       "contextProperties": parámetros de inicialización del
        web.xml
       "contextAttributes": atributos del ServletContext
       "request": Servlet/PortletRequest actual
       "session": Http/PortletSession actual
   Objetos JSF expuestos implícitamente en un
    contexto JSF
       "param", "initParam", "facesContext", etc
EL en otros proyectos

   Un lenguaje de expresiones extensible
   Utilizado en otros proyectos del portfolio
       Seguridad
       Integration / JMS (nombres dinámicos de colas)
       ...

        @PreAuthorize(“hasRole('ROLE_USER') and
                       #usuario.nombre == principal.name”)
        public void guardarUsuario(Usuario usuario) { … }
Configuración basada en Java

   Funcionalidad de Spring JavaConfig pasa a ser
    parte del core:
       @Configuration
       @Bean
       @Primary
       @Lazy
       @Import
       @Value
@Configuration

   Una clase de configuración es similar a un
    documento <beans/>
   Especifica una clase de configuración que crea
    beans
   Es un objeto gestionado por Spring
       Puede ser inyectado
       Al estar meta-anotado con @Component, puede
        ser encontrado con el component scanning sin
        necesidad de definición XML
@Bean

   Similar a <bean/>
   Indica un método encargado de la creación de
    un bean
   Soporta los atributos: init-method, destroy-
    method, autowiring y name.
Ejemplo nueva configuración
@Configuration
public class AppConfig {


  @Value(”#{jdbcProperties.url}”) String jdbcUrl;
  @Value(”#{jdbcProperties.username}”) String username;
  @Value(”#{jdbcProperties.password}”) String password;

                        <bean id="accountService" class="org.jh.service.AccountService">
  @Bean                   <constructor-arg ref="accountRepository" />
                        </bean>
  public AccountService accountService() {
      return new AccountServiceImpl(accountRepository());
  } <bean id="accountRepository" class="org.jh.dao.hibernate.HibernateAccountRepository">
        <constructor-arg ref="sessionFactory" />
      </bean>
  @Bean
  public AccountRepository accountRepository() {
      return new HibernateAccountRepository(sessionFactory());
  }
Soporte Scoped Proxy


 @Configuration
 public class AppConfig {
     @Bean
     @Scope(value=StandardScopes.SESSION,
             proxyMode=ProxyMode.INTERFACES)
     public PreferenciasUsuario preferenciasUsuario() {
         return ... ;
     }
 }
@Lazy



     @Lazy @Bean
     public LazyBean lazyBean() {
         return ... ;
     }
 }
Bootstrapping clases
@Configuration



<context:component-scan
        base-package="org.jh.config"/>
Soporte REST

   Extensión de Spring @MVC para soportar
    mappings al estilo REST
       extracción de parámetros de la URI
       view resolvers para negociación de contenido
   Objetivo: soporte nativo para REST con Spring
    MVC, con uso para UI y sin UI
   Alternativa: usar JAX-RS a través de un
    proveedor JAX-RS (Jersey...)
Ejemplo REST

   http://javahispano.org/noticia/329
   Representa el recurso noticia:
       GET obtener una notícia
            GET jh.org/noticia/329 para obtener la notícia 329
       PUT crea o modifica un recurso
            PUT a jh.org/noticia/329 para crear / modificar
       POST crea un recurso
            POST a jh.org/noticia para crear una nueva noticia
       DELETE borra una notícia
            DELETE a jh.org/noticia/329 para borrar la notícia
@PathVariable


           http://www.javahispano.org/noticia/3


@RequestMapping(value=”/noticia/{id}”, method=RequestMethod.GET)
public String mostrarNoticia(@PathVariable Long id, Model model) {
  // mostrar noticia
}
Multiples @PathVariables


     http://www.javahispano.org/noticia/3/comentario/2

@RequestMapping(value=”/noticia/{id}/comentario/{comentario}”,
                    method=RequestMethod.GET)
 public String mostrarComentario(@PathVariable(“id”) Long id,
                                 @PathVariable(“comentario”) String comentario,
                                 Model model) {
   // mostrar comentario
 }
Paths tipo Ant


     http://www.javahispano.org/noticia/3/comentario/2

@RequestMapping(value=”/noticia/*/comentario/{comentario}”,
                    method=RequestMethod.GET)
 public String mostrarComentario(@PathVariable(“comentario”) String comentario,
                                 Model model) {
   // mostrar comentario
 }
Binding de datos @PathVariable


     http://www.javahispano.org/noticia/2009-06-18

@InitBinder
public void initBinder(WebDataBinder binder) {
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  binder.registerCustomEditor(Date.class, new CustomDateEditor(df, false));
}




@RequestMapping(value=”/noticia/{fecha}”, method=RequestMethod.GET)
public String mostrarComentario(@PathVariable Date fecha, Model model) {
  // mostrar comentario
}
VUESTRO TURNO!



- Definir método en el
NoticiaController para procesar las
peticiones GET correspondientes a
mostrar una noticia

- Responde a paths tipo: /noticia/1
(usa @PathVariable)

- Usar NoticiaService para obtener
la noticia

- Nombre de la vista a renderizar:
mostrarNoticia
Soporte para PUT / DELETE

       Los formularios HTTP sólo soportan GET /
        POST de manera nativa

    @RequestMapping(value=”/noticia/{id}”, method=RequestMethod.DELETE)
    public void borrarNoticia(@PathVariable Long id) {
        // borrar noticia
    }


       Uso de HiddenHttpMethodFilter
            emula los métodos PUT / DELETE
            parámetro hidden especial que determina el
             RequestMethod
HiddenHttpMethodFilter

   Registro del filtro en el web.xml

    <filter>
       <filter-name>httpMethodFilter</filter-name>
       <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
       <filter-name>httpMethodFilter</filter-name>
       <servlet-name>javaHispano</servlet-name>
    </filter-mapping>


                   <form:form method=”delete”>
                       <input type=”submit” value=”Borrar notícia”/>
                   </form:form>
VUESTRO TURNO!

1) Definir método en el NoticiaController
para procesar las peticiones DELETE
corresponientes a borrar una noticia

- Responde a paths tipo: /noticia/1 (usa
@PathVariable)
- Usar NoticiaService para borrar la noticia
- Nombre de la vista a renderizar:
redirect:/portal/noticia

2) Registro del filtro en el web.xml

3) Creación del boton dentro de un
formulario usando el tag <form:form ...> en
la página /WEB-INF/jsp/mostrarNoticia.jsp
Negociación de contenido

   Introducción del
    ContentNegotiatingViewResolver
       No resuelve vistas propiamente, delega a otros
        view resolvers
       Dos estrategias:
            Extension (.pdf, .xml, .atom...)
            Header HTTP Accept
Negociación de contenido

   JSON
       GET http://www.jh.org/noticia/1 accepts application/json
       GET http://www.jh.org/noticia/1.json
   XML
       GET http://www.jh.org/noticia/1 accepts application/xml
       GET http://www.jh.com/accounts/1.xml
   ATOM
       GET http://www.jh.org/noticia/1 accepts application/atom+xml
    
        GET http://www.jh.org/noticia/1.atom
Nuevas vistas

   AbstractAtomFeedView
   AbstractRssFeedView
   MarshallingView
       Representación XML usando OXM
   JacksonJsonView
       Parte del proyecto Spring JavaScript
Nuevas anotaciones Spring @MVC

   @RequestHeader: acceso a los headers de la
    petición
   @CookieValue: acceso a una cookie HTTP
Soporte para Shallow ETag

   Para determinar si el contenido ha cambiado
   Soporte a través del filtro
    ShallowEtagHeaderFilter
       Cachea el contenido de la vista renderizada
       Genera un hash MD5
       Envía un header Etag
       Nuevas peticiones con el Etag en If-None-Match
       Hashes iguales ? 304 : recurso
Abstracción OXM

   Mapear objetos a XML y viceversa con
       JAXB (2), Castor, JiBX, XmlBeans, Xstream
   Era parte de Spring WS
   Útil para propositos REST
   Movido al core de Spring Framework 3.0
Marshallers y Unmarshallers


   public interface Marshaller {
       void marshall(Object graph, Result result)
           throws XmlMappingException, IOException;
   }



   public interface Unmarshaller {
       Object unmarshall(Source source)
           throws XmlMappingException, IOException;
   }
VUESTRO TURNO!

1) Descomentar el (un)marshaller en mvc-
config.xml

2) Anotar la clase Noticia con
@XmlRootElement (requerido por JAXB)

3) Definir MarshallingView para poder
mostrar las noticias en XML
RestTemplate

   Acceso a servicios RESTful
   Conceptualmente similar a clases como
    JdbcTemplate o JmsTemplate
       Callback
       HttpMessageConverter
            StringHttpMessageConverter
            FormHttpMessageConverter
            ByteArrayMessageConverter
            MarshallingHttpMessageConverter
            SourceHttpMessageConverter
            BufferedImageHttpMessageConverter
Métodos RestTemplate

   Los métodos de RestTemplate siguen una
    convención
   Primera parte indica el método a invocar y la
    segunda el objeto devuelto
       getForObject: petición GET convirtiendo al
        respuesta HTTP en un objeto del tipo que
        indiquemos.
       postForLocation: petición POST, devuelve header
        Location HTTP donde se puede encontrar el nuevo
        objeto
VUESTRO TURNO!

1) Declarar bean restTemplate en el app-
config.xml

2) Declarar bean restTemplate en
FlickrFotosService e inyectarlo

3) Utilizar RestTemplate para obtener las
imágenes de Flickr. Debéis proporcionar la
URL, la clase que se espera y las variables
para resolver la URL (el método utiliza
varargs para las variables)

NOTA:
  definición: public void metodo(String..param)
  llamada: metodo(param1,param2,param3)
Validación de modelo

public class Usuario {
  @NotNull
  @Past
  private Date fechaRegistro;
}

En la vista:
<form:input path="fechaRegistro">

    Los mismos metadatos se pueden usar para persistencia,
     renderizado, etc
    Se soportará en Spring MVC en el binding de datos
    JSR-303 "Bean Validation" como base
Spring 3.0 y Java EE 6

   Early support para Java EE 6 en Spring 3.0
       Integración con JSF 2.0
       Integración con JPA 2.0
            Soporte para modos de bloqueos, timeouts, etc
       Soporte para JSR-303 Bean Validation
       Todo en Tomcat 5.5+ y J2EE 1.4
   Spring 3.2: soporte para plataformas JavaEE 6
       Servlet 3.0 (en espera de GlassFish 3 y Tomcat 7)
       JSR-236 "Concurrency Utilities for Java EE"
Pruning & Deprecation
   Pruning: eliminación de características
    obsoletas
       Soporte para Commons Attributes
            Substituido por anotaciones Java 5
       Soporte API TopLink
            A favor de JPA (EclipseLink)
       Soporte para el estilo subclass de Struts 1.x
   Deprecation: características substituidas
       Jerarquia de controladores MVC
            Substituida por los controladores anotados
       Jerarquia de clases de test JUnit 3.8
            Substituida por el framework de test
Continuación misión Spring 2.5

   Spring 3 continua con la misión de Spring 2.5
       aprovecha Java 5 para el modelo de programación
        y configuración
       ahora el framework requiere Java 5
            todas las clases del framework usan sintaxis Java 5
   Compatibilidad hacia atrás con Spring 2.5
       compatibilidad 100% con el modelo de
        programación
       compatibilidad del 95% en los puntos de extensión
       toda la API deprecada será eliminada
Gracias!
      Sergi Almar i Graupera
        sergi.almar@javahispano.org
     salmar@extrema-sistemas.com
     http://sergialmar.wordpress.com

More Related Content

What's hot

Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaJorge Pacheco Mengual
 
dotCMS: un Web CMS Open Source de perfil empresarial
dotCMS: un Web CMS Open Source de perfil empresarialdotCMS: un Web CMS Open Source de perfil empresarial
dotCMS: un Web CMS Open Source de perfil empresarialRefresh Maracaibo
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con seleniummarianoshin
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache AntIker Canarias
 
Manual de oracle en windows server
Manual de oracle en windows serverManual de oracle en windows server
Manual de oracle en windows serverAlford W. Van Corse
 
Componentes en angularjs 1.5
Componentes en angularjs 1.5Componentes en angularjs 1.5
Componentes en angularjs 1.5Hugo Biarge
 
Introducción a Zend Framework 2
Introducción a  Zend Framework 2Introducción a  Zend Framework 2
Introducción a Zend Framework 2El Taller Web
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
Módulos en Zend Framework 2
Módulos en Zend Framework 2Módulos en Zend Framework 2
Módulos en Zend Framework 2El Taller Web
 
Jsp(java server pages)
Jsp(java server pages)Jsp(java server pages)
Jsp(java server pages)diegob1098
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackPedro J. Molina
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCParadigma Digital
 
INTRODUCCION ARM AZURE
INTRODUCCION ARM AZURE INTRODUCCION ARM AZURE
INTRODUCCION ARM AZURE Ivan Martinez
 
Introducción a ARM (Azure Resource Manager)
Introducción a ARM (Azure Resource Manager) Introducción a ARM (Azure Resource Manager)
Introducción a ARM (Azure Resource Manager) Cesar Herrada
 
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de PruebasGlobant
 

What's hot (20)

Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
dotCMS: un Web CMS Open Source de perfil empresarial
dotCMS: un Web CMS Open Source de perfil empresarialdotCMS: un Web CMS Open Source de perfil empresarial
dotCMS: un Web CMS Open Source de perfil empresarial
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con selenium
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
 
Selenium
SeleniumSelenium
Selenium
 
Manual de oracle en windows server
Manual de oracle en windows serverManual de oracle en windows server
Manual de oracle en windows server
 
Componentes en angularjs 1.5
Componentes en angularjs 1.5Componentes en angularjs 1.5
Componentes en angularjs 1.5
 
Introducción a Silex
Introducción a SilexIntroducción a Silex
Introducción a Silex
 
Introducción a Zend Framework 2
Introducción a  Zend Framework 2Introducción a  Zend Framework 2
Introducción a Zend Framework 2
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Módulos en Zend Framework 2
Módulos en Zend Framework 2Módulos en Zend Framework 2
Módulos en Zend Framework 2
 
ZK Framework
ZK FrameworkZK Framework
ZK Framework
 
Jsp(java server pages)
Jsp(java server pages)Jsp(java server pages)
Jsp(java server pages)
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
 
INTRODUCCION ARM AZURE
INTRODUCCION ARM AZURE INTRODUCCION ARM AZURE
INTRODUCCION ARM AZURE
 
Introducción a ARM (Azure Resource Manager)
Introducción a ARM (Azure Resource Manager) Introducción a ARM (Azure Resource Manager)
Introducción a ARM (Azure Resource Manager)
 
JSP
JSP JSP
JSP
 
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
 

Similar to Hands-on Spring 3.0: The next generation

[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)Eudris Cabrera
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAbimael Desales López
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver FulgueraJavier Oliver Fulguera
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2juliocombativo
 
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.pptintroduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.pptBYRONMIGUELSUBUYUCPA
 
UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasAnder Martinez
 

Similar to Hands-on Spring 3.0: The next generation (20)

Spring framework 3
Spring framework 3Spring framework 3
Spring framework 3
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
01 introducción
01 introducción01 introducción
01 introducción
 
Hands on Spring 2.5
Hands on Spring 2.5Hands on Spring 2.5
Hands on Spring 2.5
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Aplicaciones web con jakarta struts  - Javier Oliver FulgueraAplicaciones web con jakarta struts  - Javier Oliver Fulguera
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
 
spring framework
spring frameworkspring framework
spring framework
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Curso Java Avanzado 6 Struts
Curso Java Avanzado   6 StrutsCurso Java Avanzado   6 Struts
Curso Java Avanzado 6 Struts
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.pptintroduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
introduccion-a-las-aplicaciones-web-y-tecnologia-java.ppt
 
Charla
CharlaCharla
Charla
 
Clase_MVC_I.pptx
Clase_MVC_I.pptxClase_MVC_I.pptx
Clase_MVC_I.pptx
 
UDA-Componentes RUP. Migas
UDA-Componentes RUP. MigasUDA-Componentes RUP. Migas
UDA-Componentes RUP. Migas
 

Recently uploaded

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 

Recently uploaded (20)

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 

Hands-on Spring 3.0: The next generation

  • 1. Hands-on Spring 3.0: The next generation Sun Open Communities Forum 2009 Sergi Almar i Graupera Madrid, 18 y 19 de Junio sergi.almar@javahispano.org salmar@extrema-sistemas.com
  • 2. Formación Extrema Sistemas  Cursos SpringSource  Core Spring  21 – 24 Julio 09 / Madrid  24 – 27 Agosto 09 / Barcelona  28 Septiembre 09 – 01 Octubre 09 / Madrid  Rich Web Applications With Spring  07 -10 Septiembre 09 / Barcelona  Curso Agile Project Management  Más info:  http://extrema-sistemas.com/formacion
  • 3. Aplicación ejemplo  Disponible en http://sergialmar.wordpress.com
  • 4. Agenda  Visión general Spring  De Spring 2.5...  ... a Spring 3.0!
  • 5. Agenda  Visión general Spring  De Spring 2.5...  ... a Spring 3.0!
  • 6. Spring Portfolio Proyectos Spring Spring Web Services Spring MVC Spring Web Flow Spring Faces Spring BlazeDS Integration Spring Framework Spring JavaScript Spring Dynamic Modules Spring IDE Spring Rich Client Spring for .NET Spring Security AspectJ Spring Roo Spring Batch Spring Integration Spring LDAP
  • 7. Agenda  Visión general Spring  De Spring 2.5...  ... a Spring 3.0!
  • 8. Spring Framework 2.5  Soporte para configuración basada en anotaciones  @Autowired (@Quilifier opcionalmente)  @Transactional  @Service, @Repository, @Controller  Anotaciones Java EE 5 soportadas  @PostConstruct, @PreDestroy  @PersistenceContext, @PersistenceUnit  @Resource, @EJB, @WebServiceRef  @TransactionAttribute
  • 9. Componente anotado @Service public class AccountServiceImpl implements AccountService { @Autowired public AccountServiceImpl(AccountRepository ar) { … } @Transactional public void saveAccount(Account account) { … } @PostConstruct public initCache() { ... } @PreDestroy public cleanupCache() { ... } }
  • 10. Configuración mínima en XML <!– Activando la configuración con annotation-based --> <context:annotation-config/> <!– Sólo definición de bean – no constructor-arg/property --> <bean id=”accountService” class=”org.jh.service.AccountServiceImpl”/> <bean id=”accountRepository” class=”org.jh.dao.jdbc.JdbcAccountRepository”/> <!– Y otras definiciones de beans de infrastructura: PlatformTransactionManager, DataSource, etc -->
  • 11. Bootstrap mínimo en XML <!– Escanea en búsqueda de: @Component, @Service, @Repository, @Controller y los registra automáticamente --> <context:component-scan base-package=”org.javahispano” />
  • 12. Framework para test @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class JavaHispanoIntegrationTests { @Autowired private AccountService accountService; @Test @Transactional public void testSaveAccount() { // test transaccional con auto-rollback } }
  • 13. Controlador Spring @MVC @Controller public class CommentController { private final CommentService commentService; @Autowired public CommentController(CommentService commentService) { this.commentService = commentService; } // Responde a la URL: http://host/servlet/comment/deleteComment @RequestMapping public String deleteComment(@RequestParam("c") int commentId) { this.commentService.deleteComment(commentId); return "redirect:commentList"; } }
  • 14. Agenda  Visión general Spring  De Spring 2.5...  ... a Spring 3.0!
  • 15. Lo nuevo en Spring 3.0  Basado en Java 5+  Compatible con J2EE 1.4 y Java EE 5  Spring Expression Language  Configuración al estilo JavaConfig  Soporte REST  y otras adiciones a Spring @MVC  OXM
  • 16. API actualizada para Java 5  Usuarios con Java 1.4 deben seguir en la versión 2.5.6  API refactorizada para utilizar generics, varargs...  Interfaz BeanFactory devuelve instancias de beans tipadas  T getBean(String name, Class<T> requiredType)  Map<String, T> getBeansOfType(Class<T> type)
  • 17. Parser Spring EL  Implementación de parseador de expresiones con Spring 3.0  paquete org.springframework.expression  motor de expresiones de nueva generación  inspirado en las expresiones de Spring Web Flow 2.0  Compatible con Unified EL pero más potente  acceso a propiedades de beans, maps, etc  invocación de métodos  construcción de objetos
  • 18. EL en XML <bean class="org.javahispano.BDTest"> <property name="databaseName" value="“#{systemProperties.databaseName}”/> <property name="keyGenerator" value="“#{strategyBean.databaseKeyGenerator}”/> </bean>
  • 19. EL en componentes anotados @Repository public class BDTest { @Value(“#{systemProperties.databaseName}”) public void setDatabaseName(String dbName) { … } @Value(“#{strategyBean.databaseKeyGenerator}”) public void setKeyGenerator(KeyGenerator kg) { … } }
  • 20. Atributos para el contexto web  Atributos específicos web expuestos implícitamente  "contextProperties": parámetros de inicialización del web.xml  "contextAttributes": atributos del ServletContext  "request": Servlet/PortletRequest actual  "session": Http/PortletSession actual  Objetos JSF expuestos implícitamente en un contexto JSF  "param", "initParam", "facesContext", etc
  • 21. EL en otros proyectos  Un lenguaje de expresiones extensible  Utilizado en otros proyectos del portfolio  Seguridad  Integration / JMS (nombres dinámicos de colas)  ... @PreAuthorize(“hasRole('ROLE_USER') and #usuario.nombre == principal.name”) public void guardarUsuario(Usuario usuario) { … }
  • 22. Configuración basada en Java  Funcionalidad de Spring JavaConfig pasa a ser parte del core:  @Configuration  @Bean  @Primary  @Lazy  @Import  @Value
  • 23. @Configuration  Una clase de configuración es similar a un documento <beans/>  Especifica una clase de configuración que crea beans  Es un objeto gestionado por Spring  Puede ser inyectado  Al estar meta-anotado con @Component, puede ser encontrado con el component scanning sin necesidad de definición XML
  • 24. @Bean  Similar a <bean/>  Indica un método encargado de la creación de un bean  Soporta los atributos: init-method, destroy- method, autowiring y name.
  • 25. Ejemplo nueva configuración @Configuration public class AppConfig { @Value(”#{jdbcProperties.url}”) String jdbcUrl; @Value(”#{jdbcProperties.username}”) String username; @Value(”#{jdbcProperties.password}”) String password; <bean id="accountService" class="org.jh.service.AccountService"> @Bean <constructor-arg ref="accountRepository" /> </bean> public AccountService accountService() { return new AccountServiceImpl(accountRepository()); } <bean id="accountRepository" class="org.jh.dao.hibernate.HibernateAccountRepository"> <constructor-arg ref="sessionFactory" /> </bean> @Bean public AccountRepository accountRepository() { return new HibernateAccountRepository(sessionFactory()); }
  • 26. Soporte Scoped Proxy @Configuration public class AppConfig { @Bean @Scope(value=StandardScopes.SESSION, proxyMode=ProxyMode.INTERFACES) public PreferenciasUsuario preferenciasUsuario() { return ... ; } }
  • 27. @Lazy @Lazy @Bean public LazyBean lazyBean() { return ... ; } }
  • 29. Soporte REST  Extensión de Spring @MVC para soportar mappings al estilo REST  extracción de parámetros de la URI  view resolvers para negociación de contenido  Objetivo: soporte nativo para REST con Spring MVC, con uso para UI y sin UI  Alternativa: usar JAX-RS a través de un proveedor JAX-RS (Jersey...)
  • 30. Ejemplo REST  http://javahispano.org/noticia/329  Representa el recurso noticia:  GET obtener una notícia  GET jh.org/noticia/329 para obtener la notícia 329  PUT crea o modifica un recurso  PUT a jh.org/noticia/329 para crear / modificar  POST crea un recurso  POST a jh.org/noticia para crear una nueva noticia  DELETE borra una notícia  DELETE a jh.org/noticia/329 para borrar la notícia
  • 31. @PathVariable http://www.javahispano.org/noticia/3 @RequestMapping(value=”/noticia/{id}”, method=RequestMethod.GET) public String mostrarNoticia(@PathVariable Long id, Model model) { // mostrar noticia }
  • 32. Multiples @PathVariables http://www.javahispano.org/noticia/3/comentario/2 @RequestMapping(value=”/noticia/{id}/comentario/{comentario}”, method=RequestMethod.GET) public String mostrarComentario(@PathVariable(“id”) Long id, @PathVariable(“comentario”) String comentario, Model model) { // mostrar comentario }
  • 33. Paths tipo Ant http://www.javahispano.org/noticia/3/comentario/2 @RequestMapping(value=”/noticia/*/comentario/{comentario}”, method=RequestMethod.GET) public String mostrarComentario(@PathVariable(“comentario”) String comentario, Model model) { // mostrar comentario }
  • 34. Binding de datos @PathVariable http://www.javahispano.org/noticia/2009-06-18 @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(df, false)); } @RequestMapping(value=”/noticia/{fecha}”, method=RequestMethod.GET) public String mostrarComentario(@PathVariable Date fecha, Model model) { // mostrar comentario }
  • 35. VUESTRO TURNO! - Definir método en el NoticiaController para procesar las peticiones GET correspondientes a mostrar una noticia - Responde a paths tipo: /noticia/1 (usa @PathVariable) - Usar NoticiaService para obtener la noticia - Nombre de la vista a renderizar: mostrarNoticia
  • 36. Soporte para PUT / DELETE  Los formularios HTTP sólo soportan GET / POST de manera nativa @RequestMapping(value=”/noticia/{id}”, method=RequestMethod.DELETE) public void borrarNoticia(@PathVariable Long id) { // borrar noticia }  Uso de HiddenHttpMethodFilter  emula los métodos PUT / DELETE  parámetro hidden especial que determina el RequestMethod
  • 37. HiddenHttpMethodFilter  Registro del filtro en el web.xml <filter> <filter-name>httpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>httpMethodFilter</filter-name> <servlet-name>javaHispano</servlet-name> </filter-mapping> <form:form method=”delete”> <input type=”submit” value=”Borrar notícia”/> </form:form>
  • 38. VUESTRO TURNO! 1) Definir método en el NoticiaController para procesar las peticiones DELETE corresponientes a borrar una noticia - Responde a paths tipo: /noticia/1 (usa @PathVariable) - Usar NoticiaService para borrar la noticia - Nombre de la vista a renderizar: redirect:/portal/noticia 2) Registro del filtro en el web.xml 3) Creación del boton dentro de un formulario usando el tag <form:form ...> en la página /WEB-INF/jsp/mostrarNoticia.jsp
  • 39. Negociación de contenido  Introducción del ContentNegotiatingViewResolver  No resuelve vistas propiamente, delega a otros view resolvers  Dos estrategias:  Extension (.pdf, .xml, .atom...)  Header HTTP Accept
  • 40. Negociación de contenido  JSON  GET http://www.jh.org/noticia/1 accepts application/json  GET http://www.jh.org/noticia/1.json  XML  GET http://www.jh.org/noticia/1 accepts application/xml  GET http://www.jh.com/accounts/1.xml  ATOM  GET http://www.jh.org/noticia/1 accepts application/atom+xml  GET http://www.jh.org/noticia/1.atom
  • 41. Nuevas vistas  AbstractAtomFeedView  AbstractRssFeedView  MarshallingView  Representación XML usando OXM  JacksonJsonView  Parte del proyecto Spring JavaScript
  • 42. Nuevas anotaciones Spring @MVC  @RequestHeader: acceso a los headers de la petición  @CookieValue: acceso a una cookie HTTP
  • 43. Soporte para Shallow ETag  Para determinar si el contenido ha cambiado  Soporte a través del filtro ShallowEtagHeaderFilter  Cachea el contenido de la vista renderizada  Genera un hash MD5  Envía un header Etag  Nuevas peticiones con el Etag en If-None-Match  Hashes iguales ? 304 : recurso
  • 44. Abstracción OXM  Mapear objetos a XML y viceversa con  JAXB (2), Castor, JiBX, XmlBeans, Xstream  Era parte de Spring WS  Útil para propositos REST  Movido al core de Spring Framework 3.0
  • 45. Marshallers y Unmarshallers public interface Marshaller { void marshall(Object graph, Result result) throws XmlMappingException, IOException; } public interface Unmarshaller { Object unmarshall(Source source) throws XmlMappingException, IOException; }
  • 46. VUESTRO TURNO! 1) Descomentar el (un)marshaller en mvc- config.xml 2) Anotar la clase Noticia con @XmlRootElement (requerido por JAXB) 3) Definir MarshallingView para poder mostrar las noticias en XML
  • 47. RestTemplate  Acceso a servicios RESTful  Conceptualmente similar a clases como JdbcTemplate o JmsTemplate  Callback  HttpMessageConverter  StringHttpMessageConverter  FormHttpMessageConverter  ByteArrayMessageConverter  MarshallingHttpMessageConverter  SourceHttpMessageConverter  BufferedImageHttpMessageConverter
  • 48. Métodos RestTemplate  Los métodos de RestTemplate siguen una convención  Primera parte indica el método a invocar y la segunda el objeto devuelto  getForObject: petición GET convirtiendo al respuesta HTTP en un objeto del tipo que indiquemos.  postForLocation: petición POST, devuelve header Location HTTP donde se puede encontrar el nuevo objeto
  • 49. VUESTRO TURNO! 1) Declarar bean restTemplate en el app- config.xml 2) Declarar bean restTemplate en FlickrFotosService e inyectarlo 3) Utilizar RestTemplate para obtener las imágenes de Flickr. Debéis proporcionar la URL, la clase que se espera y las variables para resolver la URL (el método utiliza varargs para las variables) NOTA: definición: public void metodo(String..param) llamada: metodo(param1,param2,param3)
  • 50. Validación de modelo public class Usuario { @NotNull @Past private Date fechaRegistro; } En la vista: <form:input path="fechaRegistro">  Los mismos metadatos se pueden usar para persistencia, renderizado, etc  Se soportará en Spring MVC en el binding de datos  JSR-303 "Bean Validation" como base
  • 51. Spring 3.0 y Java EE 6  Early support para Java EE 6 en Spring 3.0  Integración con JSF 2.0  Integración con JPA 2.0  Soporte para modos de bloqueos, timeouts, etc  Soporte para JSR-303 Bean Validation  Todo en Tomcat 5.5+ y J2EE 1.4  Spring 3.2: soporte para plataformas JavaEE 6  Servlet 3.0 (en espera de GlassFish 3 y Tomcat 7)  JSR-236 "Concurrency Utilities for Java EE"
  • 52. Pruning & Deprecation  Pruning: eliminación de características obsoletas  Soporte para Commons Attributes  Substituido por anotaciones Java 5  Soporte API TopLink  A favor de JPA (EclipseLink)  Soporte para el estilo subclass de Struts 1.x  Deprecation: características substituidas  Jerarquia de controladores MVC  Substituida por los controladores anotados  Jerarquia de clases de test JUnit 3.8  Substituida por el framework de test
  • 53. Continuación misión Spring 2.5  Spring 3 continua con la misión de Spring 2.5  aprovecha Java 5 para el modelo de programación y configuración  ahora el framework requiere Java 5  todas las clases del framework usan sintaxis Java 5  Compatibilidad hacia atrás con Spring 2.5  compatibilidad 100% con el modelo de programación  compatibilidad del 95% en los puntos de extensión  toda la API deprecada será eliminada
  • 54. Gracias! Sergi Almar i Graupera sergi.almar@javahispano.org salmar@extrema-sistemas.com http://sergialmar.wordpress.com