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

GROOVY ON GRAILS

Embed Size (px)

Citation preview

IEEE Day 2013

01 October 2013, Qafqaz University

Ziya AskerovJava Software DeveloperCybernet LLC

[email protected]

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

Ziya Askerov http://www.professionals.az

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 Deployment

JAVA WEB TECHNOLOGIES

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

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

GRAILS ARCHITECTURE

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.

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

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

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

<g:form action="updateCertificationInfo" name="certificationInfo" useToken="true">

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

GORM

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

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

GRAILS ARCHITECTURE

GORM

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

  

GORM DOMAIN MODELING

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)

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)

Dynamic Finders

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

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

book = Book.findByReleaseDateBetween(firstDate, secondDate)

book = Book.findByReleaseDateGreaterThan(someDate)

Hibernate's Criteria API

GRAILS AND MVC

Controllers, Services

Dependency Injection

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" />

GRAILS PLUGINS

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

SPRING SECURITY ANNOTATIONS

SPRING SECURITY ANNOTATIONS

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"/>

Spring Security Utils

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

Configuration

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

Config.groovy

BuildConfig.groovy

DataSource.groovy

UrlMappings.groovy

class UrlMappings {

static mappings = {

}

}

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

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

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

GRAILS TOOL (GGTS)

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

SITES USING GRAILS