• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Groovygrailsnetbeans 12517452668498-phpapp03
 

Groovygrailsnetbeans 12517452668498-phpapp03

on

  • 418 views

 

Statistics

Views

Total Views
418
Views on SlideShare
418
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Groovygrailsnetbeans 12517452668498-phpapp03 Groovygrailsnetbeans 12517452668498-phpapp03 Presentation Transcript

    • Agile Web Development withGroovy and Grails Carol McDonald, Java Architect
    • ObjectiveOverview of the Grails Web Platform 2
    • Groovy Overview 3
    • What is Groovy?• A dynamic language written for the JVM > Generates byte code• Java like syntax > Easy learning curve for Java developers• Seamless integration with Java > A Groovy object is a Java Object > Groovy application can create Java objects > Java objects can create Groovy objects 4
    • A Valid Java Programimport java.util.*;public class Erase { private List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String n: strings) if (n.length() <= length) result.add(n); return (result); } public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List shortNames = e.filterLongerThan(names, 3); System.out.println(shortNames); }} 5
    • A Valid Groovy Programimport java.util.*;public class Erase { private List<String> filterLongerThan(List<String> strings, int length) { List<String> result = new ArrayList<String>(); for (String n: strings) if (n.length() <= length) result.add(n); return (result); } public static void main(String[] args) { List<String> names = new ArrayList<String>(); names.add("Ted"); names.add("Fred"); names.add("Jed"); names.add("Ned"); System.out.println(names); Erase e = new Erase(); List shortNames = e.filterLongerThan(names, 3); System.out.println(shortNames); }} 6
    • The Groovy Waydef names = ["Ted", "Fred", "Jed", "Ned"]println namesdef shortNames = names.findAll{ it.size() <= 3}print shortNames 7
    • Grails Overview 8
    • What is Grails?• An Open Source Groovy MVC framework for web applications• Principles > CoC – Convention over configuration > DRY – Dont repeat yourself• Similar to RoR but with tighter integration to the Java platform 9
    • Why Grails?• ORM layer can be overly difficult to master and get right > A return to POJO and annotations in JPA but still lots of stuff to learn• Numerous layers and configuration files lead to chaos > Adoption of frameworks a good thing, but too often lead to configuration file hell• Ugly JSPs with scriptlets and complexity of JSP custom tags• Grails addresses these without compromising their benefits 10
    • Grails Technology Stack 11
    • How To Get Started• Download Grails > http://grails.org• Configure Netbeans 6.5• Download Groovy > http://groovy.codehaus.org• Set GROOVY_HOME, GRAILS_HOME For command• Add bin to your PATH line > $GROOVY_HOME/bin:$GRAILS_HOME/bin 12
    • Using Grails 13
    • grails create­app• Will be prompted for the name of the application IDE runs the "grails create-app" command• Generate a directory structure for > Grails source > Additional libraries > Configurations > web-app 14
    • Grails DirectoryStructureApplication name Grail sourceAdditional JARs Web application 15
    • Netbeans GrailsProject StructureProject name Grail sourceAdditional JARs Web application 16
    • Configure for MySQL• copy the mysql-connector-java-5.1.6-bin.jar to the lib directory• Edit DataSource.groovydataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "root" password = "" dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"}environments { development { dataSource { dbCreate = "update" // one of create, create-drop,update url = "jdbc:mysql://localhost/petcatalog" } } 17
    • MVC and Grails • Models, or domain classes, represent the problem domain 18
    • grails create­domain­class• The Model is your applications persistent business domain objects. 19
    • add the domain class attributesclass Item { Long id String name String description String imageurl String imagethumburl BigDecimal price} Groovy with Grails dynamically generates getters and setters and the dynamic methods Item.save(), Item.delete(), Item.list(), Item.get() to retrieve/update data from/to the db table. 20
    • Persistence Methods• GORM automatically provides persistence methods to your object > save(), get(), delete()• Automatically generates addTo*() for object relationships > Where * is the name of the propertydef item = new Item(name:Fred)def order =  new Order(orderDate: new Date(), item: PSP)item.addToOrders(order)item.save() 21
    • Queries• Dynamically generated queries > list, findBy• Manual queries (not discussed here) > HibernateQL• Examples > Item.list() > Item.findByName(nice cat) 22
    • grails domain class Item Address String name 1 M String street String description String zip Address address static hasMany = [item:Item]• Define relation between objects with attributes > hasMany, belongsTo > static hasMany = [ item: Item ] Groovy hashmap 23
    • Scaffolding• Generates CRUD actions and views for the corresponding domain class• Dynamic: > Enable the scaffold property in the controller class def scaffold = true• Static > grails generate­all > Generates a controller and views for a  domain class• Useful to get up and running quickly 24
    • Scaffolding• Generates a controller and views for the domain class 25
    • MVC and Grails • Controllers control request flow, interact with models, and delegate to views. 26
    • grails create­controller • Controller made up of action methods > Grails routes requests to the action corresponding to URL mapping > Default action is index class ItemController {     def index = { redirect(action:list,params:params) } def list = { http://host/catalog/item/list if(!params.max) params.max = 10 [ itemList: Item.list( params ) ] } def show = {...Actions 27
    • URL Mappings• Default mapping from URL to action method http://host/catalog/item/list Application Controller Action• Defined in > grails­app/conf/UrlMappings.groovy static mappings = {       "/$controller/$action?/$id?" 28
    • grails controllerclass ItemController {     def index = { redirect(action:list,params:params) } def list = { if(!params.max) params.max = 10 [ itemInstanceList: Item.list( params ) ] } def show = {... returns an ArrayList of item objects retrieved from the item database table itemInstanceList variable is made available to the view 29
    • MVC and Grails • Views are defined in Groovy Server Pages (GSP) and render the model 30
    • grails view • actions usually render a Groovy Server Page in the views directory corresponding to the name of the controller and action. list.gsp<html> <table> g:each Groovy Tag loops through each object in the  <tbody> itemInstanceList variable      <g:each in="${itemInstanceList}" status="i" var="itemInstance">                        <td>${fieldValue(bean:itemInstance, field:price)}</td>          </tr> displays the value of the item s price attribute      </g:each>  </tbody> </table> 31
    • grails run­app• Will start the embedded web server and run the application• Defaults to > http://localhost:8080/<app_name> 32
    • Summary• Groovy is a powerful dynamic language for the JVM• Grails is a full featured web platform 33
    • http://weblogs.java.net/blog/caroljmcdonald / 34
    • Acknowldegement• Thanks to Guilaume Laforge of G2One for allowing me to use and adapt some of his slides 35
    • ● Carol McDonald Java Architect Tech Days 2009 36
    • Lots of Books and Online Tutorials 37