Hatena::ブログ(Diary)

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

2014-05-21

Grails 2.4.0 リリースきた!!!!

Grails 2.4.0 リリースです!!



例のコペンハーゲンで開催されるカンファレンスが、いよいよ、来週と迫ってまいりました!

行きたい!行きたい!行きたい!

そんな中の、Grails 2.4 リリース。もぅ、何だったら、今やってるプロジェクトを全部 2.4 にしてやりますっ!!





Grails 2.4 での更新内容!

Groovy 2.3に更新!!!

Spring 4 に更新

デフォルトHibernateが4.3.5に変更。

スタンドアロンGORM

静的アセット管理リソースプラグインから、アセットパイプラインに変更!

//= require jquery
//= require_self
//= require file_a
//= require_tree .
console.log('some javascript');
<asset:javascript src="application.js"/>
<asset:stylesheet href="application.css"/>
<asset:image src="grails_logo.png" height="60" />

スタンドアロンGSP

スタティックコンパイル対応!

サンプルコードはこんな感じです。

import grails.compiler.GrailsCompileStatic
import groovy.transform.TypeCheckingMode
@GrailsCompileStatic
class SomeClass {

    def update() {
        // this method will be statically compiled
    }

    @GrailsCompileStatic(TypeCheckingMode.SKIP)
    def save() {
        // this method will not be statically compiled
    }

    def delete() {
        // this method will be statically compiled
    }
}

Ajaxタグが無くなります

  • formRemote, remoteField, remoteFunction, remoteLinkなどのAJAXタグが将来のバージョンで無くなります。

grails-debugとgrails-debug.batが削除されました

  • 今後はgrails -debugか、grails --debug-forkで実行しましょう。

コマンドオブジェクト関連

以下のように、Personが複数指定されている場合に、リクエストパラメータを、buyer.nameやseller.name等の指定をすると、それぞれのオブジェクトにバインドされます。

class StoreController {
    def buy(Person buyer, Person seller) {
        // …
    }
}
class Person {
    String name
}

GORMで、よりアドバンスドなサブクエリ

サブクエリーが拡張されました。ネストサブクエリで"in"が使用できます。

def results = Person.where {
    firstName in where { age < 18 }.firstName
}.list()

Criteriaとwhereクエリシームレスに融合できます

def results = Person.withCriteria {
    notIn "firstName", Person.where { age < 18 }.firstName
}

サブクエリプロジェクションを一緒に使用できます。

def results = Person.where {
    age > where { age > 18 }.avg('age')
}

2つのドメインクラスに別れた関連するクエリ実行:

def employees = Employee.where {
    region.continent in ['APAC', "EMEA"]
}.id()
def results = Sale.where {
    employee in employees && total > 100000
}.employee.list()

whereクエリでの簡単な変数宣言を使用したエイリアス(クロスクエリリファレンス)のサポート。

def query = Employee.where {
    def em1 = Employee
    exists Sale.where {
        def s1 = Sale
        def em2 = employee
        return em2.id == em1.id
    }.id()
}
def results = query.list()

ネームスペース付きのコントローラでのビューの選択

namespace指定があるコントローラのビューファイルは、grails-app/views/<namespace名>/<controller名>/を最初に参照するようになります。ビューファイル存在しない場合は、今まで同様にgrails-app/views/<controller名>/のビューファイルが参照されます。

class SomeController {
    static namespace = 'foo'
    def myaction(){
        //この場合は、 grails-app/views/foo/some/myaction.gspが最初に参照され
        //存在しない場合は grails-app/views/some/myaction.gsp が参照されます。
        [number:1]
    }
}

プログラマチックトランザクションの向上

// org.springframework.transaction.support.DefaultTransactionDefinition のプロパティに対応したMapキーで指定
Account.withTransaction([propagationBehavior: TransactionDefinition.PROPAGATION_REQUIRES_NEW,
                         isolationLevel: TransactionDefinition.ISOLATION_REPEATABLE_READ]) {
    // ...
}

Mavenプラグイン更新

Mavenプラグイン(2.4.0)は、Aetherベースで再構築されました。Aetherベースになった事で、今後のGrails 2.3.x , 2.4.xが更新されても、Mavenプラグイン更新する必要がなくなります。これにより、Mavenプラグインは、このバージョンが最後に!?


Unitテスト向上。

(意訳が変なので注意!しかも途中あきらめて(ry)

以前のTestMixinベース方法で、Grails"unit testing runtime"があります。今回からTestMixinクラス関連とGrails"unit testing runtime"のライフサイクルハンドルする実際のランタイムが切り分けられました。これによってランタイムステートは、TestMixin関連クラスのスタティックフィールドに保持されません。TestMixinアノテーションの背後にあるGroovy AST変換は、JunitとSpockテストクラスJUnitルールフィールドをクラスに追加します。

主な機能としては(間違ってたらゴメン):

詳しくは、更新されたUnitテストドキュメントを参考にしましょう

allowedMethodsのUnitテスト対応向上

以下のようなコントローラがあるとして

package com.demo
class DemoController {

    static allowedMethods = [save: 'POST', update: 'PUT', delete: 'DELETE']

    def save() {
        render 'Save was successful!'
    }

    // …
}

以下のように記述します

package com.demo
import grails.test.mixin.TestFor
import spock.lang.Specification
import static javax.servlet.http.HttpServletResponse.*

@TestFor(DemoController)
class DemoControllerSpec extends Specification {

    void "test a valid request method"() {
        when:
        request.method = 'POST'
        controller.save()

        then:
        response.status == SC_OK
        response.text == 'Save was successful!'
    }

    void "test an invalid request method"() {
        when:
        request.method == 'DELETE'
        controller.save()

        then:
        response.status == SC_METHOD_NOT_ALLOWED
    }
}

GORM for Hibernate in Unit tests

HibernateTestMixinを使用する事で、今後Hibernateを使用したGORMのUnitテストインテグレーションテストを書く必要が無くなります。

import grails.test.mixin.hibernate.*
@TestMixin(HibernateTestMixin)
class PersonSpec extends Specification{

    void setupSpec() {
        hibernateDomain([Person])
    }

    void "Test count people"() {
        expect:"Test execute Hibernate count query"
            Person.count() == 0
            sessionFactory != null
            transactionManager != null
            session != null
    }
}

Grails 2.3からの更新注意点。

(公式ドキュメント) http://grails.org/doc/2.4.x/guide/upgradingFrom23.html

一部を抜粋

grails set-grails-version 2.4.0




ここまでとしておきます。





長かった。。






更新内容に関しては、ほぼ、ここの記事に書いています。間違いなどあったら、やさしく教えてください!

日本語ドキュメントは、頑張って更新します。それまでは、本家ドキュメントを!

http://grails.org/doc/2.4.x/





Grails 2.4.0 の公式リリースノートはこちら。

http://grails.org/2.4.0+Release+Notes

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

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

直リン grails-2.4.0.zip

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




さて、いよいよ年末リリースの3.0に向けての開発が始まるみたいです!

Grails 3.0では、Spring Bootベースになり、Gradleサポートとなり、さらには、数年前から目標となっていた、アプリケーションを、マイクロサービスから今までのようなWebアプリケーション形式までの幅広い形式に対応予定との事!


次も楽しみ!先ずは Grails 2.4 を楽しみましょう!

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


画像認証