Curso Spring 3 + Hibernate

Post on 13-Jan-2015

3.158 views 3 download

description

Curso de spring3, El código de acompañamiento está aca https://github.com/iamedu/SpringHibernate

Transcript of Curso Spring 3 + Hibernate

Spring 3, Hibernate, Maven

Sistemas Humanos

Maven•Sistema de Automatización•Construcción de proyectos•Prueba de proyectos•Manejo de dependencias•Plugins

Spring•Spring es un framework Open Source•Creado por Rod Johnson (Export One-on-One J2EE Design and Development)•Un nuevo comienzo después del invierno de J2EE

¿Por qué Spring?•Reducir la complejidad de J2EE•Spring usa POJOs (Plain Old Java Objects)•(Spring = Java Beans) !== EJB

Características•NO intrusivo•Promover buen diseño•Fácilmente "probable"

Características•Fácilmente configurable (XML, anotaciónes)•Spring ES un contenedor, administra el ciclo de vida de nuestros objetos.•Desacomplamiento por medio de IoC (Inversion of Control) y AOP (Aspect Oriented Programming)

Inversion of Control

Main

Dependencias

Dependencias

Main

Dependency Injection•Spring•Guice•PicoContainer•JSR 299 (Contexts and Dependency Injection for the Java EE Platform)

AOPTrámi

teAlta Repor

te

Autorización

Módulos de Spring

Core Spring•Dependency Injection•JNDI•Scheduling•EJB

Spring AOP•Aspectos de Spring•Desacomplar temas transversales

Acceso a datos•Abstraer JDBC•JPA, JDO, iBatis, y Hibernate•JMS•Object to XML Mapping

Web•Integracion con Servlets•Integración con Java Portlet API•RMI•Hessian•Burlap•JAX-WS•Spring HTTP-Invoker

Testing•jUnit•Mockito•Acceso a datos•Transacciónes

Spring Instrumentation

Más alla de las bases•Spring Web Flow•Spring Web Services•Spring Security•Spring Integration•Spring Batch•Spring Social•Spring Mobile (Spring Android)

Más allá de las bases•Spring Dynamic Modules•Spring LDAP•Spring Rich Client•Spring.NET•Spring Flex•Spring ROO

Volviendo a la teoría...

Contenedores de Spring•Bean Factory

•XmlBeanFactory•ApplicationContext (Ciclo de Vida)•FilesystemXmlApplicationContext•ClassPathXmlApplicationContext•WebXmlApplicationContext

BeanFactory•Ambientes reducidos•Construye Beans•Inyecta Beans

Application Context•BeanFactory +•Ciclo de vida•Eventos•BeanPostProcessor

BeanPostProcessor

PostProcessor

PROXY

Manejando la vida•init-method = InitializingBean•destroy-method = DisposableBean

Scopes•Singleton, Prototype•Session, Request (Servlet)•GlobalSession (Portlets)

Construyendo Beans•Constructor•Static Factory•Bean Factory

Constructornew Bean(blah)

=

<bean id='mibean' class='Bean' />

Static Factoryclass Static { public static Bean buildObject() { ... }}Static.buildObject()=<bean class="Static" factory-method="buildObject" />

Bean Factoryclass Bean { public NewBean buildObject() { ... }}new Bean().buildObject() =<bean id='factoryBean' class='Bean' /><bean factory-bean="factoryBean" factory-method="buildObject" />

Autowire•byName•byType•byConstructor•autodetect•byConstructor•byType

¡Anotación!

Autowire recargado•@Autowire•@Qualifier

Autowire estandarizado•@Inject

•@Qualifier•@Named•Inyección de proveedores

¿Inyección de proveedores?

Component Lookup•@Component•@Scope•@Controller (WebMVC)•@Repository (DAO)•@Service = @Component (Facade)

Java en vez de XML

Simplificando (JMS)•JmsTemplate•Sin EJB•MessageCreator para generar mensajes.

Acceso a DatosHibernate + JPA

Persistencia en java•EJB•JDO•JPA

JPA•JPA es un estándar•JPA sólo es la manera de llamar a...•Hibernate•TopLink•Kopo•OpenJPA

Hibernate•JPA está basado en Hibernate•Lucene•Ehcaché

Desventajas•No soporta queries nativos nombrados

Entendiendo a JPAEntityManagerFacto

ry

EntityManager

Query Entity Transaction

Configurando a JPA•META-INF/persistence.xml

Configurando a JPA

Entidades•@Entity•Ciclo de vida•No existe•Nuevo•Manejado•Eliminado•Separado

Ciclo de vida•@PrePersist•@PostPersist•@PreLoad•@PostLoad•@PreRemove•@PostRemove

Caché (ehcache)•Sobre las entidades anotadas con @Entity•@Cache(usage = CacheConcurrencyStrategy.•READ_WRITE•READ_ONLY•NONSTRICT_READ_WRITE

ehcache + hibernatepropiedades de proveedor

en persistence.xml

ehcache.xml

Lucene + Hibernate Search•@Field =

@Indexed•@Boost

persistence.xmlpropiedades de proveedor

en persistence.xml

Indexando y Consultando

De vuelta a Spring (MVC)

Arquitectura

Dispatcher Servlet

HandlerMappin

g

View Resolve

r

Controller

View Resolver•InternalResourceViewResolver•TilesViewResolver•JasperReportsViewResolver•VelocityViewResolver•FreeMarkerViewResolver

HandlerMapping•SimpleUrlHandlerMapping•ControllerBeanNameHandlerMapping•<mvc:annotation-driven />

RequestMapping•@RequestMapping•value={'/url/','/otra/url'}•method={RequestMethod.GET, RequestMethod.POST}

Pasando Variables•@RequestParam(required=false)•@PathVariable + '/url/{var}'

i18n•ResourceBundleMessageSource•CookieLocaleResolver•AcceptHeaderLocaleResolver

Validación•@Valid•@Size•@Pattern

Spring Security•auto-config!•authentication-manager•user-service•@Secured :)

¡Gracias!