groovy on grails

36
IEEE Day 2013 01 October 2013, Qafqaz University Ziya Askerov Java Software Developer Cybernet LLC [email protected]

Upload: ziyaaskerov

Post on 10-May-2015

1.059 views

Category:

Technology


5 download

DESCRIPTION

Build modern, sophisticated and robust Groovy web applications in record time !

TRANSCRIPT

Page 1: GROOVY ON GRAILS

IEEE Day 2013

01 October 2013, Qafqaz University

Ziya AskerovJava Software DeveloperCybernet LLC

[email protected]

Page 2: GROOVY ON GRAILS

Build modern, sophisticated and robust Groovy web applications in record time !

Ziya Askerov http://www.professionals.az

Page 3: GROOVY ON GRAILS

Contents

Java Web Technologies Overview Groovy Scripting Language Grails Framework Convention Over Configuration GORM (Grails Object Relational Mapping) GSP (Groovy Server Pages) Grails Tags Web Layer Grails Plugins Spring Security Configuration

Page 4: GROOVY ON GRAILS

JAVA WEB TECHNOLOGIES

Page 5: GROOVY ON GRAILS

What is Groovy ?

Is an agile and dynamic language for the Java Virtual Machine

Makes modern programming features available to Java developers with almost-zero learning curve

Increases developer productivity

Compiles straight to Java bytecode so you can use it anywhere you can use Java

Seamlessly integrates with all existing Java classes and libraries

Page 6: GROOVY ON GRAILS

What is Grails?

Full stack MVC framework for web apps Exploits the awesome power of Groovy Leverages proven staples

– Hibernate– Spring– Sitemesh

Works on JVM

Page 7: GROOVY ON GRAILS

GRAILS ARCHITECTURE

Page 8: GROOVY ON GRAILS

Why GRAILS?

Java web development as it stands today is dramatically more complicated than it needs to be

Most modern web frameworks in the Java space are over complicated and don't embrace the Don't Repeat Yourself (DRY) principles.

Page 9: GROOVY ON GRAILS

Why GRAILS?

- An easy to use Object Relational Mapping (ORM) layer built on Hibernate

- An expressive view technology called Groovy Server Pages (GSP)

- A controller layer built on Spring MVC

- A transactional service layer built on Spring's transaction abstraction

Page 10: GROOVY ON GRAILS

Why GRAILS?

Based on battle tested and proven Java frameworks (Spring, Hibernate, SiteMesh, Quartz, etc) 

Based on Groovy language GORM(Grails Object Relational Mapping)  Doesn’t stop you from using the power of underlying frameworks Easy to set-up and get started Minimal server restart required while development Convention over Configuration / No painful XML configuration &

XML Management Tag Lib Authoring mechanism Tons of available plugins

Page 11: GROOVY ON GRAILS

Convention Over Configuration

Grails uses "convention over configuration" to configure itself

This typically means that the name and location of files is used instead of explicit configuration

No config files

No action mappings

Page 12: GROOVY ON GRAILS

GRAILS AND SECURITY

All standard database access via GORM domain objects is automatically SQL escaped to prevent SQL injection attacks

Grails link creating tags (link, form, createLink, createLinkTo and others) all use appropriate escaping mechanisms to prevent code injection

Grails provides codecs to let you trivially escape data when rendered as HTML, JavaScript and URLs to prevent injection attacks here.

XSRF attacks prevention with useToken

Page 13: GROOVY ON GRAILS

GORM

GORM is Grails' object relational mapping (ORM) implementation.

Under the hood it uses Hibernate (a very popular and flexible open source ORM solution) 

Page 14: GROOVY ON GRAILS

GRAILS ARCHITECTURE

Page 15: GROOVY ON GRAILS

GORM

Domain Modelling in GORM Persistence Basics Querying with GORM Saving and Updating Dynamic Finders Eager and Lazy Fetching

 

Page 16: GROOVY ON GRAILS

GORM DOMAIN MODELING

Page 17: GROOVY ON GRAILS

CONSTRAINTS

blankcreditCardemailinListmatchesmaxmaxSizeminminSizenotEqualnullablerangescalesizeuniqueurl

Page 18: GROOVY ON GRAILS

SAVING AND UPDATING

def p = Person.get(1) p.save()

def p = Person.get(1)p.save(flush: true)

def p = Person.get(1)p.delete(flush: true)

Page 19: GROOVY ON GRAILS

Querying With GORM

def books = Book.list()

def books = Book.list(offset:10, max:20)

def books = Book.list(sort:"title", order:"asc")

def book = Book.get(23)

def books = Book.getAll(23, 93, 81)

Page 20: GROOVY ON GRAILS

Dynamic Finders

def book = Book.findByTitle("The Stand")

book = Book.findByTitleLike("Harry Pot%")

book = Book.findByReleaseDateBetween(firstDate, secondDate)

book = Book.findByReleaseDateGreaterThan(someDate)

Page 21: GROOVY ON GRAILS

Hibernate's Criteria API

Page 22: GROOVY ON GRAILS

GRAILS AND MVC

Page 23: GROOVY ON GRAILS

Controllers, Services

Dependency Injection

Page 24: GROOVY ON GRAILS

 TAGS

<g:form name="myForm" action="myaction" id="1">...</g:form>

<select onchange="${remoteFunction(action: 'bookByName', update: [success: 'great', failure: 'ohno'], params: '\'bookName=\' + this.value')}"> <option>first</option>

<option>second</option>

</select>

<g:render template="bookTemplate" />

<g:paginate controller="book" action="list" total="${bookCount}" />

<g:if test="${name == 'fred'}"> Hello ${name}! </g:if>

<g:include controller="book" action="list" />

Page 25: GROOVY ON GRAILS

GRAILS PLUGINS

Spring Security Core Plugin Spring Security UI Plugin Quartz Plugin Quartz Monitor Plugin Mail Plugin XSS sanitizer Plugin

Page 26: GROOVY ON GRAILS

SPRING SECURITY ANNOTATIONS

Page 27: GROOVY ON GRAILS

SPRING SECURITY ANNOTATIONS

Page 28: GROOVY ON GRAILS

Spring Security TagLib

<sec:ifLoggedIn> Welcome Back! </sec:ifLoggedIn>

<sec:ifAllGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">secure stuff here</sec:ifAllGranted>

<sec:ifAnyGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">secure stuff here</sec:ifAnyGranted>

Welcome Back <sec:loggedInUserInfo field="fullName"/>

Page 29: GROOVY ON GRAILS

 Spring Security Utils

authoritiesToRoles() getPrincipalAuthorities() parseAuthoritiesString() ifAllGranted() ifNotGranted() ifAnyGranted() getSecurityConfig() loadSecondaryConfig() reloadSecurityConfig() isAjax()

Page 30: GROOVY ON GRAILS

Configuration

BootStrap.groovy BuildConfig.groovy Config.groovy DataSource.groovy UrlMappings.groovy

Page 31: GROOVY ON GRAILS

Config.groovy

Page 32: GROOVY ON GRAILS

BuildConfig.groovy

Page 33: GROOVY ON GRAILS

DataSource.groovy

Page 34: GROOVY ON GRAILS

UrlMappings.groovy

class UrlMappings {

static mappings = {

}

}

"/profile"(controller:"userProfile“,action:"userProfile")

"/newsfeed"(controller:"userProfile“,action:"homePage")

"/company"(controller:"company“,action:"companyProfile")

Page 35: GROOVY ON GRAILS

GRAILS TOOL (GGTS)

Download from : http://spring.io/tools/ggts

Page 36: GROOVY ON GRAILS

SITES USING GRAILS