Hatena::ブログ(Diary)

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

2011-05-24

祝1.4系。Grails 1.4-M1リリース。

お久しぶりです。2011/2/16の1.3.7リリースが懐かしく感じます。

Grails 1.4系最初のマイルストーンリリースです。

今回は結構深いところまで大幅改善されています。ソースコードの階層が整頓されてたり、gradleビルドが大幅調整されてたり、GORM関連なんてそれはもう!

注目なのはUnitテストの大改造。コントローラのUnitテストが大変な事に!

ただし!まだM1なので気をつけましょう!


公式リリースノートはこちら!

http://grails.org/1.4-M1+Release+Notes

jira http://jira.grails.org/browse/GRAILS/fixforversion/11040

http://jira.grails.org/secure/ReleaseNote.jspa?projectId=10020&version=11040

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

直リン http://dist.springframework.org.s3.amazonaws.com/milestone/GRAILS/grails-1.4.0.M1.zip

ドキュメント http://grails.org/doc/1.4.0.M1/



では、新機能と向上等の内容をリリースノートの意訳どうぞ!


Upgraded Libraries ライブラリ更新

Grails 1.4には、Spring 3.1 M1, Groovy 1.8, Hibernate 3.6, Servlet 3.0 and Tomcat 7.0がバンドルされています。

リロードエイジェント

クラスリロードを行う、新しいJVMエージェントの実装により、今までサポートされていなかったクラス、静的型のサービスドメインクラス等のリロード可能になります。

プラグイン使用数等のトラッキング機能

プラグイン使用レポートを収集する機能が実装されました。近いうちにプラグイン使用統計Grailsサイトで公開されます。

スカッフォルドUIの向上

スカッフォルドUIは、HTML5で強化されました。

一新された、テストレポートドキュメントテンプレート

新たなテンプレートにより、テストレポートドキュメントが向上しました。

resourcesプラグインGrailsコアに統合

resourcesプラグインが完全に統合されました。簡単に、キャッシュgzipバンドリングなどにより、最適化された静的リソースの取り扱いが可能となります。

ベターユニットテスト

詳しくは完全に書き直された、Unitテストドキュメントを参照してください。

JUnit3,JUnit4,Spockで使用可能な、ユニットテストMixinがベースになっています。

全てのアーティファクトにおいて、もの凄くUnitテストが単純化されています。例えば。

// テストするクラス
class SimpleController {
    def home() {
        render view:"homePage", model:[title:"Hello World"]
    }
    …
}
void testIndex() {
    controller.home()
    assert view == "/simple/homePage"
    assert model.title == "Hello World"
}

このリリースで以前はインテグレーションテストが必要だった、フィルタ−、URLマッピングファイルアップロード、コンテントネゴシエーションテンプレートビューレンダリング、クライテリアクエリーなどもUnitテストでサポートされます。


GORMでの抽象クラス継承のサポート

GORMが抽象クラス継承階層をサポートしました。これによって、関連リンククエリ等を抽象クラス定義することができます。

abstract Media {
     String title
     …
}
class Book extends Media {
}
class Album extends Media {

}
class Account {
    static hasMany = [purchasedMedia:Media]
}

..

def allMedia = Media.list()

GORM APIJavaから使用可能に。

GORM APIは、Groovy transformationによって、GORMエンティティのバイトコードとして注入されます。これによりGORMのメソッドは、Javaコードから、呼び出したり見たりできます。

Book book = new Book();
book.setTitle("The Stand")
book.save();
System.out.println(Book.count());
System.out.println(Book.list());

linkネームスペースのタグタグ属性サポート

linkネームスペースを持つタグが、attrs属性で、HTMLタグ属性定義できます。

以下のようなタグがあって、

<link:accountDetails attrs="[class: 'fancy']" acctNumber="8675309">Show Account</link:accountDetails>

下のURLマッピング定義されてたとします:

"/details/$acctNumber"(controller: 'account', action: 'showAccount')
  ...

処理された結果は:

<a href="/details/8675309" class="fancy">Show Account</a>

H2データベースエンジン

Grailsでは新規アプリケーション作成時のデフォルトデータベースが、今までのHSQLDBにかわりH2になります。

管理コンソール付き!

名前付きクエリから関係先の名前付きクエリを参照。

名前付きクエリドメインクラスリレーションを含んでいる場合、そのリレーション先の名前付きクエリを使用することが可能になりました。

class Author {
    static hasMany = [publications:Publication]

    static namedQueries = {
         authorsWithRecentPublications {
             publications {
                 // invoking a named query defined in the Publication class…
                 recentPublications()
             }
         }
    }
}

class Publication {

    Author author

    static namedQueries = {
        recentPublications {
            def now = new Date()
            gt 'datePublished', now - 10
        }
    }
}

フィルターの除外定義

フィルターでのコントローラ・アクション・URIの除外指定が実装されました。

filter1(actionExclude: 'log*') {
    before = {
        // …
    }
}
filter2(controllerExclude: 'auth') {
    before = {
        // …
    }
}

filter3(uriExclude: '/secure*') {
    before = {
        // …
    }
}

共有制約とコマンドオブジェクト

コマンドオブジェクトが共有制約をサポートしました。実装方法は以前に追加されたドメインクラスと同じです。

OrCreateとOrSaveクエリーの実装追加

ドメインクラスに、findWhereやfindByメソッドに似た、nullを返さない、findOrCreateWhere, findOrSaveWhere, findOrCreateBy, findOrSaveByのクエリーをサポートしました。

実行結果にインスタンスが見つからない場合は、指定された値で、新規にインスタンスを作成して返します。findOrSaveWhereとfindOrSaveByの場合はインスタンスを保存してからインスタンスを返します。

def book = Book.findOrCreateWhere(author: 'Douglas Adams', title: "The Hitchiker's Guide To The Galaxy")
def book = Book.findOrSaveWhere(author: 'Daniel Suarez', title: 'Daemon')
def book = Book.findOrCreateByAuthorAndTitle('Daniel Suarez', 'Daemon')
def book = Book.findOrSaveByAuthorAndTitle('Daniel Suarez', 'Daemon')

依存ライブラリプラグインにSNAPSHOTが有る場合の自動更新

依存ライブラリプラグインのバージョン番号が"SNAPSHOT"で終わる物は、常に最新を確認するようになりました。

パーマネントリダイレクト(301)のサポート

redirect() メソッドにtrueを指定すると、リダイレクトは、301のHTTPステータスで送信され、その逆であれば、302で送信されます。

1.4での変更点と非推奨になった項目

とくめいとくめい 2011/07/21 22:12 標準のJavascriptライブラリがPrototype.jsからjQueryになったのもでっかいですよね!

mottsnitemottsnite 2011/07/21 22:40 そうですね。さらに、resourcesプラグインをつかってモジュール管理できるようにも!
http://grails-plugins.github.com/grails-resources/

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/mottsnite/20110524/1306252057