Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Spring, Introdución A
Spring, Introdución A
Norberto Fernndez Departamento de Ingeniera Telemtica Universidad Carlos III de Madrid berto@it.uc3m.es
Qu es Spring?
Framework de cdigo abierto para el desarrollo de aplicaciones (empresariales) Java Origen: Rod Johnson, Expert One-to-One J2EE Design and Development (Octubre, 2002) Alternativa popular a J2EE (EJBs) Veremos la versin 2.5
Fuente: Dzone
Motivacin
Malas experiencias con aplicaciones J2EE o Complejas,difciles de probar, pobres prestaciones,... Crticas al uso de EJBs:
o
Rod Johnson, J2EE development without EJB (2004) Complejidad (descriptores, implementacin interfaces,...) y baja productividad del programador Modelo remoto basado slo en RMI Muchas aplicaciones no necesitan componentes remotos Difciles de depurar (dependencias con contenedor, volver a hacer deployment y volver a arrancar) Mapeo O/R basado en entity beans limitado (p.ej. no considera la relacin de herencia) ...
Servidores de Informacin 2008/2009 3
Motivacin
J2EE objetivo: estandarizar servicios de uso comn en el desarrollo de aplicaciones empresariales
o
Directorio (JNDI), transacciones (JTA), conexin a sistemas legados (JCA), pooling de recursos, etc
EJB es slo una forma de llevar a la prctica a esos servicios a travs de un modelo de componentes Sin embargo podemos usar las funcionalidades de los servicios sin tener EJBs ... ... este es el objetivo de Spring: ofrecer libreras con las funcionalidades de uso comn por aplicaciones empresariales ... ... y ms "ligeras" que los EJBs
o
Spring Core
Dependency Injection
10
package spring.core.ejemplos; public class HelloMessage implements Message { public String getMsg() { return "Hello"; } }
11
12
DI: HolaMundo (y V)
Main de la aplicacin:
package spring.core.ejemplos; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("src/spring/core/ejemplos/spring-beans.xml"); MessagingService hello = (MessagingService)context.getBean("helloSrv"); System.out.println(hello.sayMessage(args[0])); } }
13
Spring AOP
Programacin Orientada a Aspectos
AOP: Introduccin
Qu es?
o o
Aspect Oriented Programming Permite combinar cierto cdigo con otro (aspecto) para aadir cierta funcionalidad al original sin necesidad de modificarlo o Facilitar la implementacin de funcionalidades transversales de una aplicacin
Ej.: logging, control acceso
Tipos de AOP
o
Esttica
En tiempo de compilacin
Se incluye la informacin de aspectos en los bytecodes
Dinmica
En tiempo de ejecucin Problema: mayor coste computacional
Interrumpir flujo programa para comprobar si hay que ejecutar el aspecto
15
AOP: Conceptos
Joinpoint (Punto de cruce)
o
Advice (Consejo)
o
Cdigo que el aspecto ejecuta en un joinpoint Combinacin de joinpoints Ej.: Llamada a cualquier mtodo de una clase concreta Combinacin de advice (cdigo) y pointcut (lugar donde se interrumpe el flujo normal para ejecutarlo) Objeto cuyo comportamiento modifica el aspecto
Aspects (Aspecto)
o
Target (Destinatario)
o
Introduction
o Permite aadir mtodos o atributos a clases ya existentes
Servidores de Informacin 2008/2009 16
Spring AOP
AOP dinmica Implementada a travs de Proxys Ms limitada que la de otras libreras (ej.: AspectJ)
o
Ej.: Transacciones
17
package spring.aop.ejemplos; public class HelloWorldServiceImpl implements HelloWorldService { public String sayHello(String name) { return "Hello " + name; } }
18
19
20
10
21
11
Acceso a datos
Una estructura Java tpica de acceso a BD:
public void saveWhatever(Whatever w) { Connection conn = null; PreparedStatement stmt = null; try { conn = dataSource.getConnection(); stmt = conn.prepareStatement(DB_QUERY); ... stmt.execute(); } catch (SQLException e) { } finally { try { if(stmt != null) { stmt.close(); } if(conn != null) { conn.close(); } } catch (SQLException e) { // noop } }
23
Acceso a datos
Aspectos a mejorar en el ejemplo: o SQLException: excepcin genrica o Captura de excepciones para no hacer nada Cmo lo mejora Spring? o Mapeo de SQLException a excepciones especficas
Subclases de org.springframework.dao.DataAccessException
Veremos acceso a BD relacionales, pero Spring ofrece integracin con libreras ORM como Hibernate
Servidores de Informacin 2008/2009 24
12
26
13
28
14
15
Spring MVC
Desarrollo de aplicaciones Web
16
33
17
35
Ubicado en el /WEB-INF/ de la aplicacin Referencia al HandlerMapping Referencias a los controladores Referencia al ViewResolver
36
18
SimpleUrlHandlerMapping
Se define una tabla que asocia URLs a controladores Lo veremos en el ejemplo
37
Usualmente para implementar un controlador se extiende de la clase abstracta AbstractController del mismo paquete Al controlador se le inyecta (si es necesario) la referencia al bean que ofrece el servicio de la lgica de negocio
38
19
UrlBasedViewResolver
No mapeo: el nombre es directamente una referencia a la vista No implementa soporte para localizacin Veremos en el ejemplo el uso de una de sus subclases: InternalResourceViewResolver
39
40
20
21
22
45
Spring Remoting
Acceso a componentes remotos
23
Reducir el cdigo que se necesita para exponer un bean como servicio o para acceder desde un bean a un servicio remoto Definir service exporter (convertir bean en servicio) Definir proxies (acceder a beans remotos como locales)
RMI Servicios Web (slo proxy, no exporter) HTTP Invoker (especfico de Spring) Hessian (Caucho.com, protocolo binario, poco utilizado) Burlap (Caucho.com, protocolo XML, poco utilizado)
47
24
50
25
Gestin de transacciones
Spring ofrece gestin de transacciones programtica o declarativa Cuando se trabaja con una fuente de datos Spring permite utilizar el soporte de transacciones de la fuente (BD relacional JDBC, Hibernate, ...) Spring es compatible con JTA (Java Transaction API) o Permite ofrecer soporte a transacciones distribuidas Spring no gestiona directamente las transacciones, sino que hace uso de un gestor de transacciones (TransactionManager) del que se ofrecen varias implementaciones:
o o o o
Gestin de transacciones
Ejemplo de (parte de) fichero de configuracin de Spring:
<bean id="fooService" class="x.y.service.DefaultFooService"/> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/> </aop:config> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> <property name="url" value="jdbc:mysql://localhost/Productos"/> <property name="username" value="user"/> <property name="password" value="*******"/> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
26
Referencias
Rod Johnson; Expert One-to-One J2EE Design and Development. Ed Wrox, ISBN: 9780764543852, 2002. Rod Johnson; J2EE development without EJB. Ed Wrox, ISBN: 9780764558313, 2004. J. Machacek, A. Vukotic, A. Chakraborty, J.Ditt; Pro Spring 2.5. Ed. Apress, ISBN: 9781590599211, 2008. C. Walls, R. Breidenbac; Spring in action (2nd Ed.). Ed. Manning, ISBN: 9781933988139, 2007.
53
27