SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Cambia la forma de desarrollar
tus aplicaciones web

Leganés, 6-7 Febrero 2014

@fatimacasau
¿Qué vamos a ver?
¿Qué es?
Características
Getting Started
Features + Código

@t3chfest 2014

@fatimacasau
JVM
Dinámico
Tiempo de ejecución
@CompileStatic (versión 2.x)
Ruby, Phyton, Smaltalk

@t3chfest 2014

@fatimacasau
Groovy ~ Java
Sencillo + Expresivo = Coding by Convention
GDK - Groovy Development Kit (JDK extension)
Groovy ~ Superversión de Java

@t3chfest 2014

@fatimacasau
Getting Started
Descarga:

http://groovy.codehaus.org/Download

Terminal: $ groovysh

$ groovyconsole

Web Console: http://groovyconsole.appspot.com/
IDEs:

@t3chfest 2014

@fatimacasau
Features
OOP
Clases: Getters/Setters y constructores implícitos
Closures
Sobrecarga de operadores
Soporte nativo para cadenas (Gstrings) y
colecciones

@t3chfest 2014

@fatimacasau
HelloWorld.java
class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String greet() {
return "Hello " + name;
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Groovy");
System.out.println(helloWorld.greet());
}
}

@t3chfest 2014

@fatimacasau
HelloWorld.groovy
class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String greet() {
return "Hello " + name;
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Groovy");
System.out.println(helloWorld.greet());
}
}

@t3chfest 2014

@fatimacasau
HelloWorld.groovy (groovy style)

!

class HelloWorld {
def name
def greet() {
"Hello $name"
}
}

!

def helloWorld = new HelloWorld(name: "Groovy")
println helloWorld.greet()

@t3chfest 2014

@fatimacasau
GStrings
// Múltiples líneas con y sin salto de línea (también con triple ")
assert '''hello,
world''' == 'hello,nworld‘

!

assert 'hello, 
world' == 'hello, world‘

!

// Sustitución de variables con dobles comillas
def name = 'Groovy'
assert "hello $name, how are you today?" == "hello Groovy, how are you
today?

!

def a = 'How are you? '
assert "The phrase '$a' has length ${a.size()}" =="The phrase 'How are you?'
has length 12"

@t3chfest 2014

@fatimacasau
Listas
def list = [5, 6, 7, 8]
assert list.get(2) == 7
assert list[2] == 7

!
assert
!

list instanceof java.util.List

def emptyList = []
assert emptyList.size() == 0

!

emptyList.add(5)
assert emptyList.size() == 1

!

emptyList << 3
assert emptyList.size() == 2

!

emptyList << 'Groovy'
assert emptyList.size() == [5, 3, 'Groovy']

@t3chfest 2014

@fatimacasau
Rangos
// an inclusive range
def range = 5..8
assert range instanceof java.util.List
assert range.size() == 4
assert range[2] == 7
assert range.contains(5)
assert range.contains(8)
// lets use a half-open range
range = 5..<8
assert range.size() == 3
assert range.contains(5)
assert ! range.contains(8)
assert range.from == 5
assert range.to == 7

!

range = 'a'..'d'
assert range == ['a','b','c','d']

@t3chfest 2014

@fatimacasau
Mapas
def map = [name: "Gromit", likes: "cheese", id: 1234]
assert map instanceof java.util.Map

!

assert map.get("name") == "Gromit"
assert map.get("id") == 1234

!

assert map["name"] == "Gromit"
assert map ['id'] == 1234

!

assert map.name == "Gromit"
assert map.id == 1234

!

def emptyMap = [:]
assert emptyMap.size () == 0

!

map.foo = 4
assert map.foo == 4

@t3chfest 2014

@fatimacasau
Closures
Bloques de código
Pueden asignarse a variables
Tienen variables implícitas
Pueden utilizar variables externas
Pueden pasarse como argumento de métodos

@t3chfest 2014

@fatimacasau
Closures

!
def
!

myConst = 5

def incByConst = { num ->
num + myConst
}

!
println
!

incByConst(10) // => 15

//variable implícita it
def clos = { print it }
clos( "hi there" ) //prints "hi there"

@t3chfest 2014

@fatimacasau
Loopsy estructuras de control
if(){}else{}

!

while(){}

!

for(i in [1,2,3]){}
for(i=0;i<5;i++){}
for(i=0;j=10;i<10;i++;j--){}
for(i=0;…;i<10;…;n++){}

!

[1,2,3].each{ println it }
[“a”,“b”,“c”].eachWithIndex(){it,i-> println “$i : $it”}

!

3.times(){…}
5.upto(10){…}
10.1.downto(1.1){…}
0.step(10,2){…}
(1.. 5).each{…}
@t3chfest 2014

@fatimacasau
La ‘verdad’ en Groovy
Falso
Null

new Object()

0

1

[]

[1,2,3]

[:]

[name:'fatima']

""

@t3chfest 2014

Verdad

'abc'

@fatimacasau
Sobrecarga de Operadores
Operator

Method

a == b
a != b

a.equals(b) or
a.compareTo(b) == 0 **
!a.equals(b)

a <=> b

a.compareTo(b)

a > b

a.compareTo(b) > 0

a >= b

a.compareTo(b) >= 0

a < b

a.compareTo(b) < 0

No NullPointerException
@t3chfest 2014

@fatimacasau
Otros Operadores
Not operator (!)
!expresión

Spread operator (*.)
list*.attribute

Safe navigation operator (?.)
object?.attribute

Elvis operator (?:)
a = a?:""
@t3chfest 2014

@fatimacasau
Más…

!

Groovy SQL

!

sql.execute('insert into people (firstName, lastName) values (?,?)',
[firstName, lastName])
sql.eachRow('Select * from Person') {}

!
Dates
!

plus(), minus(), after(), before()
GregorianCalendar, String.format(String format, GregorianCalendar c)

!
Expresiones regulares
!
"potatoe" ==~ /potatoe/
!
Files

eachFile(), eachDir(), eachLine()…
@t3chfest 2014

@fatimacasau
Libros
!

@t3chfest 2014

@fatimacasau
!
Documentación oficial

!

Groovy Codehaus: http://groovy.codehaus.org/Documentation

!
!
Ejercicios

!

Groovy Koans:
https://github.com/cjudd/groovy_koans

!
!
@t3chfest 2014

@fatimacasau
¿Qué vamos a ver?
¿Qué es?
Principios y filosofía
Ventajas
Getting Started
Arquitectura

@t3chfest 2014

@fatimacasau
Plataforma para el desarrollo de aplicaciones web
JavaEE
Construido sobre un conjunto de frameworks
consolidados
Apoyado por una extensa librería de plugins
Soluciona todas las necesidades en el desarrollo de
aplicaciones web
Facilita el desarrollo de dichas aplicaciones
Utiliza GROOVY como lenguage

@t3chfest 2014

@fatimacasau
!
!
!
!
!
!
!
!
!
!

Tomcat y H2 incluidos para desarrollo rápido

@t3chfest 2014

@fatimacasau
Principios y filosofía
Patrón MVC (Modelo, Vista, Controlador)
CoC (Convention over Configuration)
Nombres descriptivos
Localización de ficheros que indican lo que son
Paradigma Coding by Convention de GROOVY

!
DRY (Don’t Repeat Yourself)
Inyección de dependencias

@t3chfest 2014

@fatimacasau
¿Por qué?
Menos código + menos errores = ++productividad
Fly reloading
Abstracción de los frameworks sobre los que se
asienta
Línea de comandos (run-app, war, install-plugin…)
Eliminación de XML’s gracias a CoC
Extensa librería de plugins

@t3chfest 2014

@fatimacasau
Getting Started
JDK

y JAVA_HOME

Download: http://grails.org/download
Terminal:

$ grails run-app

$ grails>

IDE’s:
Crear una aplicación
grails> create-app myApp
@t3chfest 2014

@fatimacasau
Comandos

grails [environment]* [command name]

!

Environments: dev, test, prod

!

Custom Environment: -Dgrails.env=myEnv

!

Comandos más usados:
run-app
war
clean
install-plugin
test-app
create-domain-class
create-controller
ceate-service
generate-all

@t3chfest 2014

@fatimacasau
Configuración
Config.groovy
Ejemplo: my.property.text = “hola”
Acceso: grailsApplication.config.my.property.text

BuildConfig.groovy
Datasource.groovy
Bootstrap.groovy
ApplicationResources.groovy
UrlMappings.groovy
@t3chfest 2014

@fatimacasau
Environments
!
grails.util.Environment

!
Custom environments

!
Detección de entornos:

!

environments {
production{
configureForDevelopment()
}
…
}
_______________________________________
import grails.util.Environment

!

switch (Environment.current) {
case Environment.DEVELOPMENT
configureForDevelopment()
break
…
}
@t3chfest 2014

@fatimacasau
Arquitectura MVC
Modelo - domains (GORM), services (Spring)
Vista – views & templates (gsp’s), TagLibs
Controlador – controllers & actions, filtros

@t3chfest 2014

@fatimacasau
GORM
Grails Object Relational Mapping (Hibernate 3)
Clases de dominio
getters y setters implícitos
constructores por defecto
eventos

Mapeos sin configuración
save(), delete(), list(), count()…
Constraints para validación
namedQueries
@t3chfest 2014

@fatimacasau
GORM
Mapeo de relaciones
One-To-One, One-To-Many, Many-To-Many
Finders dinámicos
findAllBy(), findBy(), findWhere()…
Para búsquedas más complejas
HQL, criterias, detachedCriterias, executeQueries
Ordenación y paginación
sort, order, max, offset …
@t3chfest 2014

@fatimacasau
Controllers
Actions
Closures
Métodos que reciben parámetros que vienen del formulario
Redirect de otros actions, mappings
Renders de vistas, templates, texto, json, xml

Command Objects
Objeto flash para enviar messages
Filtros que interceptan controllers, actions, views

@t3chfest 2014

@fatimacasau
Servicios

!

Spring

!

Inyección automática en:

!

Otros servicios
Controllers
Domains
TagLibs

@t3chfest 2014

class MyService {
def anyMethod(){
//…
}
}
_______________________________________
class MyController {
def myService
def anyAction(){
//…
myService.anyMethod(…)
//…
}
}

@fatimacasau
GSP’s
Groovy Server Pages
Templates, includes
Reutilización de código
Extensa librería de Tags sin configuración
g:each, g:if, g:form, g:formRemote,
g:formatDate, g:link, g:remoteLink,
g:remoteFunction, g:datePicker, g:set …

@t3chfest 2014

@fatimacasau
URL Mappings

!

class UrlMappings {
static mappings = {

!

"/product"(controller: "product", action: "list")
"/"(view: "/index") // map the root URL
"/product/$id"(controller: "product")
"403"(controller: "errors", action: "forbidden")
"/product/$id"(controller:"product") {
action = [GET:"show", PUT:"update", DELETE:"delete“,
POST:"save"]
}
name accountDetails: "/details/$acctNumber" {
controller = 'product' action = 'accountDetails'
}
}
}

@t3chfest 2014

@fatimacasau
Deployment
Command line
Para ejecutar
Puerto por defecto 8080: grails run-app
Especificar puerto: grails -Dserver.port=8090 run-app

Generar un war:
Entorno de producción por defecto: grails war
Especificar entorno: grails -Dgrails.env=myEnv war

@t3chfest 2014

@fatimacasau
Más…
!
jQuery
!
Ajax
!
Creación de Plugins
!
SpringSecurity Plugin
!
I18n
!
Testing con Spock integrado
!
Scripts: Gant
!
Injección de dependencias con
!

Spring: Spring DSL’s, resources.groovy

Scaffolding – No recomendado

@t3chfest 2014

@fatimacasau
Documentación de grails

!

http://grails.org/doc/latest/guide/

Listas de correo

!

http://grails.org/Mailing+lists

Grails Blog

!

http://grails.org/blog

Issue Tracker

!

http://jira.grails.org/browse/GRAILS

Grupo de Google – Grails en Castellano

http://groups.google.es/group/grailsencastellano

@t3chfest 2014

@fatimacasau
Eventos

@t3chfest 2014

@fatimacasau
https://github.com/fatimacasau/blog-example-grails-app

@t3chfest 2014

@fatimacasau

Weitere ähnliche Inhalte

Was ist angesagt?

Android Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityAndroid Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityFe
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsDavid Ballén
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Iván López Martín
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytestHector Canto
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerIván López Martín
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHPAlicantePHP
 
Garbage Collection en el JVM
Garbage Collection en el JVMGarbage Collection en el JVM
Garbage Collection en el JVMsuperserch
 
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008javier ramirez
 
Masterclass PHP 5.3
Masterclass PHP 5.3Masterclass PHP 5.3
Masterclass PHP 5.3ADWE Team
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkMario IC
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)videos
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradleDavid Gómez García
 

Was ist angesagt? (20)

Android Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityAndroid Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivity
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para Frontends
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Garbage Collection en el JVM
Garbage Collection en el JVMGarbage Collection en el JVM
Garbage Collection en el JVM
 
Taller de Capistrano
Taller de CapistranoTaller de Capistrano
Taller de Capistrano
 
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
 
Masterclass PHP 5.3
Masterclass PHP 5.3Masterclass PHP 5.3
Masterclass PHP 5.3
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
Dar lab1819
Dar lab1819Dar lab1819
Dar lab1819
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 

Andere mochten auch

Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Fátima Casaú Pérez
 
t3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por quet3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por queFátima Casaú Pérez
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Fátima Casaú Pérez
 
Use groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projectsUse groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projectsFátima Casaú Pérez
 

Andere mochten auch (10)

Testing con spock
Testing con spockTesting con spock
Testing con spock
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
 
Presentación de Scrum en 15 mins
Presentación de Scrum en 15 minsPresentación de Scrum en 15 mins
Presentación de Scrum en 15 mins
 
2013 greach
2013 greach2013 greach
2013 greach
 
t3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por quet3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por que
 
Spring boot + spock
Spring boot + spockSpring boot + spock
Spring boot + spock
 
Branch per user story
Branch per user storyBranch per user story
Branch per user story
 
Mapa de Historias de Usuario - User Story Map
Mapa de Historias de Usuario - User Story MapMapa de Historias de Usuario - User Story Map
Mapa de Historias de Usuario - User Story Map
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?
 
Use groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projectsUse groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projects
 

Ähnlich wie Cambia la forma de desarrollar tus aplicaciones web con groovy y grails

Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaAndres Almiray
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dslJorge Aguilera
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grailsbetabeers
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesDani Latorre
 
Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web DevelopmentJaime Irurzun
 
Introduccion a grails en Campusparty
Introduccion a grails en CampuspartyIntroduccion a grails en Campusparty
Introduccion a grails en CampuspartyJose Juan R. Zuñiga
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaSoftware Guru
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018 Codemotion
 
Node Js & 3D Printer
Node Js & 3D PrinterNode Js & 3D Printer
Node Js & 3D Printernanusefue
 
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
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y GoJM Robles
 
Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Workshectorguedea
 

Ähnlich wie Cambia la forma de desarrollar tus aplicaciones web con groovy y grails (20)

Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dsl
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Seguridad en Android
Seguridad en AndroidSeguridad en Android
Seguridad en Android
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web Development
 
Introduccion a grails en Campusparty
Introduccion a grails en CampuspartyIntroduccion a grails en Campusparty
Introduccion a grails en Campusparty
 
Empezando con Angular 2
Empezando con Angular 2Empezando con Angular 2
Empezando con Angular 2
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Presnetación Go
Presnetación GoPresnetación Go
Presnetación Go
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
Node Js & 3D Printer
Node Js & 3D PrinterNode Js & 3D Printer
Node Js & 3D Printer
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
introducción a flutter
introducción a flutterintroducción a flutter
introducción a flutter
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
 
Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Works
 

Kürzlich hochgeladen

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
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Kürzlich hochgeladen (13)

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)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

Cambia la forma de desarrollar tus aplicaciones web con groovy y grails

  • 1. Cambia la forma de desarrollar tus aplicaciones web Leganés, 6-7 Febrero 2014 @fatimacasau
  • 2. ¿Qué vamos a ver? ¿Qué es? Características Getting Started Features + Código @t3chfest 2014 @fatimacasau
  • 3. JVM Dinámico Tiempo de ejecución @CompileStatic (versión 2.x) Ruby, Phyton, Smaltalk @t3chfest 2014 @fatimacasau
  • 4. Groovy ~ Java Sencillo + Expresivo = Coding by Convention GDK - Groovy Development Kit (JDK extension) Groovy ~ Superversión de Java @t3chfest 2014 @fatimacasau
  • 5. Getting Started Descarga: http://groovy.codehaus.org/Download Terminal: $ groovysh $ groovyconsole Web Console: http://groovyconsole.appspot.com/ IDEs: @t3chfest 2014 @fatimacasau
  • 6. Features OOP Clases: Getters/Setters y constructores implícitos Closures Sobrecarga de operadores Soporte nativo para cadenas (Gstrings) y colecciones @t3chfest 2014 @fatimacasau
  • 7. HelloWorld.java class HelloWorld { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public String greet() { return "Hello " + name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println(helloWorld.greet()); } } @t3chfest 2014 @fatimacasau
  • 8. HelloWorld.groovy class HelloWorld { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public String greet() { return "Hello " + name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName("Groovy"); System.out.println(helloWorld.greet()); } } @t3chfest 2014 @fatimacasau
  • 9. HelloWorld.groovy (groovy style) ! class HelloWorld { def name def greet() { "Hello $name" } } ! def helloWorld = new HelloWorld(name: "Groovy") println helloWorld.greet() @t3chfest 2014 @fatimacasau
  • 10. GStrings // Múltiples líneas con y sin salto de línea (también con triple ") assert '''hello, world''' == 'hello,nworld‘ ! assert 'hello, world' == 'hello, world‘ ! // Sustitución de variables con dobles comillas def name = 'Groovy' assert "hello $name, how are you today?" == "hello Groovy, how are you today? ! def a = 'How are you? ' assert "The phrase '$a' has length ${a.size()}" =="The phrase 'How are you?' has length 12" @t3chfest 2014 @fatimacasau
  • 11. Listas def list = [5, 6, 7, 8] assert list.get(2) == 7 assert list[2] == 7 ! assert ! list instanceof java.util.List def emptyList = [] assert emptyList.size() == 0 ! emptyList.add(5) assert emptyList.size() == 1 ! emptyList << 3 assert emptyList.size() == 2 ! emptyList << 'Groovy' assert emptyList.size() == [5, 3, 'Groovy'] @t3chfest 2014 @fatimacasau
  • 12. Rangos // an inclusive range def range = 5..8 assert range instanceof java.util.List assert range.size() == 4 assert range[2] == 7 assert range.contains(5) assert range.contains(8) // lets use a half-open range range = 5..<8 assert range.size() == 3 assert range.contains(5) assert ! range.contains(8) assert range.from == 5 assert range.to == 7 ! range = 'a'..'d' assert range == ['a','b','c','d'] @t3chfest 2014 @fatimacasau
  • 13. Mapas def map = [name: "Gromit", likes: "cheese", id: 1234] assert map instanceof java.util.Map ! assert map.get("name") == "Gromit" assert map.get("id") == 1234 ! assert map["name"] == "Gromit" assert map ['id'] == 1234 ! assert map.name == "Gromit" assert map.id == 1234 ! def emptyMap = [:] assert emptyMap.size () == 0 ! map.foo = 4 assert map.foo == 4 @t3chfest 2014 @fatimacasau
  • 14. Closures Bloques de código Pueden asignarse a variables Tienen variables implícitas Pueden utilizar variables externas Pueden pasarse como argumento de métodos @t3chfest 2014 @fatimacasau
  • 15. Closures ! def ! myConst = 5 def incByConst = { num -> num + myConst } ! println ! incByConst(10) // => 15 //variable implícita it def clos = { print it } clos( "hi there" ) //prints "hi there" @t3chfest 2014 @fatimacasau
  • 16. Loopsy estructuras de control if(){}else{} ! while(){} ! for(i in [1,2,3]){} for(i=0;i<5;i++){} for(i=0;j=10;i<10;i++;j--){} for(i=0;…;i<10;…;n++){} ! [1,2,3].each{ println it } [“a”,“b”,“c”].eachWithIndex(){it,i-> println “$i : $it”} ! 3.times(){…} 5.upto(10){…} 10.1.downto(1.1){…} 0.step(10,2){…} (1.. 5).each{…} @t3chfest 2014 @fatimacasau
  • 17. La ‘verdad’ en Groovy Falso Null new Object() 0 1 [] [1,2,3] [:] [name:'fatima'] "" @t3chfest 2014 Verdad 'abc' @fatimacasau
  • 18. Sobrecarga de Operadores Operator Method a == b a != b a.equals(b) or a.compareTo(b) == 0 ** !a.equals(b) a <=> b a.compareTo(b) a > b a.compareTo(b) > 0 a >= b a.compareTo(b) >= 0 a < b a.compareTo(b) < 0 No NullPointerException @t3chfest 2014 @fatimacasau
  • 19. Otros Operadores Not operator (!) !expresión Spread operator (*.) list*.attribute Safe navigation operator (?.) object?.attribute Elvis operator (?:) a = a?:"" @t3chfest 2014 @fatimacasau
  • 20. Más… ! Groovy SQL ! sql.execute('insert into people (firstName, lastName) values (?,?)', [firstName, lastName]) sql.eachRow('Select * from Person') {} ! Dates ! plus(), minus(), after(), before() GregorianCalendar, String.format(String format, GregorianCalendar c) ! Expresiones regulares ! "potatoe" ==~ /potatoe/ ! Files eachFile(), eachDir(), eachLine()… @t3chfest 2014 @fatimacasau
  • 22. ! Documentación oficial ! Groovy Codehaus: http://groovy.codehaus.org/Documentation ! ! Ejercicios ! Groovy Koans: https://github.com/cjudd/groovy_koans ! ! @t3chfest 2014 @fatimacasau
  • 23. ¿Qué vamos a ver? ¿Qué es? Principios y filosofía Ventajas Getting Started Arquitectura @t3chfest 2014 @fatimacasau
  • 24. Plataforma para el desarrollo de aplicaciones web JavaEE Construido sobre un conjunto de frameworks consolidados Apoyado por una extensa librería de plugins Soluciona todas las necesidades en el desarrollo de aplicaciones web Facilita el desarrollo de dichas aplicaciones Utiliza GROOVY como lenguage @t3chfest 2014 @fatimacasau
  • 25. ! ! ! ! ! ! ! ! ! ! Tomcat y H2 incluidos para desarrollo rápido @t3chfest 2014 @fatimacasau
  • 26. Principios y filosofía Patrón MVC (Modelo, Vista, Controlador) CoC (Convention over Configuration) Nombres descriptivos Localización de ficheros que indican lo que son Paradigma Coding by Convention de GROOVY ! DRY (Don’t Repeat Yourself) Inyección de dependencias @t3chfest 2014 @fatimacasau
  • 27. ¿Por qué? Menos código + menos errores = ++productividad Fly reloading Abstracción de los frameworks sobre los que se asienta Línea de comandos (run-app, war, install-plugin…) Eliminación de XML’s gracias a CoC Extensa librería de plugins @t3chfest 2014 @fatimacasau
  • 28. Getting Started JDK y JAVA_HOME Download: http://grails.org/download Terminal: $ grails run-app $ grails> IDE’s: Crear una aplicación grails> create-app myApp @t3chfest 2014 @fatimacasau
  • 29. Comandos grails [environment]* [command name] ! Environments: dev, test, prod ! Custom Environment: -Dgrails.env=myEnv ! Comandos más usados: run-app war clean install-plugin test-app create-domain-class create-controller ceate-service generate-all @t3chfest 2014 @fatimacasau
  • 30. Configuración Config.groovy Ejemplo: my.property.text = “hola” Acceso: grailsApplication.config.my.property.text BuildConfig.groovy Datasource.groovy Bootstrap.groovy ApplicationResources.groovy UrlMappings.groovy @t3chfest 2014 @fatimacasau
  • 31. Environments ! grails.util.Environment ! Custom environments ! Detección de entornos: ! environments { production{ configureForDevelopment() } … } _______________________________________ import grails.util.Environment ! switch (Environment.current) { case Environment.DEVELOPMENT configureForDevelopment() break … } @t3chfest 2014 @fatimacasau
  • 32. Arquitectura MVC Modelo - domains (GORM), services (Spring) Vista – views & templates (gsp’s), TagLibs Controlador – controllers & actions, filtros @t3chfest 2014 @fatimacasau
  • 33. GORM Grails Object Relational Mapping (Hibernate 3) Clases de dominio getters y setters implícitos constructores por defecto eventos Mapeos sin configuración save(), delete(), list(), count()… Constraints para validación namedQueries @t3chfest 2014 @fatimacasau
  • 34. GORM Mapeo de relaciones One-To-One, One-To-Many, Many-To-Many Finders dinámicos findAllBy(), findBy(), findWhere()… Para búsquedas más complejas HQL, criterias, detachedCriterias, executeQueries Ordenación y paginación sort, order, max, offset … @t3chfest 2014 @fatimacasau
  • 35. Controllers Actions Closures Métodos que reciben parámetros que vienen del formulario Redirect de otros actions, mappings Renders de vistas, templates, texto, json, xml Command Objects Objeto flash para enviar messages Filtros que interceptan controllers, actions, views @t3chfest 2014 @fatimacasau
  • 36. Servicios ! Spring ! Inyección automática en: ! Otros servicios Controllers Domains TagLibs @t3chfest 2014 class MyService { def anyMethod(){ //… } } _______________________________________ class MyController { def myService def anyAction(){ //… myService.anyMethod(…) //… } } @fatimacasau
  • 37. GSP’s Groovy Server Pages Templates, includes Reutilización de código Extensa librería de Tags sin configuración g:each, g:if, g:form, g:formRemote, g:formatDate, g:link, g:remoteLink, g:remoteFunction, g:datePicker, g:set … @t3chfest 2014 @fatimacasau
  • 38. URL Mappings ! class UrlMappings { static mappings = { ! "/product"(controller: "product", action: "list") "/"(view: "/index") // map the root URL "/product/$id"(controller: "product") "403"(controller: "errors", action: "forbidden") "/product/$id"(controller:"product") { action = [GET:"show", PUT:"update", DELETE:"delete“, POST:"save"] } name accountDetails: "/details/$acctNumber" { controller = 'product' action = 'accountDetails' } } } @t3chfest 2014 @fatimacasau
  • 39. Deployment Command line Para ejecutar Puerto por defecto 8080: grails run-app Especificar puerto: grails -Dserver.port=8090 run-app Generar un war: Entorno de producción por defecto: grails war Especificar entorno: grails -Dgrails.env=myEnv war @t3chfest 2014 @fatimacasau
  • 40. Más… ! jQuery ! Ajax ! Creación de Plugins ! SpringSecurity Plugin ! I18n ! Testing con Spock integrado ! Scripts: Gant ! Injección de dependencias con ! Spring: Spring DSL’s, resources.groovy Scaffolding – No recomendado @t3chfest 2014 @fatimacasau
  • 41. Documentación de grails ! http://grails.org/doc/latest/guide/ Listas de correo ! http://grails.org/Mailing+lists Grails Blog ! http://grails.org/blog Issue Tracker ! http://jira.grails.org/browse/GRAILS Grupo de Google – Grails en Castellano http://groups.google.es/group/grailsencastellano @t3chfest 2014 @fatimacasau