curso spring 3 + hibernate
DESCRIPTION
Curso de spring3, El código de acompañamiento está aca https://github.com/iamedu/SpringHibernateTRANSCRIPT
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!