SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Un poco más allá con
       Grails




          Daniel Latorre

       dani@primerviernes.com
     11/03/2011 – Madrid on Rails
            PrimerVienes
¿Quién?

             Cofundador de Jobsket.com
             Desarrollador independiente
          Principalmente Grails/Groovy/Java
Google Summer of Code 2008 y contribuidor Open Source
             Web: http://www.danilat.com/
           CV: http://www.jobsket.es/cv/dani
                Twitter: @dani_latorre
¿Qué es Grails?



 Framework web para la plataforma Java “full stack”. Escrito
en Groovy y Java utilizando como base varias herramientas
         maduras(Spring, Hibernate, Tomcat...).
                        CoC & DRY.
         Fuertemente inspirado en Ruby on Rails.
Principales características
               de Groovy
      Menos ceremonioso y más expresivo que Java
        Todo es un objeto (no hay tipos primitivos)
                    Compilado o script
    Imports por defecto (java.util.*, java.io.*, java.net.*,
java.math.BigDecimal, java.math.BigInteger, groovy.util.*)
         Compilación cruzada (Joint compilation)
                 El GDK extiende a la JDK
Expandos y MOP (añade y modifica atributos y métodos en
                tiempo de ejecución)
Artefactos de Grails

 Clases de Dominio (GORM)
         Servicios
      Controladores
      Vistas + layouts
     Librerías de tags
          Filtros
          Codecs
Soporte I18N

                 Un properties por Locale.
         Cambio de idioma con /book/list?lang=en.
<g:message code="my.localized.content" args="${['Juan']}"/>
    message(code:"my.localized.content", args:['Juan'])
 Podemos inyectar messageSoruce de Spring en cualquier
                       parte.
Usando Spring podemos incluso modificar el origen de datos
                 del messageSoruce.
Externalizar configuraciones

         Base de datos por JDNI. En el DataSoruce.groovy:
dataSource {
     jndiName = "java:comp/env/myDS"
}
                    Configuración del Config.groovy:
    grails.config.locations = [ "classpath:${appName}-config.groovy","file:$
                {userHome}/.grails/${appName}-config.groovy"]
Plugins Autentificación


Spring Security, casi indiscutible. También con soporte
                 OpenID, LDAP, CAS
                 Facebook Connect
                        OAuth
               Solución Do It Yourself
Plugin REST Client


Para consumir servicios REST externos. Ejemplo:
Envío de emails



        Mail Plugin, para envíos por SMTP
Postmark Plugin, servicio que asegura la recepción.
  Existen varios plugins con más funcionalidades
Lazy/eager loading
Por defecto los objetos relacionados se cargan de forma
                       perezosa.
        Podemos necesitar una session diferente al
          OpenSessionInView de Grails/Spring


static mapping = {
     books lazy: false
}

        NO evitamos el problema de N + 1 queries.
Evitando el problema N+1

                           La solución: fetch.
                     A nivel de relaciones GORM:
static mapping = {
     books fetch: 'join'
}

                           En las consultas:
Author.findAllByNameLike("John%", [fetch: [location: 'join'] ])
Caché de primer nivel de Hibernate
  Caché de primer nivel para ahorrar tráfico en red y
              aumentar la velocidad.
  Sin flush:true en save o delete, no se persisten los
cambios hasta que hibernate ejecute el próximo select.
Caché de segundo nivel de
                 Hibernate
Se cachea cada insancia de la clase de Dominio:
static mapping = {
    cache 'read-only' // cache true
}

read-only: Si los datos son sólo lectura.
non-strict-read-write: Para pocas actualizaciones, no asegura si varias
transacciones modifican la misma instancia.
read-write: Actualizaciones frecuentes. Al modificar se actualiza en
cache, no soporta transacciones y pueden surgir inconsistencias.
transactional: Necesita un proveedor que lo soporte(JBoss TreeCache)
Caché de consultas de Hibernate


    Es posible cachear queries indicándolo al ejecutar.
     Habitual para consultas que se repitan de forma
                        constante

def person = Person.findByFirstName("Fred", [cache:true])
¿Opciones para una política de
       caché propia?

                 EhCahe
                 OSCahe
                Memcache
               JBoss Cache
                 Terracota
  ¿Bases de datos NoSQL?: Redis, Mongo...
Caché de métodos de un Service
         con SpringCache

    Puede interesar cachear las llamadas al método de
                     algún Service.


@Cacheable("pirateCache")
def getPirates() {...}
@CacheFlush("pirateCache")
void registerNewPirate(Pirate pirate) {...}
Caché de HTML con SpringCache

  Cachear porciones de HTML es una práctica habitual.
Para hacerlo se combina SpringCache y el tag include en
                      las vistas.


@Cacheable("albumControllerCache")
  def list = {...}
@CacheFlush("albumControllerCache")
 def save = {...}
Caché HTTP
 Podemos cachear a nivel de navegador jugando con las
      cabeceras HTTP. Ahorrando tráfico y CPU.

 Con el plugin Caching Headers, antes de los renders de los
actions a cachear:
cache shared:true, validFor: 3600 // 1hr on content
cache shared: true, validUntil: new Date()+1
lastModified book.dateUpdate
Hay disponible también un DSL con withCacheHeaders, para permitir
más flexibilidad.
Caché de estáticos


       Resources plugin: comprime .js/.css
Cache-resources plugin: añade manejo de cacheo de
             estáticos al navegador.
Sistemas de mensajería

  Hay que tratar quitar lo máximo de la request para
 mejorar la velocidad, la UX y facilitar la escalabilidad.


          JMS Plugin. Java Message Service
Rabbit MQ Plugin. Advanced Message Queuing Protocol
                      Jabber Plugin.
Solución Do It Yourself(Con quartz o java.util.concurrent)
Optimizando para móviles
  Es posible detectar si el navegador es un teléfono en el
request.getHeader('user-agent'). Para ahorrar ese trabajo
                  manual, SpringMobile.
def list = {
 withMobileDevice {def device ->
        if(device.id.contains("iphone"){
            render(view: "iphoneList", model: [list: listInstance])
        }
        render(view: "mobileList", model: [list: listInstance])
    }
 render(view: "list", model: [list: listInstance])
}
Optimizando para móviles II


En la parte de front, hay que optimizar también el html,
     tamaño de ficheros estáticos, imágenes, etc.
Para smartphones, HTML5: Soporte de geolocalización,
                 Web Database...
Librerías Javascript que pueden ayudar: Sencha Touch
                   o jQuery Mobile.
Algunos enlaces de interés



Postmark, servicio de mailing: http://postmarkapp.com/
Reading i18n messages from the database with Grails: http://1vm.es/000K
SpringSecurity with SpringCache: Caching content per user: http://1vm.es/000L
Localizable plugin: https://github.com/danilat/localizable

Más contenido relacionado

La actualidad más candente

¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)PiXeL16
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y GoJM Robles
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grailsbetabeers
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPElwin Huaman
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web SitesopenfinanceDev
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
Cómo crear un RESTful API con Go
Cómo crear un RESTful API con GoCómo crear un RESTful API con Go
Cómo crear un RESTful API con GoSoftware Guru
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradleDavid Gómez García
 
Curso completo php y mysql
Curso completo php y mysqlCurso completo php y mysql
Curso completo php y mysqlJason Arizabal
 
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006Álvaro Ortiz
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrolloAlejandro Hernández
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 

La actualidad más candente (20)

¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
Semana 3 MONGODB conceptos básicos NOSQL
Semana 3   MONGODB conceptos básicos NOSQLSemana 3   MONGODB conceptos básicos NOSQL
Semana 3 MONGODB conceptos básicos NOSQL
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
 
Fury - Docker Meetup
Fury - Docker MeetupFury - Docker Meetup
Fury - Docker Meetup
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAP
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Curso de php
Curso de phpCurso de php
Curso de php
 
Real-time web
Real-time webReal-time web
Real-time web
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web Sites
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Introducción Nodejs
Introducción NodejsIntroducción Nodejs
Introducción Nodejs
 
Cómo crear un RESTful API con Go
Cómo crear un RESTful API con GoCómo crear un RESTful API con Go
Cómo crear un RESTful API con Go
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 
Curso completo php y mysql
Curso completo php y mysqlCurso completo php y mysql
Curso completo php y mysql
 
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Tecnologias emergentes node js
Tecnologias emergentes node jsTecnologias emergentes node js
Tecnologias emergentes node js
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 

Similar a Un poco más allá con grails. PrimerViernes

[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con Java[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con JavaEudris Cabrera
 
Aplicaciones web offline ITParral Prieto y Nassi
Aplicaciones web offline ITParral Prieto y NassiAplicaciones web offline ITParral Prieto y Nassi
Aplicaciones web offline ITParral Prieto y NassiGuillermo Nassi
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Programacion web-Lenguajes del lado del servidor
Programacion web-Lenguajes del lado del servidorProgramacion web-Lenguajes del lado del servidor
Programacion web-Lenguajes del lado del servidorJose Felix Moran Agusto
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios webjcarazo
 
Aprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptAprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptKarsarmi
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js IntroduccionMayer Horna
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a TomcatIker Canarias
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2symfony_bcn
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 

Similar a Un poco más allá con grails. PrimerViernes (20)

[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con Java[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con Java
 
Ajax
AjaxAjax
Ajax
 
Aplicaciones web offline ITParral Prieto y Nassi
Aplicaciones web offline ITParral Prieto y NassiAplicaciones web offline ITParral Prieto y Nassi
Aplicaciones web offline ITParral Prieto y Nassi
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Programacion web-Lenguajes del lado del servidor
Programacion web-Lenguajes del lado del servidorProgramacion web-Lenguajes del lado del servidor
Programacion web-Lenguajes del lado del servidor
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Charla
CharlaCharla
Charla
 
Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios web
 
HTML5-Aplicaciones web
HTML5-Aplicaciones webHTML5-Aplicaciones web
HTML5-Aplicaciones web
 
Aprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScriptAprendiendo a Programas en 4 horas JavaScript
Aprendiendo a Programas en 4 horas JavaScript
 
01 Ext Js Introduccion
01 Ext Js   Introduccion01 Ext Js   Introduccion
01 Ext Js Introduccion
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Groogle
GroogleGroogle
Groogle
 
04. Implementando APIs HTML5
04. Implementando APIs HTML5 04. Implementando APIs HTML5
04. Implementando APIs HTML5
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 

Más de Dani Latorre

5 aniversario de Agile-Aragón
5 aniversario de Agile-Aragón5 aniversario de Agile-Aragón
5 aniversario de Agile-AragónDani Latorre
 
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaA falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaDani Latorre
 
Selenium como herramienta de Web Scraping
Selenium como herramienta de Web ScrapingSelenium como herramienta de Web Scraping
Selenium como herramienta de Web ScrapingDani Latorre
 
Vinalab, de visitas a clientes
Vinalab, de visitas a clientesVinalab, de visitas a clientes
Vinalab, de visitas a clientesDani Latorre
 
Cocina tu idea, crea tu producto
Cocina tu idea, crea tu productoCocina tu idea, crea tu producto
Cocina tu idea, crea tu productoDani Latorre
 
Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Dani Latorre
 
Agile Manifesto - EINA
Agile Manifesto - EINAAgile Manifesto - EINA
Agile Manifesto - EINADani Latorre
 
Como se hizo elDisparate.de
Como se hizo elDisparate.deComo se hizo elDisparate.de
Como se hizo elDisparate.deDani Latorre
 
Modulariza tus aplicaciones Grails - Springio 2012
Modulariza tus aplicaciones Grails - Springio 2012Modulariza tus aplicaciones Grails - Springio 2012
Modulariza tus aplicaciones Grails - Springio 2012Dani Latorre
 
Grails: Aumenta tu productividad en tus aplicaciones web Java
Grails: Aumenta tu productividad en tus aplicaciones web JavaGrails: Aumenta tu productividad en tus aplicaciones web Java
Grails: Aumenta tu productividad en tus aplicaciones web JavaDani Latorre
 
Optimiza tus webs Grails. Greach 2011
Optimiza tus webs Grails. Greach 2011Optimiza tus webs Grails. Greach 2011
Optimiza tus webs Grails. Greach 2011Dani Latorre
 
Opendata - TheEvnt 2011
Opendata - TheEvnt 2011Opendata - TheEvnt 2011
Opendata - TheEvnt 2011Dani Latorre
 
Groovy Koans - SpringIO 2011
Groovy Koans - SpringIO 2011Groovy Koans - SpringIO 2011
Groovy Koans - SpringIO 2011Dani Latorre
 
GHOP - GSoC Campus Party 2008
GHOP - GSoC Campus Party 2008GHOP - GSoC Campus Party 2008
GHOP - GSoC Campus Party 2008Dani Latorre
 

Más de Dani Latorre (16)

5 aniversario de Agile-Aragón
5 aniversario de Agile-Aragón5 aniversario de Agile-Aragón
5 aniversario de Agile-Aragón
 
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaA falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
 
Selenium como herramienta de Web Scraping
Selenium como herramienta de Web ScrapingSelenium como herramienta de Web Scraping
Selenium como herramienta de Web Scraping
 
Vinalab, de visitas a clientes
Vinalab, de visitas a clientesVinalab, de visitas a clientes
Vinalab, de visitas a clientes
 
Cocina tu idea, crea tu producto
Cocina tu idea, crea tu productoCocina tu idea, crea tu producto
Cocina tu idea, crea tu producto
 
Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013
 
Agile Manifesto - EINA
Agile Manifesto - EINAAgile Manifesto - EINA
Agile Manifesto - EINA
 
Agile Manifesto
Agile ManifestoAgile Manifesto
Agile Manifesto
 
Como se hizo elDisparate.de
Como se hizo elDisparate.deComo se hizo elDisparate.de
Como se hizo elDisparate.de
 
Modulariza tus aplicaciones Grails - Springio 2012
Modulariza tus aplicaciones Grails - Springio 2012Modulariza tus aplicaciones Grails - Springio 2012
Modulariza tus aplicaciones Grails - Springio 2012
 
Grails: Aumenta tu productividad en tus aplicaciones web Java
Grails: Aumenta tu productividad en tus aplicaciones web JavaGrails: Aumenta tu productividad en tus aplicaciones web Java
Grails: Aumenta tu productividad en tus aplicaciones web Java
 
Optimiza tus webs Grails. Greach 2011
Optimiza tus webs Grails. Greach 2011Optimiza tus webs Grails. Greach 2011
Optimiza tus webs Grails. Greach 2011
 
Opendata - TheEvnt 2011
Opendata - TheEvnt 2011Opendata - TheEvnt 2011
Opendata - TheEvnt 2011
 
Groovy Koans - SpringIO 2011
Groovy Koans - SpringIO 2011Groovy Koans - SpringIO 2011
Groovy Koans - SpringIO 2011
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
GHOP - GSoC Campus Party 2008
GHOP - GSoC Campus Party 2008GHOP - GSoC Campus Party 2008
GHOP - GSoC Campus Party 2008
 

Último

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
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
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
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)
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

Un poco más allá con grails. PrimerViernes

  • 1. Un poco más allá con Grails Daniel Latorre dani@primerviernes.com 11/03/2011 – Madrid on Rails PrimerVienes
  • 2. ¿Quién? Cofundador de Jobsket.com Desarrollador independiente Principalmente Grails/Groovy/Java Google Summer of Code 2008 y contribuidor Open Source Web: http://www.danilat.com/ CV: http://www.jobsket.es/cv/dani Twitter: @dani_latorre
  • 3. ¿Qué es Grails? Framework web para la plataforma Java “full stack”. Escrito en Groovy y Java utilizando como base varias herramientas maduras(Spring, Hibernate, Tomcat...). CoC & DRY. Fuertemente inspirado en Ruby on Rails.
  • 4. Principales características de Groovy Menos ceremonioso y más expresivo que Java Todo es un objeto (no hay tipos primitivos) Compilado o script Imports por defecto (java.util.*, java.io.*, java.net.*, java.math.BigDecimal, java.math.BigInteger, groovy.util.*) Compilación cruzada (Joint compilation) El GDK extiende a la JDK Expandos y MOP (añade y modifica atributos y métodos en tiempo de ejecución)
  • 5. Artefactos de Grails Clases de Dominio (GORM) Servicios Controladores Vistas + layouts Librerías de tags Filtros Codecs
  • 6. Soporte I18N Un properties por Locale. Cambio de idioma con /book/list?lang=en. <g:message code="my.localized.content" args="${['Juan']}"/> message(code:"my.localized.content", args:['Juan']) Podemos inyectar messageSoruce de Spring en cualquier parte. Usando Spring podemos incluso modificar el origen de datos del messageSoruce.
  • 7. Externalizar configuraciones Base de datos por JDNI. En el DataSoruce.groovy: dataSource { jndiName = "java:comp/env/myDS" } Configuración del Config.groovy: grails.config.locations = [ "classpath:${appName}-config.groovy","file:$ {userHome}/.grails/${appName}-config.groovy"]
  • 8. Plugins Autentificación Spring Security, casi indiscutible. También con soporte OpenID, LDAP, CAS Facebook Connect OAuth Solución Do It Yourself
  • 9. Plugin REST Client Para consumir servicios REST externos. Ejemplo:
  • 10. Envío de emails Mail Plugin, para envíos por SMTP Postmark Plugin, servicio que asegura la recepción. Existen varios plugins con más funcionalidades
  • 11. Lazy/eager loading Por defecto los objetos relacionados se cargan de forma perezosa. Podemos necesitar una session diferente al OpenSessionInView de Grails/Spring static mapping = { books lazy: false } NO evitamos el problema de N + 1 queries.
  • 12. Evitando el problema N+1 La solución: fetch. A nivel de relaciones GORM: static mapping = { books fetch: 'join' } En las consultas: Author.findAllByNameLike("John%", [fetch: [location: 'join'] ])
  • 13. Caché de primer nivel de Hibernate Caché de primer nivel para ahorrar tráfico en red y aumentar la velocidad. Sin flush:true en save o delete, no se persisten los cambios hasta que hibernate ejecute el próximo select.
  • 14. Caché de segundo nivel de Hibernate Se cachea cada insancia de la clase de Dominio: static mapping = { cache 'read-only' // cache true } read-only: Si los datos son sólo lectura. non-strict-read-write: Para pocas actualizaciones, no asegura si varias transacciones modifican la misma instancia. read-write: Actualizaciones frecuentes. Al modificar se actualiza en cache, no soporta transacciones y pueden surgir inconsistencias. transactional: Necesita un proveedor que lo soporte(JBoss TreeCache)
  • 15. Caché de consultas de Hibernate Es posible cachear queries indicándolo al ejecutar. Habitual para consultas que se repitan de forma constante def person = Person.findByFirstName("Fred", [cache:true])
  • 16. ¿Opciones para una política de caché propia? EhCahe OSCahe Memcache JBoss Cache Terracota ¿Bases de datos NoSQL?: Redis, Mongo...
  • 17. Caché de métodos de un Service con SpringCache Puede interesar cachear las llamadas al método de algún Service. @Cacheable("pirateCache") def getPirates() {...} @CacheFlush("pirateCache") void registerNewPirate(Pirate pirate) {...}
  • 18. Caché de HTML con SpringCache Cachear porciones de HTML es una práctica habitual. Para hacerlo se combina SpringCache y el tag include en las vistas. @Cacheable("albumControllerCache") def list = {...} @CacheFlush("albumControllerCache") def save = {...}
  • 19. Caché HTTP Podemos cachear a nivel de navegador jugando con las cabeceras HTTP. Ahorrando tráfico y CPU. Con el plugin Caching Headers, antes de los renders de los actions a cachear: cache shared:true, validFor: 3600 // 1hr on content cache shared: true, validUntil: new Date()+1 lastModified book.dateUpdate Hay disponible también un DSL con withCacheHeaders, para permitir más flexibilidad.
  • 20. Caché de estáticos Resources plugin: comprime .js/.css Cache-resources plugin: añade manejo de cacheo de estáticos al navegador.
  • 21. Sistemas de mensajería Hay que tratar quitar lo máximo de la request para mejorar la velocidad, la UX y facilitar la escalabilidad. JMS Plugin. Java Message Service Rabbit MQ Plugin. Advanced Message Queuing Protocol Jabber Plugin. Solución Do It Yourself(Con quartz o java.util.concurrent)
  • 22. Optimizando para móviles Es posible detectar si el navegador es un teléfono en el request.getHeader('user-agent'). Para ahorrar ese trabajo manual, SpringMobile. def list = { withMobileDevice {def device -> if(device.id.contains("iphone"){ render(view: "iphoneList", model: [list: listInstance]) } render(view: "mobileList", model: [list: listInstance]) } render(view: "list", model: [list: listInstance]) }
  • 23. Optimizando para móviles II En la parte de front, hay que optimizar también el html, tamaño de ficheros estáticos, imágenes, etc. Para smartphones, HTML5: Soporte de geolocalización, Web Database... Librerías Javascript que pueden ayudar: Sencha Touch o jQuery Mobile.
  • 24. Algunos enlaces de interés Postmark, servicio de mailing: http://postmarkapp.com/ Reading i18n messages from the database with Grails: http://1vm.es/000K SpringSecurity with SpringCache: Caching content per user: http://1vm.es/000L Localizable plugin: https://github.com/danilat/localizable