39
José Juan Reyes Zuñiga CIO SynergyJ Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Embed Size (px)

DESCRIPTION

Esta ponencia tiene como objetivo mostrar como conjuntar y aprovechar las ventajas de trabajar con Groovy & Grails, llevar el control del versionado con Git y simular la puesta en producción de la aplicación en GoogleAppEngine.

Citation preview

Page 1: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

José Juan Reyes ZuñigaCIO

SynergyJ

Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Page 2: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

2

Objetivo

Demostrar las ventajas competitivas al desarrollar con Groovy & Grails, llevar el control

del versionado con Git y simular la puesta en producción de la aplicación.

Page 3: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Agenda

• Groovy• Grails• Git• Google App Engine

3

Page 4: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Groovy…¿Qué es…?• Es un lenguaje dinámico para la JVM

• Construido con la fuerza de Java pero incluyendo características poderosas inspiradas en lenguajes como Python, Ruby y Smalltalk

• Es un proyecto con licencia Open Source-Apache

• Gramática relajada derivada de Java 5

• Integración fluida con todos los objetos Java y los cientos de librerías

• Compila a bytecode Java, por lo tanto, se puede usar donde sea

• Simplifica las pruebas

• Aumenta la productividad del desarrollador

• Su curva de aprendizaje mínima

Page 5: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

HolaMundo en Java

public class HolaMundo {private String nombre;

public String getNombre() {return nombre;

}

public void setNombre(String nombre) {

this.nombre = nombre;}

public String saluda() {return "Hola " +

this.nombre + " !!!";}

public static void main(String[] args) {

HolaMundo objeto = new HolaMundo();

objeto.setNombre("@SG09Conf");

System.out.println(objeto.saluda());}

}

Page 6: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

HolaMundo en Groovy

public class HolaMundo {private String nombre;

public String getNombre() {return nombre;

}

public void setNombre(String nombre) {

this.nombre = nombre;}

public String saluda() {return "Hola " +

this.nombre + " !!!";}

public static void main(String[] args) {

HolaMundo objeto = new HolaMundo();

objeto.setNombre("@SG09Conf");

System.out.println(objeto.saluda());}

}

Page 7: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Mejor a la manera Groovy

class HolaMundo {String nombredef saluda() { "Hola ${this.nombre} !!!" }

}

def objeto = new HolaMundo(nombre:"@SGConf")println(objeto.saluda())

Page 8: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

¿Cómo llegamos a esto…?• Tener el JDK instalado

• Establecer la variable JAVA_HOME y agregarla al PATH en el subdirectorio /bin

• Descargamos la distribución de Groovy en http://groovy.codehaus.org/

• Creamos una variable de entorno GROOVY_HOME apuntando al directorio donde se descomprimió la distribución

• Adicionalmente, incluir en el PATH el directorio /bin de la variable de entorno GROOVY_HOME, es decir: %GROOVY_HOME%/bin

• Let’s rock the code!!!

Page 9: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

+ Groovy en una mirada• Totalmente Orientado a objetos

• Perfecta integración con Java

• Closures

• Convención de JavaBeans

• Esencia vs. Ceremonia

• Aritmética con BigDecimal por default para la operación de punto flotante

• API’s amigables y prácticas– XML, JDBC, JMX, Swing

• DSL(Domain Specific Language)

• Builders

• Sobrecarga de operadores

• GDK

Page 10: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Azúcar sintáctica + GDK• Listas

– def numeros = [1,2,3,4,5]

• Mapas– def mapa = [DF:'Distrito

Federal',MTY:'Monterrey']

• Rangos– def rangos = 199..299

• Asignación Múltiple– def (a,b) = [10,20]

• Return Opcional– def metodo(bool) { if(bool) 1 else 0 }

Page 11: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Groovy en profundidad

• Meta-programación– La habilidad de un lenguaje para modificarse a

sí mismo

• Transformaciones AST– @Singleton– @Inmutable, @Lazy, @Delegate– @Newify– @Category & @Mixin– @PackageScope– @Bindable & @Vetoable– @Grab

Page 12: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Ahora hablemos de …

Page 13: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

¿Que es Grails?• Una plataforma para desarrollo ágil en Web

• Un framework MVC full-stack

• Un proyecto Open Source

• Corre en la JVM

• Desarrollo de Aplicaciones con Groovy

• Altamente expresivo

• Totalmente orientado a Objetos

• Dinámico

• Sintaxis familiar

• Perfecta integración con Java

• Convención sobre configuración

• DRY(Don't Repeat Yourself)

Page 14: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Stack de tecnologías

Page 15: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

¿qué me provee?MVC zero-configuration Dependency_Injection gsp transacciones JNDI

groovy Internacionalización Web_Flow Tag_libraries

Caching hibernate scaffolding REST Layouts AJAX Jetty Unit

testing Integration testing grails plugins quartz acegi

activemq amazon-s3 gae axis camel criteria GORM dwr ext Spring

flex freemarker java geoip gwt ivy jpa jquery ldap mail openid paypal pdf sakai

springmvc taggable terracotta tomcat twitter webtest xfire yui

Page 16: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Let’s code again!!!

Page 17: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Más Grails…• Mappings• Internacionalización• Ajax• WebFlow• GORM• Servicios• Plugins• Seguridad• Web Services• Más…

Page 18: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

La vida y los proyectos…

“…así la vida como los proyectos de software son aburridos si se cuentan y se desarrollan de manera líneal…”

Page 19: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Git – Control de versiones

• Git es:– “Un sistema de control de versiones

distribuido libre y open source, diseñado para manejar cada objeto en proyectos pequeños y grandes con velocidad y eficiencia…”

• Creado por Linus Torvalds

Page 20: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

¿Distribuido?

• Colaboración– Cambios sin perturbar a los demás

• Las ramas(branches) que afectan al repositorio local son inaceptables

– Confianza en tus datos• Sin tener que creer implícitamente en los demás o

en el hosting

• Liberaciones de Ingeniería– Ciclos concurrentes de

desarrollo/pruebas/liberaciones

Page 21: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Aaahhh Distribuido….

Page 22: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Diferencias y ventajas con CVCS• No hay copias de referencia, solo copias de trabajo

locales

• Las operaciones más comunes son regularmente más rápidas ya que no tienen que comunicarse con un servidor central

• No hay necesidad de hacer update antes de hacer commit

• No hay problemas con la red y la latencia generada

• No necesitamos hacer una instalación en un servidor remoto

• Los desarrolladores pueden trabajar sin estar conectados a su red local o a Internet

• Branches experimentales

• Performance

Page 23: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Formas de trabajo con Git & DCVS

• Alone• En pares• Centralizado• Descentralizado

Page 24: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Instalación de Git

• En función del Sistema Operativo:– Basado en RedHat

• RPM

– Basado en Debian• Debs

– Windows• .exe

– OS X• DMG

– Solaris

Page 25: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Continuemos entonces…

Page 26: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Puesta en producción…

Page 27: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Infraestructura

Page 28: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Una opción…

Page 29: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Google App Engine• Solución de Cloud Computing de Google• Correr aplicaciones en la infraestructura

escalable de Google• El pago es basado en los recursos usados:

almacenamiento, ancho de banda(medido en GB)• De manera gratuita:

– Hasta 500MB de almacenamiento– Hasta 5 millones de páginas vistas por mes

• Ahora está disponible para la JVM• Por lo tanto para Scala, JRuby y...• GROOVY!!!

Page 30: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Entorno GAE

• Corre en Java 6(con algunas limitaciones)– El request será terminado si no se completa en

30 segundos, arrojando excepción

• Además:– No hay sockets– No hay hilos o timers– No hay JNDI– System.gc(),System.exit(),etc, no hacen nadaAlgunos problemas con el classloader

Page 31: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Escalabilidad en GAE

• 30 requests dinámicos simultáneos• El tiempo de procesamiento del lado

servidor es de 75ms• Alrededor de 400 request/seg. Sin latencia

adicional

Page 32: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Servicios en GAE

• URL Fetch• Mail• Memcache• Manipulación de Imágenes• Manejo de usuarios• Consola de administración• Calendarización

Page 33: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Almacenamiento en GAE

• Datastore– Almacenamiento de datos distribuido y

transaccional– Filtrado y ordenamiento por el valor del

propiedad– No es relacional, es “esquemático”

Page 34: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Persistencia en GAE

• Toda la persistencia es definida por clases @not@d@s– JDO– JPA

• Todo es almacenado en BigTable– Es masivamente escalable– Es un sistema de almacenamiento distribuido– Usada por Google para muchas cosas

• Para Java, la API usa el optimizador de Datanucleus

Page 35: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Desarrollo en GAE• Cuenta con un SDK descargable

– Incluye un webserver– Emula los servicios– Incluye una herramienta de Upload

• Soporta Java 5 y 6• Existen un plugin de GAE para Eclipse y

uno para Grails• Debemos de cubrir un proceso de registro

sencillo• Solo podemos subir 10

aplicaciones(gratuitamente)

Page 36: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

Plugin de GAE para Grails

• Crear una app Grails que coincida con el nombre de nuestra app GAE

• Desinstalar el plugin de Hibernate• Instalar el plugin app-engine(previo kit de

GAE instalado)• Establecer la versión(a 1 preferentemente)• Desplegar• Listo..

Page 37: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

GAE es una opción

• Existen también:– Amazon EC2– SpringSource Cloud Foundry– Entre otros…

Page 38: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

All in one-place

Page 39: Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)

em@il: [email protected], flickr, digg, twitter, delicious: neodevelop

Comunidad: http://grails.org.mx

Preguntas y Respuestas