Experto Universitario Java Enterprise Spring

Documentos relacionados
Experto Universitario Java Enterprise Spring

Curso de Spring Framework

Curso de JavaServer Faces

Spring. Índice. Introducción a Spring Qué es Spring? Estereotipos configurables Inyección de dependencias... 11

Curso de Java EE Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1

Ejercicios de AJAX y REST

Spring. Sesión 7: Seguridad con Spring Security. Experto Universitario Java Enterprise

ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS

Curso de Java EE Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1

RUEDA TORRES DULCE CAROLINA 3CM2 JAX-WS WEB SERVICES WEB APPLICATION DEVELOPMENT

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz

Curso de Jboss Administración

1. Definición. Open Source. Escalable. Alto desempeño. Arquitectura Modular. Producto de licencia de código abierto sin coste adicional.

Desarrollo de Servicios Web con JBuilder

Java 7.0 Advanced Application Developer

Curso de Spring Framework 4

UNIVERSIDAD DE PIURA

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

Seguridad de la aplicación para servlets y JSP (página activas java)

ATLAS MANUAL DE USUARIO SERVICIO DE AUDITORIA

Configuración servidor Tomcat

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Enterprise JavaBeans 3. Aplicaciones Distribuidas

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

Introducción a JAX-WS Web Services

Tutorial Servicios Web

Especialista Universitario Java Enterprise. Struts. Sesión 4: Introducción a Struts Depto. Ciencia de la Computación e IA

Arquitectura de aplicaciones

Curso de Android con Java

Universidad ORT - Arquitectura de Software. Requisitos

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

Experto Universitario Java Enterprise Spring

Facultad de Sistemas e Informática

Facultad de Ingeniería Escuela de Ciencias y Sistemas Estructura de Datos Guatemala 2013 JSF + JSP + RichFaces

WORKSHOP Spring Framework Developer

Java Inicial (20 horas)

[CASI v.0109] Pág. 1

Integración Capa Web de pojo-miniportal (1)

Juan Galán García Rubén García Navamuel Javier Rodríguez Camarma Álvaro Rodríguez Moya

Tema 6: Comparativa CORBA/Servicios Web

FRAMEWORK SPRING EN UNA APLICACIÓN WEB

Framework para el desarrollo ágil de aplicaciones

Universidad Tecnológica del Valle del Mezquital. Desarrollo de Aplicaciones Web. Manual JSP

Curso de HTML5 y CSS3

Aplicaciones seguras con ClaseSeguridad

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Manual de uso. Manual de uso - citanet 1

GUÍA TÉCNICA. Desarrollo de Sistemas de Información la plataforma Business Intellingence Pentaho

Curso de Java POO: Programación orientada a objetos

Requisitos. Universidad ORT Arquitectura de Software

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

Modulo 1 El lenguaje Java

Instrucciones para el despliegue de EJBs

Proceso de cifrado. La fortaleza de los algoritmos es que son públicos, es decir, se conocen todas las transformaciones que se aplican al documento

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010

Pruebas de unidad con JUnit

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura

Programación orientada a objetos

Arquitectura Java para el Cuarto Ejercicio. José Antonio Ruano Ampudia Técnico Superior de Proyecto Informático

Capitulo 5. Implementación del sistema MDM

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEBSERVICE

MANUAL BASICO DE WEBEX

Modelo de Objetos Distribuidos

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEB CON DOCUMENTUM

TEMA 4: EMPEZANDO A NAVEGAR ESCUELA UNIVERSITARIA DE INFORMÁTICA. Raúl Martín Martín

Plataforma desarrollo Java Formación elearning tutorizada en castellano. Fabricante: Java Grupo: Desarrollo Subgrupo: Master Java

Implementación CAPÍTULO 4

LiLa Portal Guía para profesores

Mi correo con OUTLOOK

Descripción de Arquitectura Repositorio de metadatos de componentes de software

Capítulo 2. Marco Teórico

TFC J2EE. Aplicación Web para la gestión de facturación de una empresa de cerrajería. Sara Gutiérrez Melero ITIG Junio de 2012

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

INSTITUTO TECNOLOGICO DE LAS AMERICAS (ITLA) Nombre: Brayhan E. Acosta Hiciano. Matricula: Materia: Sistema Operativo III

LA INTRANET -Manual general-

Login y Password. Elección de directorios confidenciales

Cómo puede ayudarle JBuilder en sus Desarrollos Java?

Ejercicios de validación e internacionalización

Guía rápida de instalación Cámara CCTV-210

En este caso presionamos ENTER para empezar nuestra instalación

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

Mejor Framework PythonOO + SOLID. Vivir sin Frameworks

Formatos para prácticas de laboratorio

Clases y Objetos. Informática II Ingeniería Electrónica

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

1 Índice Introducción Propósito Alcance Modelo Arquitectónico Inicial... 3

Patrones de diseño. Sesión 1: Introducción y patrones básicos. Especialista Universitario Java Enterprise

Programación Orientada a Objetos en Java

MANUAL CAMBIO DE CLAVE WIFI

DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa Configuración Internet Explorer para ActiveX...

Redes de Área Local: Configuración de una VPN en Windows XP

Transcripción:

Experto Universitario Java Enterprise Spring Sesión 1: Spring core

Puntos a tratar Introducción. Spring vs. JavaEE estándar El contenedor de beans (Spring core) Trabajo con beans Definir beans Instanciar beans Ámbitos Acceder a recursos externos con beans Definir beans en XML y Java 2

Qué es Spring? Inicialmente, un ejemplo hecho para el libro J2EE design and development de Rod Johnson, que defendía alternativas a la visión oficial de aplicación JavaEE basada en EJBs Actualmente es un framework completo que cubre todas las capas de la aplicación, con decenas de desarrolladores y miles de descargas al día MVC ( originalmente Negocio (donde empezó Acceso a datos Spring 2012-2013 Depto. Ciencia de la Computación e IA Spring Spring Core core 3 3

Generaciones de EJBs La generación 2.X de EJB era demasiado pesada para las máquinas de la época y además compleja y difícil de usar En esta época fue cuando surgió Spring La generación actual de EJBs (3.X) es mucho más sencilla de usar Inspirada en la forma de trabajar de Spring y otros frameworks Irónicamente, el principal problema de Spring pueden ser sus buenas ideas 4

La filosofía de Spring Los objetos de negocio deberían ser POJOs Inyección como medio de resolver dependencias Se pueden conseguir servicios equivalentes a los que nos dan los EJB usando AOP de manera casi transparente al programador El contenedor debe poder ser un servidor web convencional (ej. Tomcat) Cuando ya hay algo que funciona, incorpóralo a tu solución, no reinventes la rueda JPA, Hibernate para persistencia de datos AspectJ para AOP Hessian para acceso remoto... 5

Qué nos aporta Spring Estereotipos configurables POJO Servicios Enterprise + Blueprints Inyección de dependencias 6

El ecosistema de Spring 7

Versiones de Spring La generación actual es la 3 En la 2.X, se potenció bastante el framework y se simplificó mucho su configuración Cada vez más énfasis en el uso de anotaciones Las novedades de la versión 3 están sobre todo en la capa web (validación, REST) Spring tiene una excelente documentación Hay mucha bibliografía adicional disponible y también una amplia comunidad de desarrollo 8

Spring vs. JavaEE estándar Hace unos años Spring tenía una ventaja tecnológica muy considerable Actualmente los dos contendientes son muy similares Ventajas de Spring: Despliegue en servidores convencionales (Tomcat) Portabilidad Ventajas del estándar Es estándar ;-) JavaOne 2011: Migrating Spring Applications to Java EE 6 Spring migration analyzer (JavaEE -> Spring) 9

Spring Core Es un contenedor que gestiona el ciclo de vida de los objetos de nuestra aplicación En realidad no es más que un conjunto de librerías que se puede ejecutar en cualquier servidor web java Ofrece servicios a nuestros objetos, como inyección de dependencias Juntándolo con otros módulos, más servicios (+ AOP): Transaccionalidad declarativa (+ Spring Remoting): Acceso remoto ( + Spring Security): Seguridad declarativa 10

Spring vs. factorías Normalmente un objeto de negocio necesita la colaboración de otros objetos de negocio, DAOs, etc. En código java puro la forma estándar de instanciar un objeto es la factoría (para independizarnos de la implementación) public class JPATest { private EntityManagerFactory emf; public void test1() { emf = Persistence.createEntityManagerFactory("simplejpa"); EntityManager em = emf.createentitymanager(); Spring core es una alternativa a las factorías basada en la inyección de dependencias 11

Inyección de dependencias Confiamos en que alguien instancie y nos pase el objeto que necesitamos para trabajar En nuestro caso ese alguien es Spring Core public class JPATest { private EntityManagerFactory emf; public void test1() { emf = Persistence.createEntityManagerFactory("simplejpa"); EntityManager em = emf.createentitymanager(); public void setemf(entitymanagerfactory emf) { this.emf = emf; Si se configura adecuadamente, Spring nos asegura que el setter se llamará justo después de crear el JPATest Pero para eso el JPATest también lo tiene que crear Spring 12

Definir los beans Un bean en Spring es un componente cuyo ciclo de vida está gestionado por Spring No se crea con new, sino que lo crea Spring Core y lo obtenemos con inyección de dependencias Normalmente relacionado con otros componentes (dependencias) Hay tres opciones para la configuración XML: la clásica. Tediosa, pero al ser independiente del código fuente nos da más flexibilidad y elimina la recompilación Anotaciones: mucho más cool y más sencilla de usar Java: podemos usar el chequeo de código de nuestro IDE para validar la configuración 13

Ficheros de definición de beans La manera clásica de definir beans es con XML <?xml version="1.0"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="migestor" class="es.ua.jtech.spring.negocio.gestorusuarios"> </bean </beans> Aunque no la usemos, siempre tiene que haber al menos un fichero XML Ciertas cosas hay que hacerlas en XML O al menos, con XML decirle a Spring que usaremos anotaciones para hacer cierta tarea 14

Definir un bean con anotaciones Spring ofrece varios estereotipos: O la estándar de JSR330: @Named @Service: componente de negocio @Repository: DAO @Component package es.ua.jtech.spring.negocio; @Service( migestor ) public class GestorUsuarios { public UsuarioTO login(string login, String password) {... 15

Y en el fichero XML...? Le decimos a Spring que examine automáticamente todos los subpaquetes de algún paquete en busca de beans <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:component-scan base-package= es.ua.jtech.spring /> </beans> 16

Y para acceder al bean desde mi código? Caso 1: Desde otro bean (otro objeto gestionado): inyección de dependencias. También podríamos usar el @Inject/@Named estándar package es.ua.jtech.spring.negocio; @Service public class UsuariosBO implements IUsuariosBO{ @Autowired private IUsuariosDAO iudao; package es.ua.jtech.spring.datos; Programar contra interfaces, no implementaciones... @Repository public class UsuariosDAO implements IUsuariosDAO{ public Usuario getusuario(string id) {... 17

Spring soporta las anotaciones JSR330 Preferible si queremos mayor portabilidad Pero no soporta las del estándar CDI completo, JSR299 package es.ua.jtech.spring.negocio; @Named public class UsuariosBO implements IUsuariosBO{ @Inject private IUsuariosDAO iudao; package es.ua.jtech.spring.datos;... @Named public class UsuariosDAO implements IUsuariosDAO{ public Usuario getusuario(string id) {... 18

Y para acceder al bean desde mi código? (II) Caso 2: desde un objeto no gestionado: escribir código que busque el objeto El API cambia si es una aplicación web o de escritorio Cuidado: servlets y JSP no son gestionados por Spring. Pero si usamos el módulo MVC, tenemos Controllers, que sí lo son //En un servlet o JSP, sin Spring MVC ServletContext sc = getservletcontext(); WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc); IUsuariosBO ubo = wac.getbean(iusuariosbo.class); 19

Inyección en setters o constructores En lugar de la variable miembro también se puede anotar un setter, un constructor o un método cualquiera @Service public class UsuariosBOSimple implements IUsuariosBO { IUsuariosDAO udao; @Autowired public setusuariosdao(usuariosdao udao) { this.udao = udao; Ventaja: podemos resolver las dependencias manualmente (útil p.ej. para tests) IUsuariosBO ubo = new UsuariosBOSimple(); ubo.setusuariosdao(new UsuariosDAOJPA()); 20

Referencia por nombre @Autowired se puede usar si solo hay un bean definido de un tipo Si hubiera por ejemplo dos implementaciones distintas de IUsuariosDAO (UsuariosDAOJDBC, UsuariosDAOJPA), se puede inyectar por nombre del colocar delante de la propiedad o bien ( cualquiera delante del setter (o en un parámetro de un método package es.ua.jtech.spring.negocio; @Service( miubo ) public class UsuariosBO { @Resource(name= miudao ) private IUsuariosDAO iudao;... package es.ua.jtech.spring.datos; @Repository( miudao ) public class UsuariosDAO implements IUsuariosDAO { public Usuario getusuario(string id) {... 21

Otra forma de resolver la ambigüedad usando @Autowired + @Qualifier @Repository("JDBC") public class UsuariosDAOJDBC implements IUsuariosDAO { public UsuarioTO login(string login, String password) { //Aquí vendría la implementación JDBC... @Service( migestor ) public class GestorUsuarios { @Autowired @Qualifier( JDBC ) private IUsuariosDAO udao; 22

Ámbito de los beans Por defecto los beans son singleton Apropiado por ejemplo para DAOs, que no suelen guardar estado Pero hay otros ámbitos: prototype: cuando se inyecta o busca un bean, siempre es nuevo en aplicaciones web: session, request package es.ua.jtech.spring.negocio; @Service( migestor ) @Scope( prototype ) public class GestorUsuarios {... 23

Acceso a recursos externos con beans En JavaEE, el estándar para acceder a recursos externos a una aplicación es JNDI Conexión con bases de datos, colas de mensajes, servidores de correo,... JNDI no usa inyección de dependencias. A cada recurso se le asigna un nombre lógico y tenemos un API que nos permite buscar el recurso por nombre Etiqueta jndi-lookup: convierte un recurso JNDI en un bean de Spring <jee:jndi-lookup id="mibean" jndi-name="jdbc/midatasource" resource-ref="true"/> Ahora ya podemos inyectarlo @Repository public class UsuariosDAOJDBC implements IUsuariosDAO { @Resource(name= mibean ) DataSource ds;... 24

Mejorando el ejemplo de JNDI Externalizamos el nombre JNDI del XML <jee:jndi-lookup id="mibean" jndi-name="${datasource" resource-ref="true"/> <context:property-placeholder location="classpath:datasource.properties"/> Spring es lo suficientemente listo para saber que el recurso JNDI anterior es un DataSource, por tanto podemos inyectar con @Autowired @Repository public class UsuariosDAOJDBC implements IUsuariosDAO { @Autowired DataSource ds;... 25

Inicialización de los beans Por defecto la inicialización es cuando se arranca el contenedor de Spring, es decir, cuando se arranca la aplicación Normalmente veremos que nada más arrancar se crea una instancia de cada bean (recordemos, ámbito por defecto) Podemos hacer que la inicialización se haga cuando se intente acceder al bean 26

Todo esto también se puede hacer en XML......pero es más doloroso. Por ejemplo el autowiring <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="miusuariosdao" class="es.ua.jtech.spring.datos.usuariosdao"> </bean> <bean id ="miusuariosbo" class="es.ua.jtech.spring.negocio.usuariosbo" autowire="bytype"> </bean> </beans> A cambio: Independiente del código fuente Podemos definir varios beans de la misma clase 27

Spring puede inicializar las propiedades del bean Solo tiene sentido en XML o en Java package springbeans; public class PrefsBusqueda { private int maxresults; private boolean ascendente; private String idioma; //aquí vienen los getters y setters... <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans"... <bean id="misprefs" class="springbeans.prefsbusqueda"> <property name="maxresults" value= 100 /> <property name="idioma" value= es /> <property name="ascendente" value= true /> </bean> </beans> 28

Configuración Java Una clase anotada con @configuration es como un fich. de config., no es código normal Cada bean se define con un método anotado con @Bean. El nombre del método es el nombre que Spring le da al bean Dentro del método debemos construir y devolver el bean @Configuration public class SampleConfig { @Bean public IUsuariosDAO udao() { return new UsuariosDAOJPA(); @Bean public IUsuariosBO ubo() { IUsuariosBO ubo = new UsuariosBOSimple(); ubo.setcredito(100); ubo.setiusuariosdao(udao()); return ubo; 29

Experto Universitario Java Enterprise Preguntas...? Spring Core 24