Project Lead of the Grails Project & CTO of G2One
Graeme Rocher is the project lead and co-founder of the Grails web application framework. He's a member of the JSR-241 Expert Group which standardizes the Groovy language. Graeme authored the Definitive Guide to Grails for Apress and is a frequent speaker at JavaOne, JavaPolis, NoFluffJustStuff, JAOO, the Sun TechDays and more. Before founding G2One Inc, Graeme was the CTO of SkillsMatter, a skills transfer company specializing in Open Source technology and agile software development, where Graeme was in charge of the company's courseware development strategy and general technical direction.Presentations by Graeme Rocher
Empowering Spring with Groovy DSLs
Domain specific languages (DSL) are becoming increasingly prominent with the rise of dynamic languages like Groovy and Ruby. In this talk Graeme Rocher, Grails Project Lead, introduces two interesting use cases from the Grails framework: A Spring Configuration DSL and a Spring Web Flow DSL using Groovy."Grails for Spring Developers
In this talk the Grails project lead, Graeme Rocher, introduces a new way to develop web applications with the Spring framework. The Grails web application framework, based on the Groovy language with powerful Spring underpinnings, is lowering the barrier of entry to Java EE development with Spring."Graeme Rocher's Blog
Thought's about software, Grails, Java, web development and anything else that comes to mind.
Tuesday, November 25, 2008
Those crazy guys over at the Grails podcast interviewed me about various things ranging from being part of SpringSource to the upcoming Grails 1.1 release to my deep hatred of all things Maven. Check it out.
Tuesday, November 11, 2008
You may have already read about it in the various news outlets and blogs covering the announcement, but if you haven’t I’m excited to spread the word that G2One - The Groovy/Grails company - has been acquired by SpringSource. The result is that Groovy and Grails join the growing number of excellent Open Source projects delivered by SpringSource.
The Spring Framework really pioneered simplified development on the Java platform. A philosophy that is the very essence of Grails. Both frameworks aggressively try to makes the lives of developers easier. The Spring Framework provides an abstraction layer of common Java enterprise APIs, whilst Grails uses the Groovy dynamic language to further simplify Spring and Java. In this sense Grails fits perfectly into SpringSource’s philosophy.
On the Grails front this is great news at multiple levels. With Grails already being based on Spring, users of Grails now have access to expertise about not only Grails, but also Spring, the framework that underpins all of Grails. Grails will benefit further from tighter integration with the Spring Framework with exciting integration possibilities on the horizon between Grails and great Spring portfolio products like Spring Batch, Spring Integration and SpringSource dm Server.
Grails will benefit from greater visibility and wider adoption simply by being under the SpringSource umbrella. In addition, SpringSource will bring all their expertise around Eclipse plugin development ensuring that users of Groovy and Grails have a first class experience in the Eclipse IDE.
At SpringSource, there is a lot of excitement about Groovy and Grails. Grails adds that little bit of Web 2.0 spice to the company and provides yet another avenue for users to adopt the Spring Framework. We’re literally buzzing with ideas on how Spring, Groovy and Grails can be integrated in the future and look forward to the feedback of the respective communities.
I personally will continue to lead Grails at SpringSource, whilst Guillaume remains the project lead of Groovy. The majority of the former G2One team have taken up positions at SpringSource. On the topic of Guillaume, he is as excited about this development as I am and has a great post on the benefits of the acquisition to Groovy. Check it out!
Resources:
The Spring Framework really pioneered simplified development on the Java platform. A philosophy that is the very essence of Grails. Both frameworks aggressively try to makes the lives of developers easier. The Spring Framework provides an abstraction layer of common Java enterprise APIs, whilst Grails uses the Groovy dynamic language to further simplify Spring and Java. In this sense Grails fits perfectly into SpringSource’s philosophy.
On the Grails front this is great news at multiple levels. With Grails already being based on Spring, users of Grails now have access to expertise about not only Grails, but also Spring, the framework that underpins all of Grails. Grails will benefit further from tighter integration with the Spring Framework with exciting integration possibilities on the horizon between Grails and great Spring portfolio products like Spring Batch, Spring Integration and SpringSource dm Server.
Grails will benefit from greater visibility and wider adoption simply by being under the SpringSource umbrella. In addition, SpringSource will bring all their expertise around Eclipse plugin development ensuring that users of Groovy and Grails have a first class experience in the Eclipse IDE.
At SpringSource, there is a lot of excitement about Groovy and Grails. Grails adds that little bit of Web 2.0 spice to the company and provides yet another avenue for users to adopt the Spring Framework. We’re literally buzzing with ideas on how Spring, Groovy and Grails can be integrated in the future and look forward to the feedback of the respective communities.
I personally will continue to lead Grails at SpringSource, whilst Guillaume remains the project lead of Groovy. The majority of the former G2One team have taken up positions at SpringSource. On the topic of Guillaume, he is as excited about this development as I am and has a great post on the benefits of the acquisition to Groovy. Check it out!
Resources:
Monday, November 3, 2008
Matt Taylor has posted a couple of nice articles demonstrating how to use GrailsUI's dataTable component. Cool stuff.
Saturday, November 1, 2008
Over the past few months we've had a lot of demand from different clients for a UI component library for Grails, built and supported by G2One. Thanks to a great collaborative effort, GrailsUI 1.0 is now available built on the excellent Yahoo UI library.
Matthew Taylor, G2One Software Engineer and the lead of the GrailsUI project, has the lowdown on what is on offer. Check it out!
Matthew Taylor, G2One Software Engineer and the lead of the GrailsUI project, has the lowdown on what is on offer. Check it out!
Friday, October 31, 2008
Now that The Definitive Guide to Grails 2nd Edition (barring a few reviews) is a wrap, I've been refocusing in Grails development. First up, is GORM and we've implemented a number of great improvements including:
Better GORM events
Previously, GORM supported beforeInsert, beforeUpdate and beforeDelete events, now there is afterInsert, afterUpdate and afterDelete to complete the picture
Persistence of Collections of Basic Types
GORM now supports persisting basic types like String, Integer and so on using a join table:
It is now simpler to bind data to a subset of properties. Previously you could use the syntax:
Persistent instances can now be loaded in a read-only state using the read method:
Associations can now be sorted using a default sort order declared at the class level:
GORM now supports configuring batch fetching (an optimization of lazy loading) using the ORM DSL at the class level:
There is a new InList suffix that can be used with dynamic finders:
Many-to-many and Unidirectional One-to-many associations can use the joinTable argument to alter the way they map to the underlying database:
Better GORM events
Previously, GORM supported beforeInsert, beforeUpdate and beforeDelete events, now there is afterInsert, afterUpdate and afterDelete to complete the picture
Persistence of Collections of Basic Types
GORM now supports persisting basic types like String, Integer and so on using a join table:
class Person {
static hasMany = [nicknames:String]
}Improvements to Data BindingIt is now simpler to bind data to a subset of properties. Previously you could use the syntax:
person.properties = paramsWhich would bind all the incoming request parameters to the person. If you didn't want that behavior you could use the bindData method. Now you can bind to a subset of properties using the subscript operator:person.properties["firstName","lastName"] = paramsAnd access a subset of the domain classes properties using the same syntax:person.properties["firstName","lastName"].each { println it }Read-Only Access to ObjectsPersistent instances can now be loaded in a read-only state using the read method:
def book = Book.read(1)Default Sort OrderAssociations can now be sorted using a default sort order declared at the class level:
class Book {
String title
static mapping = {
sort "title"
}
}Or at the association level:class Author {
static hasMany = [books:Book]
static mapping = {
books sort:"title"
}
}Batch FetchingGORM now supports configuring batch fetching (an optimization of lazy loading) using the ORM DSL at the class level:
class Book {
String title
static mapping = {
batchSize 15
}
}Or at the association level:class Author {
static hasMany = [books:Book]
static mapping = {
books batchSize:15
}
}Improvements to Dynamic FindersThere is a new InList suffix that can be used with dynamic finders:
def groovyBooks = Book.findByAuthorInList(['Dierk Koenig', 'Graeme Rocher'])Dynamic finders can also now use the query cache:def books = Book.findByTitle("Groovy in Action", [cache:true] )And upgrade to a pessimistic lock:def books = Book.findByTitle("Groovy in Action", [lock:true] )Legacy Mapping for Many-to-Many and Unidirectional One-to-manysMany-to-many and Unidirectional One-to-many associations can use the joinTable argument to alter the way they map to the underlying database:
class Book {
String title
static belongsTo = Author
static hasMany = [authors:Author]
static mapping = {
authors joinTable:[name:"mm_author_books", key:'mm_book_id' ]
}
}
class Author {
String name
static hasMany = [books:Book]
static mapping = {
books joinTable:[name:"mm_author_books", key:'mm_author_id']
}
}