Grails 1.1 Beta 1リリース、拡張テスト、Gorm、足場、プラグインシステム


GORM


 

より良いGORMイベント


GORMはすでにbeforeInsert,beforeUpdate,beforeDelete eventsをサポートしており、afterInsert,afterUpdate,afterDelete eventsのサポートが追加されました

ベース・タイプ・セットのストレージのサポート


GORMは、String、Integerのようなベースタイプのセットのストレージを1つのjoin tableでサポートします.
class Person {
   static  hasMany = [nicknames:String]
}
 
 

データバインド機能の強化


プロパティの自己とデータのバインドが容易になりました.以前のバージョンでは、次のように使用されていたかもしれません.
person.properties = params
 
これにより、requestのすべての変数がpersonにバインドされます.すべてのデータをバインドしたくない場合はbindDataメソッドを使用します.subscript operatorを使用して、部分の変数をバインドできます.
person.properties["firstName","lastName"] = params
 
domainのすべてのプロパティのサブセットを取得するには、次のようにします.
person.properties["firstName","lastName"].each { println it }
  
 

オブジェクトを読み取り専用で取得


readメソッドを使用して、「読み取り専用」オブジェクトを取得できます(変更、削除はできません):
 
def book = Book.read(1)
 
 

デフォルトのソート


domainでsortを宣言することで、関連オブジェクトのソート方法を指定できます.
class Book {
  String

  title
  
  static
 mapping = {
     sort "title"

  }
}
 
関連付けでsortを宣言することもできます.
class Author {
    static

    
    hasMany = [books:Book]
    
    static
 mapping = {
              books sort:"title"

    }
}
 
 

Batch Fetching


GORMは、domainでDSLを使用してbatch fetching(an optimization of lazy loading)を構成することをサポートします.
class Book {
  String

  title
  
  static
 mapping = {
     batchSize 15
  }
}
 
関連付けで使用することもできます.
class Author {
    static



 hasMany = [books:Book]
    static



 mapping = {
              books batchSize:15
    }
}
 
 

強化されたダイナミックルックアップ


ダイナミックルックアップによりInListのサポートが追加されました.
def groovyBooks = Book.findByAuthorInList(['Dierk Koenig', 'Graeme Rocher'])
 
ダイナミックルックアップでquery cacheを使用できるようになりました.
def books = Book.findByTitle("Groovy in Action", [cache:true] )
 
動的ルックアップでは、悲観的ロック(pessimistic lock):
def books = Book.findByTitle("Groovy in Action", [lock:true] )
 
 

レガシー・データベースの一対多の関係の処理


単一の一対多の関係は、joinTableプロパティを使用して、乗っているデータベースでのマッピング方法を変更できます.
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'] } }

 
 
 
 

プラグイン


 

グローバルプラグイン


すべてのgrailsプログラムで使用できるグローバルプラグインのインストールがサポートされます.
grails install-plugin webtest -global

 

複数のプラグインソース(Repository)をサポート


Grailsは現在、USERを介してサポートされています.HOME/.grails/settings.groovyファイルまたはgrails-app/conf/BuildSettings.groovyファイルは、複数のプラグインソースを構成します.上記のファイルには、対応する情報が含まれている必要があります.
grails.plugin.repos.discovery.myRepository="http://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"
grails.plugin.repos.distribution.myRepository="https://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"



 
 

Automatic Transitive Plugin Resolution


プラグインをSVNに配置する必要がなくなり、Grailsアプリケーションが最初にロードされるとプラグインのmetadataによって自動的にインストールされます.また,プラグインの依存問題も解決された.
 



テスト


 

新しいテストフレームワーク


1.0です.xのバージョンでプラグインとして表示されたテストフレームワーク(test framework)がGrailsに統合されました.
 
 
 

あしば


 

テンプレートとダイナミック足場


 
動的足場はテンプレートを使用できます.install-templates 関連テンプレートを使用できます.
 
 
 
 
その他の関連リソース:
Changelog: http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:changelog-panel Download: http://grails.org/Download Documentation: http://grails.org/doc/1.1