More Related Content Similar to Grails 1.2 探検隊 -新たな聖杯をもとめて・・・- (20) More from Tsuyoshi Yamamoto (20) Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-1. JGGUG
japan grails/groovy user group
def speaker = new Cast(name:”T.Yamamoto”,version:”G*-2009-12-18”)
18. package my.domain HelloController.groovy
import org.springframework.stereotype.*
import org.springframework.web.bind.annotation.*
import org.springframework.beans.factory.annotation.*
import org.hibernate.*
import org.springframework.ui.*
beans = {
resources.groovy
@Controller xmlns context:"http://www.springframework.org/schema/context"
class HelloController { context.'component-scan'( 'base-package' :"my.domain" )
}
@Autowired
SessionFactory sessionFactory
@RequestMapping("/hello.dispatch")
ModelMap handleRequest() {
def session = sessionFactory.getCurrentSession()
println "hit"
return new ModelMap(session.get(Person, 1L))
hello.gsp
} <h1 id="hello"> ${person.name}</h1>
}
21. JNDI
Config.groovy
grails.naming.entries = [foo:"bar"]
resources.groovy
beans = {
xmlns jee:"http://www.springframework.org/schema/jee"
jee.'jndi-lookup'(id:"foo", 'jndi-name':"java:comp/env/foo")
}
grails tomcat deploy
grails tomcat undeploy
Config.groovy (tomcat-users.xml )
tomcat.deploy.username="manager"
tomcat.deploy.password="secret"
tomcat.deploy.url="http://myserver.com/manager"
grails tomcat list
22. @Grapes([
@Grab("org.grails:grails-docs:1.2.0.RC2"),
@Grab("radeox:radeox:1.0-b2"),
@Grab("ant:ant-nodeps:1.6.5"),
Directory
@GrabConfig(systemClassLoader=true)
])
import grails.doc.ant.*
new AntBuilder().sequential {
native2ascii(src:"conf",dest:"src/docs",
includes:"**/*.properties",encoding:"UTF-8")
taskdef(name:'docs',classname:'grails.doc.ant.DocPublisherTask')
docs(src:"src/docs", dest:"build/docs",
properties:"src/docs/doc.properties",
styleDir:new File('src/resources/style'),
cssDir:new File('src/resources/css'),
imagesDir:new File('src/resources/img')
)
}
25. def foo = {
def hoge = params.some
def foo = {
if(hoge) println hoge.toInteger()
def hoge = params.long('some')
}
if(hoge) println hoge.toInteger()
}
//int(' ') long(' ') boolean(' ')
def total = params.int('total')
//
def names = params.list('names')
31. beans { Config.groovy
someService {
someProperty = new SomeObject()
}
}
32. BootStrap.groovy
def init = { ServletContext ctx ->
environments {
production {
ctx.setAttribute("env", "prod")
}
development {
ctx.setAttribute("env", "dev")
}
}
ctx.setAttribute("foo", "bar")
}
34. class Book {
String title
String author
Boolean paperback
}
Book.findAllPaperbackByAuthor(" ")
Book.findAllNotPaperbackByAuthor(" ")
35. class Person {
String name
static hasOne = [address: Address]
}
create table address (
class Address { id bigint ... ,
String street version bigint not null,
String postCode person_id bigint not null,
street varchar(255) not null,
Person person post_code varchar(255) not null,
} primary key (id),
unique (person_id))
create table person (
id bigint ... ,
version bigint not null,
name varchar(255) not null,
primary key (id)
)
36. class Publication {
String title
Date datePublished
static namedQueries = {
recentPublications {
def now = new Date()
gt 'datePublished',now-365
}
publicationsWithBookInTitle {
like 'title','%Book%'
}
}
}
def list = Publication.recentPublications.list()
def list = Publication.recentPublications.list(
max: 10, offset: 5)
Publication.recentPublications.count()
37. try {
book.save(failOnError:true)
}catch(ValidationException e) {
// handle
}
38. grails.gorm.default.mapping = {
cache true
id generator:'sequence'
'user-type'( type:org.hibernate.type.YesNoType,class:Boolean )
}
grails.gorm.default.constraints = {
'*'(nullable:true, blank:false, size:1..20)
}
grails.gorm.default.constraints = {
myConstraints(nullable:true, blank:false, size:1..20)
}
static constraints = {
myProperty shared:"myConstraints"
}
39. def c = Person.createCriteria()
def peopleWithShortFirstNames = c.list {
sqlRestriction "char_length( first_name ) <= 4"
}
42. grails.project.dependency.resolution = {
...
repositories { //
mavenRepo "http://repository.codehaus.org"
}
dependencies {
runtime 'net.homeip.yusuke:twitter4j:2.0.9'
}
...
} ls -al ~/.ivy2/cache
% grails install-dependency net.homeip.yusuke:twitter4j:2.0.9
44. % grails install-plugin webflow
def searchFlow = {
onStart {
println "started"
}
onEnd {
println "ended"
}
displaySearchForm {
onRender { println "rendering" }
onEntry { println "entered" }
onExit { println "exited" }
on("submit") {
[results: Book.findAllByTitle(params.title)]
}.to "displayResults"
}
displayResults()
}
46. grails test-app <phase>:<type>
//‘spock’ ‘unit’
grails test-app unit:spock
//‘unit’
grails test-app unit:
// ‘spock’
grails test-app :spock
‘SomeController’ ‘unit’
grails test-app unit: SomeController
‘unit’ ‘integration’
grails test-app unit: integration:
grails test-app unit:
grails test-app --unit
grails test-app -clean