Hatena::ブログ(Diary)

leftovers... このページをアンテナに追加 RSSフィード

2009-08-11

Grails 1.2-M2 リリースですよ!

Grails 1.2-M2 リリース

チェンジログ http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:changelog-panel

ダウンロード http://grails.org/Download .

ドキュメント http://grails.org/doc/1.2.x


今回のリリースの内容

Spring3に更新

Grails 1.2 マイルストーン2は最新のSpring3を使用したGrailsの最初のリリースになります。このリリースから、@Serviceや@Component等、Springアノテーションサポートされています。

Mavenな人への注意点:このリリースでは、Spring3のスナップショットを使用しているためMavenリポジトリの物と内容が違います。次のマイルストーンでは最終リリースのSpring3になるのでPOMはその時に設定するそうです。

そして、@Controllerをもったクラスは、通常のSpring-MVCと同じようにリクエストを処理できるようになったので、Spring-MVCGrailsの組み合わせで開発をすることもできます。

@Controller
class SpringController {

  @Autowired 
  SessionFactory sessionFactory

  @RequestMapping("/hello.dispatch") 
  ModelMap handleRequest() { 
    def session = sessionFactory.getCurrentSession() 
    return new ModelMap(session.get(Person, 1L)) 
  }
}

URI Re-writing onto any URI

URLマッピングgrails-app/conf/UrlMappings.groovyで以下のような書式を使用して、どのようなリクエストURIも他のURIリライトできるようになりました。

以下の例は、上記のSpring-MVCでの例。

"/hello"(uri:"/hello.dispatch")

@Transactionalでのメソッド単位トランザクションの実装

Springアノテーションorg.springframework.transaction.annotation.TransactionalをGrailsサービスで使用可能になりました。@Transactionalの定義をすることでメソッド単位トランザクション実装が可能です。

import org.springframework.transaction.annotation.*
class BookService {
	 @Transactional(readOnly = true)
        def listBooks() {
		Book.list()
	 }
	 @Transactional
	def updateBook() {
		// …
	}
}

GORM ダイナミックファインダでのBoolean値の機能を追加

class Book {
   String title
   String author
   Boolean paperback
 }
def results = Book.findAllPaperbackByAuthor("Douglas Adams")
def results = Book.findAllNotPaperbackByAuthor("Douglas Adams")

GORMにhasOneマッピングサポート

class Person { 
	String name 
	static hasOne = [address: Address]
}
class Address {
	String street
	String postCode
}

Named Query Support ドメインクラスで名前付き問合せ定義が可能になりました。

class Publication {
   String title
   Date datePublished
   static namedQueries = {
       recentPublications {
           def now = new Date()
           gt 'datePublished', now - 365
       }
       publicationsWithBookInTitle {
           like 'title', '%Book%'
       }
   }
}
// get all recent publications…
def recentPubs = Publication.recentPublications()
// get all recent publications (alternate syntax)…
def recentPubs = Publication.recentPublications.list()
// get up to 10 recent publications, skip the first 5…
def recentPubs = Publication.recentPublications(max: 10, offset: 5)
def recentPubs = Publication.recentPublications.list(max: 10, offset: 5)
// get the number of recent publications…
def numberOfRecentPubs = Publication.recentPublications.count()
// get a recent publication with a specific id…
def pub = Publication.recentPublications.get(42)

GORM 厳密なバリデーションエラー

save()メソッドに、引数としてfailOnError:trueを付けるとValidationExceptionを返すようになりました。

try {
     book.save(failOnError:true)
}catch(ValidationException e) {
   // handle
}

WARデプロイでのGSPプリコンパイル

War書きだし時にGSPがプリコンパイルされます。

i18nでのクラスプロパティ名をハンドル

i18nのmessages.propertieに以下のように記述できるようになりました。これらの設定をおこなうとデフォルトエラーメッセージにも定義した内容で表示されます。i18m-templateプラグインとほぼ同等です。

book.label = ラベル
book.title.label = ラベルの名称

マルチ組込コンテナサポートデフォルトTomcatに!

プラグインの切替によって組込コンテナを変更できます。デフォルトTomcatになりました。

grails uninstall-plugin tomcat
grails install-plugin jetty

名称付きURLマッピング

名称付きURLマッピングの実装と共に、ViewレイヤーでのURL再生成用のダイナミックタグを実装。

name productDetail: "/showProduct/$productName/$flavor?" {
          controller = "product"
          action = "show"
      }

上記の例は、productDetailという名称付きURLマッピング定義です。そして下記の内容の書式でリンクが生成できます。

<link:productDetail 
       productName="licorice" 
       flavor="strawberry">Strawberry Licorice</link:productDetail>

プロジェクトドキュメントエンジン

プロジェクトsrc/doc/ref、src/doc/guide以下にファイルを配置することで、Grailsリファレンスと同じドキュメントエンジンプロジェクトで利用可能。

サンプルはこんな感じ http://github.com/grails/grails/tree/bf118efa2926671e7dbdf51dacde42d16d8d49e0/grails-doc/src/guide

プラグインメタジェネレータ

セントラルリポジトリ(Grails公式リポジトリ)にプラグインリリースする際に、ランタイム時(Grails起動時)にGrailsクラスに追加されたメソッドやプロパティ情報メタデータが生成されます。このメタデータ情報はplugin.xml記述されIDEドキュメントエンジンから参照可能にするものです。もしそのプラグインがメソッドの追加等を行わない場合は、メタデータ情報生成を以下のコマンドで停止することができます。

grails release-plugin --skipMetadata

あとは、

トップページindex.gspのデザインが変わりました!

f:id:mottsnite:20090811234404p:image

Tomcatだと微妙に速い気がするのは気のせいか??


マイルストーン3での目標は、スタンドアロンGSP、Webフロープラグインに切り離し等らしいです。