SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Kürzlich hochgeladen (15)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

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