alphageeks il #2 groovy & grails

Post on 10-May-2015

1.126 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Second Alphageeks IL meetup:Yuval Goldstein talks on Groovy & Grails and the shift from static typing to dynamic typing.Check us out for more events:http://alphageeks.blogli.co.il/

TRANSCRIPT

Groovy & Grails(also) the future of Java Web Development

Yuval Goldstein, yuvalgo@gmail.com,

@yuvalgo

Groovy, Grails, Agenda

Beyond Java What’s groovy? What’s grails? How people use them?

Beyond Java

Java= Language + Classes +JVM JEE = Robust spec to support server-

driven apps The good: OO, popular, tons of

frameworks, enterprise ready (queues, transactions, web-services)

The Bad: Verbose, long turn-around, mix and match your own framework

Beyond Java

Java code > compiled into bytecode > JVM

The JVM supports other languages:› Groovy› Scala› JRuby› Jython

But WHY? : Because not every problem should be solved by a general purpose language

Groovy

Cool language, compiles into bytecode Similar to Java, a lot of additions and

improvements:› Language level support for collections› Closures and Builders› Dynamic typing› Concise syntax› Groovy2Java, Java2Groovy integration

Demo

Let’s take a Java class and show how it’s done in Groovy

Closures A piece of code that can be passes

around and executed (sort of an Anonymous class with a method)

Def foo = { name -> println “Hello ${name}” }foo(“yuval”) // prints “Hello yuval”

More Closures

public class TaxCalculator {

def calculateTax (salary, age, strategy) { return (salary * 0.5) + strategy(age) } static void main(String[] args) { def goldenAgeDiscount = { age -> age * 2 } TaxCalculator c = new TaxCalculator() println c.calculateTax(10000, 30, goldenAgeDiscount) }

Demo

Let’s see some Collections and Closures working together

Groovy typing

Types can be specified and enforced Types can unspecified and deducted

(Duck Typing)

Duck Typing

Behavior of objects is determines by their own methods and members rather than by declarations

def x = "im a string" println x.toUpperCase() def y = 3 println y*y // 9 def z = 2.0 println z+1 // 3.0 println z.toUpperCase() // Cast Exception

Duck Season? - Demo

Let’s see how duck typing works

Duck Typing

Sacrifice certainty for laziness, WTF?› Some application really need strict typing,

other doesn’t› Frameworks generate a lot of code for you

on runtime› Faster code changes› Good testing really helps› You already doing it:

HTML, CSS, SQL, JSP

Expando Classes

def cat = new Expando() cat.name = "pocket" println cat.name cat.sayHello = { println "miewww!" } cat.sayHello() }

Output:

PocketMiewwww!

String Matching

=~ searches for matches (returns a java.util.regex.Matcher)==~ is there a match? (returns a Boolean)~ returns a Pattern

def match = "yuval" ==~ /.*uv.*/ println match

Introducing Grails

Grails=Groovy + Spring + Hibernate + Sitemesh

A framework for developing web-apps with pleasure

Open-Source, supported by Spring-Source Convention over configuration Model-driven Short turnaround Good developer-testing support A lot more…

Demo

Create an empty application Develop a domain classes Generate a trivial CRUD : dynamic,

then static

Domain Objects and GORM GORM: Hibernate DSL 1:1, 1:N, M:N, Object hierarchies,

Versioning, Cascade, Fetch Objects are DAOs Automatic Query Syntax:

› Object.save()› Object.get(id)› Object.findAll()

def result = Clip.findAllBySourceAndBeginAtBetween( vs, fromDate, toDate )

Controllers Each closure maps to a request name

Render templates, GSP, XML, JSON Automatic variables: param, session,

flash Support Spring Webflow Dependency Injection support (for

services)

http://myserver/[APP_NAME]/[Controller_NAME]/[Request]

Views

GSPs, taglibs, Templates HTML centric Built in Tags for: Forms and error

handling , AJAX, Pagination, uploads Pluggable Ajax support: Prototype, YUI,

others Plugins: Grails-UI, Flex, GWT, Open

Lazzlo, Portlet integration

Services Help re-use code, scope transaction,

expose web-services Different Scopes: singleton, session,

prototype, request, conversation, flow Dependency Injection support Plugins: JMS integration, Quartz Jobs,

Xfire/Spring web-services, etc…class MyService{

boolean transactional = true def otherservice // Injected}

Testing support

Built-in Unit and Integration testing Good mockup support Can’t do without it

(Only some) Plugins

GrailsUI Acegi Security Twitter Flex Quartz Searchable

Groovy, Grails in the wild Groovy:

› As a scripting tool for developers› For testing plain java code› For developing swing code (special DSL)› For coding grails application

Grails:› Prototypes and back-office applications› Grails Frontend with Java backend› Grails frontend and backend

Community and support

Open-Source, use for free Commercial training and support by spring Grails user newsgroup on Nabble:

40-80 messages a day

IDEs: Eclipse, Intellij, Netbeans, TextMate

Books:Groovy in action, Grails in Action, Definitive Guide to Grails, Getting started with Grails, Groovy & Grails Recepies, more…

Sites:grails.org, aboutgroovy.com, grailspodcast.com, grailstutorials.com

Who use Grails?

Linkedin.com Sky.com twitcaps.com blerp.com twitsms.co.uk Ganttzilla.com Lot’s of community, e-commerce and

twitter oriented sites

Summary

Grails is ideal for small and medium size application

Grails ~= Rails capabilities + JVM + All existing Java frameworks

0 Setup development environment Fun to use

Thanks !

top related